From f66ef539620bbbb5d2240aea480271fcfb43d49b Mon Sep 17 00:00:00 2001 From: Ruslan Lesiutin Date: Wed, 6 Aug 2025 05:48:35 -0700 Subject: [PATCH] Create TracingMode (#53035) Summary: Pull Request resolved: https://github.com/facebook/react-native/pull/53035 # Changelog: [Internal] This adds an ability to distinguish different trace recordings, based on mode Reviewed By: sbuggay Differential Revision: D79557790 fbshipit-source-id: cbb216df86fa1a4692e1b82c8a14a6049b5c45ec --- .../ReactCommon/jsinspector-modern/HostTarget.h | 8 ++++++-- .../HostTargetTraceRecording.cpp | 6 ++++-- .../HostTargetTraceRecording.h | 17 ++++++++++++++++- .../jsinspector-modern/HostTargetTracing.cpp | 9 +++++---- .../jsinspector-modern/TracingAgent.cpp | 3 ++- .../jsinspector-modern/tracing/TracingMode.h | 17 +++++++++++++++++ 6 files changed, 50 insertions(+), 10 deletions(-) create mode 100644 packages/react-native/ReactCommon/jsinspector-modern/tracing/TracingMode.h diff --git a/packages/react-native/ReactCommon/jsinspector-modern/HostTarget.h b/packages/react-native/ReactCommon/jsinspector-modern/HostTarget.h index 08e5dc3c124..7c7e3c64fd2 100644 --- a/packages/react-native/ReactCommon/jsinspector-modern/HostTarget.h +++ b/packages/react-native/ReactCommon/jsinspector-modern/HostTarget.h @@ -18,6 +18,8 @@ #include #include +#include + #ifndef JSINSPECTOR_EXPORT #ifdef _MSC_VER #ifdef CREATE_SHARED_LIBRARY @@ -171,9 +173,10 @@ class HostTargetController final { /** * Starts trace recording for this HostTarget. * + * \param mode In which mode to start the trace recording. * \return false if already tracing, true otherwise. */ - bool startTracing(); + bool startTracing(tracing::Mode mode); /** * Stops previously started trace recording. @@ -264,9 +267,10 @@ class JSINSPECTOR_EXPORT HostTarget /** * Starts trace recording for this HostTarget. * + * \param mode In which mode to start the trace recording. * \return false if already tracing, true otherwise. */ - bool startTracing(); + bool startTracing(tracing::Mode mode); /** * Stops previously started trace recording. diff --git a/packages/react-native/ReactCommon/jsinspector-modern/HostTargetTraceRecording.cpp b/packages/react-native/ReactCommon/jsinspector-modern/HostTargetTraceRecording.cpp index de5fa18b6f2..d055e532881 100644 --- a/packages/react-native/ReactCommon/jsinspector-modern/HostTargetTraceRecording.cpp +++ b/packages/react-native/ReactCommon/jsinspector-modern/HostTargetTraceRecording.cpp @@ -10,8 +10,10 @@ namespace facebook::react::jsinspector_modern { -HostTargetTraceRecording::HostTargetTraceRecording(HostTarget& hostTarget) - : hostTarget_(hostTarget) {} +HostTargetTraceRecording::HostTargetTraceRecording( + tracing::Mode tracingMode, + HostTarget& hostTarget) + : tracingMode_(tracingMode), hostTarget_(hostTarget) {} void HostTargetTraceRecording::setTracedInstance( InstanceTarget* instanceTarget) { diff --git a/packages/react-native/ReactCommon/jsinspector-modern/HostTargetTraceRecording.h b/packages/react-native/ReactCommon/jsinspector-modern/HostTargetTraceRecording.h index 963c931dad1..b6157d510d5 100644 --- a/packages/react-native/ReactCommon/jsinspector-modern/HostTargetTraceRecording.h +++ b/packages/react-native/ReactCommon/jsinspector-modern/HostTargetTraceRecording.h @@ -28,7 +28,17 @@ namespace facebook::react::jsinspector_modern { */ class HostTargetTraceRecording { public: - explicit HostTargetTraceRecording(HostTarget& hostTarget); + explicit HostTargetTraceRecording( + tracing::Mode tracingMode, + HostTarget& hostTarget); + + inline bool isBackgroundInitiated() const { + return tracingMode_ == tracing::Mode::Background; + } + + inline bool isUserInitiated() const { + return tracingMode_ == tracing::Mode::CDP; + } /** * Updates the current traced Instance for this recording. @@ -50,6 +60,11 @@ class HostTargetTraceRecording { tracing::TraceRecordingState stop(); private: + /** + * The mode in which this trace recording was initialized. + */ + tracing::Mode tracingMode_; + /** * The Host for which this Trace Recording is going to happen. */ diff --git a/packages/react-native/ReactCommon/jsinspector-modern/HostTargetTracing.cpp b/packages/react-native/ReactCommon/jsinspector-modern/HostTargetTracing.cpp index f321e0151f7..cdf270d1fbd 100644 --- a/packages/react-native/ReactCommon/jsinspector-modern/HostTargetTracing.cpp +++ b/packages/react-native/ReactCommon/jsinspector-modern/HostTargetTracing.cpp @@ -10,8 +10,8 @@ namespace facebook::react::jsinspector_modern { -bool HostTargetController::startTracing() { - return target_.startTracing(); +bool HostTargetController::startTracing(tracing::Mode tracingMode) { + return target_.startTracing(tracingMode); } tracing::TraceRecordingState HostTargetController::stopTracing() { @@ -25,12 +25,13 @@ std::shared_ptr HostTarget::createTracingAgent( return agent; } -bool HostTarget::startTracing() { +bool HostTarget::startTracing(tracing::Mode tracingMode) { if (traceRecording_ != nullptr) { return false; } - traceRecording_ = std::make_unique(*this); + traceRecording_ = + std::make_unique(tracingMode, *this); traceRecording_->setTracedInstance(currentInstance_.get()); traceRecording_->start(); diff --git a/packages/react-native/ReactCommon/jsinspector-modern/TracingAgent.cpp b/packages/react-native/ReactCommon/jsinspector-modern/TracingAgent.cpp index 481439e6f07..49568d70799 100644 --- a/packages/react-native/ReactCommon/jsinspector-modern/TracingAgent.cpp +++ b/packages/react-native/ReactCommon/jsinspector-modern/TracingAgent.cpp @@ -11,6 +11,7 @@ #include #include #include +#include namespace facebook::react::jsinspector_modern { @@ -63,7 +64,7 @@ bool TracingAgent::handleRequest(const cdp::PreparsedRequest& req) { } bool didNotHaveAlreadyRunningRecording = - hostTargetController_.startTracing(); + hostTargetController_.startTracing(tracing::Mode::CDP); if (!didNotHaveAlreadyRunningRecording) { frontendChannel_(cdp::jsonError( req.id, diff --git a/packages/react-native/ReactCommon/jsinspector-modern/tracing/TracingMode.h b/packages/react-native/ReactCommon/jsinspector-modern/tracing/TracingMode.h new file mode 100644 index 00000000000..a909bf11196 --- /dev/null +++ b/packages/react-native/ReactCommon/jsinspector-modern/tracing/TracingMode.h @@ -0,0 +1,17 @@ +/* + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +#pragma once + +namespace facebook::react::jsinspector_modern::tracing { + +enum class Mode { + CDP, // Initiated by the user via Chrome DevTools Frontend. + Background, // Initiated by the host, doesn't require active CDP session. +}; + +}