From f1e292b9c1e349ce7df1404dacbaf1c1195d296f Mon Sep 17 00:00:00 2001 From: Ramanpreet Nara Date: Fri, 6 Nov 2020 13:08:51 -0800 Subject: [PATCH] Set up experiment to dispatch promise methods asynchronously to NativeModules thread Summary: TurboModule methods that return promises are synchronously run on the JavaScript thread. Back in D22489338 (https://github.com/facebook/react-native/commit/9c35b5b8c4710dfe6a4b689a5565aa78ae5b37d3), we wrote code to make them dispatch on the NativeModules thread. That code, however, was just left disabled. In this diff, I wire up the TurboModules infra to a MobileConfig, which should allow us to assess the performance impact of async dispatch of promise methods to the NativeModules thread in production, before we roll it out more widely. Changelog: [Internal] NOTE: This diff was reverted, beacuse we landed it it without D24685387. Reviewed By: ejanzer Differential Revision: D24787573 fbshipit-source-id: 324bd22ce79c2c16c7f7b6996496d255a2c6256e --- .../main/java/com/facebook/react/config/ReactFeatureFlags.java | 3 +++ .../facebook/react/turbomodule/core/TurboModuleManager.java | 3 ++- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/ReactAndroid/src/main/java/com/facebook/react/config/ReactFeatureFlags.java b/ReactAndroid/src/main/java/com/facebook/react/config/ReactFeatureFlags.java index 04a8a88eb5c..9d8f1c4859a 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/config/ReactFeatureFlags.java +++ b/ReactAndroid/src/main/java/com/facebook/react/config/ReactFeatureFlags.java @@ -23,6 +23,9 @@ public class ReactFeatureFlags { */ public static volatile boolean useTurboModules = false; + /** Should we dispatch TurboModule methods with promise returns to the NativeModules thread? */ + public static volatile boolean enableTurboModulePromiseAsyncDispatch = false; + /* * This feature flag enables logs for Fabric */ diff --git a/ReactAndroid/src/main/java/com/facebook/react/turbomodule/core/TurboModuleManager.java b/ReactAndroid/src/main/java/com/facebook/react/turbomodule/core/TurboModuleManager.java index e6e6fcce69e..8303d153f61 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/turbomodule/core/TurboModuleManager.java +++ b/ReactAndroid/src/main/java/com/facebook/react/turbomodule/core/TurboModuleManager.java @@ -17,6 +17,7 @@ import com.facebook.react.bridge.CxxModuleWrapper; import com.facebook.react.bridge.JSIModule; import com.facebook.react.bridge.JavaScriptContextHolder; import com.facebook.react.bridge.NativeModule; +import com.facebook.react.config.ReactFeatureFlags; import com.facebook.react.turbomodule.core.interfaces.CallInvokerHolder; import com.facebook.react.turbomodule.core.interfaces.TurboModule; import com.facebook.react.turbomodule.core.interfaces.TurboModuleRegistry; @@ -60,7 +61,7 @@ public class TurboModuleManager implements JSIModule, TurboModuleRegistry { (CallInvokerHolderImpl) jsCallInvokerHolder, (CallInvokerHolderImpl) nativeCallInvokerHolder, delegate, - false); + ReactFeatureFlags.enableTurboModulePromiseAsyncDispatch); installJSIBindings(); mEagerInitModuleNames =