Skip to content

Commit 2e35790

Browse files
hoxyqfacebook-github-bot
authored andcommitted
Use TracingCategory in TraceEvent (#54378)
Summary: # Changelog: [Internal] According to the only public document that we have about Trace Event format, a single Trace Event could have multiple categories. However, we don't have yet a single instance of this, that's why I am using `folly:small_vector<..., 1>` to optimize for such case. Reviewed By: sbuggay Differential Revision: D85973670
1 parent 81dcc7f commit 2e35790

File tree

4 files changed

+43
-16
lines changed

4 files changed

+43
-16
lines changed

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

Lines changed: 15 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
#include "PerformanceTracer.h"
99
#include "Timing.h"
1010
#include "TraceEventSerializer.h"
11+
#include "TracingCategory.h"
1112

1213
#include <jsinspector-modern/network/CdpNetwork.h>
1314
#include <jsinspector-modern/network/HttpUtils.h>
@@ -138,7 +139,7 @@ std::optional<std::vector<TraceEvent>> PerformanceTracer::stopTracing() {
138139
events.emplace_back(
139140
TraceEvent{
140141
.name = "TracingStartedInPage",
141-
.cat = "disabled-by-default-devtools.timeline",
142+
.cat = {Category::HiddenTimeline},
142143
.ph = 'I',
143144
.ts = currentTraceStartTime,
144145
.pid = processId_,
@@ -149,7 +150,7 @@ std::optional<std::vector<TraceEvent>> PerformanceTracer::stopTracing() {
149150
events.emplace_back(
150151
TraceEvent{
151152
.name = "ReactNative-TracingStopped",
152-
.cat = "disabled-by-default-devtools.timeline",
153+
.cat = {Category::HiddenTimeline},
153154
.ph = 'I',
154155
.ts = currentTraceEndTime,
155156
.pid = processId_,
@@ -409,7 +410,7 @@ void PerformanceTracer::reportFrameTiming(
409410
return TraceEvent{
410411
.id = profileId,
411412
.name = "Profile",
412-
.cat = "disabled-by-default-v8.cpu_profiler",
413+
.cat = {Category::JavaScriptSampling},
413414
.ph = 'P',
414415
.ts = profileTimestamp,
415416
.pid = processId,
@@ -432,7 +433,7 @@ PerformanceTracer::constructRuntimeProfileChunkTraceEvent(
432433
return TraceEvent{
433434
.id = profileId,
434435
.name = "ProfileChunk",
435-
.cat = "disabled-by-default-v8.cpu_profiler",
436+
.cat = {Category::JavaScriptSampling},
436437
.ph = 'P',
437438
.ts = chunkTimestamp,
438439
.pid = processId,
@@ -564,7 +565,7 @@ void PerformanceTracer::enqueueTraceEventsFromPerformanceTracerEvent(
564565
events.emplace_back(
565566
TraceEvent{
566567
.name = "RunTask",
567-
.cat = "disabled-by-default-devtools.timeline",
568+
.cat = {Category::HiddenTimeline},
568569
.ph = 'X',
569570
.ts = event.start,
570571
.pid = processId_,
@@ -576,7 +577,7 @@ void PerformanceTracer::enqueueTraceEventsFromPerformanceTracerEvent(
576577
events.emplace_back(
577578
TraceEvent{
578579
.name = "RunMicrotasks",
579-
.cat = "v8.execute",
580+
.cat = {Category::RuntimeExecution},
580581
.ph = 'X',
581582
.ts = event.start,
582583
.pid = processId_,
@@ -596,7 +597,7 @@ void PerformanceTracer::enqueueTraceEventsFromPerformanceTracerEvent(
596597
events.emplace_back(
597598
TraceEvent{
598599
.name = std::move(event.name),
599-
.cat = "blink.user_timing",
600+
.cat = {Category::UserTiming},
600601
.ph = 'I',
601602
.ts = event.start,
602603
.pid = processId_,
@@ -621,7 +622,7 @@ void PerformanceTracer::enqueueTraceEventsFromPerformanceTracerEvent(
621622
TraceEvent{
622623
.id = eventId,
623624
.name = event.name,
624-
.cat = "blink.user_timing",
625+
.cat = {Category::UserTiming},
625626
.ph = 'b',
626627
.ts = event.start,
627628
.pid = processId_,
@@ -632,7 +633,7 @@ void PerformanceTracer::enqueueTraceEventsFromPerformanceTracerEvent(
632633
TraceEvent{
633634
.id = eventId,
634635
.name = std::move(event.name),
635-
.cat = "blink.user_timing",
636+
.cat = {Category::UserTiming},
636637
.ph = 'e',
637638
.ts = event.start + event.duration,
638639
.pid = processId_,
@@ -672,7 +673,7 @@ void PerformanceTracer::enqueueTraceEventsFromPerformanceTracerEvent(
672673
events.emplace_back(
673674
TraceEvent{
674675
.name = "TimeStamp",
675-
.cat = "devtools.timeline",
676+
.cat = {Category::Timeline},
676677
.ph = 'I',
677678
.ts = event.createdAt,
678679
.pid = processId_,
@@ -710,7 +711,7 @@ void PerformanceTracer::enqueueTraceEventsFromPerformanceTracerEvent(
710711
events.emplace_back(
711712
TraceEvent{
712713
.name = "TimeStamp",
713-
.cat = "devtools.timeline",
714+
.cat = {Category::Timeline},
714715
.ph = 'I',
715716
.ts = event.createdAt,
716717
.pid = processId_,
@@ -730,7 +731,7 @@ void PerformanceTracer::enqueueTraceEventsFromPerformanceTracerEvent(
730731
events.emplace_back(
731732
TraceEvent{
732733
.name = "ResourceSendRequest",
733-
.cat = "devtools.timeline",
734+
.cat = {Category::Timeline},
734735
.ph = 'I',
735736
.ts = event.start,
736737
.pid = processId_,
@@ -756,7 +757,7 @@ void PerformanceTracer::enqueueTraceEventsFromPerformanceTracerEvent(
756757
events.emplace_back(
757758
TraceEvent{
758759
.name = "ResourceReceiveResponse",
759-
.cat = "devtools.timeline",
760+
.cat = {Category::Timeline},
760761
.ph = 'I',
761762
.ts = event.start,
762763
.pid = processId_,
@@ -774,7 +775,7 @@ void PerformanceTracer::enqueueTraceEventsFromPerformanceTracerEvent(
774775
events.emplace_back(
775776
TraceEvent{
776777
.name = "ResourceFinish",
777-
.cat = "devtools.timeline",
778+
.cat = {Category::Timeline},
778779
.ph = 'I',
779780
.ts = event.start,
780781
.pid = processId_,

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

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77

88
#pragma once
99

10+
#include <jsinspector-modern/tracing/TracingCategory.h>
1011
#include <react/timing/primitives.h>
1112

1213
#include <folly/dynamic.h>
@@ -40,7 +41,7 @@ struct TraceEvent {
4041
* A comma separated list of categories for the event, configuring how
4142
* events are shown in the Trace Viewer UI.
4243
*/
43-
std::string cat;
44+
Categories cat;
4445

4546
/**
4647
* The event type. This is a single character which changes depending on the

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

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77

88
#include "TraceEventSerializer.h"
99
#include "Timing.h"
10+
#include "TracingCategory.h"
1011

1112
#include <react/timing/primitives.h>
1213

@@ -22,7 +23,7 @@ namespace facebook::react::jsinspector_modern::tracing {
2223
result["id"] = buffer.data();
2324
}
2425
result["name"] = std::move(event.name);
25-
result["cat"] = std::move(event.cat);
26+
result["cat"] = serializeTracingCategories(event.cat);
2627
result["ph"] = std::string(1, event.ph);
2728
result["ts"] = highResTimeStampToTracingClockTimeStamp(event.ts);
2829
result["pid"] = event.pid;

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

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

88
#pragma once
99

10+
#include <folly/container/small_vector.h>
11+
1012
#include <optional>
1113
#include <string>
1214

@@ -53,4 +55,26 @@ inline std::optional<Category> getTracingCategoryFromString(const std::string &s
5355
}
5456
}
5557

58+
/**
59+
* The Trace Event could have multiple categories, but this is extremely rare case.
60+
*/
61+
using Categories = folly::small_vector<Category, 1>;
62+
63+
// { Timeline, UserTiming } => "devtools.timeline,blink.user_timing"
64+
inline std::string serializeTracingCategories(const Categories &categories)
65+
{
66+
if (categories.size() == 1) {
67+
return tracingCategoryToString(categories.front());
68+
}
69+
70+
std::string serializedValue;
71+
for (size_t i = 0; i < categories.size(); ++i) {
72+
serializedValue += tracingCategoryToString(categories[i]);
73+
if (i < categories.size() - 1) {
74+
serializedValue += ",";
75+
}
76+
}
77+
return serializedValue;
78+
}
79+
5680
} // namespace facebook::react::jsinspector_modern::tracing

0 commit comments

Comments
 (0)