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 c6de0646a2b..387b9bd44c0 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/config/ReactFeatureFlags.java +++ b/ReactAndroid/src/main/java/com/facebook/react/config/ReactFeatureFlags.java @@ -100,4 +100,7 @@ public class ReactFeatureFlags { /** Enables the usage of an experimental optimized iterator for ReadableNativeMaps. */ public static boolean enableExperimentalReadableNativeMapIterator = false; + + /** Enables Static ViewConfig in RN Android native code. */ + public static boolean enableExperimentalStaticViewConfigs = false; } diff --git a/ReactAndroid/src/main/java/com/facebook/react/uimanager/UIManagerModule.java b/ReactAndroid/src/main/java/com/facebook/react/uimanager/UIManagerModule.java index 2f2e8257578..9d982ee29d5 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/uimanager/UIManagerModule.java +++ b/ReactAndroid/src/main/java/com/facebook/react/uimanager/UIManagerModule.java @@ -39,6 +39,7 @@ import com.facebook.react.bridge.UiThreadUtil; import com.facebook.react.bridge.WritableMap; import com.facebook.react.common.MapBuilder; import com.facebook.react.common.ReactConstants; +import com.facebook.react.config.ReactFeatureFlags; import com.facebook.react.module.annotations.ReactModule; import com.facebook.react.uimanager.common.ViewUtil; import com.facebook.react.uimanager.debug.NotThreadSafeViewHierarchyUpdateDebugListener; @@ -297,6 +298,15 @@ public class UIManagerModule extends ReactContextBaseJavaModule */ @Deprecated public void preComputeConstantsForViewManager(List viewManagerNames) { + // TODO T81145457 - Implement pre-initialization of ViewManagers in Fabric Android + if (ReactFeatureFlags.enableExperimentalStaticViewConfigs) { + preInitializeViewManagers(viewManagerNames); + // When Static view configs are enabled it is not necessary to pre-compute the constants for + // viewManagers, although the pre-initialization of viewManager objects is still necessary + // for performance reasons. + return; + } + Map constantsMap = new ArrayMap<>(); for (String viewManagerName : viewManagerNames) { WritableMap constants = computeConstantsForViewManager(viewManagerName); @@ -315,6 +325,12 @@ public class UIManagerModule extends ReactContextBaseJavaModule mViewManagerConstantsCache = Collections.unmodifiableMap(constantsMap); } + private void preInitializeViewManagers(List viewManagerNames) { + for (String viewManagerName : viewManagerNames) { + mUIImplementation.resolveViewManager(viewManagerName); + } + } + @ReactMethod(isBlockingSynchronousMethod = true) public @Nullable WritableMap getConstantsForViewManager(@Nullable String viewManagerName) { if (mViewManagerConstantsCache != null