diff --git a/packages/react-native/ReactAndroid/api/ReactAndroid.api b/packages/react-native/ReactAndroid/api/ReactAndroid.api index db1c2680a9d..47021687544 100644 --- a/packages/react-native/ReactAndroid/api/ReactAndroid.api +++ b/packages/react-native/ReactAndroid/api/ReactAndroid.api @@ -4805,6 +4805,8 @@ public abstract interface class com/facebook/react/uimanager/UIManagerModule$Cus public class com/facebook/react/uimanager/UIManagerModuleConstantsHelper { public fun ()V + public static fun createConstants (Ljava/util/List;Ljava/util/Map;Ljava/util/Map;)Ljava/util/Map; + public static fun createConstantsForViewManager (Lcom/facebook/react/uimanager/ViewManager;Ljava/util/Map;Ljava/util/Map;Ljava/util/Map;Ljava/util/Map;)Ljava/util/Map; public static fun getDefaultExportableEventTypes ()Ljava/util/Map; } diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/runtime/ReactInstance.java b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/runtime/ReactInstance.java index a5f1686ff85..51f8db33b0f 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/runtime/ReactInstance.java +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/runtime/ReactInstance.java @@ -7,6 +7,9 @@ package com.facebook.react.runtime; +import static com.facebook.react.bridge.ReactMarkerConstants.CREATE_UI_MANAGER_MODULE_CONSTANTS_END; +import static com.facebook.react.bridge.ReactMarkerConstants.CREATE_UI_MANAGER_MODULE_CONSTANTS_START; + import android.content.res.AssetManager; import android.view.View; import com.facebook.common.logging.FLog; @@ -29,6 +32,7 @@ import com.facebook.react.bridge.JavaScriptContextHolder; import com.facebook.react.bridge.NativeArray; import com.facebook.react.bridge.NativeMap; import com.facebook.react.bridge.NativeModule; +import com.facebook.react.bridge.ReactMarker; import com.facebook.react.bridge.ReactNoCrashSoftException; import com.facebook.react.bridge.ReactSoftExceptionLogger; import com.facebook.react.bridge.RuntimeExecutor; @@ -60,7 +64,6 @@ import com.facebook.react.uimanager.ComponentNameResolverBinding; import com.facebook.react.uimanager.DisplayMetricsHolder; import com.facebook.react.uimanager.IllegalViewOperationException; import com.facebook.react.uimanager.UIConstantsProviderBinding; -import com.facebook.react.uimanager.UIManagerModule; import com.facebook.react.uimanager.UIManagerModuleConstantsHelper; import com.facebook.react.uimanager.ViewManager; import com.facebook.react.uimanager.ViewManagerRegistry; @@ -68,6 +71,7 @@ import com.facebook.react.uimanager.ViewManagerResolver; import com.facebook.react.uimanager.events.EventDispatcher; import com.facebook.soloader.SoLoader; import com.facebook.systrace.Systrace; +import com.facebook.systrace.SystraceMessage; import java.util.ArrayList; import java.util.Collection; import java.util.HashMap; @@ -242,15 +246,13 @@ final class ReactInstance { if (viewManager == null) { return null; } - return (NativeMap) - UIManagerModule.getConstantsForViewManager(viewManager, customDirectEvents); + return getConstantsForViewManager(viewManager, customDirectEvents); }, () -> { List viewManagers = new ArrayList<>(mViewManagerResolver.getEagerViewManagerMap().values()); - Map constants = - UIManagerModule.createConstants(viewManagers, null, customDirectEvents); + Map constants = createConstants(viewManagers, null, customDirectEvents); Collection lazyViewManagers = mViewManagerResolver.getLazyViewManagerNames(); if (lazyViewManagers.size() > 0) { @@ -287,6 +289,40 @@ final class ReactInstance { Systrace.endSection(Systrace.TRACE_TAG_REACT_JAVA_BRIDGE); } + private static Map createConstants( + List viewManagers, + @Nullable Map customBubblingEvents, + @Nullable Map customDirectEvents) { + ReactMarker.logMarker(CREATE_UI_MANAGER_MODULE_CONSTANTS_START); + SystraceMessage.beginSection(Systrace.TRACE_TAG_REACT_JAVA_BRIDGE, "CreateUIManagerConstants") + .arg("Lazy", false) + .flush(); + try { + return UIManagerModuleConstantsHelper.createConstants( + viewManagers, customBubblingEvents, customDirectEvents); + } finally { + Systrace.endSection(Systrace.TRACE_TAG_REACT_JAVA_BRIDGE); + ReactMarker.logMarker(CREATE_UI_MANAGER_MODULE_CONSTANTS_END); + } + } + + private static NativeMap getConstantsForViewManager( + ViewManager viewManager, Map customDirectEvents) { + SystraceMessage.beginSection( + Systrace.TRACE_TAG_REACT_JAVA_BRIDGE, "ReactInstance.getConstantsForViewManager") + .arg("ViewManager", viewManager.getName()) + .arg("Lazy", true) + .flush(); + try { + Map viewManagerConstants = + UIManagerModuleConstantsHelper.createConstantsForViewManager( + viewManager, null, null, null, customDirectEvents); + return Arguments.makeNativeMap(viewManagerConstants); + } finally { + SystraceMessage.endSection(Systrace.TRACE_TAG_REACT_JAVA_BRIDGE).flush(); + } + } + void initializeEagerTurboModules() { mQueueConfiguration .getNativeModulesQueueThread() diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/UIManagerModuleConstantsHelper.java b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/UIManagerModuleConstantsHelper.java index ed637a61ca9..82592f6a304 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/UIManagerModuleConstantsHelper.java +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/UIManagerModuleConstantsHelper.java @@ -86,7 +86,9 @@ public class UIManagerModuleConstantsHelper { * into the map of {@link UIManagerModule} base constants that is stored in {@link * UIManagerModuleConstants}. TODO(6845124): Create a test for this */ - /* package */ static Map createConstants( + // NOTE: When converted to Kotlin this method should be `internal` due to + // visibility restriction for `ReactInstance` + public static Map createConstants( List viewManagers, @Nullable Map allBubblingEventTypes, @Nullable Map allDirectEventTypes) { @@ -124,7 +126,9 @@ public class UIManagerModuleConstantsHelper { return constants; } - /* package */ static Map createConstantsForViewManager( + // NOTE: When converted to Kotlin this method should be `internal` due to + // visibility restriction for `ReactInstance` + public static Map createConstantsForViewManager( ViewManager viewManager, @Nullable Map defaultBubblingEvents, @Nullable Map defaultDirectEvents,