Skip to content

Commit 65d7345

Browse files
Consolidate image prefetch flags into enableImagePrefetchingAndroid (#56610)
Summary: Removes deprecated feature flags `enableImagePrefetchingJNIBatchingAndroid` and `enableImagePrefetchingOnUiThreadAndroid` by consolidating their behavior into `enableImagePrefetchingAndroid`. The changes make image prefetch batching and UI thread dispatch the default behavior when `enableImagePrefetchingAndroid` is enabled. This simplifies the feature flag system and removes intermediate experimentation flags that are no longer needed. Changelog: [Internal] Differential Revision: D102428102
1 parent 0b3df3f commit 65d7345

24 files changed

Lines changed: 86 additions & 332 deletions

packages/react-native/ReactAndroid/src/main/java/com/facebook/react/fabric/FabricUIManager.java

Lines changed: 2 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1011,15 +1011,8 @@ private void scheduleReactRevisionMerge(int surfaceId) {
10111011
@UnstableReactNativeAPI
10121012
public void experimental_prefetchResources(
10131013
int surfaceId, String componentName, ReadableMapBuffer params) {
1014-
if (ReactNativeFeatureFlags.enableImagePrefetchingOnUiThreadAndroid()) {
1015-
mMountItemDispatcher.addMountItem(
1016-
new PrefetchResourcesMountItem(surfaceId, componentName, params));
1017-
} else {
1018-
SurfaceMountingManager surfaceMountingManager = mMountingManager.getSurfaceManager(surfaceId);
1019-
if (surfaceMountingManager != null) {
1020-
surfaceMountingManager.experimental_prefetchResources(surfaceId, componentName, params);
1021-
}
1022-
}
1014+
mMountItemDispatcher.addMountItem(
1015+
new PrefetchResourcesMountItem(surfaceId, componentName, params));
10231016
}
10241017

10251018
void setBinding(FabricUIManagerBinding binding) {

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

Lines changed: 1 addition & 13 deletions
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<<cd8218c8b8588f3317bf63ce8d608548>>
7+
* @generated SignedSource<<29e4f1280a53fcc046755797e08c202f>>
88
*/
99

1010
/**
@@ -204,18 +204,6 @@ public object ReactNativeFeatureFlags {
204204
@JvmStatic
205205
public fun enableImagePrefetchingAndroid(): Boolean = accessor.enableImagePrefetchingAndroid()
206206

207-
/**
208-
* When enabled, Android will build and initiate image prefetch requests on ImageShadowNode::layout and batch them together in a single JNI call
209-
*/
210-
@JvmStatic
211-
public fun enableImagePrefetchingJNIBatchingAndroid(): Boolean = accessor.enableImagePrefetchingJNIBatchingAndroid()
212-
213-
/**
214-
* When enabled, Android will initiate image prefetch requested on ImageShadowNode::layout on the UI thread
215-
*/
216-
@JvmStatic
217-
public fun enableImagePrefetchingOnUiThreadAndroid(): Boolean = accessor.enableImagePrefetchingOnUiThreadAndroid()
218-
219207
/**
220208
* Dispatches state updates for content offset changes synchronously on the main thread.
221209
*/

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

Lines changed: 1 addition & 21 deletions
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<<4f9f5c1c46217ed6802abd5f786aac19>>
7+
* @generated SignedSource<<9653fa27236c340bf7b075401bab83b8>>
88
*/
99

1010
/**
@@ -49,8 +49,6 @@ internal class ReactNativeFeatureFlagsCxxAccessor : ReactNativeFeatureFlagsAcces
4949
private var enableIOSTextBaselineOffsetPerLineCache: Boolean? = null
5050
private var enableIOSViewClipToPaddingBoxCache: Boolean? = null
5151
private var enableImagePrefetchingAndroidCache: Boolean? = null
52-
private var enableImagePrefetchingJNIBatchingAndroidCache: Boolean? = null
53-
private var enableImagePrefetchingOnUiThreadAndroidCache: Boolean? = null
5452
private var enableImmediateUpdateModeForContentOffsetChangesCache: Boolean? = null
5553
private var enableImperativeFocusCache: Boolean? = null
5654
private var enableInteropViewManagerClassLookUpOptimizationIOSCache: Boolean? = null
@@ -374,24 +372,6 @@ internal class ReactNativeFeatureFlagsCxxAccessor : ReactNativeFeatureFlagsAcces
374372
return cached
375373
}
376374

377-
override fun enableImagePrefetchingJNIBatchingAndroid(): Boolean {
378-
var cached = enableImagePrefetchingJNIBatchingAndroidCache
379-
if (cached == null) {
380-
cached = ReactNativeFeatureFlagsCxxInterop.enableImagePrefetchingJNIBatchingAndroid()
381-
enableImagePrefetchingJNIBatchingAndroidCache = cached
382-
}
383-
return cached
384-
}
385-
386-
override fun enableImagePrefetchingOnUiThreadAndroid(): Boolean {
387-
var cached = enableImagePrefetchingOnUiThreadAndroidCache
388-
if (cached == null) {
389-
cached = ReactNativeFeatureFlagsCxxInterop.enableImagePrefetchingOnUiThreadAndroid()
390-
enableImagePrefetchingOnUiThreadAndroidCache = cached
391-
}
392-
return cached
393-
}
394-
395375
override fun enableImmediateUpdateModeForContentOffsetChanges(): Boolean {
396376
var cached = enableImmediateUpdateModeForContentOffsetChangesCache
397377
if (cached == null) {

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

Lines changed: 1 addition & 5 deletions
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<<8916e9f4a938a69ff175c806db9835d4>>
7+
* @generated SignedSource<<eef1c2145992de89996ceafb134c67f3>>
88
*/
99

1010
/**
@@ -86,10 +86,6 @@ public object ReactNativeFeatureFlagsCxxInterop {
8686

8787
@DoNotStrip @JvmStatic public external fun enableImagePrefetchingAndroid(): Boolean
8888

89-
@DoNotStrip @JvmStatic public external fun enableImagePrefetchingJNIBatchingAndroid(): Boolean
90-
91-
@DoNotStrip @JvmStatic public external fun enableImagePrefetchingOnUiThreadAndroid(): Boolean
92-
9389
@DoNotStrip @JvmStatic public external fun enableImmediateUpdateModeForContentOffsetChanges(): Boolean
9490

9591
@DoNotStrip @JvmStatic public external fun enableImperativeFocus(): Boolean

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

Lines changed: 1 addition & 5 deletions
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<<a9a8ce443fa160a7494fc1c9e7baa02f>>
7+
* @generated SignedSource<<666a533d1894299311960c7220d5a586>>
88
*/
99

1010
/**
@@ -81,10 +81,6 @@ public open class ReactNativeFeatureFlagsDefaults : ReactNativeFeatureFlagsProvi
8181

8282
override fun enableImagePrefetchingAndroid(): Boolean = false
8383

84-
override fun enableImagePrefetchingJNIBatchingAndroid(): Boolean = false
85-
86-
override fun enableImagePrefetchingOnUiThreadAndroid(): Boolean = false
87-
8884
override fun enableImmediateUpdateModeForContentOffsetChanges(): Boolean = false
8985

9086
override fun enableImperativeFocus(): Boolean = false

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

Lines changed: 1 addition & 23 deletions
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<<cbe90c2bf8ba9d34804d97c31edfd31a>>
7+
* @generated SignedSource<<20b0bea46120e731bf9768c50a8c966a>>
88
*/
99

1010
/**
@@ -53,8 +53,6 @@ internal class ReactNativeFeatureFlagsLocalAccessor : ReactNativeFeatureFlagsAcc
5353
private var enableIOSTextBaselineOffsetPerLineCache: Boolean? = null
5454
private var enableIOSViewClipToPaddingBoxCache: Boolean? = null
5555
private var enableImagePrefetchingAndroidCache: Boolean? = null
56-
private var enableImagePrefetchingJNIBatchingAndroidCache: Boolean? = null
57-
private var enableImagePrefetchingOnUiThreadAndroidCache: Boolean? = null
5856
private var enableImmediateUpdateModeForContentOffsetChangesCache: Boolean? = null
5957
private var enableImperativeFocusCache: Boolean? = null
6058
private var enableInteropViewManagerClassLookUpOptimizationIOSCache: Boolean? = null
@@ -407,26 +405,6 @@ internal class ReactNativeFeatureFlagsLocalAccessor : ReactNativeFeatureFlagsAcc
407405
return cached
408406
}
409407

410-
override fun enableImagePrefetchingJNIBatchingAndroid(): Boolean {
411-
var cached = enableImagePrefetchingJNIBatchingAndroidCache
412-
if (cached == null) {
413-
cached = currentProvider.enableImagePrefetchingJNIBatchingAndroid()
414-
accessedFeatureFlags.add("enableImagePrefetchingJNIBatchingAndroid")
415-
enableImagePrefetchingJNIBatchingAndroidCache = cached
416-
}
417-
return cached
418-
}
419-
420-
override fun enableImagePrefetchingOnUiThreadAndroid(): Boolean {
421-
var cached = enableImagePrefetchingOnUiThreadAndroidCache
422-
if (cached == null) {
423-
cached = currentProvider.enableImagePrefetchingOnUiThreadAndroid()
424-
accessedFeatureFlags.add("enableImagePrefetchingOnUiThreadAndroid")
425-
enableImagePrefetchingOnUiThreadAndroidCache = cached
426-
}
427-
return cached
428-
}
429-
430408
override fun enableImmediateUpdateModeForContentOffsetChanges(): Boolean {
431409
var cached = enableImmediateUpdateModeForContentOffsetChangesCache
432410
if (cached == null) {

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

Lines changed: 1 addition & 5 deletions
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<<536a5156deea17740dd24782bf79feb4>>
7+
* @generated SignedSource<<cbb4e9a812f9fe722c100ac8ee56bd00>>
88
*/
99

1010
/**
@@ -81,10 +81,6 @@ public interface ReactNativeFeatureFlagsProvider {
8181

8282
@DoNotStrip public fun enableImagePrefetchingAndroid(): Boolean
8383

84-
@DoNotStrip public fun enableImagePrefetchingJNIBatchingAndroid(): Boolean
85-
86-
@DoNotStrip public fun enableImagePrefetchingOnUiThreadAndroid(): Boolean
87-
8884
@DoNotStrip public fun enableImmediateUpdateModeForContentOffsetChanges(): Boolean
8985

9086
@DoNotStrip public fun enableImperativeFocus(): Boolean

packages/react-native/ReactAndroid/src/main/jni/react/fabric/FabricUIManagerBinding.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -659,7 +659,7 @@ void FabricUIManagerBinding::schedulerShouldRenderTransactions(
659659
return;
660660
}
661661

662-
if (ReactNativeFeatureFlags::enableImagePrefetchingJNIBatchingAndroid()) {
662+
if (ReactNativeFeatureFlags::enableImagePrefetchingAndroid()) {
663663
auto weakImageFetcher =
664664
scheduler_->getContextContainer()->find<std::weak_ptr<ImageFetcher>>(
665665
ImageFetcherKey);

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

Lines changed: 1 addition & 29 deletions
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<<b99eaffc2d11a08a6efe32b2e2732965>>
7+
* @generated SignedSource<<b5876f725f43855f3ebaac5419ad7ef2>>
88
*/
99

1010
/**
@@ -213,18 +213,6 @@ class ReactNativeFeatureFlagsJavaProvider
213213
return method(javaProvider_);
214214
}
215215

216-
bool enableImagePrefetchingJNIBatchingAndroid() override {
217-
static const auto method =
218-
getReactNativeFeatureFlagsProviderJavaClass()->getMethod<jboolean()>("enableImagePrefetchingJNIBatchingAndroid");
219-
return method(javaProvider_);
220-
}
221-
222-
bool enableImagePrefetchingOnUiThreadAndroid() override {
223-
static const auto method =
224-
getReactNativeFeatureFlagsProviderJavaClass()->getMethod<jboolean()>("enableImagePrefetchingOnUiThreadAndroid");
225-
return method(javaProvider_);
226-
}
227-
228216
bool enableImmediateUpdateModeForContentOffsetChanges() override {
229217
static const auto method =
230218
getReactNativeFeatureFlagsProviderJavaClass()->getMethod<jboolean()>("enableImmediateUpdateModeForContentOffsetChanges");
@@ -740,16 +728,6 @@ bool JReactNativeFeatureFlagsCxxInterop::enableImagePrefetchingAndroid(
740728
return ReactNativeFeatureFlags::enableImagePrefetchingAndroid();
741729
}
742730

743-
bool JReactNativeFeatureFlagsCxxInterop::enableImagePrefetchingJNIBatchingAndroid(
744-
facebook::jni::alias_ref<JReactNativeFeatureFlagsCxxInterop> /*unused*/) {
745-
return ReactNativeFeatureFlags::enableImagePrefetchingJNIBatchingAndroid();
746-
}
747-
748-
bool JReactNativeFeatureFlagsCxxInterop::enableImagePrefetchingOnUiThreadAndroid(
749-
facebook::jni::alias_ref<JReactNativeFeatureFlagsCxxInterop> /*unused*/) {
750-
return ReactNativeFeatureFlags::enableImagePrefetchingOnUiThreadAndroid();
751-
}
752-
753731
bool JReactNativeFeatureFlagsCxxInterop::enableImmediateUpdateModeForContentOffsetChanges(
754732
facebook::jni::alias_ref<JReactNativeFeatureFlagsCxxInterop> /*unused*/) {
755733
return ReactNativeFeatureFlags::enableImmediateUpdateModeForContentOffsetChanges();
@@ -1173,12 +1151,6 @@ void JReactNativeFeatureFlagsCxxInterop::registerNatives() {
11731151
makeNativeMethod(
11741152
"enableImagePrefetchingAndroid",
11751153
JReactNativeFeatureFlagsCxxInterop::enableImagePrefetchingAndroid),
1176-
makeNativeMethod(
1177-
"enableImagePrefetchingJNIBatchingAndroid",
1178-
JReactNativeFeatureFlagsCxxInterop::enableImagePrefetchingJNIBatchingAndroid),
1179-
makeNativeMethod(
1180-
"enableImagePrefetchingOnUiThreadAndroid",
1181-
JReactNativeFeatureFlagsCxxInterop::enableImagePrefetchingOnUiThreadAndroid),
11821154
makeNativeMethod(
11831155
"enableImmediateUpdateModeForContentOffsetChanges",
11841156
JReactNativeFeatureFlagsCxxInterop::enableImmediateUpdateModeForContentOffsetChanges),

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

Lines changed: 1 addition & 7 deletions
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<<4be32bad403baeca1a28f19ad181c42c>>
7+
* @generated SignedSource<<8266071613d30211e218cc5b60daf75d>>
88
*/
99

1010
/**
@@ -117,12 +117,6 @@ class JReactNativeFeatureFlagsCxxInterop
117117
static bool enableImagePrefetchingAndroid(
118118
facebook::jni::alias_ref<JReactNativeFeatureFlagsCxxInterop>);
119119

120-
static bool enableImagePrefetchingJNIBatchingAndroid(
121-
facebook::jni::alias_ref<JReactNativeFeatureFlagsCxxInterop>);
122-
123-
static bool enableImagePrefetchingOnUiThreadAndroid(
124-
facebook::jni::alias_ref<JReactNativeFeatureFlagsCxxInterop>);
125-
126120
static bool enableImmediateUpdateModeForContentOffsetChanges(
127121
facebook::jni::alias_ref<JReactNativeFeatureFlagsCxxInterop>);
128122

0 commit comments

Comments
 (0)