MCPcopy Create free account
hub / github.com/Snapchat/Valdi / processRenderRequest

Method processRenderRequest

valdi/src/valdi/runtime/Runtime.cpp:617–694  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

615 if (context == nullptr) {
616 return;
617 }
618
619 auto taskIdOptional = context->enqueueRenderRequest(renderRequest);
620
621 if (taskIdOptional && !_autoRenderDisabled) {
622 getMainThreadManager().dispatch(
623 context, [context, taskId = taskIdOptional.value()]() { context->runRenderRequest(taskId); });
624 }
625}
626
627void Runtime::processRenderRequest(const Ref<RenderRequest>& rawRenderRequest) {
628 snap::utils::time::StopWatch sw;
629 sw.start();
630
631 if (_debugRequests) {
632 VALDI_INFO(*_logger,
633 "Rendering context {} with render request: {}",
634 rawRenderRequest->getContextId(),
635 rawRenderRequest->serialize(_attributeIds).toString(true));
636 }
637 auto viewNodeTree = getOrCreateViewNodeTreeForContextId(rawRenderRequest->getContextId());
638 if (viewNodeTree == nullptr) {
639 VALDI_INFO(*_logger, "Ignoring render for invalid or destroyed context {}", rawRenderRequest->getContextId());
640 return;
641 }
642
643#if VALDI_DEBUG_TREE_UPDATES
644 std::string renderTrigger = getRenderRequestAttributeNamesTrigger(*rawRenderRequest, _attributeIds);
645 viewNodeTree->scheduleExclusiveUpdate(
646 [=]() {
647 VALDI_TRACE_META("Valdi.processRenderRequest", std::to_string(rawRenderRequest->getEntriesSize()));
648
649 ViewNodeRenderer renderer(*viewNodeTree, viewNodeTree->getContext()->getLogger(), _limitToViewportDisabled);
650
651 renderer.render(*rawRenderRequest);
652
653 if (Valdi::traceRenderingPerformance) {
654 VALDI_INFO(
655 *_logger, "Finished rendering {} in {}", viewNodeTree->getContext()->getPath(), sw.elapsed());
656 }
657
658 if (rawRenderRequest->getEntriesSize() >= Valdi::kEmitProcessRequestLatencyEntriesThreshold) {
659 const auto& metrics = getMetrics();
660 if (metrics != nullptr) {
661 metrics->emitProcessRequestLatency(viewNodeTree->getContext()->getPath().getResourceId().bundleName,
662 sw.elapsed());
663 }
664 }
665
666 viewNodeTree->getContext()->onRendered();
667 },
668 [=]() {
669 if (_listener != nullptr) {
670 _listener->onContextRendered(*this, viewNodeTree->getContext());
671 }
672 },
673 std::move(renderTrigger));
674#else

Callers 2

TEST_PFunction · 0.80

Calls 15

getEntriesSizeMethod · 0.80
getLoggerMethod · 0.80
startMethod · 0.65
toStringMethod · 0.65
renderMethod · 0.65
to_stringFunction · 0.50
getContextIdMethod · 0.45
serializeMethod · 0.45
getContextMethod · 0.45

Tested by 1

TEST_PFunction · 0.64