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
This commit is contained in:
Phillip Pan
2023-10-10 22:39:59 -07:00
committed by Facebook GitHub Bot
parent b41a2f92ae
commit 2e16785424
4 changed files with 32 additions and 13 deletions
@@ -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<String> 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() {}
@@ -70,5 +70,9 @@ public abstract class TurboModuleManagerDelegate {
return false;
}
public boolean unstable_enableSyncVoidMethods() {
return false;
}
protected synchronized void maybeLoadOtherSoLibraries() {}
}
@@ -128,8 +128,8 @@ void TurboModuleManager::registerNatives() {
});
}
TurboModuleProviderFunctionType
TurboModuleManager::createTurboModuleProvider() {
TurboModuleProviderFunctionType TurboModuleManager::createTurboModuleProvider(
bool enableSyncVoidMethods) {
return [turboModuleCache_ = std::weak_ptr<ModuleCache>(turboModuleCache_),
jsCallInvoker_ = std::weak_ptr<CallInvoker>(jsCallInvoker_),
nativeMethodCallInvoker_ =
@@ -209,8 +209,8 @@ TurboModuleManager::createTurboModuleProvider() {
};
}
TurboModuleProviderFunctionType
TurboModuleManager::createLegacyModuleProvider() {
TurboModuleProviderFunctionType TurboModuleManager::createLegacyModuleProvider(
bool enableSyncVoidMethods) {
return [legacyModuleCache_ = std::weak_ptr<ModuleCache>(legacyModuleCache_),
jsCallInvoker_ = std::weak_ptr<CallInvoker>(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));
});
}
@@ -56,7 +56,9 @@ class TurboModuleManager : public jni::HybridClass<TurboModuleManager> {
std::shared_ptr<ModuleCache> turboModuleCache_;
std::shared_ptr<ModuleCache> legacyModuleCache_;
void installJSIBindings(bool shouldCreateLegacyModules);
void installJSIBindings(
bool shouldCreateLegacyModules,
bool enableSyncVoidMethods);
explicit TurboModuleManager(
jni::alias_ref<TurboModuleManager::jhybridobject> jThis,
RuntimeExecutor runtimeExecutor,
@@ -64,8 +66,10 @@ class TurboModuleManager : public jni::HybridClass<TurboModuleManager> {
std::shared_ptr<NativeMethodCallInvoker> nativeMethodCallInvoker,
jni::alias_ref<TurboModuleManagerDelegate::javaobject> delegate);
TurboModuleProviderFunctionType createTurboModuleProvider();
TurboModuleProviderFunctionType createLegacyModuleProvider();
TurboModuleProviderFunctionType createTurboModuleProvider(
bool enableSyncVoidMethods);
TurboModuleProviderFunctionType createLegacyModuleProvider(
bool enableSyncVoidMethods);
};
} // namespace facebook::react