diff --git a/packages/react-native/ReactCommon/react/renderer/runtimescheduler/CMakeLists.txt b/packages/react-native/ReactCommon/react/renderer/runtimescheduler/CMakeLists.txt index 1a25e838653..dbe7aeee7f8 100644 --- a/packages/react-native/ReactCommon/react/renderer/runtimescheduler/CMakeLists.txt +++ b/packages/react-native/ReactCommon/react/renderer/runtimescheduler/CMakeLists.txt @@ -25,4 +25,5 @@ target_link_libraries(react_render_runtimescheduler jsi react_debug react_render_core + react_render_debug runtimeexecutor) diff --git a/packages/react-native/ReactCommon/react/renderer/runtimescheduler/React-runtimescheduler.podspec b/packages/react-native/ReactCommon/react/renderer/runtimescheduler/React-runtimescheduler.podspec index 50ea692ca70..e4a197ab045 100644 --- a/packages/react-native/ReactCommon/react/renderer/runtimescheduler/React-runtimescheduler.podspec +++ b/packages/react-native/ReactCommon/react/renderer/runtimescheduler/React-runtimescheduler.podspec @@ -55,6 +55,7 @@ Pod::Spec.new do |s| s.dependency "React-runtimeexecutor" s.dependency "React-callinvoker" s.dependency "React-debug" + s.dependency "React-rendererdebug" s.dependency "React-utils" s.dependency "glog" s.dependency "RCT-Folly", folly_version diff --git a/packages/react-native/ReactCommon/react/renderer/runtimescheduler/RuntimeScheduler.cpp b/packages/react-native/ReactCommon/react/renderer/runtimescheduler/RuntimeScheduler.cpp index 79ac8ef245c..bd611aee1a0 100644 --- a/packages/react-native/ReactCommon/react/renderer/runtimescheduler/RuntimeScheduler.cpp +++ b/packages/react-native/ReactCommon/react/renderer/runtimescheduler/RuntimeScheduler.cpp @@ -8,6 +8,7 @@ #include "RuntimeScheduler.h" #include "SchedulerPriorityUtils.h" +#include #include #include "ErrorUtils.h" @@ -21,10 +22,13 @@ RuntimeScheduler::RuntimeScheduler( : runtimeExecutor_(std::move(runtimeExecutor)), now_(std::move(now)) {} void RuntimeScheduler::scheduleWork(RawCallback callback) const { + SystraceSection s("RuntimeScheduler::scheduleWork"); + runtimeAccessRequests_ += 1; runtimeExecutor_( [this, callback = std::move(callback)](jsi::Runtime& runtime) { + SystraceSection s2("RuntimeScheduler::scheduleWork callback"); runtimeAccessRequests_ -= 1; callback(runtime); startWorkLoop(runtime); @@ -78,10 +82,15 @@ RuntimeSchedulerTimePoint RuntimeScheduler::now() const noexcept { } void RuntimeScheduler::executeNowOnTheSameThread(RawCallback callback) { + SystraceSection s("RuntimeScheduler::executeNowOnTheSameThread"); + runtimeAccessRequests_ += 1; executeSynchronouslyOnSameThread_CAN_DEADLOCK( runtimeExecutor_, [this, callback = std::move(callback)](jsi::Runtime& runtime) { + SystraceSection s2( + "RuntimeScheduler::executeNowOnTheSameThread callback"); + runtimeAccessRequests_ -= 1; isSynchronous_ = true; callback(runtime); @@ -95,6 +104,8 @@ void RuntimeScheduler::executeNowOnTheSameThread(RawCallback callback) { } void RuntimeScheduler::callExpiredTasks(jsi::Runtime& runtime) { + SystraceSection s("RuntimeScheduler::callExpiredTasks"); + auto previousPriority = currentPriority_; try { while (!taskQueue_.empty()) { @@ -128,6 +139,8 @@ void RuntimeScheduler::scheduleWorkLoopIfNecessary() const { } void RuntimeScheduler::startWorkLoop(jsi::Runtime& runtime) const { + SystraceSection s("RuntimeScheduler::startWorkLoop"); + auto previousPriority = currentPriority_; isPerformingWork_ = true; try { @@ -155,6 +168,13 @@ void RuntimeScheduler::executeTask( jsi::Runtime& runtime, std::shared_ptr task, bool didUserCallbackTimeout) const { + SystraceSection s( + "RuntimeScheduler::executeTask", + "priority", + serialize(task->priority), + "didUserCallbackTimeout", + didUserCallbackTimeout); + currentPriority_ = task->priority; auto result = task->execute(runtime, didUserCallbackTimeout);