Skip to content

Commit 3dbe8aa

Browse files
hoxyqfacebook-github-bot
authored andcommitted
Use in performance.measure (facebook#54337)
Summary: # Changelog: [Internal] The approach is identical to `console.timeStamp()`, see the diff below for more context. In this diff, we apply this approach to `performance.measure()`. Differential Revision: D85481863
1 parent f699de9 commit 3dbe8aa

File tree

5 files changed

+24
-3
lines changed

5 files changed

+24
-3
lines changed

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

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -187,7 +187,8 @@ void PerformanceTracer::reportMeasure(
187187
const std::string& name,
188188
HighResTimeStamp start,
189189
HighResDuration duration,
190-
folly::dynamic&& detail) {
190+
folly::dynamic&& detail,
191+
std::function<std::optional<folly::dynamic>()>&& stackTraceProvider) {
191192
if (!tracingAtomic_) {
192193
return;
193194
}
@@ -204,6 +205,7 @@ void PerformanceTracer::reportMeasure(
204205
.duration = duration,
205206
.detail = std::move(detail),
206207
.threadId = getCurrentThreadId(),
208+
.stackTraceProvider = std::move(stackTraceProvider),
207209
});
208210
}
209211

@@ -573,6 +575,12 @@ void PerformanceTracer::enqueueTraceEventsFromPerformanceTracerEvent(
573575
beginEventArgs =
574576
folly::dynamic::object("detail", folly::toJson(event.detail));
575577
}
578+
if (event.stackTraceProvider) {
579+
if (auto maybeStackTrace = event.stackTraceProvider()) {
580+
beginEventArgs["data"] = folly::dynamic::object(
581+
"rnStackTrace", std::move(*maybeStackTrace));
582+
}
583+
}
576584

577585
auto eventId = ++performanceMeasureCount_;
578586

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

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -81,7 +81,8 @@ class PerformanceTracer {
8181
const std::string &name,
8282
HighResTimeStamp start,
8383
HighResDuration duration,
84-
folly::dynamic &&detail = nullptr);
84+
folly::dynamic &&detail = nullptr,
85+
std::function<std::optional<folly::dynamic>()> &&stackTraceProvider = nullptr);
8586

8687
/**
8788
* Record a "TimeStamp" Trace Event - a labelled entry on Performance
@@ -244,6 +245,7 @@ class PerformanceTracer {
244245
HighResDuration duration;
245246
folly::dynamic detail;
246247
ThreadId threadId;
248+
std::function<std::optional<folly::dynamic>()> stackTraceProvider;
247249
HighResTimeStamp createdAt = HighResTimeStamp::now();
248250
};
249251

packages/react-native/ReactCommon/react/performance/timeline/CMakeLists.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ target_compile_options(react_performance_timeline PRIVATE -Wpedantic)
1616

1717
target_include_directories(react_performance_timeline PUBLIC ${REACT_COMMON_DIR})
1818
target_link_libraries(react_performance_timeline
19+
jsinspector
1920
jsinspector_tracing
2021
reactperflogger
2122
react_featureflags

packages/react-native/ReactCommon/react/performance/timeline/PerformanceEntryReporter.cpp

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

88
#include "PerformanceEntryReporter.h"
99

10+
#include <jsinspector-modern/ConsoleTaskOrchestrator.h>
1011
#include <jsinspector-modern/tracing/PerformanceTracer.h>
1112
#include <react/featureflags/ReactNativeFeatureFlags.h>
1213
#include <react/timing/primitives.h>
@@ -370,8 +371,16 @@ void PerformanceEntryReporter::traceMeasure(
370371
}
371372

372373
if (performanceTracer.isTracing()) {
374+
auto taskContext =
375+
jsinspector_modern::ConsoleTaskOrchestrator::getInstance().top();
376+
373377
performanceTracer.reportMeasure(
374-
entry.name, entry.startTime, entry.duration, std::move(detail));
378+
entry.name,
379+
entry.startTime,
380+
entry.duration,
381+
std::move(detail),
382+
taskContext ? taskContext->getSerializedStackTraceProvider()
383+
: nullptr);
375384
}
376385
}
377386
}

packages/react-native/ReactCommon/react/performance/timeline/React-performancetimeline.podspec

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@ Pod::Spec.new do |s|
4141
resolve_use_frameworks(s, header_mappings_dir: "../../..", module_name: "React_performancetimeline")
4242

4343
s.dependency "React-featureflags"
44+
add_dependency(s, "React-jsinspector", :framework_name => 'jsinspector_modern')
4445
add_dependency(s, "React-jsinspectortracing", :framework_name => 'jsinspector_moderntracing')
4546
s.dependency "React-timing"
4647
s.dependency "React-perflogger"

0 commit comments

Comments
 (0)