Skip to content

Commit 4cabf37

Browse files
sbuggayfacebook-github-bot
authored andcommitted
Frame screenshot event generation
Summary: Adds CDP event generation for screenshots. Changelog: [Internal] Differential Revision: D87936872
1 parent 2322357 commit 4cabf37

File tree

3 files changed

+48
-0
lines changed

3 files changed

+48
-0
lines changed

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

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -121,6 +121,19 @@ constexpr int FALLBACK_LAYER_TREE_ID = 1;
121121
chunk.push_back(TraceEventSerializer::serialize(std::move(commitEvent)));
122122
chunk.push_back(
123123
TraceEventSerializer::serialize(std::move(endDrawingEvent)));
124+
125+
if (frameTimingSequence.screenshot.has_value()) {
126+
auto screenshotEvent = TraceEventGenerator::createScreenshotEvent(
127+
frameTimingSequence.id,
128+
FALLBACK_LAYER_TREE_ID,
129+
std::move(frameTimingSequence.screenshot.value()),
130+
frameTimingSequence.endDrawingTimestamp,
131+
processId,
132+
frameTimingSequence.threadId);
133+
134+
chunk.push_back(
135+
TraceEventSerializer::serialize(std::move(screenshotEvent)));
136+
}
124137
}
125138

126139
if (!chunk.empty()) {

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

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
*/
77

88
#include "TraceEventGenerator.h"
9+
#include "Timing.h"
910
#include "TracingCategory.h"
1011

1112
namespace facebook::react::jsinspector_modern::tracing {
@@ -77,4 +78,27 @@ TraceEventGenerator::createFrameTimingsEvents(
7778
return {std::move(beginEvent), std::move(commitEvent), std::move(drawEvent)};
7879
}
7980

81+
/* static */ TraceEvent TraceEventGenerator::createScreenshotEvent(
82+
uint64_t frameSequence,
83+
int sourceId,
84+
std::string snapshot,
85+
HighResTimeStamp expectedDisplayTime,
86+
ProcessId processId,
87+
ThreadId threadId) {
88+
folly::dynamic data = folly::dynamic::object("snapshot", std::move(snapshot))(
89+
"source_id", sourceId)("frame_sequence", frameSequence)(
90+
"expected_display_time",
91+
highResTimeStampToTracingClockTimeStamp(expectedDisplayTime));
92+
93+
return TraceEvent{
94+
.name = "Screenshot",
95+
.cat = {Category::Screenshot},
96+
.ph = 'O',
97+
.ts = expectedDisplayTime,
98+
.pid = processId,
99+
.tid = threadId,
100+
.args = std::move(data),
101+
};
102+
}
103+
80104
}; // namespace facebook::react::jsinspector_modern::tracing

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

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,17 @@ class TraceEventGenerator {
4242
HighResTimeStamp endDrawingTimestamp,
4343
ProcessId processId,
4444
ThreadId threadId);
45+
46+
/**
47+
* Creates canonical "Screenshot" trace event.
48+
*/
49+
static TraceEvent createScreenshotEvent(
50+
uint64_t frameSequence,
51+
int sourceId,
52+
std::string snapshot,
53+
HighResTimeStamp expectedDisplayTime,
54+
ProcessId processId,
55+
ThreadId threadId);
4556
};
4657

4758
}; // namespace facebook::react::jsinspector_modern::tracing

0 commit comments

Comments
 (0)