Skip to content

Commit ce259c5

Browse files
sbuggaymeta-codesync[bot]
authored andcommitted
Add CDP frame events (#54249)
Summary: Pull Request resolved: #54249 Scaffolding for the bare minimum events needed to have frames show up on the performance timeline. layerTreeId hardcoded to `1` for now. Support for dropped and idle frames to be added later, full list can be found here https://github.com/facebook/react-native-devtools-frontend/blob/main/front_end/models/trace/types/TraceEvents.ts#L2971. Some more thought needs to be put into how Android frame timing maps to these events. {F1982947634} Changelog: [Internal] Reviewed By: rubennorte Differential Revision: D85347959 fbshipit-source-id: 950b8866170e963dbb7e7ebbf0873ecb84676304
1 parent b9bdef6 commit ce259c5

File tree

2 files changed

+98
-1
lines changed

2 files changed

+98
-1
lines changed

packages/react-native/ReactCommon/jsinspector-modern/tracing/PerformanceTracer.cpp

Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -737,6 +737,70 @@ void PerformanceTracer::enqueueTraceEventsFromPerformanceTracerEvent(
737737
.args = folly::dynamic::object("data", std::move(data)),
738738
});
739739
},
740+
[&](PerformanceTracerSetLayerTreeIdEvent&& event) {
741+
folly::dynamic data = folly::dynamic::object("frame", event.frame)(
742+
"layerTreeId", event.layerTreeId);
743+
744+
events.emplace_back(
745+
TraceEvent{
746+
.name = "SetLayerTreeId",
747+
.cat = "devtools.timeline",
748+
.ph = 'I',
749+
.ts = event.start,
750+
.pid = processId_,
751+
.s = 't',
752+
.tid = event.threadId,
753+
.args = folly::dynamic::object("data", std::move(data)),
754+
});
755+
},
756+
[&](PerformanceTracerFrameBeginDrawEvent&& event) {
757+
folly::dynamic data = folly::dynamic::object(
758+
"frameSeqId", event.frameSeqId)("layerTreeId", 1);
759+
760+
events.emplace_back(
761+
TraceEvent{
762+
.name = "BeginFrame",
763+
.cat = "devtools.timeline",
764+
.ph = 'I',
765+
.ts = event.start,
766+
.pid = processId_,
767+
.s = 't',
768+
.tid = event.threadId,
769+
.args = std::move(data),
770+
});
771+
},
772+
[&](PerformanceTracerFrameCommitEvent&& event) {
773+
folly::dynamic data = folly::dynamic::object(
774+
"frameSeqId", event.frameSeqId)("layerTreeId", 1);
775+
776+
events.emplace_back(
777+
TraceEvent{
778+
.name = "Commit",
779+
.cat = "devtools.timeline",
780+
.ph = 'I',
781+
.ts = event.start,
782+
.pid = processId_,
783+
.s = 't',
784+
.tid = event.threadId,
785+
.args = std::move(data),
786+
});
787+
},
788+
[&](PerformanceTracerFrameDrawEvent&& event) {
789+
folly::dynamic data = folly::dynamic::object(
790+
"frameSeqId", event.frameSeqId)("layerTreeId", 1);
791+
792+
events.emplace_back(
793+
TraceEvent{
794+
.name = "DrawFrame",
795+
.cat = "devtools.timeline",
796+
.ph = 'I',
797+
.ts = event.start,
798+
.pid = processId_,
799+
.s = 't',
800+
.tid = event.threadId,
801+
.args = std::move(data),
802+
});
803+
},
740804
},
741805
std::move(event));
742806
}

packages/react-native/ReactCommon/jsinspector-modern/tracing/PerformanceTracer.h

Lines changed: 34 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -290,6 +290,35 @@ class PerformanceTracer {
290290
HighResTimeStamp createdAt = HighResTimeStamp::now();
291291
};
292292

293+
struct PerformanceTracerSetLayerTreeIdEvent {
294+
std::string frame;
295+
int layerTreeId;
296+
HighResTimeStamp start;
297+
ThreadId threadId;
298+
HighResTimeStamp createdAt = HighResTimeStamp::now();
299+
};
300+
301+
struct PerformanceTracerFrameBeginDrawEvent {
302+
int frameSeqId;
303+
HighResTimeStamp start;
304+
ThreadId threadId;
305+
HighResTimeStamp createdAt = HighResTimeStamp::now();
306+
};
307+
308+
struct PerformanceTracerFrameCommitEvent {
309+
int frameSeqId;
310+
HighResTimeStamp start;
311+
ThreadId threadId;
312+
HighResTimeStamp createdAt = HighResTimeStamp::now();
313+
};
314+
315+
struct PerformanceTracerFrameDrawEvent {
316+
int frameSeqId;
317+
HighResTimeStamp start;
318+
ThreadId threadId;
319+
HighResTimeStamp createdAt = HighResTimeStamp::now();
320+
};
321+
293322
using PerformanceTracerEvent = std::variant<
294323
PerformanceTracerEventTimeStamp,
295324
PerformanceTracerEventEventLoopTask,
@@ -298,7 +327,11 @@ class PerformanceTracer {
298327
PerformanceTracerEventMeasure,
299328
PerformanceTracerResourceSendRequest,
300329
PerformanceTracerResourceReceiveResponse,
301-
PerformanceTracerResourceFinish>;
330+
PerformanceTracerResourceFinish,
331+
PerformanceTracerSetLayerTreeIdEvent,
332+
PerformanceTracerFrameBeginDrawEvent,
333+
PerformanceTracerFrameCommitEvent,
334+
PerformanceTracerFrameDrawEvent>;
302335

303336
#pragma mark - Private fields and methods
304337

0 commit comments

Comments
 (0)