From eb86c7a63edf69ab90b23df0b65d3819ec85f6b0 Mon Sep 17 00:00:00 2001 From: Nicola Corti Date: Thu, 21 Aug 2025 07:12:55 -0700 Subject: [PATCH] Ship `useNativeEqualsInNativeReadableArrayAndroid` and `useNativeTransformHelperAndroid` to stable (#53372) Summary: We verified that those feature flags are not regressing the experience + we got confirmation from Software Mansion that the fix is effectively mitigating the regression on Android mounting. Hence we can ship this to production. Fixes: https://github.com/facebook/react-native/issues/51869 Changelog: [Android] [Fixed] - Fix mounting is very slow on Android by shipping native transform optimizations Reviewed By: javache Differential Revision: D80624739 --- .../featureflags/ReactNativeFeatureFlagsDefaults.kt | 6 +++--- ...FeatureFlagsOverrides_RNOSS_Experimental_Android.kt | 6 +----- .../featureflags/ReactNativeFeatureFlagsDefaults.h | 6 +++--- .../ReactNativeFeatureFlagsOverridesOSSExperimental.h | 10 +--------- .../featureflags/ReactNativeFeatureFlags.config.js | 8 ++++---- .../private/featureflags/ReactNativeFeatureFlags.js | 6 +++--- 6 files changed, 15 insertions(+), 27 deletions(-) diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsDefaults.kt b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsDefaults.kt index 68df7d3df200..6ff07b618d9e 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsDefaults.kt +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsDefaults.kt @@ -4,7 +4,7 @@ * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. * - * @generated SignedSource<<4cc61b5f71805589fa91abbdefb5eade>> + * @generated SignedSource<<69634efaec0f2c63ac2d1ce20dd5c2ac>> */ /** @@ -139,9 +139,9 @@ public open class ReactNativeFeatureFlagsDefaults : ReactNativeFeatureFlagsProvi override fun useFabricInterop(): Boolean = true - override fun useNativeEqualsInNativeReadableArrayAndroid(): Boolean = false + override fun useNativeEqualsInNativeReadableArrayAndroid(): Boolean = true - override fun useNativeTransformHelperAndroid(): Boolean = false + override fun useNativeTransformHelperAndroid(): Boolean = true override fun useNativeViewConfigsInBridgelessMode(): Boolean = false diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsOverrides_RNOSS_Experimental_Android.kt b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsOverrides_RNOSS_Experimental_Android.kt index db9f5638f40a..18685fcd6e9c 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsOverrides_RNOSS_Experimental_Android.kt +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsOverrides_RNOSS_Experimental_Android.kt @@ -4,7 +4,7 @@ * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. * - * @generated SignedSource<<1f89971ab4d5b2ee27ace3a3c8da78cf>> + * @generated SignedSource<<4feeb3c1789d8169dd93bee7ae1ff1ac>> */ /** @@ -26,8 +26,4 @@ public open class ReactNativeFeatureFlagsOverrides_RNOSS_Experimental_Android : override fun enableAccessibilityOrder(): Boolean = true override fun preventShadowTreeCommitExhaustion(): Boolean = true - - override fun useNativeEqualsInNativeReadableArrayAndroid(): Boolean = true - - override fun useNativeTransformHelperAndroid(): Boolean = true } diff --git a/packages/react-native/ReactCommon/react/featureflags/ReactNativeFeatureFlagsDefaults.h b/packages/react-native/ReactCommon/react/featureflags/ReactNativeFeatureFlagsDefaults.h index f8a10ecd3f6b..2ba904e1981c 100644 --- a/packages/react-native/ReactCommon/react/featureflags/ReactNativeFeatureFlagsDefaults.h +++ b/packages/react-native/ReactCommon/react/featureflags/ReactNativeFeatureFlagsDefaults.h @@ -4,7 +4,7 @@ * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. * - * @generated SignedSource<> + * @generated SignedSource<<54a695ed4e9c536cd8650498b9dab2fc>> */ /** @@ -260,11 +260,11 @@ class ReactNativeFeatureFlagsDefaults : public ReactNativeFeatureFlagsProvider { } bool useNativeEqualsInNativeReadableArrayAndroid() override { - return false; + return true; } bool useNativeTransformHelperAndroid() override { - return false; + return true; } bool useNativeViewConfigsInBridgelessMode() override { diff --git a/packages/react-native/ReactCommon/react/featureflags/ReactNativeFeatureFlagsOverridesOSSExperimental.h b/packages/react-native/ReactCommon/react/featureflags/ReactNativeFeatureFlagsOverridesOSSExperimental.h index b40aaa717ce6..0d1bd58a85ab 100644 --- a/packages/react-native/ReactCommon/react/featureflags/ReactNativeFeatureFlagsOverridesOSSExperimental.h +++ b/packages/react-native/ReactCommon/react/featureflags/ReactNativeFeatureFlagsOverridesOSSExperimental.h @@ -4,7 +4,7 @@ * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. * - * @generated SignedSource<> + * @generated SignedSource<<77870f0db494c7b6932950a1fa475fdc>> */ /** @@ -34,14 +34,6 @@ class ReactNativeFeatureFlagsOverridesOSSExperimental : public ReactNativeFeatur bool preventShadowTreeCommitExhaustion() override { return true; } - - bool useNativeEqualsInNativeReadableArrayAndroid() override { - return true; - } - - bool useNativeTransformHelperAndroid() override { - return true; - } }; } // namespace facebook::react diff --git a/packages/react-native/scripts/featureflags/ReactNativeFeatureFlags.config.js b/packages/react-native/scripts/featureflags/ReactNativeFeatureFlags.config.js index bcf9dc63dce4..7b1c182a3e72 100644 --- a/packages/react-native/scripts/featureflags/ReactNativeFeatureFlags.config.js +++ b/packages/react-native/scripts/featureflags/ReactNativeFeatureFlags.config.js @@ -665,7 +665,7 @@ const definitions: FeatureFlagDefinitions = { ossReleaseStage: 'none', }, useNativeEqualsInNativeReadableArrayAndroid: { - defaultValue: false, + defaultValue: true, metadata: { dateAdded: '2025-07-15', description: @@ -673,17 +673,17 @@ const definitions: FeatureFlagDefinitions = { expectedReleaseValue: true, purpose: 'experimentation', }, - ossReleaseStage: 'experimental', + ossReleaseStage: 'stable', }, useNativeTransformHelperAndroid: { - defaultValue: false, + defaultValue: true, metadata: { dateAdded: '2025-07-15', description: 'Use a native implementation of TransformHelper', expectedReleaseValue: true, purpose: 'experimentation', }, - ossReleaseStage: 'experimental', + ossReleaseStage: 'stable', }, useNativeViewConfigsInBridgelessMode: { defaultValue: false, diff --git a/packages/react-native/src/private/featureflags/ReactNativeFeatureFlags.js b/packages/react-native/src/private/featureflags/ReactNativeFeatureFlags.js index bdd8104971ee..2e11e8838cac 100644 --- a/packages/react-native/src/private/featureflags/ReactNativeFeatureFlags.js +++ b/packages/react-native/src/private/featureflags/ReactNativeFeatureFlags.js @@ -4,7 +4,7 @@ * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. * - * @generated SignedSource<> + * @generated SignedSource<<66a3905e1c94e7769418becc3bace939>> * @flow strict * @noformat */ @@ -415,11 +415,11 @@ export const useFabricInterop: Getter = createNativeFlagGetter('useFabr /** * Use a native implementation of equals in NativeReadableArray. */ -export const useNativeEqualsInNativeReadableArrayAndroid: Getter = createNativeFlagGetter('useNativeEqualsInNativeReadableArrayAndroid', false); +export const useNativeEqualsInNativeReadableArrayAndroid: Getter = createNativeFlagGetter('useNativeEqualsInNativeReadableArrayAndroid', true); /** * Use a native implementation of TransformHelper */ -export const useNativeTransformHelperAndroid: Getter = createNativeFlagGetter('useNativeTransformHelperAndroid', false); +export const useNativeTransformHelperAndroid: Getter = createNativeFlagGetter('useNativeTransformHelperAndroid', true); /** * When enabled, the native view configs are used in bridgeless mode. */