From c43bd7a73a210ce9514ddf1fe8af33d9347f5d16 Mon Sep 17 00:00:00 2001 From: Samuel Susla Date: Fri, 26 May 2023 00:08:59 -0700 Subject: [PATCH] Do not use setNativeState in RuntimeScheduler::Task Summary: changelog: [internal] `setNativeState` is not implemented in JSC. Let's stick to host objects for now. Reviewed By: cipolleschi Differential Revision: D46193786 fbshipit-source-id: 9d36801bb9faa5c144a461bcbe623762bf6947b1 --- .../Libraries/AppDelegate/RCTAppDelegate.h | 5 +++++ .../Libraries/AppDelegate/RCTAppDelegate.mm | 10 +++++++++- .../react/renderer/runtimescheduler/primitives.h | 8 +++++++- 3 files changed, 21 insertions(+), 2 deletions(-) diff --git a/packages/react-native/Libraries/AppDelegate/RCTAppDelegate.h b/packages/react-native/Libraries/AppDelegate/RCTAppDelegate.h index 18c318408d8..a5bd94cb730 100644 --- a/packages/react-native/Libraries/AppDelegate/RCTAppDelegate.h +++ b/packages/react-native/Libraries/AppDelegate/RCTAppDelegate.h @@ -94,6 +94,11 @@ */ - (UIViewController *)createRootViewController; +/// This method controls whether the App will use RuntimeScheduler. Only applicable in the legacy architecture. +/// +/// @return: `YES` to use RuntimeScheduler, `NO` to use JavaScript scheduler. The default value is `YES`. +- (BOOL)runtimeSchedulerEnabled; + #if RCT_NEW_ARCH_ENABLED /// The TurboModule manager diff --git a/packages/react-native/Libraries/AppDelegate/RCTAppDelegate.mm b/packages/react-native/Libraries/AppDelegate/RCTAppDelegate.mm index ca6fff5fc41..7be91c312e9 100644 --- a/packages/react-native/Libraries/AppDelegate/RCTAppDelegate.mm +++ b/packages/react-native/Libraries/AppDelegate/RCTAppDelegate.mm @@ -134,11 +134,16 @@ static NSString *const kRNConcurrentRoot = @"concurrentRoot"; return [UIViewController new]; } +- (BOOL)runtimeSchedulerEnabled +{ + return YES; +} + #pragma mark - RCTCxxBridgeDelegate - (std::unique_ptr)jsExecutorFactoryForBridge:(RCTBridge *)bridge { - _runtimeScheduler = std::make_shared(RCTRuntimeExecutorFromBridge(bridge)); #if RCT_NEW_ARCH_ENABLED + _runtimeScheduler = std::make_shared(RCTRuntimeExecutorFromBridge(bridge)); std::shared_ptr callInvoker = std::make_shared(_runtimeScheduler); self.turboModuleManager = [[RCTTurboModuleManager alloc] initWithBridge:bridge delegate:self jsInvoker:callInvoker]; @@ -146,6 +151,9 @@ static NSString *const kRNConcurrentRoot = @"concurrentRoot"; _contextContainer->insert("RuntimeScheduler", _runtimeScheduler); return RCTAppSetupDefaultJsExecutorFactory(bridge, self.turboModuleManager, _runtimeScheduler); #else + if (self.runtimeSchedulerEnabled) { + _runtimeScheduler = std::make_shared(RCTRuntimeExecutorFromBridge(bridge)); + } return RCTAppSetupJsExecutorFactoryForOldArch(bridge, _runtimeScheduler); #endif } diff --git a/packages/react-native/ReactCommon/react/renderer/runtimescheduler/primitives.h b/packages/react-native/ReactCommon/react/renderer/runtimescheduler/primitives.h index b3db7b49b4b..716004dd370 100644 --- a/packages/react-native/ReactCommon/react/renderer/runtimescheduler/primitives.h +++ b/packages/react-native/ReactCommon/react/renderer/runtimescheduler/primitives.h @@ -19,11 +19,17 @@ struct TaskWrapper : public jsi::HostObject { std::shared_ptr task; }; +struct TaskWrapper : public jsi::HostObject { + TaskWrapper(std::shared_ptr const &task) : task(task) {} + + std::shared_ptr task; +}; + inline static jsi::Value valueFromTask( jsi::Runtime &runtime, std::shared_ptr task) { return jsi::Object::createFromHostObject( - runtime, std::make_shared(task)); + runtime, std::make_shared(task)); } inline static std::shared_ptr taskFromValue(