Skip to content

Commit 74a915d

Browse files
committed
hide behind a feature flag
1 parent fc4d948 commit 74a915d

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<<5144fb0350b71394206d614c68ef87f0>>
7+
* @generated SignedSource<<5765eb9864a1280e5c8706a8cfb22e5b>>
88
*/
99

1010
/**
@@ -516,6 +516,12 @@ public object ReactNativeFeatureFlags {
516516
@JvmStatic
517517
public fun useNativeViewConfigsInBridgelessMode(): Boolean = accessor.useNativeViewConfigsInBridgelessMode()
518518

519+
/**
520+
* When enabled, bridgeless mode skips the native persisted UIManager constants cache and always computes constants on demand.
521+
*/
522+
@JvmStatic
523+
public fun disableNativeUIManagerConstantsCacheInBridgelessMode(): Boolean = accessor.disableNativeUIManagerConstantsCacheInBridgelessMode()
524+
519525
/**
520526
* When enabled, ReactScrollView will extend NestedScrollView instead of ScrollView on Android for improved nested scrolling support.
521527
*/

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<<d284f066f036908977797a381a044dfa>>
7+
* @generated SignedSource<<06438b87ea376f37c31a272e8dc04597>>
88
*/
99

1010
/**
@@ -101,6 +101,7 @@ internal class ReactNativeFeatureFlagsCxxAccessor : ReactNativeFeatureFlagsAcces
101101
private var useAlwaysAvailableJSErrorHandlingCache: Boolean? = null
102102
private var useFabricInteropCache: Boolean? = null
103103
private var useNativeViewConfigsInBridgelessModeCache: Boolean? = null
104+
private var disableNativeUIManagerConstantsCacheInBridgelessModeCache: Boolean? = null
104105
private var useNestedScrollViewAndroidCache: Boolean? = null
105106
private var useSharedAnimatedBackendCache: Boolean? = null
106107
private var useTraitHiddenOnAndroidCache: Boolean? = null
@@ -840,6 +841,15 @@ internal class ReactNativeFeatureFlagsCxxAccessor : ReactNativeFeatureFlagsAcces
840841
return cached
841842
}
842843

844+
override fun disableNativeUIManagerConstantsCacheInBridgelessMode(): Boolean {
845+
var cached = disableNativeUIManagerConstantsCacheInBridgelessModeCache
846+
if (cached == null) {
847+
cached = ReactNativeFeatureFlagsCxxInterop.disableNativeUIManagerConstantsCacheInBridgelessMode()
848+
disableNativeUIManagerConstantsCacheInBridgelessModeCache = cached
849+
}
850+
return cached
851+
}
852+
843853
override fun useNestedScrollViewAndroid(): Boolean {
844854
var cached = useNestedScrollViewAndroidCache
845855
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<<de1c66a540520cd88c4d358ba30f2c6d>>
7+
* @generated SignedSource<<1e88e791ede99c1a251a37405bafdbef>>
88
*/
99

1010
/**
@@ -190,6 +190,8 @@ public object ReactNativeFeatureFlagsCxxInterop {
190190

191191
@DoNotStrip @JvmStatic public external fun useNativeViewConfigsInBridgelessMode(): Boolean
192192

193+
@DoNotStrip @JvmStatic public external fun disableNativeUIManagerConstantsCacheInBridgelessMode(): Boolean
194+
193195
@DoNotStrip @JvmStatic public external fun useNestedScrollViewAndroid(): Boolean
194196

195197
@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<<ab3b1d2277b8cc9db1708ef94515fb35>>
7+
* @generated SignedSource<<c84cfe57aee20fe67cd4827cda00876c>>
88
*/
99

1010
/**
@@ -185,6 +185,8 @@ public open class ReactNativeFeatureFlagsDefaults : ReactNativeFeatureFlagsProvi
185185

186186
override fun useNativeViewConfigsInBridgelessMode(): Boolean = false
187187

188+
override fun disableNativeUIManagerConstantsCacheInBridgelessMode(): Boolean = true
189+
188190
override fun useNestedScrollViewAndroid(): Boolean = false
189191

190192
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<<7b87f5541ecf881d8ce51c5edd5b99b0>>
7+
* @generated SignedSource<<cfdb8838fe998e0f657de180f3dc271c>>
88
*/
99

1010
/**
@@ -105,6 +105,7 @@ internal class ReactNativeFeatureFlagsLocalAccessor : ReactNativeFeatureFlagsAcc
105105
private var useAlwaysAvailableJSErrorHandlingCache: Boolean? = null
106106
private var useFabricInteropCache: Boolean? = null
107107
private var useNativeViewConfigsInBridgelessModeCache: Boolean? = null
108+
private var disableNativeUIManagerConstantsCacheInBridgelessModeCache: Boolean? = null
108109
private var useNestedScrollViewAndroidCache: Boolean? = null
109110
private var useSharedAnimatedBackendCache: Boolean? = null
110111
private var useTraitHiddenOnAndroidCache: Boolean? = null
@@ -925,6 +926,16 @@ internal class ReactNativeFeatureFlagsLocalAccessor : ReactNativeFeatureFlagsAcc
925926
return cached
926927
}
927928

929+
override fun disableNativeUIManagerConstantsCacheInBridgelessMode(): Boolean {
930+
var cached = disableNativeUIManagerConstantsCacheInBridgelessModeCache
931+
if (cached == null) {
932+
cached = currentProvider.disableNativeUIManagerConstantsCacheInBridgelessMode()
933+
accessedFeatureFlags.add("disableNativeUIManagerConstantsCacheInBridgelessMode")
934+
disableNativeUIManagerConstantsCacheInBridgelessModeCache = cached
935+
}
936+
return cached
937+
}
938+
928939
override fun useNestedScrollViewAndroid(): Boolean {
929940
var cached = useNestedScrollViewAndroidCache
930941
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<<f34b257861830bae7012fc5201904831>>
7+
* @generated SignedSource<<bcd1a8c1320ffe6a5e5b09edcc10652d>>
88
*/
99

1010
/**
@@ -185,6 +185,8 @@ public interface ReactNativeFeatureFlagsProvider {
185185

186186
@DoNotStrip public fun useNativeViewConfigsInBridgelessMode(): Boolean
187187

188+
@DoNotStrip public fun disableNativeUIManagerConstantsCacheInBridgelessMode(): Boolean
189+
188190
@DoNotStrip public fun useNestedScrollViewAndroid(): Boolean
189191

190192
@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<<b4670c40175b42e04eb8f03b752a0c00>>
7+
* @generated SignedSource<<82fae58a4b2ebca771351029b6e21265>>
88
*/
99

1010
/**
@@ -525,6 +525,12 @@ class ReactNativeFeatureFlagsJavaProvider
525525
return method(javaProvider_);
526526
}
527527

528+
bool disableNativeUIManagerConstantsCacheInBridgelessMode() override {
529+
static const auto method =
530+
getReactNativeFeatureFlagsProviderJavaClass()->getMethod<jboolean()>("disableNativeUIManagerConstantsCacheInBridgelessMode");
531+
return method(javaProvider_);
532+
}
533+
528534
bool useNestedScrollViewAndroid() override {
529535
static const auto method =
530536
getReactNativeFeatureFlagsProviderJavaClass()->getMethod<jboolean()>("useNestedScrollViewAndroid");
@@ -988,6 +994,11 @@ bool JReactNativeFeatureFlagsCxxInterop::useNativeViewConfigsInBridgelessMode(
988994
return ReactNativeFeatureFlags::useNativeViewConfigsInBridgelessMode();
989995
}
990996

997+
bool JReactNativeFeatureFlagsCxxInterop::disableNativeUIManagerConstantsCacheInBridgelessMode(
998+
facebook::jni::alias_ref<JReactNativeFeatureFlagsCxxInterop> /*unused*/) {
999+
return ReactNativeFeatureFlags::disableNativeUIManagerConstantsCacheInBridgelessMode();
1000+
}
1001+
9911002
bool JReactNativeFeatureFlagsCxxInterop::useNestedScrollViewAndroid(
9921003
facebook::jni::alias_ref<JReactNativeFeatureFlagsCxxInterop> /*unused*/) {
9931004
return ReactNativeFeatureFlags::useNestedScrollViewAndroid();
@@ -1307,6 +1318,9 @@ void JReactNativeFeatureFlagsCxxInterop::registerNatives() {
13071318
makeNativeMethod(
13081319
"useNativeViewConfigsInBridgelessMode",
13091320
JReactNativeFeatureFlagsCxxInterop::useNativeViewConfigsInBridgelessMode),
1321+
makeNativeMethod(
1322+
"disableNativeUIManagerConstantsCacheInBridgelessMode",
1323+
JReactNativeFeatureFlagsCxxInterop::disableNativeUIManagerConstantsCacheInBridgelessMode),
13101324
makeNativeMethod(
13111325
"useNestedScrollViewAndroid",
13121326
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<<5433b4a2f4a0574591a38017422edac8>>
7+
* @generated SignedSource<<80fa9f828f4c1bfd9e2da3e7ab9fd883>>
88
*/
99

1010
/**
@@ -273,6 +273,9 @@ class JReactNativeFeatureFlagsCxxInterop
273273
static bool useNativeViewConfigsInBridgelessMode(
274274
facebook::jni::alias_ref<JReactNativeFeatureFlagsCxxInterop>);
275275

276+
static bool disableNativeUIManagerConstantsCacheInBridgelessMode(
277+
facebook::jni::alias_ref<JReactNativeFeatureFlagsCxxInterop>);
278+
276279
static bool useNestedScrollViewAndroid(
277280
facebook::jni::alias_ref<JReactNativeFeatureFlagsCxxInterop>);
278281

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<<bfb72cee88230c56d2c101be808ef300>>
7+
* @generated SignedSource<<0316d70bc847f2aa1a720671d3245926>>
88
*/
99

1010
/**
@@ -350,6 +350,10 @@ bool ReactNativeFeatureFlags::useNativeViewConfigsInBridgelessMode() {
350350
return getAccessor().useNativeViewConfigsInBridgelessMode();
351351
}
352352

353+
bool ReactNativeFeatureFlags::disableNativeUIManagerConstantsCacheInBridgelessMode() {
354+
return getAccessor().disableNativeUIManagerConstantsCacheInBridgelessMode();
355+
}
356+
353357
bool ReactNativeFeatureFlags::useNestedScrollViewAndroid() {
354358
return getAccessor().useNestedScrollViewAndroid();
355359
}

0 commit comments

Comments
 (0)