Skip to content

Commit 31cb45e

Browse files
committed
hide behind a feature flag
1 parent c6a79cc commit 31cb45e

23 files changed

Lines changed: 203 additions & 66 deletions

packages/react-native/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlags.kt

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
* This source code is licensed under the MIT license found in the
55
* LICENSE file in the root directory of this source tree.
66
*
7-
* @generated SignedSource<<039798c50526ff1abf33bc7987aa78a9>>
7+
* @generated SignedSource<<df4dabb2c066f6bffd5d380983084907>>
88
*/
99

1010
/**
@@ -510,6 +510,12 @@ public object ReactNativeFeatureFlags {
510510
@JvmStatic
511511
public fun useNativeViewConfigsInBridgelessMode(): Boolean = accessor.useNativeViewConfigsInBridgelessMode()
512512

513+
/**
514+
* When enabled, bridgeless mode skips the native persisted UIManager constants cache and always computes constants on demand.
515+
*/
516+
@JvmStatic
517+
public fun disableNativeUIManagerConstantsCacheInBridgelessMode(): Boolean = accessor.disableNativeUIManagerConstantsCacheInBridgelessMode()
518+
513519
/**
514520
* When enabled, ReactScrollView will extend NestedScrollView instead of ScrollView on Android for improved nested scrolling support.
515521
*/

packages/react-native/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsCxxAccessor.kt

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
* This source code is licensed under the MIT license found in the
55
* LICENSE file in the root directory of this source tree.
66
*
7-
* @generated SignedSource<<cbc85fcd815ba2585166a53e7b410f30>>
7+
* @generated SignedSource<<a1334d4c17b5880ce4629d7b4b049d48>>
88
*/
99

1010
/**
@@ -100,6 +100,7 @@ internal class ReactNativeFeatureFlagsCxxAccessor : ReactNativeFeatureFlagsAcces
100100
private var useAlwaysAvailableJSErrorHandlingCache: Boolean? = null
101101
private var useFabricInteropCache: Boolean? = null
102102
private var useNativeViewConfigsInBridgelessModeCache: Boolean? = null
103+
private var disableNativeUIManagerConstantsCacheInBridgelessModeCache: Boolean? = null
103104
private var useNestedScrollViewAndroidCache: Boolean? = null
104105
private var useSharedAnimatedBackendCache: Boolean? = null
105106
private var useTraitHiddenOnAndroidCache: Boolean? = null
@@ -830,6 +831,15 @@ internal class ReactNativeFeatureFlagsCxxAccessor : ReactNativeFeatureFlagsAcces
830831
return cached
831832
}
832833

834+
override fun disableNativeUIManagerConstantsCacheInBridgelessMode(): Boolean {
835+
var cached = disableNativeUIManagerConstantsCacheInBridgelessModeCache
836+
if (cached == null) {
837+
cached = ReactNativeFeatureFlagsCxxInterop.disableNativeUIManagerConstantsCacheInBridgelessMode()
838+
disableNativeUIManagerConstantsCacheInBridgelessModeCache = cached
839+
}
840+
return cached
841+
}
842+
833843
override fun useNestedScrollViewAndroid(): Boolean {
834844
var cached = useNestedScrollViewAndroidCache
835845
if (cached == null) {

packages/react-native/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsCxxInterop.kt

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
* This source code is licensed under the MIT license found in the
55
* LICENSE file in the root directory of this source tree.
66
*
7-
* @generated SignedSource<<3d472893c05bdee6e09f834f52d3d92f>>
7+
* @generated SignedSource<<891a9bc4c17ff43438a5815b8f5c0bea>>
88
*/
99

1010
/**
@@ -188,6 +188,8 @@ public object ReactNativeFeatureFlagsCxxInterop {
188188

189189
@DoNotStrip @JvmStatic public external fun useNativeViewConfigsInBridgelessMode(): Boolean
190190

191+
@DoNotStrip @JvmStatic public external fun disableNativeUIManagerConstantsCacheInBridgelessMode(): Boolean
192+
191193
@DoNotStrip @JvmStatic public external fun useNestedScrollViewAndroid(): Boolean
192194

193195
@DoNotStrip @JvmStatic public external fun useSharedAnimatedBackend(): Boolean

packages/react-native/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsDefaults.kt

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
* This source code is licensed under the MIT license found in the
55
* LICENSE file in the root directory of this source tree.
66
*
7-
* @generated SignedSource<<29f7031f91527f41f2f184596c542a5b>>
7+
* @generated SignedSource<<b0ebd045ddfa5250739c5a508cfe6bc3>>
88
*/
99

1010
/**
@@ -183,6 +183,8 @@ public open class ReactNativeFeatureFlagsDefaults : ReactNativeFeatureFlagsProvi
183183

184184
override fun useNativeViewConfigsInBridgelessMode(): Boolean = false
185185

186+
override fun disableNativeUIManagerConstantsCacheInBridgelessMode(): Boolean = true
187+
186188
override fun useNestedScrollViewAndroid(): Boolean = false
187189

188190
override fun useSharedAnimatedBackend(): Boolean = false

packages/react-native/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsLocalAccessor.kt

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
* This source code is licensed under the MIT license found in the
55
* LICENSE file in the root directory of this source tree.
66
*
7-
* @generated SignedSource<<014ee4afdf58a61c9974df198068d81a>>
7+
* @generated SignedSource<<1412763610b717e9719877b5eca8b24d>>
88
*/
99

1010
/**
@@ -104,6 +104,7 @@ internal class ReactNativeFeatureFlagsLocalAccessor : ReactNativeFeatureFlagsAcc
104104
private var useAlwaysAvailableJSErrorHandlingCache: Boolean? = null
105105
private var useFabricInteropCache: Boolean? = null
106106
private var useNativeViewConfigsInBridgelessModeCache: Boolean? = null
107+
private var disableNativeUIManagerConstantsCacheInBridgelessModeCache: Boolean? = null
107108
private var useNestedScrollViewAndroidCache: Boolean? = null
108109
private var useSharedAnimatedBackendCache: Boolean? = null
109110
private var useTraitHiddenOnAndroidCache: Boolean? = null
@@ -914,6 +915,16 @@ internal class ReactNativeFeatureFlagsLocalAccessor : ReactNativeFeatureFlagsAcc
914915
return cached
915916
}
916917

918+
override fun disableNativeUIManagerConstantsCacheInBridgelessMode(): Boolean {
919+
var cached = disableNativeUIManagerConstantsCacheInBridgelessModeCache
920+
if (cached == null) {
921+
cached = currentProvider.disableNativeUIManagerConstantsCacheInBridgelessMode()
922+
accessedFeatureFlags.add("disableNativeUIManagerConstantsCacheInBridgelessMode")
923+
disableNativeUIManagerConstantsCacheInBridgelessModeCache = cached
924+
}
925+
return cached
926+
}
927+
917928
override fun useNestedScrollViewAndroid(): Boolean {
918929
var cached = useNestedScrollViewAndroidCache
919930
if (cached == null) {

packages/react-native/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsProvider.kt

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
* This source code is licensed under the MIT license found in the
55
* LICENSE file in the root directory of this source tree.
66
*
7-
* @generated SignedSource<<acd57b19a67924a91c6b25904cb24d3b>>
7+
* @generated SignedSource<<b1af0483701f41d4b68142585ea36355>>
88
*/
99

1010
/**
@@ -183,6 +183,8 @@ public interface ReactNativeFeatureFlagsProvider {
183183

184184
@DoNotStrip public fun useNativeViewConfigsInBridgelessMode(): Boolean
185185

186+
@DoNotStrip public fun disableNativeUIManagerConstantsCacheInBridgelessMode(): Boolean
187+
186188
@DoNotStrip public fun useNestedScrollViewAndroid(): Boolean
187189

188190
@DoNotStrip public fun useSharedAnimatedBackend(): Boolean

packages/react-native/ReactAndroid/src/main/java/com/facebook/react/runtime/ReactInstance.kt

Lines changed: 44 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -220,7 +220,11 @@ internal class ReactInstance(
220220
// initialized.
221221
// This happens inside getTurboModuleManagerDelegate getter.
222222
if (ReactNativeFeatureFlags.useNativeViewConfigsInBridgelessMode()) {
223-
UIManagerConstantsCache.maybePreload(context)
223+
val shouldUseNativeUIManagerConstantsCache =
224+
!ReactNativeFeatureFlags.disableNativeUIManagerConstantsCacheInBridgelessMode()
225+
if (shouldUseNativeUIManagerConstantsCache) {
226+
UIManagerConstantsCache.maybePreload(context)
227+
}
224228
val customDirectEvents: MutableMap<String, Any> = HashMap()
225229

226230
UIConstantsProviderBinding.install(
@@ -234,58 +238,61 @@ internal class ReactInstance(
234238
// We want to match this beahavior.
235239
{ Arguments.makeNativeMap(UIManagerModuleConstantsHelper.defaultExportableEventTypes) },
236240
ConstantsForViewManagerProvider { viewManagerName: String ->
237-
UIManagerConstantsCache
238-
.getCachedConstantsForViewManager(
239-
context,
240-
viewManagerName,
241-
customDirectEvents,
242-
context.sourceURL,
243-
)
244-
?.let { cachedConstants ->
245-
return@ConstantsForViewManagerProvider cachedConstants
246-
}
241+
if (shouldUseNativeUIManagerConstantsCache) {
242+
UIManagerConstantsCache
243+
.getCachedConstantsForViewManager(
244+
context,
245+
viewManagerName,
246+
customDirectEvents,
247+
context.sourceURL,
248+
)
249+
?.let { cachedConstants -> return@ConstantsForViewManagerProvider cachedConstants }
250+
}
247251

248252
val viewManager =
249253
viewManagerResolver.getViewManager(viewManagerName)
250254
?: return@ConstantsForViewManagerProvider null
251255
val viewManagerConstants =
252256
createConstantsForViewManagerMap(viewManager, customDirectEvents)
253-
UIManagerConstantsCache.saveConstantsForViewManager(
254-
context,
255-
viewManagerName,
256-
viewManagerConstants,
257-
customDirectEvents,
258-
context.sourceURL,
259-
)
257+
if (shouldUseNativeUIManagerConstantsCache) {
258+
UIManagerConstantsCache.saveConstantsForViewManager(
259+
context,
260+
viewManagerName,
261+
viewManagerConstants,
262+
customDirectEvents,
263+
context.sourceURL,
264+
)
265+
}
260266
Arguments.makeNativeMap(viewManagerConstants)
261267
},
262268
{
263-
val cachedConstants =
264-
UIManagerConstantsCache.getCachedConstants(
265-
context,
266-
customDirectEvents,
267-
context.sourceURL,
268-
)
269-
if (cachedConstants != null) {
270-
cachedConstants
271-
} else {
272-
val viewManagers: List<ViewManager<*, *>> =
273-
ArrayList(viewManagerResolver.eagerViewManagerMap.values)
274-
val constants = createConstants(viewManagers, customDirectEvents)
275-
276-
val lazyViewManagers = viewManagerResolver.lazyViewManagerNames
277-
if (!lazyViewManagers.isEmpty()) {
278-
constants["ViewManagerNames"] = ArrayList(lazyViewManagers)
279-
constants["LazyViewManagersEnabled"] = true
280-
}
269+
if (shouldUseNativeUIManagerConstantsCache) {
270+
UIManagerConstantsCache
271+
.getCachedConstants(
272+
context,
273+
customDirectEvents,
274+
context.sourceURL,
275+
)
276+
?.let { cachedConstants -> return@install cachedConstants }
277+
}
278+
val viewManagers: List<ViewManager<*, *>> =
279+
ArrayList(viewManagerResolver.eagerViewManagerMap.values)
280+
val constants = createConstants(viewManagers, customDirectEvents)
281+
282+
val lazyViewManagers = viewManagerResolver.lazyViewManagerNames
283+
if (!lazyViewManagers.isEmpty()) {
284+
constants["ViewManagerNames"] = ArrayList(lazyViewManagers)
285+
constants["LazyViewManagersEnabled"] = true
286+
}
287+
if (shouldUseNativeUIManagerConstantsCache) {
281288
UIManagerConstantsCache.saveConstants(
282289
context,
283290
constants,
284291
customDirectEvents,
285292
context.sourceURL,
286293
)
287-
Arguments.makeNativeMap(constants)
288294
}
295+
Arguments.makeNativeMap(constants)
289296
},
290297
)
291298
}

packages/react-native/ReactAndroid/src/main/jni/react/featureflags/JReactNativeFeatureFlagsCxxInterop.cpp

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
* This source code is licensed under the MIT license found in the
55
* LICENSE file in the root directory of this source tree.
66
*
7-
* @generated SignedSource<<a753500d987b8719f0ba1bba8d3e4dc4>>
7+
* @generated SignedSource<<c710c7ac9fe3d392c536a55ed08308a0>>
88
*/
99

1010
/**
@@ -519,6 +519,12 @@ class ReactNativeFeatureFlagsJavaProvider
519519
return method(javaProvider_);
520520
}
521521

522+
bool disableNativeUIManagerConstantsCacheInBridgelessMode() override {
523+
static const auto method =
524+
getReactNativeFeatureFlagsProviderJavaClass()->getMethod<jboolean()>("disableNativeUIManagerConstantsCacheInBridgelessMode");
525+
return method(javaProvider_);
526+
}
527+
522528
bool useNestedScrollViewAndroid() override {
523529
static const auto method =
524530
getReactNativeFeatureFlagsProviderJavaClass()->getMethod<jboolean()>("useNestedScrollViewAndroid");
@@ -977,6 +983,11 @@ bool JReactNativeFeatureFlagsCxxInterop::useNativeViewConfigsInBridgelessMode(
977983
return ReactNativeFeatureFlags::useNativeViewConfigsInBridgelessMode();
978984
}
979985

986+
bool JReactNativeFeatureFlagsCxxInterop::disableNativeUIManagerConstantsCacheInBridgelessMode(
987+
facebook::jni::alias_ref<JReactNativeFeatureFlagsCxxInterop> /*unused*/) {
988+
return ReactNativeFeatureFlags::disableNativeUIManagerConstantsCacheInBridgelessMode();
989+
}
990+
980991
bool JReactNativeFeatureFlagsCxxInterop::useNestedScrollViewAndroid(
981992
facebook::jni::alias_ref<JReactNativeFeatureFlagsCxxInterop> /*unused*/) {
982993
return ReactNativeFeatureFlags::useNestedScrollViewAndroid();
@@ -1293,6 +1304,9 @@ void JReactNativeFeatureFlagsCxxInterop::registerNatives() {
12931304
makeNativeMethod(
12941305
"useNativeViewConfigsInBridgelessMode",
12951306
JReactNativeFeatureFlagsCxxInterop::useNativeViewConfigsInBridgelessMode),
1307+
makeNativeMethod(
1308+
"disableNativeUIManagerConstantsCacheInBridgelessMode",
1309+
JReactNativeFeatureFlagsCxxInterop::disableNativeUIManagerConstantsCacheInBridgelessMode),
12961310
makeNativeMethod(
12971311
"useNestedScrollViewAndroid",
12981312
JReactNativeFeatureFlagsCxxInterop::useNestedScrollViewAndroid),

packages/react-native/ReactAndroid/src/main/jni/react/featureflags/JReactNativeFeatureFlagsCxxInterop.h

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
* This source code is licensed under the MIT license found in the
55
* LICENSE file in the root directory of this source tree.
66
*
7-
* @generated SignedSource<<6ff305bf95e95cd8a65c138fc24b43f8>>
7+
* @generated SignedSource<<62585c6696008f22bad367e9056086d1>>
88
*/
99

1010
/**
@@ -270,6 +270,9 @@ class JReactNativeFeatureFlagsCxxInterop
270270
static bool useNativeViewConfigsInBridgelessMode(
271271
facebook::jni::alias_ref<JReactNativeFeatureFlagsCxxInterop>);
272272

273+
static bool disableNativeUIManagerConstantsCacheInBridgelessMode(
274+
facebook::jni::alias_ref<JReactNativeFeatureFlagsCxxInterop>);
275+
273276
static bool useNestedScrollViewAndroid(
274277
facebook::jni::alias_ref<JReactNativeFeatureFlagsCxxInterop>);
275278

packages/react-native/ReactCommon/react/featureflags/ReactNativeFeatureFlags.cpp

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
* This source code is licensed under the MIT license found in the
55
* LICENSE file in the root directory of this source tree.
66
*
7-
* @generated SignedSource<<903b6404deb3339d2cfeced5be354134>>
7+
* @generated SignedSource<<3bbae547e4ac07dddc404f0cbaedb2b2>>
88
*/
99

1010
/**
@@ -346,6 +346,10 @@ bool ReactNativeFeatureFlags::useNativeViewConfigsInBridgelessMode() {
346346
return getAccessor().useNativeViewConfigsInBridgelessMode();
347347
}
348348

349+
bool ReactNativeFeatureFlags::disableNativeUIManagerConstantsCacheInBridgelessMode() {
350+
return getAccessor().disableNativeUIManagerConstantsCacheInBridgelessMode();
351+
}
352+
349353
bool ReactNativeFeatureFlags::useNestedScrollViewAndroid() {
350354
return getAccessor().useNestedScrollViewAndroid();
351355
}

0 commit comments

Comments
 (0)