From 4b7906bc158541e314697e6ca6def8ff5e8874c8 Mon Sep 17 00:00:00 2001 From: Ruslan Lesiutin Date: Fri, 24 Jan 2025 08:41:48 -0800 Subject: [PATCH] Switch from single Complete event to a pair of Async Nestable events (#48906) Summary: Pull Request resolved: https://github.com/facebook/react-native/pull/48906 # Changelog: [Internal] It looks like on `Chrome` side, Complete events (`ph="X"`) are only used for Renderer-related events. For user-land events with duration (non-instant events), there is a [set of supported types](https://github.com/ChromeDevTools/devtools-frontend/blob/99a9104ae974f8caa63927e356800f6762cdbf25/front_end/models/trace/types/TraceEvents.ts#L62-L65), which don't include `"X"`. Later, pair of such events will form a [performance measure event](https://github.com/ChromeDevTools/devtools-frontend/blob/99a9104ae974f8caa63927e356800f6762cdbf25/front_end/models/trace/types/TraceEvents.ts#L2256-L2258). Reviewed By: huntie Differential Revision: D68564754 fbshipit-source-id: dac87ab06c47925a70e03f43f0628364217a06a2 --- .../tracing/PerformanceTracer.cpp | 17 +++++++++++++++-- .../tracing/PerformanceTracer.h | 1 + 2 files changed, 16 insertions(+), 2 deletions(-) diff --git a/packages/react-native/ReactCommon/jsinspector-modern/tracing/PerformanceTracer.cpp b/packages/react-native/ReactCommon/jsinspector-modern/tracing/PerformanceTracer.cpp index d6af5141346..3a75981d16e 100644 --- a/packages/react-native/ReactCommon/jsinspector-modern/tracing/PerformanceTracer.cpp +++ b/packages/react-native/ReactCommon/jsinspector-modern/tracing/PerformanceTracer.cpp @@ -34,6 +34,7 @@ bool PerformanceTracer::startTracing() { if (tracing_) { return false; } + tracing_ = true; return true; } @@ -43,6 +44,8 @@ bool PerformanceTracer::stopTracing() { if (!tracing_) { return false; } + + performanceMeasureCount_ = 0; tracing_ = false; return true; } @@ -158,14 +161,24 @@ void PerformanceTracer::reportMeasure( } } + ++performanceMeasureCount_; buffer_.push_back(TraceEvent{ + .id = performanceMeasureCount_, .name = std::string(name), .cat = "blink.user_timing", - .ph = 'X', + .ph = 'b', .ts = start, .pid = PID, // FIXME: This should be the real process ID. .tid = threadId, // FIXME: This should be the real thread ID. - .dur = duration, + }); + buffer_.push_back(TraceEvent{ + .id = performanceMeasureCount_, + .name = std::string(name), + .cat = "blink.user_timing", + .ph = 'e', + .ts = start + duration, + .pid = PID, // FIXME: This should be the real process ID. + .tid = threadId, // FIXME: This should be the real thread ID. }); } diff --git a/packages/react-native/ReactCommon/jsinspector-modern/tracing/PerformanceTracer.h b/packages/react-native/ReactCommon/jsinspector-modern/tracing/PerformanceTracer.h index 19af05a16aa..25002c069a4 100644 --- a/packages/react-native/ReactCommon/jsinspector-modern/tracing/PerformanceTracer.h +++ b/packages/react-native/ReactCommon/jsinspector-modern/tracing/PerformanceTracer.h @@ -76,6 +76,7 @@ class PerformanceTracer { folly::dynamic serializeTraceEvent(TraceEvent event) const; bool tracing_{false}; + uint32_t performanceMeasureCount_{0}; std::unordered_map customTrackIdMap_; std::vector buffer_; std::mutex mutex_;