From a237918eca2024d40028ee10830c50cbcfadeac0 Mon Sep 17 00:00:00 2001 From: Kudo Chien Date: Sat, 23 Mar 2024 00:53:35 +0800 Subject: [PATCH 1/4] Add ReactMarkerConstants.CONTENT_APPEARED support on Android --- .../src/main/java/com/facebook/react/ReactRootView.java | 6 ++---- .../main/java/com/facebook/react/runtime/ReactHostImpl.java | 4 +++- .../java/com/facebook/react/runtime/ReactSurfaceView.kt | 2 ++ 3 files changed, 7 insertions(+), 5 deletions(-) diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/ReactRootView.java b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/ReactRootView.java index 2bc4bab1bfb85f..58570c0bcfc4d0 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/ReactRootView.java +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/ReactRootView.java @@ -434,10 +434,8 @@ public void run() { if (mShouldLogContentAppeared) { mShouldLogContentAppeared = false; - - if (mJSModuleName != null) { - ReactMarker.logMarker(ReactMarkerConstants.CONTENT_APPEARED, mJSModuleName, mRootViewTag); - } + String jsModuleName = getJSModuleName(); + ReactMarker.logMarker(ReactMarkerConstants.CONTENT_APPEARED, jsModuleName, mRootViewTag); } } diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/runtime/ReactHostImpl.java b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/runtime/ReactHostImpl.java index baa00162754930..1c0116d367ed60 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/runtime/ReactHostImpl.java +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/runtime/ReactHostImpl.java @@ -375,7 +375,9 @@ public DevSupportManager getDevSupportManager() { public ReactSurface createSurface( Context context, String moduleName, @Nullable Bundle initialProps) { ReactSurfaceImpl surface = new ReactSurfaceImpl(context, moduleName, initialProps); - surface.attachView(new ReactSurfaceView(context, surface)); + ReactSurfaceView surfaceView = new ReactSurfaceView(context, surface); + surfaceView.setShouldLogContentAppeared(true); + surface.attachView(surfaceView); surface.attach(this); return surface; } diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/runtime/ReactSurfaceView.kt b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/runtime/ReactSurfaceView.kt index 3ae5aba924ba91..bc979de9c329c0 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/runtime/ReactSurfaceView.kt +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/runtime/ReactSurfaceView.kt @@ -134,6 +134,8 @@ public class ReactSurfaceView(context: Context?, private val surface: ReactSurfa // This surface view is always on Fabric. @UIManagerType override fun getUIManagerType(): Int = UIManagerType.FABRIC + override fun getJSModuleName(): String = surface.moduleName + override fun dispatchJSTouchEvent(event: MotionEvent) { val eventDispatcher = surface.eventDispatcher if (eventDispatcher != null) { From e6a722d84f51107269c6fbe57f169e69d33af088 Mon Sep 17 00:00:00 2001 From: Kudo Chien Date: Tue, 11 Jun 2024 22:30:41 +0800 Subject: [PATCH 2/4] assertion in caller --- .../java/com/facebook/react/ReactInstanceManager.java | 2 +- .../src/main/java/com/facebook/react/ReactRootView.java | 8 +++++--- .../java/com/facebook/react/fabric/FabricUIManager.java | 3 ++- .../main/java/com/facebook/react/uimanager/ReactRoot.java | 1 + 4 files changed, 9 insertions(+), 5 deletions(-) diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/ReactInstanceManager.java b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/ReactInstanceManager.java index 41c3e9f086e1d2..d367ffb52d067d 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/ReactInstanceManager.java +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/ReactInstanceManager.java @@ -1284,7 +1284,7 @@ private void attachRootViewToInstance(final ReactRoot reactRoot) { rootTag = uiManager.startSurface( reactRoot.getRootViewGroup(), - reactRoot.getJSModuleName(), + Assertions.assertNotNull(reactRoot.getJSModuleName()), initialProperties == null ? new WritableNativeMap() : Arguments.fromBundle(initialProperties), diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/ReactRootView.java b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/ReactRootView.java index 58570c0bcfc4d0..75f64dfcc76b45 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/ReactRootView.java +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/ReactRootView.java @@ -435,7 +435,9 @@ public void run() { if (mShouldLogContentAppeared) { mShouldLogContentAppeared = false; String jsModuleName = getJSModuleName(); - ReactMarker.logMarker(ReactMarkerConstants.CONTENT_APPEARED, jsModuleName, mRootViewTag); + if (jsModuleName != null) { + ReactMarker.logMarker(ReactMarkerConstants.CONTENT_APPEARED, jsModuleName, mRootViewTag); + } } } @@ -630,7 +632,7 @@ public void setEventListener(@Nullable ReactRootViewEventListener eventListener) @Override public String getJSModuleName() { - return Assertions.assertNotNull(mJSModuleName); + return mJSModuleName; } @Override @@ -665,7 +667,7 @@ public void runApplication() { } CatalystInstance catalystInstance = reactContext.getCatalystInstance(); - String jsAppModuleName = getJSModuleName(); + String jsAppModuleName = Assertions.assertNotNull(getJSModuleName()); if (mWasMeasured) { updateRootLayoutSpecs(true, mWidthMeasureSpec, mHeightMeasureSpec); diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/fabric/FabricUIManager.java b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/fabric/FabricUIManager.java index 6c28d95ffa6744..91de40cc59be09 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/fabric/FabricUIManager.java +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/fabric/FabricUIManager.java @@ -32,6 +32,7 @@ import com.facebook.common.logging.FLog; import com.facebook.debug.holder.PrinterHolder; import com.facebook.debug.tags.ReactDebugOverlayTags; +import com.facebook.infer.annotation.Assertions; import com.facebook.infer.annotation.ThreadConfined; import com.facebook.proguard.annotations.DoNotStripAny; import com.facebook.react.bridge.ColorPropConverter; @@ -255,7 +256,7 @@ public int addRootView(final T rootView, final WritableMap init new ThemedReactContext( mReactApplicationContext, rootView.getContext(), reactRootView.getSurfaceID(), rootTag); mMountingManager.startSurface(rootTag, reactContext, rootView); - String moduleName = reactRootView.getJSModuleName(); + String moduleName = Assertions.assertNotNull(reactRootView.getJSModuleName()); if (ENABLE_FABRIC_LOGS) { FLog.d(TAG, "Starting surface for module: %s and reactTag: %d", moduleName, rootTag); } diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/ReactRoot.java b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/ReactRoot.java index 5db5a41da2c986..c4009d9fbaa389 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/ReactRoot.java +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/ReactRoot.java @@ -28,6 +28,7 @@ public interface ReactRoot { @Nullable Bundle getAppProperties(); + @Nullable String getJSModuleName(); /** Fabric or Default UI Manager, see {@link UIManagerType} */ From fdabe38d8f887d3314bc38e91e3a66c443e313af Mon Sep 17 00:00:00 2001 From: Kudo Chien Date: Wed, 12 Jun 2024 18:16:46 +0800 Subject: [PATCH 3/4] Apply suggestions from code review --- .../src/main/java/com/facebook/react/ReactInstanceManager.java | 2 +- .../src/main/java/com/facebook/react/ReactRootView.java | 2 +- .../main/java/com/facebook/react/fabric/FabricUIManager.java | 3 +-- .../src/main/java/com/facebook/react/uimanager/ReactRoot.java | 1 - 4 files changed, 3 insertions(+), 5 deletions(-) diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/ReactInstanceManager.java b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/ReactInstanceManager.java index d367ffb52d067d..41c3e9f086e1d2 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/ReactInstanceManager.java +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/ReactInstanceManager.java @@ -1284,7 +1284,7 @@ private void attachRootViewToInstance(final ReactRoot reactRoot) { rootTag = uiManager.startSurface( reactRoot.getRootViewGroup(), - Assertions.assertNotNull(reactRoot.getJSModuleName()), + reactRoot.getJSModuleName(), initialProperties == null ? new WritableNativeMap() : Arguments.fromBundle(initialProperties), diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/ReactRootView.java b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/ReactRootView.java index 75f64dfcc76b45..1afee0d1945fe6 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/ReactRootView.java +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/ReactRootView.java @@ -667,7 +667,7 @@ public void runApplication() { } CatalystInstance catalystInstance = reactContext.getCatalystInstance(); - String jsAppModuleName = Assertions.assertNotNull(getJSModuleName()); + String jsAppModuleName = getJSModuleName(); if (mWasMeasured) { updateRootLayoutSpecs(true, mWidthMeasureSpec, mHeightMeasureSpec); diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/fabric/FabricUIManager.java b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/fabric/FabricUIManager.java index 91de40cc59be09..6c28d95ffa6744 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/fabric/FabricUIManager.java +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/fabric/FabricUIManager.java @@ -32,7 +32,6 @@ import com.facebook.common.logging.FLog; import com.facebook.debug.holder.PrinterHolder; import com.facebook.debug.tags.ReactDebugOverlayTags; -import com.facebook.infer.annotation.Assertions; import com.facebook.infer.annotation.ThreadConfined; import com.facebook.proguard.annotations.DoNotStripAny; import com.facebook.react.bridge.ColorPropConverter; @@ -256,7 +255,7 @@ public int addRootView(final T rootView, final WritableMap init new ThemedReactContext( mReactApplicationContext, rootView.getContext(), reactRootView.getSurfaceID(), rootTag); mMountingManager.startSurface(rootTag, reactContext, rootView); - String moduleName = Assertions.assertNotNull(reactRootView.getJSModuleName()); + String moduleName = reactRootView.getJSModuleName(); if (ENABLE_FABRIC_LOGS) { FLog.d(TAG, "Starting surface for module: %s and reactTag: %d", moduleName, rootTag); } diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/ReactRoot.java b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/ReactRoot.java index c4009d9fbaa389..5db5a41da2c986 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/ReactRoot.java +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/ReactRoot.java @@ -28,7 +28,6 @@ public interface ReactRoot { @Nullable Bundle getAppProperties(); - @Nullable String getJSModuleName(); /** Fabric or Default UI Manager, see {@link UIManagerType} */ From 9974f53553f2bef09f07ca8bab8175c46fcc1e07 Mon Sep 17 00:00:00 2001 From: Kudo Chien Date: Wed, 12 Jun 2024 18:23:31 +0800 Subject: [PATCH 4/4] Apply suggestions from code review --- .../src/main/java/com/facebook/react/ReactRootView.java | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/ReactRootView.java b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/ReactRootView.java index 1afee0d1945fe6..58570c0bcfc4d0 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/ReactRootView.java +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/ReactRootView.java @@ -435,9 +435,7 @@ public void run() { if (mShouldLogContentAppeared) { mShouldLogContentAppeared = false; String jsModuleName = getJSModuleName(); - if (jsModuleName != null) { - ReactMarker.logMarker(ReactMarkerConstants.CONTENT_APPEARED, jsModuleName, mRootViewTag); - } + ReactMarker.logMarker(ReactMarkerConstants.CONTENT_APPEARED, jsModuleName, mRootViewTag); } } @@ -632,7 +630,7 @@ public void setEventListener(@Nullable ReactRootViewEventListener eventListener) @Override public String getJSModuleName() { - return mJSModuleName; + return Assertions.assertNotNull(mJSModuleName); } @Override