From d48c2be46ff76a403a879917bac5ca63e9925684 Mon Sep 17 00:00:00 2001 From: Ramanpreet Nara Date: Fri, 23 Apr 2021 18:14:35 -0700 Subject: [PATCH] Wire up RuntimeExecutorFlushing to MobileConfig Summary: With D27975839, RuntimeExecutor will be able to start flushing the queued up NativeModule calls in every call from C++ -> JavaScript. We're going to test this feature to measure its impact. In this diff, I wire up the the MobileConfig to ReactFeatureFlags. Changelog: [Internal] Reviewed By: JoshuaGross Differential Revision: D27978112 fbshipit-source-id: 47e1e74398c62755bb0fdc6b54b7fd3aa47eb877 --- .../react/bridge/CatalystInstanceImpl.java | 2 +- .../react/config/ReactFeatureFlags.java | 20 +++++++++++++++++++ 2 files changed, 21 insertions(+), 1 deletion(-) diff --git a/ReactAndroid/src/main/java/com/facebook/react/bridge/CatalystInstanceImpl.java b/ReactAndroid/src/main/java/com/facebook/react/bridge/CatalystInstanceImpl.java index a75c7d39100..c0d8d225e31 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/bridge/CatalystInstanceImpl.java +++ b/ReactAndroid/src/main/java/com/facebook/react/bridge/CatalystInstanceImpl.java @@ -551,7 +551,7 @@ public class CatalystInstanceImpl implements CatalystInstance { @Override public RuntimeExecutor getRuntimeExecutor() { - return getRuntimeExecutor(false); + return getRuntimeExecutor(ReactFeatureFlags.enableRuntimeExecutorFlushing()); } public native RuntimeExecutor getRuntimeExecutor(boolean shouldFlush); 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 8416fe580ff..23668c8a3ff 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/config/ReactFeatureFlags.java +++ b/ReactAndroid/src/main/java/com/facebook/react/config/ReactFeatureFlags.java @@ -72,4 +72,24 @@ public class ReactFeatureFlags { /** Enables MapBuffer Serialization */ public static boolean mapBufferSerializationEnabled = false; + + /** An interface used to compute flags on demand. */ + public interface FlagProvider { + boolean get(); + } + + /** Should the RuntimeExecutor call JSIExecutor::flush()? */ + private static FlagProvider enableRuntimeExecutorFlushingProvider = null; + + public static void setEnableRuntimeExecutorFlushingFlagProvider(FlagProvider provider) { + enableRuntimeExecutorFlushingProvider = provider; + } + + public static boolean enableRuntimeExecutorFlushing() { + if (enableRuntimeExecutorFlushingProvider != null) { + return enableRuntimeExecutorFlushingProvider.get(); + } + + return false; + } }