From acebebfd212ff6e34ddfdc2ebbd657f5cc941aba Mon Sep 17 00:00:00 2001 From: Ruslan Lesiutin Date: Mon, 17 Feb 2025 09:34:33 -0800 Subject: [PATCH] Expose API for registering processes and threads (#49083) Summary: Pull Request resolved: https://github.com/facebook/react-native/pull/49083 # Changelog: [Internal] > NOTE: Some CI jobs are expected to fail, because changes in Hermes D67353585 should be landed first, and then grafted to Static Hermes. Added 2 new public methods to `PerformanceTracer` instance for registering metadata Trace Events for processes and threads. Reviewed By: huntie Differential Revision: D68439733 fbshipit-source-id: dd9f0e72e2414b8c665c57a542cbbfe7df34a516 --- .../tracing/PerformanceTracer.cpp | 34 +++++++++++++++++++ .../tracing/PerformanceTracer.h | 11 ++++++ 2 files changed, 45 insertions(+) diff --git a/packages/react-native/ReactCommon/jsinspector-modern/tracing/PerformanceTracer.cpp b/packages/react-native/ReactCommon/jsinspector-modern/tracing/PerformanceTracer.cpp index 22d65d8a726..2a4fd3c7e74 100644 --- a/packages/react-native/ReactCommon/jsinspector-modern/tracing/PerformanceTracer.cpp +++ b/packages/react-native/ReactCommon/jsinspector-modern/tracing/PerformanceTracer.cpp @@ -151,6 +151,40 @@ void PerformanceTracer::reportMeasure( }); } +void PerformanceTracer::reportProcess(uint64_t id, const std::string& name) { + std::lock_guard lock(mutex_); + if (!tracing_) { + return; + } + + buffer_.push_back(TraceEvent{ + .name = "process_name", + .cat = "__metadata", + .ph = 'M', + .ts = 0, + .pid = id, + .tid = 0, + .args = folly::dynamic::object("name", name), + }); +} + +void PerformanceTracer::reportThread(uint64_t id, const std::string& name) { + std::lock_guard lock(mutex_); + if (!tracing_) { + return; + } + + buffer_.push_back(TraceEvent{ + .name = "thread_name", + .cat = "__metadata", + .ph = 'M', + .ts = 0, + .pid = processId_, + .tid = id, + .args = folly::dynamic::object("name", name), + }); +} + folly::dynamic PerformanceTracer::serializeTraceEvent(TraceEvent event) const { folly::dynamic result = folly::dynamic::object; diff --git a/packages/react-native/ReactCommon/jsinspector-modern/tracing/PerformanceTracer.h b/packages/react-native/ReactCommon/jsinspector-modern/tracing/PerformanceTracer.h index f8fedaeb304..cf80b68080c 100644 --- a/packages/react-native/ReactCommon/jsinspector-modern/tracing/PerformanceTracer.h +++ b/packages/react-native/ReactCommon/jsinspector-modern/tracing/PerformanceTracer.h @@ -13,6 +13,7 @@ #include #include +#include #include #include @@ -66,6 +67,16 @@ class PerformanceTracer { uint64_t duration, const std::optional& trackMetadata); + /** + * Record a corresponding Trace Event for OS-level process. + */ + void reportProcess(uint64_t id, const std::string& name); + + /** + * Record a corresponding Trace Event for OS-level thread. + */ + void reportThread(uint64_t id, const std::string& name); + private: PerformanceTracer(); PerformanceTracer(const PerformanceTracer&) = delete;