Skip to content

Commit cb75309

Browse files
hoxyqfacebook-github-bot
authored andcommitted
Use in console.timeStamp (#54339)
Summary: # Changelog: [Internal] Whenever the `console.timeStamp()` is called and we are actually tracing, we will peek at the `ConsoleTaskOrchestrator` stack and check if there is a task. If so, it means that this call happened inside a task context, so we can request a stack trace and propagate it down to `PerformanceTracer`. Reviewed By: huntie Differential Revision: D85481866
1 parent 02490d0 commit cb75309

File tree

3 files changed

+22
-3
lines changed

3 files changed

+22
-3
lines changed

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

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

88
#include "ConsoleTask.h"
99
#include "ConsoleTaskContext.h"
10+
#include "ConsoleTaskOrchestrator.h"
1011

1112
#include <jsinspector-modern/RuntimeTarget.h>
1213
#include <jsinspector-modern/tracing/PerformanceTracer.h>
@@ -480,8 +481,17 @@ void consoleTimeStamp(
480481
}
481482

482483
if (performanceTracer.isTracing()) {
484+
auto taskContext = ConsoleTaskOrchestrator::getInstance().top();
485+
483486
performanceTracer.reportTimeStamp(
484-
label, start, end, trackName, trackGroup, color, std::move(detail));
487+
label,
488+
start,
489+
end,
490+
trackName,
491+
trackGroup,
492+
color,
493+
std::move(detail),
494+
taskContext ? taskContext->getSerializedStackTraceProvider() : nullptr);
485495
}
486496

487497
if (ReactPerfettoLogger::isTracing()) {

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

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -214,7 +214,8 @@ void PerformanceTracer::reportTimeStamp(
214214
std::optional<std::string> trackName,
215215
std::optional<std::string> trackGroup,
216216
std::optional<ConsoleTimeStampColor> color,
217-
std::optional<folly::dynamic> detail) {
217+
std::optional<folly::dynamic> detail,
218+
std::function<std::optional<folly::dynamic>()>&& stackTraceProvider) {
218219
if (!tracingAtomic_) {
219220
return;
220221
}
@@ -233,6 +234,7 @@ void PerformanceTracer::reportTimeStamp(
233234
.trackGroup = std::move(trackGroup),
234235
.color = std::move(color),
235236
.detail = std::move(detail),
237+
.stackTraceProvider = std::move(stackTraceProvider),
236238
.threadId = getCurrentThreadId(),
237239
});
238240
}
@@ -695,6 +697,11 @@ void PerformanceTracer::enqueueTraceEventsFromPerformanceTracerEvent(
695697
}
696698
data["devtools"] = folly::toJson(devtoolsDetail);
697699
}
700+
if (event.stackTraceProvider) {
701+
if (auto maybeStackTrace = event.stackTraceProvider()) {
702+
data["rnStackTrace"] = std::move(*maybeStackTrace);
703+
}
704+
}
698705

699706
events.emplace_back(
700707
TraceEvent{

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

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -97,7 +97,8 @@ class PerformanceTracer {
9797
std::optional<std::string> trackName = std::nullopt,
9898
std::optional<std::string> trackGroup = std::nullopt,
9999
std::optional<ConsoleTimeStampColor> color = std::nullopt,
100-
std::optional<folly::dynamic> detail = std::nullopt);
100+
std::optional<folly::dynamic> detail = std::nullopt,
101+
std::function<std::optional<folly::dynamic>()> &&stackTraceProvider = nullptr);
101102

102103
/**
103104
* Record an Event Loop tick, which will be represented as an Event Loop task
@@ -267,6 +268,7 @@ class PerformanceTracer {
267268
std::optional<std::string> trackGroup;
268269
std::optional<ConsoleTimeStampColor> color;
269270
std::optional<folly::dynamic> detail;
271+
std::function<std::optional<folly::dynamic>()> stackTraceProvider;
270272
ThreadId threadId;
271273
HighResTimeStamp createdAt = HighResTimeStamp::now();
272274
};

0 commit comments

Comments
 (0)