From 2e16785424ef098d0e659ef924c3fea5793a09c3 Mon Sep 17 00:00:00 2001 From: Phillip Pan Date: Tue, 10 Oct 2023 22:39:59 -0700 Subject: [PATCH] introduce unstable_enableSyncVoidMethods config (#39989) Summary: Pull Request resolved: https://github.com/facebook/react-native/pull/39989 Changelog: [Internal] we need some configuration path to turn on the sync void method execution behavior, doing that here Reviewed By: luluwu2032 Differential Revision: D50028200 fbshipit-source-id: a2501b622685e4bafa5e2a5031275cc8bc5050b7 --- .../turbomodule/core/TurboModuleManager.java | 9 ++++++-- .../core/TurboModuleManagerDelegate.java | 4 ++++ .../ReactCommon/TurboModuleManager.cpp | 22 ++++++++++++------- .../ReactCommon/TurboModuleManager.h | 10 ++++++--- 4 files changed, 32 insertions(+), 13 deletions(-) diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/internal/turbomodule/core/TurboModuleManager.java b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/internal/turbomodule/core/TurboModuleManager.java index aa22d1ec095..d35f956b3b3 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/internal/turbomodule/core/TurboModuleManager.java +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/internal/turbomodule/core/TurboModuleManager.java @@ -71,7 +71,7 @@ public class TurboModuleManager implements JSIModule, TurboModuleRegistry { (CallInvokerHolderImpl) jsCallInvokerHolder, (NativeMethodCallInvokerHolderImpl) nativeMethodCallInvokerHolder, delegate); - installJSIBindings(shouldEnableLegacyModuleInterop()); + installJSIBindings(shouldEnableLegacyModuleInterop(), enableSyncVoidMethods()); mEagerInitModuleNames = delegate == null ? new ArrayList<>() : delegate.getEagerInitModuleNames(); @@ -116,6 +116,10 @@ public class TurboModuleManager implements JSIModule, TurboModuleRegistry { && mDelegate.unstable_shouldRouteTurboModulesThroughLegacyModuleInterop(); } + private boolean enableSyncVoidMethods() { + return mDelegate != null && mDelegate.unstable_enableSyncVoidMethods(); + } + @Override @NonNull public List getEagerInitModuleNames() { @@ -417,7 +421,8 @@ public class TurboModuleManager implements JSIModule, TurboModuleRegistry { NativeMethodCallInvokerHolderImpl nativeMethodCallInvoker, TurboModuleManagerDelegate tmmDelegate); - private native void installJSIBindings(boolean shouldCreateLegacyModules); + private native void installJSIBindings( + boolean shouldCreateLegacyModules, boolean enableSyncVoidMethods); @Override public void initialize() {} diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/internal/turbomodule/core/TurboModuleManagerDelegate.java b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/internal/turbomodule/core/TurboModuleManagerDelegate.java index fecd061bd4b..da493a14fd3 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/internal/turbomodule/core/TurboModuleManagerDelegate.java +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/internal/turbomodule/core/TurboModuleManagerDelegate.java @@ -70,5 +70,9 @@ public abstract class TurboModuleManagerDelegate { return false; } + public boolean unstable_enableSyncVoidMethods() { + return false; + } + protected synchronized void maybeLoadOtherSoLibraries() {} } diff --git a/packages/react-native/ReactAndroid/src/main/jni/react/turbomodule/ReactCommon/TurboModuleManager.cpp b/packages/react-native/ReactAndroid/src/main/jni/react/turbomodule/ReactCommon/TurboModuleManager.cpp index 9d6e57dc5f0..293ba705abd 100644 --- a/packages/react-native/ReactAndroid/src/main/jni/react/turbomodule/ReactCommon/TurboModuleManager.cpp +++ b/packages/react-native/ReactAndroid/src/main/jni/react/turbomodule/ReactCommon/TurboModuleManager.cpp @@ -128,8 +128,8 @@ void TurboModuleManager::registerNatives() { }); } -TurboModuleProviderFunctionType -TurboModuleManager::createTurboModuleProvider() { +TurboModuleProviderFunctionType TurboModuleManager::createTurboModuleProvider( + bool enableSyncVoidMethods) { return [turboModuleCache_ = std::weak_ptr(turboModuleCache_), jsCallInvoker_ = std::weak_ptr(jsCallInvoker_), nativeMethodCallInvoker_ = @@ -209,8 +209,8 @@ TurboModuleManager::createTurboModuleProvider() { }; } -TurboModuleProviderFunctionType -TurboModuleManager::createLegacyModuleProvider() { +TurboModuleProviderFunctionType TurboModuleManager::createLegacyModuleProvider( + bool enableSyncVoidMethods) { return [legacyModuleCache_ = std::weak_ptr(legacyModuleCache_), jsCallInvoker_ = std::weak_ptr(jsCallInvoker_), nativeMethodCallInvoker_ = @@ -302,21 +302,27 @@ TurboModuleManager::createLegacyModuleProvider() { }; } -void TurboModuleManager::installJSIBindings(bool shouldCreateLegacyModules) { +void TurboModuleManager::installJSIBindings( + bool shouldCreateLegacyModules, + bool enableSyncVoidMethods) { if (!jsCallInvoker_) { return; // Runtime doesn't exist when attached to Chrome debugger. } bool isInteropLayerDisabled = !shouldCreateLegacyModules; - runtimeExecutor_([this, isInteropLayerDisabled](jsi::Runtime& runtime) { + runtimeExecutor_([this, isInteropLayerDisabled, enableSyncVoidMethods]( + jsi::Runtime& runtime) { if (isInteropLayerDisabled) { - TurboModuleBinding::install(runtime, createTurboModuleProvider()); + TurboModuleBinding::install( + runtime, createTurboModuleProvider(enableSyncVoidMethods)); return; } TurboModuleBinding::install( - runtime, createTurboModuleProvider(), createLegacyModuleProvider()); + runtime, + createTurboModuleProvider(enableSyncVoidMethods), + createLegacyModuleProvider(enableSyncVoidMethods)); }); } diff --git a/packages/react-native/ReactAndroid/src/main/jni/react/turbomodule/ReactCommon/TurboModuleManager.h b/packages/react-native/ReactAndroid/src/main/jni/react/turbomodule/ReactCommon/TurboModuleManager.h index b2d7b5909d5..fce31e012d8 100644 --- a/packages/react-native/ReactAndroid/src/main/jni/react/turbomodule/ReactCommon/TurboModuleManager.h +++ b/packages/react-native/ReactAndroid/src/main/jni/react/turbomodule/ReactCommon/TurboModuleManager.h @@ -56,7 +56,9 @@ class TurboModuleManager : public jni::HybridClass { std::shared_ptr turboModuleCache_; std::shared_ptr legacyModuleCache_; - void installJSIBindings(bool shouldCreateLegacyModules); + void installJSIBindings( + bool shouldCreateLegacyModules, + bool enableSyncVoidMethods); explicit TurboModuleManager( jni::alias_ref jThis, RuntimeExecutor runtimeExecutor, @@ -64,8 +66,10 @@ class TurboModuleManager : public jni::HybridClass { std::shared_ptr nativeMethodCallInvoker, jni::alias_ref delegate); - TurboModuleProviderFunctionType createTurboModuleProvider(); - TurboModuleProviderFunctionType createLegacyModuleProvider(); + TurboModuleProviderFunctionType createTurboModuleProvider( + bool enableSyncVoidMethods); + TurboModuleProviderFunctionType createLegacyModuleProvider( + bool enableSyncVoidMethods); }; } // namespace facebook::react