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

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