Refactor react initialization to use FabricUIManagerProvider instead of JSIModule (#41313)

Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/41313

Refactor ReactNativeHost, ReactInstanceManager & Builder of `react-native-github` to use the new way of fabric initialization using the newly added class `FabricUIManagerProviderImpl.java` instead of JSIModule and thereby also refactoring the call site in FbReactInstanceHolder.java

Changelog:
[Internal] internal

Reviewed By: philIip

Differential Revision: D50783751

fbshipit-source-id: 0a9d3412bc995834cafa8fbaec2ff17e321d9906
This commit is contained in:
Arushi Kesarwani
2023-11-10 02:30:18 -08:00
committed by Facebook GitHub Bot
parent c2ac0cc72a
commit ea622de4e1
3 changed files with 25 additions and 46 deletions
@@ -21,14 +21,8 @@ import com.facebook.infer.annotation.Assertions;
import com.facebook.react.ReactInstanceManager;
import com.facebook.react.ReactInstanceManagerBuilder;
import com.facebook.react.ReactRootView;
import com.facebook.react.bridge.JSIModulePackage;
import com.facebook.react.bridge.JSIModuleProvider;
import com.facebook.react.bridge.JSIModuleSpec;
import com.facebook.react.bridge.JSIModuleType;
import com.facebook.react.bridge.JavaScriptContextHolder;
import com.facebook.react.bridge.ReactApplicationContext;
import com.facebook.react.bridge.ReactContext;
import com.facebook.react.bridge.UIManager;
import com.facebook.react.common.LifecycleState;
import com.facebook.react.modules.core.DefaultHardwareBackBtnHandler;
import com.facebook.react.modules.core.PermissionAwareActivity;
@@ -37,8 +31,6 @@ import com.facebook.react.shell.MainReactPackage;
import com.facebook.react.testing.idledetection.ReactBridgeIdleSignaler;
import com.facebook.react.testing.idledetection.ReactIdleDetectionUtil;
import com.facebook.react.uimanager.ViewManagerRegistry;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.TimeUnit;
@@ -244,44 +236,16 @@ public class ReactAppTestActivity extends FragmentActivity
.setUseDeveloperSupport(useDevSupport)
.setBridgeIdleDebugListener(mBridgeIdleSignaler)
.setInitialLifecycleState(mLifecycleState)
.setJSIModulesPackage(
new JSIModulePackage() {
@Override
public List<JSIModuleSpec> getJSIModules(
final ReactApplicationContext reactApplicationContext,
final JavaScriptContextHolder jsContext) {
List<JSIModuleSpec> packages = new ArrayList<>();
packages.add(
new JSIModuleSpec() {
@Override
public JSIModuleType getJSIModuleType() {
return JSIModuleType.UIManager;
}
.setUIManagerProvider(
(ReactApplicationContext reactApplicationContext) -> {
ViewManagerRegistry viewManagerRegistry =
new ViewManagerRegistry(
mReactInstanceManager.getOrCreateViewManagers(reactApplicationContext));
@Override
public JSIModuleProvider getJSIModuleProvider() {
return new JSIModuleProvider() {
@Override
public UIManager get() {
ViewManagerRegistry viewManagerRegistry =
new ViewManagerRegistry(
mReactInstanceManager.getOrCreateViewManagers(
reactApplicationContext));
FabricUIManagerFactory factory = spec.getFabricUIManagerFactory();
return factory != null
? factory.getFabricUIManager(
reactApplicationContext, viewManagerRegistry)
: null;
}
};
}
});
if (spec.getJSIModuleBuilder() != null) {
packages.addAll(spec.getJSIModuleBuilder().build(reactApplicationContext));
}
return packages;
}
FabricUIManagerFactory factory = spec.getFabricUIManagerFactory();
return factory != null
? factory.getFabricUIManager(reactApplicationContext, viewManagerRegistry)
: null;
});
final CountDownLatch latch = new CountDownLatch(1);
@@ -71,6 +71,7 @@ import com.facebook.react.bridge.ReactMarkerConstants;
import com.facebook.react.bridge.ReactNoCrashSoftException;
import com.facebook.react.bridge.ReactSoftExceptionLogger;
import com.facebook.react.bridge.UIManager;
import com.facebook.react.bridge.UIManagerProvider;
import com.facebook.react.bridge.UiThreadUtil;
import com.facebook.react.bridge.WritableNativeMap;
import com.facebook.react.bridge.queue.ReactQueueConfigurationSpec;
@@ -186,6 +187,7 @@ public class ReactInstanceManager {
private final MemoryPressureRouter mMemoryPressureRouter;
private final @Nullable JSExceptionHandler mJSExceptionHandler;
private final @Nullable JSIModulePackage mJSIModulePackage;
private final @Nullable UIManagerProvider mUIManagerProvider;
private final @Nullable ReactPackageTurboModuleManagerDelegate.Builder mTMMDelegateBuilder;
private List<ViewManager> mViewManagers;
private boolean mUseFallbackBundle = true;
@@ -234,6 +236,7 @@ public class ReactInstanceManager {
int minNumShakes,
int minTimeLeftInFrameForNonBatchedOperationMs,
@Nullable JSIModulePackage jsiModulePackage,
@Nullable UIManagerProvider uIManagerProvider,
@Nullable Map<String, RequestHandler> customPackagerCommandHandlers,
@Nullable ReactPackageTurboModuleManagerDelegate.Builder tmmDelegateBuilder,
@Nullable SurfaceDelegateFactory surfaceDelegateFactory,
@@ -294,6 +297,7 @@ public class ReactInstanceManager {
mPackages.addAll(packages);
}
mJSIModulePackage = jsiModulePackage;
mUIManagerProvider = uIManagerProvider;
// Instantiate ReactChoreographer in UI thread.
ReactChoreographer.initialize(
@@ -1389,7 +1393,7 @@ public class ReactInstanceManager {
catalystInstance.getJSCallInvokerHolder(),
catalystInstance.getNativeMethodCallInvokerHolder());
catalystInstance.setTurboModuleManager(turboModuleManager);
catalystInstance.setTurboModuleRegistry(turboModuleManager);
// Eagerly initialize TurboModules
for (String moduleName : turboModuleManager.getEagerInitModuleNames()) {
@@ -1404,6 +1408,9 @@ public class ReactInstanceManager {
}
if (ReactFeatureFlags.enableFabricRenderer) {
catalystInstance.getJSIModule(JSIModuleType.UIManager);
if (mUIManagerProvider != null) {
catalystInstance.setFabricUIManager(mUIManagerProvider.createUIManager(reactContext));
}
}
if (mBridgeIdleDebugListener != null) {
catalystInstance.addBridgeIdleDebugListener(mBridgeIdleDebugListener);
@@ -23,6 +23,7 @@ import com.facebook.react.bridge.JSExceptionHandler;
import com.facebook.react.bridge.JSIModulePackage;
import com.facebook.react.bridge.JavaScriptExecutorFactory;
import com.facebook.react.bridge.NotThreadSafeBridgeIdleDebugListener;
import com.facebook.react.bridge.UIManagerProvider;
import com.facebook.react.common.LifecycleState;
import com.facebook.react.common.SurfaceDelegateFactory;
import com.facebook.react.common.annotations.StableReactNativeAPI;
@@ -68,6 +69,7 @@ public class ReactInstanceManagerBuilder {
private int mMinNumShakes = 1;
private int mMinTimeLeftInFrameForNonBatchedOperationMs = -1;
private @Nullable JSIModulePackage mJSIModulesPackage;
private @Nullable UIManagerProvider mUIManagerProvider;
private @Nullable Map<String, RequestHandler> mCustomPackagerCommandHandlers;
private @Nullable ReactPackageTurboModuleManagerDelegate.Builder mTMMDelegateBuilder;
private @Nullable SurfaceDelegateFactory mSurfaceDelegateFactory;
@@ -90,6 +92,11 @@ public class ReactInstanceManagerBuilder {
return this;
}
public ReactInstanceManagerBuilder setUIManagerProvider(UIManagerProvider uIManagerProvider) {
mUIManagerProvider = uIManagerProvider;
return this;
}
/**
* Name of the JS bundle file to be loaded from application's raw assets. Example: {@code
* "index.android.js"}
@@ -355,6 +362,7 @@ public class ReactInstanceManagerBuilder {
mMinNumShakes,
mMinTimeLeftInFrameForNonBatchedOperationMs,
mJSIModulesPackage,
mUIManagerProvider,
mCustomPackagerCommandHandlers,
mTMMDelegateBuilder,
mSurfaceDelegateFactory,