Ship bridge RuntimeExecutor JSIExecutor flushing

Summary:
The RuntimeExecutor that Fabric gets from the bridge doesn't call JSIExecutor::flush(). In the legacy NativeModule system, we're supposed to flush the queue of NativeModule calls after every call into JavaScript. The lack of this flushing means that we execute NativeModule calls less frequently with Fabric enabled, and TurboModules disabled. It also means that [the microtask checkpoints we placed inside JSIExecutor::flush()](https://www.internalfb.com/code/fbsource/[62f69606ae81530f7d6f0cba8466ac604934c901]/xplat/js/react-native-github/ReactCommon/jsiexecutor/jsireact/JSIExecutor.cpp?lines=427%2C445) won't be executed as frequently, with Fabric enabled.

Changelog: [Android][Fixed] - Flush NativeModule calls with Fabric on Android, on every Native -> JS call.

Reviewed By: JoshuaGross, mdvacca

Differential Revision: D28620982

fbshipit-source-id: ae4d1c16c62b6d4a5089e63104ad97f4ed44c440
This commit is contained in:
Ramanpreet Nara
2021-06-02 16:54:33 -07:00
committed by Facebook GitHub Bot
parent 502b819049
commit 281daf1222
6 changed files with 11 additions and 41 deletions
@@ -549,12 +549,7 @@ public class CatalystInstanceImpl implements CatalystInstance {
return mJavaScriptContextHolder;
}
@Override
public RuntimeExecutor getRuntimeExecutor() {
return getRuntimeExecutor(ReactFeatureFlags.enableRuntimeExecutorFlushing());
}
public native RuntimeExecutor getRuntimeExecutor(boolean shouldFlush);
public native RuntimeExecutor getRuntimeExecutor();
@Override
public void addJSIModules(List<JSIModuleSpec> jsiModules) {
@@ -18,12 +18,6 @@ import com.facebook.proguard.annotations.DoNotStripAny;
*/
@DoNotStripAny
public class ReactFeatureFlags {
/** An interface used to compute flags on demand. */
public interface FlagProvider {
boolean get();
}
/**
* Should this application use TurboModules? If yes, then any module that inherits {@link
* com.facebook.react.turbomodule.core.interfaces.TurboModule} will NOT be passed in to C++
@@ -59,13 +53,6 @@ public class ReactFeatureFlags {
/** Feature flag to configure eager initialization of MapBuffer So file */
public static boolean enableEagerInitializeMapBufferSoFile = false;
/** Should the RuntimeExecutor call JSIExecutor::flush()? */
private static FlagProvider enableRuntimeExecutorFlushingProvider = null;
public static void setEnableRuntimeExecutorFlushingFlagProvider(FlagProvider provider) {
enableRuntimeExecutorFlushingProvider = provider;
}
private static boolean mapBufferSerializationEnabled = false;
/** Enables or disables MapBuffer Serialization */
@@ -77,14 +64,6 @@ public class ReactFeatureFlags {
return mapBufferSerializationEnabled;
}
public static boolean enableRuntimeExecutorFlushing() {
if (enableRuntimeExecutorFlushingProvider != null) {
return enableRuntimeExecutorFlushingProvider.get();
}
return false;
}
/** Enables Fabric for LogBox */
public static boolean enableFabricInLogBox = false;