Skip to content

Commit 57973fa

Browse files
hoxyqmeta-codesync[bot]
authored andcommitted
Extract frame trace events construction logic (facebook#54675)
Summary: Pull Request resolved: facebook#54675 # Changelog: [Internal] Extracing the spec for frames events to a new class `TraceEventGenerator`. This is a preparation for moving frames events to Host. Reviewed By: sbuggay Differential Revision: D87373809 fbshipit-source-id: 56538a8fae7d41a7117cd8445b15630ac7f50672
1 parent f469aa3 commit 57973fa

File tree

3 files changed

+134
-13
lines changed

3 files changed

+134
-13
lines changed

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

Lines changed: 7 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77

88
#include "PerformanceTracer.h"
99
#include "Timing.h"
10+
#include "TraceEventGenerator.h"
1011
#include "TraceEventSerializer.h"
1112
#include "TracingCategory.h"
1213

@@ -794,20 +795,13 @@ void PerformanceTracer::enqueueTraceEventsFromPerformanceTracerEvent(
794795
});
795796
},
796797
[&](PerformanceTracerSetLayerTreeIdEvent&& event) {
797-
folly::dynamic data = folly::dynamic::object("frame", event.frame)(
798-
"layerTreeId", event.layerTreeId);
799-
800798
events.emplace_back(
801-
TraceEvent{
802-
.name = "SetLayerTreeId",
803-
.cat = {Category::Timeline},
804-
.ph = 'I',
805-
.ts = event.start,
806-
.pid = processId_,
807-
.s = 't',
808-
.tid = event.threadId,
809-
.args = folly::dynamic::object("data", std::move(data)),
810-
});
799+
TraceEventGenerator::createSetLayerTreeIdEvent(
800+
std::move(event.frame),
801+
event.layerTreeId,
802+
processId_,
803+
event.threadId,
804+
event.start));
811805
},
812806
[&](PerformanceTracerFrameBeginDrawEvent&& event) {
813807
folly::dynamic data = folly::dynamic::object(
Lines changed: 80 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,80 @@
1+
/*
2+
* Copyright (c) Meta Platforms, Inc. and affiliates.
3+
*
4+
* This source code is licensed under the MIT license found in the
5+
* LICENSE file in the root directory of this source tree.
6+
*/
7+
8+
#include "TraceEventGenerator.h"
9+
#include "TracingCategory.h"
10+
11+
namespace facebook::react::jsinspector_modern::tracing {
12+
13+
/* static */ TraceEvent TraceEventGenerator::createSetLayerTreeIdEvent(
14+
std::string frame,
15+
int layerTreeId,
16+
ProcessId processId,
17+
ThreadId threadId,
18+
HighResTimeStamp timestamp) {
19+
folly::dynamic data = folly::dynamic::object("frame", std::move(frame))(
20+
"layerTreeId", layerTreeId);
21+
22+
return TraceEvent{
23+
.name = "SetLayerTreeId",
24+
.cat = {Category::Timeline},
25+
.ph = 'I',
26+
.ts = timestamp,
27+
.pid = processId,
28+
.s = 't',
29+
.tid = threadId,
30+
.args = folly::dynamic::object("data", std::move(data)),
31+
};
32+
}
33+
34+
/* static */ std::tuple<TraceEvent, TraceEvent, TraceEvent>
35+
TraceEventGenerator::createFrameTimingsEvents(
36+
uint64_t sequenceId,
37+
int layerTreeId,
38+
HighResTimeStamp beginDrawingTimestamp,
39+
HighResTimeStamp commitTimestamp,
40+
HighResTimeStamp endDrawingTimestamp,
41+
ProcessId processId,
42+
ThreadId threadId) {
43+
folly::dynamic args = folly::dynamic::object("frameSeqId", sequenceId)(
44+
"layerTreeId", layerTreeId);
45+
46+
auto beginEvent = TraceEvent{
47+
.name = "BeginFrame",
48+
.cat = {Category::Timeline},
49+
.ph = 'I',
50+
.ts = beginDrawingTimestamp,
51+
.pid = processId,
52+
.s = 't',
53+
.tid = threadId,
54+
.args = args,
55+
};
56+
auto commitEvent = TraceEvent{
57+
.name = "Commit",
58+
.cat = {Category::Timeline},
59+
.ph = 'I',
60+
.ts = commitTimestamp,
61+
.pid = processId,
62+
.s = 't',
63+
.tid = threadId,
64+
.args = args,
65+
};
66+
auto drawEvent = TraceEvent{
67+
.name = "DrawFrame",
68+
.cat = {Category::Timeline},
69+
.ph = 'I',
70+
.ts = endDrawingTimestamp,
71+
.pid = processId,
72+
.s = 't',
73+
.tid = threadId,
74+
.args = args,
75+
};
76+
77+
return {std::move(beginEvent), std::move(commitEvent), std::move(drawEvent)};
78+
}
79+
80+
}; // namespace facebook::react::jsinspector_modern::tracing
Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
/*
2+
* Copyright (c) Meta Platforms, Inc. and affiliates.
3+
*
4+
* This source code is licensed under the MIT license found in the
5+
* LICENSE file in the root directory of this source tree.
6+
*/
7+
8+
#pragma once
9+
10+
#include "TraceEvent.h"
11+
12+
#include <react/timing/primitives.h>
13+
14+
#include <tuple>
15+
16+
namespace facebook::react::jsinspector_modern::tracing {
17+
18+
/**
19+
* This class encapsulates the logic for generating canonical trace events that will be serialized and sent as part of
20+
* Tracing.dataCollected CDP message.
21+
*/
22+
class TraceEventGenerator {
23+
public:
24+
/**
25+
* Creates canonical "SetLayerTreeId" trace event.
26+
*/
27+
static TraceEvent createSetLayerTreeIdEvent(
28+
std::string frame,
29+
int layerTreeId,
30+
ProcessId processId,
31+
ThreadId threadId,
32+
HighResTimeStamp timestamp);
33+
34+
/**
35+
* Creates canonical "BeginFrame", "Commit", "DrawFrame" trace events.
36+
*/
37+
static std::tuple<TraceEvent, TraceEvent, TraceEvent> createFrameTimingsEvents(
38+
uint64_t sequenceId,
39+
int layerTreeId,
40+
HighResTimeStamp beginDrawingTimestamp,
41+
HighResTimeStamp commitTimestamp,
42+
HighResTimeStamp endDrawingTimestamp,
43+
ProcessId processId,
44+
ThreadId threadId);
45+
};
46+
47+
}; // namespace facebook::react::jsinspector_modern::tracing

0 commit comments

Comments
 (0)