Skip to content

Commit afcc8c1

Browse files
hoxyqfacebook-github-bot
authored andcommitted
Remove Commit from FrameTimingSequence (facebook#54779)
Summary: # Changelog: [Internal] This is not required for displaying the Frames track. In Chrome, I've noticed that "Commit" is actually a complete event (`ph = X`), and it has a `disabled-by-default-devtools.timeline`. Frames events, like `BeginFrame`, `DrawFrame`, `DroppedFrame` have `.frame` suffix in a category. This event being a complete event actually makes lot of sense, since this is a work with some duration, where Host spent time committing the changes. In React Native case, this should probably reflect the `completeRoot()` call or some proxy from it. Basically the duration of committing tree operations in Fabric. Reviewed By: sbuggay Differential Revision: D88382285
1 parent 1c8f297 commit afcc8c1

File tree

10 files changed

+33
-74
lines changed

10 files changed

+33
-74
lines changed

packages/react-native/ReactAndroid/src/main/java/com/facebook/react/devsupport/inspector/FrameTimingSequence.kt

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,7 @@ package com.facebook.react.devsupport.inspector
1010
internal data class FrameTimingSequence(
1111
val id: Int,
1212
val threadId: Int,
13-
val beginDrawingTimestamp: Long,
14-
val commitTimestamp: Long,
15-
val endDrawingTimestamp: Long,
13+
val beginTimestamp: Long,
14+
val endTimestamp: Long,
1615
val screenshot: String? = null,
1716
)

packages/react-native/ReactAndroid/src/main/java/com/facebook/react/devsupport/inspector/FrameTimingsObserver.kt

Lines changed: 4 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -36,15 +36,8 @@ internal class FrameTimingsObserver(
3636

3737
private val frameMetricsListener =
3838
Window.OnFrameMetricsAvailableListener { _, frameMetrics, _dropCount ->
39-
val beginDrawingTimestamp = frameMetrics.getMetric(FrameMetrics.VSYNC_TIMESTAMP)
40-
val commitTimestamp =
41-
beginDrawingTimestamp + frameMetrics.getMetric(FrameMetrics.INPUT_HANDLING_DURATION)
42-
+frameMetrics.getMetric(FrameMetrics.ANIMATION_DURATION)
43-
+frameMetrics.getMetric(FrameMetrics.LAYOUT_MEASURE_DURATION)
44-
+frameMetrics.getMetric(FrameMetrics.DRAW_DURATION)
45-
+frameMetrics.getMetric(FrameMetrics.SYNC_DURATION)
46-
val endDrawingTimestamp =
47-
beginDrawingTimestamp + frameMetrics.getMetric(FrameMetrics.TOTAL_DURATION)
39+
val beginTimestamp = frameMetrics.getMetric(FrameMetrics.VSYNC_TIMESTAMP)
40+
val endTimestamp = beginTimestamp + frameMetrics.getMetric(FrameMetrics.TOTAL_DURATION)
4841

4942
val frameId = frameCounter++
5043
val threadId = Process.myTid()
@@ -56,9 +49,8 @@ internal class FrameTimingsObserver(
5649
FrameTimingSequence(
5750
frameId,
5851
threadId,
59-
beginDrawingTimestamp,
60-
commitTimestamp,
61-
endDrawingTimestamp,
52+
beginTimestamp,
53+
endTimestamp,
6254
screenshot,
6355
)
6456
)

packages/react-native/ReactAndroid/src/main/jni/react/runtime/jni/JReactHostInspectorTarget.cpp

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -224,9 +224,8 @@ void JReactHostInspectorTarget::recordFrameTimings(
224224
inspectorTarget().recordFrameTimings({
225225
frameTimingSequence->getId(),
226226
frameTimingSequence->getThreadId(),
227-
frameTimingSequence->getBeginDrawingTimestamp(),
228-
frameTimingSequence->getCommitTimestamp(),
229-
frameTimingSequence->getEndDrawingTimestamp(),
227+
frameTimingSequence->getBeginTimestamp(),
228+
frameTimingSequence->getEndTimestamp(),
230229
frameTimingSequence->getScreenshot(),
231230
});
232231
}

packages/react-native/ReactAndroid/src/main/jni/react/runtime/jni/JReactHostInspectorTarget.h

Lines changed: 4 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -84,23 +84,16 @@ struct JFrameTimingSequence : public jni::JavaClass<JFrameTimingSequence> {
8484
return static_cast<uint64_t>(getFieldValue(field));
8585
}
8686

87-
HighResTimeStamp getBeginDrawingTimestamp() const
87+
HighResTimeStamp getBeginTimestamp() const
8888
{
89-
auto field = javaClassStatic()->getField<jlong>("beginDrawingTimestamp");
89+
auto field = javaClassStatic()->getField<jlong>("beginTimestamp");
9090
return HighResTimeStamp::fromChronoSteadyClockTimePoint(
9191
std::chrono::steady_clock::time_point(std::chrono::nanoseconds(getFieldValue(field))));
9292
}
9393

94-
HighResTimeStamp getCommitTimestamp() const
94+
HighResTimeStamp getEndTimestamp() const
9595
{
96-
auto field = javaClassStatic()->getField<jlong>("commitTimestamp");
97-
return HighResTimeStamp::fromChronoSteadyClockTimePoint(
98-
std::chrono::steady_clock::time_point(std::chrono::nanoseconds(getFieldValue(field))));
99-
}
100-
101-
HighResTimeStamp getEndDrawingTimestamp() const
102-
{
103-
auto field = javaClassStatic()->getField<jlong>("endDrawingTimestamp");
96+
auto field = javaClassStatic()->getField<jlong>("endTimestamp");
10497
return HighResTimeStamp::fromChronoSteadyClockTimePoint(
10598
std::chrono::steady_clock::time_point(std::chrono::nanoseconds(getFieldValue(field))));
10699
}

packages/react-native/ReactCommon/jsinspector-modern/HostTargetTraceRecording.cpp

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,8 +23,7 @@ HostTargetTraceRecording::HostTargetTraceRecording(
2323
windowSize_(windowSize) {
2424
if (windowSize) {
2525
frameTimings_ = tracing::TimeWindowedBuffer<tracing::FrameTimingSequence>(
26-
[](auto& sequence) { return sequence.beginDrawingTimestamp; },
27-
*windowSize);
26+
[](auto& sequence) { return sequence.beginTimestamp; }, *windowSize);
2827
} else {
2928
frameTimings_ = tracing::TimeWindowedBuffer<tracing::FrameTimingSequence>();
3029
};

packages/react-native/ReactCommon/jsinspector-modern/tests/TracingTest.cpp

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,6 @@ TEST_F(TracingTest, RecordsFrameTimings) {
6666
1, // id
6767
11, // threadId
6868
now,
69-
now + HighResDuration::fromNanoseconds(10),
7069
now + HighResDuration::fromNanoseconds(50));
7170

7271
page_->recordFrameTimings(frameTimingSequence);
@@ -86,12 +85,10 @@ TEST_F(TracingTest, EmitsRecordedFrameTimingSequences) {
8685
1, // id
8786
11, // threadId
8887
now,
89-
now + HighResDuration::fromNanoseconds(10),
9088
now + HighResDuration::fromNanoseconds(50)));
9189

9290
auto allTraceEvents = endTracingAndCollectEvents();
9391
EXPECT_THAT(allTraceEvents, Contains(AtJsonPtr("/name", "BeginFrame")));
94-
EXPECT_THAT(allTraceEvents, Contains(AtJsonPtr("/name", "Commit")));
9592
EXPECT_THAT(allTraceEvents, Contains(AtJsonPtr("/name", "DrawFrame")));
9693
}
9794

@@ -105,7 +102,6 @@ TEST_F(TracingTest, EmitsScreenshotEventWhenScreenshotValuePassed) {
105102
1, // id
106103
11, // threadId
107104
now,
108-
now + HighResDuration::fromNanoseconds(10),
109105
now + HighResDuration::fromNanoseconds(50),
110106
"base64EncodedScreenshotData"));
111107

@@ -227,7 +223,6 @@ TEST_F(TracingTest, EmitsToAllSessionsWithReactNativeApplicationDomainEnabled) {
227223
1, // id
228224
11, // threadId
229225
now,
230-
now + HighResDuration::fromNanoseconds(10),
231226
now + HighResDuration::fromNanoseconds(50)));
232227

233228
// Primary and secondaryFusebox sessions should receive the trace.
@@ -287,7 +282,6 @@ TEST_F(TracingTest, StashedTraceIsEmittedOnlyToFirstEligibleSession) {
287282
1, // id
288283
11, // threadId
289284
now,
290-
now + HighResDuration::fromNanoseconds(10),
291285
now + HighResDuration::fromNanoseconds(50)));
292286

293287
// Stop tracing - no eligible sessions exist, so the trace is stashed

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

Lines changed: 6 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -24,15 +24,13 @@ struct FrameTimingSequence {
2424
FrameTimingSequence(
2525
FrameSequenceId id,
2626
ThreadId threadId,
27-
HighResTimeStamp beginDrawingTimestamp,
28-
HighResTimeStamp commitTimestamp,
29-
HighResTimeStamp endDrawingTimestamp,
27+
HighResTimeStamp beginTimestamp,
28+
HighResTimeStamp endTimestamp,
3029
std::optional<std::string> screenshot = std::nullopt)
3130
: id(id),
3231
threadId(threadId),
33-
beginDrawingTimestamp(beginDrawingTimestamp),
34-
commitTimestamp(commitTimestamp),
35-
endDrawingTimestamp(endDrawingTimestamp),
32+
beginTimestamp(beginTimestamp),
33+
endTimestamp(endTimestamp),
3634
screenshot(std::move(screenshot))
3735
{
3836
}
@@ -47,9 +45,8 @@ struct FrameTimingSequence {
4745
*/
4846
ThreadId threadId;
4947

50-
HighResTimeStamp beginDrawingTimestamp;
51-
HighResTimeStamp commitTimestamp;
52-
HighResTimeStamp endDrawingTimestamp;
48+
HighResTimeStamp beginTimestamp;
49+
HighResTimeStamp endTimestamp;
5350

5451
/**
5552
* Optional screenshot data (base64 encoded) captured during the frame.

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

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -106,19 +106,17 @@ constexpr int FALLBACK_LAYER_TREE_ID = 1;
106106
chunk = generateNewChunk(chunkSize);
107107
}
108108

109-
auto [beginDrawingEvent, commitEvent, endDrawingEvent] =
109+
auto [beginDrawingEvent, endDrawingEvent] =
110110
TraceEventGenerator::createFrameTimingsEvents(
111111
frameTimingSequence.id,
112112
FALLBACK_LAYER_TREE_ID,
113-
frameTimingSequence.beginDrawingTimestamp,
114-
frameTimingSequence.commitTimestamp,
115-
frameTimingSequence.endDrawingTimestamp,
113+
frameTimingSequence.beginTimestamp,
114+
frameTimingSequence.endTimestamp,
116115
processId,
117116
frameTimingSequence.threadId);
118117

119118
chunk.push_back(
120119
TraceEventSerializer::serialize(std::move(beginDrawingEvent)));
121-
chunk.push_back(TraceEventSerializer::serialize(std::move(commitEvent)));
122120
chunk.push_back(
123121
TraceEventSerializer::serialize(std::move(endDrawingEvent)));
124122

@@ -127,7 +125,7 @@ constexpr int FALLBACK_LAYER_TREE_ID = 1;
127125
frameTimingSequence.id,
128126
FALLBACK_LAYER_TREE_ID,
129127
std::move(frameTimingSequence.screenshot.value()),
130-
frameTimingSequence.endDrawingTimestamp,
128+
frameTimingSequence.endTimestamp,
131129
processId,
132130
frameTimingSequence.threadId);
133131

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

Lines changed: 6 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -32,13 +32,12 @@ namespace facebook::react::jsinspector_modern::tracing {
3232
};
3333
}
3434

35-
/* static */ std::tuple<TraceEvent, TraceEvent, TraceEvent>
35+
/* static */ std::pair<TraceEvent, TraceEvent>
3636
TraceEventGenerator::createFrameTimingsEvents(
3737
uint64_t sequenceId,
3838
int layerTreeId,
39-
HighResTimeStamp beginDrawingTimestamp,
40-
HighResTimeStamp commitTimestamp,
41-
HighResTimeStamp endDrawingTimestamp,
39+
HighResTimeStamp beginTimestamp,
40+
HighResTimeStamp endTimestamp,
4241
ProcessId processId,
4342
ThreadId threadId) {
4443
folly::dynamic args = folly::dynamic::object("frameSeqId", sequenceId)(
@@ -48,17 +47,7 @@ TraceEventGenerator::createFrameTimingsEvents(
4847
.name = "BeginFrame",
4948
.cat = {Category::Frame},
5049
.ph = 'I',
51-
.ts = beginDrawingTimestamp,
52-
.pid = processId,
53-
.s = 't',
54-
.tid = threadId,
55-
.args = args,
56-
};
57-
auto commitEvent = TraceEvent{
58-
.name = "Commit",
59-
.cat = {Category::Frame},
60-
.ph = 'I',
61-
.ts = commitTimestamp,
50+
.ts = beginTimestamp,
6251
.pid = processId,
6352
.s = 't',
6453
.tid = threadId,
@@ -68,14 +57,14 @@ TraceEventGenerator::createFrameTimingsEvents(
6857
.name = "DrawFrame",
6958
.cat = {Category::Frame},
7059
.ph = 'I',
71-
.ts = endDrawingTimestamp,
60+
.ts = endTimestamp,
7261
.pid = processId,
7362
.s = 't',
7463
.tid = threadId,
7564
.args = args,
7665
};
7766

78-
return {std::move(beginEvent), std::move(commitEvent), std::move(drawEvent)};
67+
return {std::move(beginEvent), std::move(drawEvent)};
7968
}
8069

8170
/* static */ TraceEvent TraceEventGenerator::createScreenshotEvent(

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

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
#include <jsinspector-modern/tracing/FrameTimingSequence.h>
1313
#include <react/timing/primitives.h>
1414

15-
#include <tuple>
15+
#include <utility>
1616

1717
namespace facebook::react::jsinspector_modern::tracing {
1818

@@ -35,12 +35,11 @@ class TraceEventGenerator {
3535
/**
3636
* Creates canonical "BeginFrame", "Commit", "DrawFrame" trace events.
3737
*/
38-
static std::tuple<TraceEvent, TraceEvent, TraceEvent> createFrameTimingsEvents(
38+
static std::pair<TraceEvent, TraceEvent> createFrameTimingsEvents(
3939
FrameSequenceId sequenceId,
4040
int layerTreeId,
41-
HighResTimeStamp beginDrawingTimestamp,
42-
HighResTimeStamp commitTimestamp,
43-
HighResTimeStamp endDrawingTimestamp,
41+
HighResTimeStamp beginTimestamp,
42+
HighResTimeStamp endTimestamp,
4443
ProcessId processId,
4544
ThreadId threadId);
4645

0 commit comments

Comments
 (0)