Skip to content

Commit a166354

Browse files
hoxyqfacebook-github-bot
authored andcommitted
Propagate tracing categories to recording state (#54380)
Summary: # Changelog: [Internal] We can now propagate down enabled categories to the state of trace recording. Reviewed By: huntie Differential Revision: D85996394
1 parent a324f8a commit a166354

File tree

8 files changed

+88
-24
lines changed

8 files changed

+88
-24
lines changed

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

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -146,7 +146,14 @@ HostTarget* JReactHostInspectorTarget::getInspectorTarget() {
146146

147147
bool JReactHostInspectorTarget::startBackgroundTrace() {
148148
if (inspectorTarget_) {
149-
return inspectorTarget_->startTracing(tracing::Mode::Background);
149+
return inspectorTarget_->startTracing(
150+
tracing::Mode::Background,
151+
{
152+
tracing::Category::HiddenTimeline,
153+
tracing::Category::RuntimeExecution,
154+
tracing::Category::Timeline,
155+
tracing::Category::UserTiming,
156+
});
150157
} else {
151158
jni::throwNewJavaException(
152159
"java/lang/IllegalStateException",

packages/react-native/ReactCommon/jsinspector-modern/HostTarget.h

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,10 @@
1717
#include "WeakList.h"
1818

1919
#include <optional>
20+
#include <set>
2021
#include <string>
2122

23+
#include <jsinspector-modern/tracing/TracingCategory.h>
2224
#include <jsinspector-modern/tracing/TracingMode.h>
2325
#include <jsinspector-modern/tracing/TracingState.h>
2426

@@ -203,9 +205,11 @@ class HostTargetController final {
203205
* Starts trace recording for this HostTarget.
204206
*
205207
* \param mode In which mode to start the trace recording.
208+
* \param enabledCategories The set of categories to enable.
209+
*
206210
* \return false if already tracing, true otherwise.
207211
*/
208-
bool startTracing(tracing::Mode mode);
212+
bool startTracing(tracing::Mode mode, std::set<tracing::Category> enabledCategories);
209213

210214
/**
211215
* Stops previously started trace recording.
@@ -292,9 +296,11 @@ class JSINSPECTOR_EXPORT HostTarget : public EnableExecutorFromThis<HostTarget>
292296
* Starts trace recording for this HostTarget.
293297
*
294298
* \param mode In which mode to start the trace recording.
299+
* \param enabledCategories The set of categories to enable.
300+
*
295301
* \return false if already tracing, true otherwise.
296302
*/
297-
bool startTracing(tracing::Mode mode);
303+
bool startTracing(tracing::Mode mode, std::set<tracing::Category> enabledCategories);
298304

299305
/**
300306
* Stops previously started trace recording.

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

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,9 +11,12 @@
1111
namespace facebook::react::jsinspector_modern {
1212

1313
HostTargetTraceRecording::HostTargetTraceRecording(
14+
HostTarget& hostTarget,
1415
tracing::Mode tracingMode,
15-
HostTarget& hostTarget)
16-
: tracingMode_(tracingMode), hostTarget_(hostTarget) {}
16+
std::set<tracing::Category> enabledCategories)
17+
: hostTarget_(hostTarget),
18+
tracingMode_(tracingMode),
19+
enabledCategories_(std::move(enabledCategories)) {}
1720

1821
void HostTargetTraceRecording::setTracedInstance(
1922
InstanceTarget* instanceTarget) {
@@ -32,6 +35,7 @@ void HostTargetTraceRecording::start() {
3235
state_ = tracing::TraceRecordingState{
3336
.mode = tracingMode_,
3437
.startTime = HighResTimeStamp::now(),
38+
.enabledCategories = enabledCategories_,
3539
};
3640
hostTracingAgent_ = hostTarget_.createTracingAgent(*state_);
3741
}

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

Lines changed: 15 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,10 @@
1212
#include "InstanceTarget.h"
1313

1414
#include <jsinspector-modern/tracing/TraceRecordingState.h>
15+
#include <jsinspector-modern/tracing/TracingCategory.h>
1516

1617
#include <optional>
18+
#include <set>
1719

1820
namespace facebook::react::jsinspector_modern {
1921

@@ -28,7 +30,10 @@ namespace facebook::react::jsinspector_modern {
2830
*/
2931
class HostTargetTraceRecording {
3032
public:
31-
explicit HostTargetTraceRecording(tracing::Mode tracingMode, HostTarget &hostTarget);
33+
explicit HostTargetTraceRecording(
34+
HostTarget &hostTarget,
35+
tracing::Mode tracingMode,
36+
std::set<tracing::Category> enabledCategories);
3237

3338
inline bool isBackgroundInitiated() const
3439
{
@@ -61,14 +66,14 @@ class HostTargetTraceRecording {
6166

6267
private:
6368
/**
64-
* The mode in which this trace recording was initialized.
69+
* The Host for which this Trace Recording is going to happen.
6570
*/
66-
tracing::Mode tracingMode_;
71+
HostTarget &hostTarget_;
6772

6873
/**
69-
* The Host for which this Trace Recording is going to happen.
74+
* The mode in which this trace recording was initialized.
7075
*/
71-
HostTarget &hostTarget_;
76+
tracing::Mode tracingMode_;
7277

7378
/**
7479
* The state of the current Trace Recording.
@@ -81,6 +86,11 @@ class HostTargetTraceRecording {
8186
* Only allocated if the recording is enabled.
8287
*/
8388
std::shared_ptr<HostTracingAgent> hostTracingAgent_;
89+
90+
/**
91+
* The list of categories that are enabled for this recording.
92+
*/
93+
std::set<tracing::Category> enabledCategories_;
8494
};
8595

8696
} // namespace facebook::react::jsinspector_modern

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

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,10 @@
1212

1313
namespace facebook::react::jsinspector_modern {
1414

15-
bool HostTargetController::startTracing(tracing::Mode tracingMode) {
16-
return target_.startTracing(tracingMode);
15+
bool HostTargetController::startTracing(
16+
tracing::Mode tracingMode,
17+
std::set<tracing::Category> enabledCategories) {
18+
return target_.startTracing(tracingMode, std::move(enabledCategories));
1719
}
1820

1921
tracing::TraceRecordingState HostTargetController::stopTracing() {
@@ -27,7 +29,9 @@ std::shared_ptr<HostTracingAgent> HostTarget::createTracingAgent(
2729
return agent;
2830
}
2931

30-
bool HostTarget::startTracing(tracing::Mode tracingMode) {
32+
bool HostTarget::startTracing(
33+
tracing::Mode tracingMode,
34+
std::set<tracing::Category> enabledCategories) {
3135
if (traceRecording_ != nullptr) {
3236
if (traceRecording_->isBackgroundInitiated() &&
3337
tracingMode == tracing::Mode::CDP) {
@@ -37,8 +41,8 @@ bool HostTarget::startTracing(tracing::Mode tracingMode) {
3741
}
3842
}
3943

40-
traceRecording_ =
41-
std::make_unique<HostTargetTraceRecording>(tracingMode, *this);
44+
traceRecording_ = std::make_unique<HostTargetTraceRecording>(
45+
*this, tracingMode, std::move(enabledCategories));
4246
traceRecording_->setTracedInstance(currentInstance_.get());
4347
traceRecording_->start();
4448

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

Lines changed: 19 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -59,8 +59,25 @@ bool TracingAgent::handleRequest(const cdp::PreparsedRequest& req) {
5959
return true;
6060
}
6161

62-
bool didNotHaveAlreadyRunningRecording =
63-
hostTargetController_.startTracing(tracing::Mode::CDP);
62+
/**
63+
* This logic has to be updated with the next upgrade of Chrome
64+
* DevTools Frotnend fork.
65+
*
66+
* At the moment of writing this, our fork uses categories field, which is
67+
* marked as depreacted in CDP spec.
68+
*
69+
* Latest versions of Chrome DevTools in stable channel of Chromium are
70+
* already using traceConfig field.
71+
*/
72+
std::set<tracing::Category> enabledCategories;
73+
if (req.params.isObject() && req.params.count("categories") != 0 &&
74+
req.params["categories"].isString()) {
75+
enabledCategories = tracing::parseSerializedTracingCategories(
76+
req.params["categories"].getString());
77+
}
78+
79+
bool didNotHaveAlreadyRunningRecording = hostTargetController_.startTracing(
80+
tracing::Mode::CDP, std::move(enabledCategories));
6481
if (!didNotHaveAlreadyRunningRecording) {
6582
frontendChannel_(
6683
cdp::jsonError(

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

Lines changed: 20 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -7,14 +7,16 @@
77

88
#pragma once
99

10+
#include "FollyDynamicMatchers.h"
1011
#include "JsiIntegrationTest.h"
1112

13+
#include <fmt/format.h>
1214
#include <folly/dynamic.h>
1315
#include <folly/json.h>
1416
#include <gmock/gmock.h>
15-
#include <vector>
1617

17-
#include "FollyDynamicMatchers.h"
18+
#include <set>
19+
#include <vector>
1820

1921
namespace facebook::react::jsinspector_modern {
2022

@@ -29,17 +31,28 @@ class TracingTestBase : public JsiIntegrationPortableTestBase<EngineAdapter, Exe
2931
/**
3032
* Helper method to start tracing via Tracing.start CDP command.
3133
*/
32-
void startTracing()
34+
void startTracing(
35+
const std::set<tracing::Category> &enabledCategories = {
36+
tracing::Category::HiddenTimeline,
37+
tracing::Category::JavaScriptSampling,
38+
tracing::Category::RuntimeExecution,
39+
tracing::Category::Timeline,
40+
tracing::Category::UserTiming,
41+
})
3342
{
3443
this->expectMessageFromPage(JsonEq(R"({
3544
"id": 1,
3645
"result": {}
3746
})"));
3847

39-
this->toPage_->sendMessage(R"({
40-
"id": 1,
41-
"method": "Tracing.start"
42-
})");
48+
this->toPage_->sendMessage(
49+
fmt::format(
50+
R"({{
51+
"id": 1,
52+
"method": "Tracing.start",
53+
"params": {{ "categories": "{0}" }}
54+
}})",
55+
tracing::serializeTracingCategories(enabledCategories)));
4356
}
4457

4558
/**

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

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,9 @@ struct TraceRecordingState {
3434

3535
// All captures Instance Tracing Profiles during this Trace Recording.
3636
std::vector<InstanceTracingProfile> instanceTracingProfiles{};
37+
38+
// The list of categories that are enabled for this recording.
39+
std::set<tracing::Category> enabledCategories;
3740
};
3841

3942
} // namespace facebook::react::jsinspector_modern::tracing

0 commit comments

Comments
 (0)