Skip to content

Commit 61deab7

Browse files
Add feature flag to trigger Android image prefetch request on the UI thread (#53554)
Summary: Pull Request resolved: #53554 Changelog: [Internal] Reviewed By: lenaic Differential Revision: D81468680 fbshipit-source-id: 9da40feaf90756645d2aed5c051dc137d7a90534
1 parent e1071ce commit 61deab7

20 files changed

Lines changed: 181 additions & 64 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<<6a0977519362184efd85bd1807b2ad25>>
7+
* @generated SignedSource<<a5534457a42ada7d6e2a5d820844b782>>
88
*/
99

1010
/**
@@ -174,6 +174,12 @@ public object ReactNativeFeatureFlags {
174174
@JvmStatic
175175
public fun enableImagePrefetchingAndroid(): Boolean = accessor.enableImagePrefetchingAndroid()
176176

177+
/**
178+
* When enabled, Android will initiate image prefetch requested on ImageShadowNode::layout on the UI thread
179+
*/
180+
@JvmStatic
181+
public fun enableImagePrefetchingOnUiThreadAndroid(): Boolean = accessor.enableImagePrefetchingOnUiThreadAndroid()
182+
177183
/**
178184
* Dispatches state updates for content offset changes synchronously on the main thread.
179185
*/

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<<b9e541c9817e3ef4555ace90b7dfe821>>
7+
* @generated SignedSource<<7dbb21bddd9c2ae447c83923a25372e4>>
88
*/
99

1010
/**
@@ -44,6 +44,7 @@ internal class ReactNativeFeatureFlagsCxxAccessor : ReactNativeFeatureFlagsAcces
4444
private var enableIOSTextBaselineOffsetPerLineCache: Boolean? = null
4545
private var enableIOSViewClipToPaddingBoxCache: Boolean? = null
4646
private var enableImagePrefetchingAndroidCache: Boolean? = null
47+
private var enableImagePrefetchingOnUiThreadAndroidCache: Boolean? = null
4748
private var enableImmediateUpdateModeForContentOffsetChangesCache: Boolean? = null
4849
private var enableInteropViewManagerClassLookUpOptimizationIOSCache: Boolean? = null
4950
private var enableLayoutAnimationsOnAndroidCache: Boolean? = null
@@ -305,6 +306,15 @@ internal class ReactNativeFeatureFlagsCxxAccessor : ReactNativeFeatureFlagsAcces
305306
return cached
306307
}
307308

309+
override fun enableImagePrefetchingOnUiThreadAndroid(): Boolean {
310+
var cached = enableImagePrefetchingOnUiThreadAndroidCache
311+
if (cached == null) {
312+
cached = ReactNativeFeatureFlagsCxxInterop.enableImagePrefetchingOnUiThreadAndroid()
313+
enableImagePrefetchingOnUiThreadAndroidCache = cached
314+
}
315+
return cached
316+
}
317+
308318
override fun enableImmediateUpdateModeForContentOffsetChanges(): Boolean {
309319
var cached = enableImmediateUpdateModeForContentOffsetChangesCache
310320
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<<7b0b5efc545427de6f104cc36f42d0a9>>
7+
* @generated SignedSource<<4f93b4eb8f3cb427d3b926ffa18f9f9b>>
88
*/
99

1010
/**
@@ -76,6 +76,8 @@ public object ReactNativeFeatureFlagsCxxInterop {
7676

7777
@DoNotStrip @JvmStatic public external fun enableImagePrefetchingAndroid(): Boolean
7878

79+
@DoNotStrip @JvmStatic public external fun enableImagePrefetchingOnUiThreadAndroid(): Boolean
80+
7981
@DoNotStrip @JvmStatic public external fun enableImmediateUpdateModeForContentOffsetChanges(): Boolean
8082

8183
@DoNotStrip @JvmStatic public external fun enableInteropViewManagerClassLookUpOptimizationIOS(): 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<<7de4be16480ca4df9f2a6655a469c6c7>>
7+
* @generated SignedSource<<731176315c5589990865a0995f8b7e20>>
88
*/
99

1010
/**
@@ -71,6 +71,8 @@ public open class ReactNativeFeatureFlagsDefaults : ReactNativeFeatureFlagsProvi
7171

7272
override fun enableImagePrefetchingAndroid(): Boolean = false
7373

74+
override fun enableImagePrefetchingOnUiThreadAndroid(): Boolean = false
75+
7476
override fun enableImmediateUpdateModeForContentOffsetChanges(): Boolean = false
7577

7678
override fun enableInteropViewManagerClassLookUpOptimizationIOS(): 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<<72146cdfb6cc16ead73858c970e4221a>>
7+
* @generated SignedSource<<7af6546cb6e02afcfca90635b3cbe603>>
88
*/
99

1010
/**
@@ -48,6 +48,7 @@ internal class ReactNativeFeatureFlagsLocalAccessor : ReactNativeFeatureFlagsAcc
4848
private var enableIOSTextBaselineOffsetPerLineCache: Boolean? = null
4949
private var enableIOSViewClipToPaddingBoxCache: Boolean? = null
5050
private var enableImagePrefetchingAndroidCache: Boolean? = null
51+
private var enableImagePrefetchingOnUiThreadAndroidCache: Boolean? = null
5152
private var enableImmediateUpdateModeForContentOffsetChangesCache: Boolean? = null
5253
private var enableInteropViewManagerClassLookUpOptimizationIOSCache: Boolean? = null
5354
private var enableLayoutAnimationsOnAndroidCache: Boolean? = null
@@ -333,6 +334,16 @@ internal class ReactNativeFeatureFlagsLocalAccessor : ReactNativeFeatureFlagsAcc
333334
return cached
334335
}
335336

337+
override fun enableImagePrefetchingOnUiThreadAndroid(): Boolean {
338+
var cached = enableImagePrefetchingOnUiThreadAndroidCache
339+
if (cached == null) {
340+
cached = currentProvider.enableImagePrefetchingOnUiThreadAndroid()
341+
accessedFeatureFlags.add("enableImagePrefetchingOnUiThreadAndroid")
342+
enableImagePrefetchingOnUiThreadAndroidCache = cached
343+
}
344+
return cached
345+
}
346+
336347
override fun enableImmediateUpdateModeForContentOffsetChanges(): Boolean {
337348
var cached = enableImmediateUpdateModeForContentOffsetChangesCache
338349
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<<47efc0544de6bdeec45ee4a7f1aa31fa>>
7+
* @generated SignedSource<<9a982d4167179619629627529916259b>>
88
*/
99

1010
/**
@@ -71,6 +71,8 @@ public interface ReactNativeFeatureFlagsProvider {
7171

7272
@DoNotStrip public fun enableImagePrefetchingAndroid(): Boolean
7373

74+
@DoNotStrip public fun enableImagePrefetchingOnUiThreadAndroid(): Boolean
75+
7476
@DoNotStrip public fun enableImmediateUpdateModeForContentOffsetChanges(): Boolean
7577

7678
@DoNotStrip public fun enableInteropViewManagerClassLookUpOptimizationIOS(): Boolean

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<<1b12c7b671d9093f5fe503dcd041e890>>
7+
* @generated SignedSource<<6e451f1b402ee9f80e86d0ee6b808f05>>
88
*/
99

1010
/**
@@ -183,6 +183,12 @@ class ReactNativeFeatureFlagsJavaProvider
183183
return method(javaProvider_);
184184
}
185185

186+
bool enableImagePrefetchingOnUiThreadAndroid() override {
187+
static const auto method =
188+
getReactNativeFeatureFlagsProviderJavaClass()->getMethod<jboolean()>("enableImagePrefetchingOnUiThreadAndroid");
189+
return method(javaProvider_);
190+
}
191+
186192
bool enableImmediateUpdateModeForContentOffsetChanges() override {
187193
static const auto method =
188194
getReactNativeFeatureFlagsProviderJavaClass()->getMethod<jboolean()>("enableImmediateUpdateModeForContentOffsetChanges");
@@ -571,6 +577,11 @@ bool JReactNativeFeatureFlagsCxxInterop::enableImagePrefetchingAndroid(
571577
return ReactNativeFeatureFlags::enableImagePrefetchingAndroid();
572578
}
573579

580+
bool JReactNativeFeatureFlagsCxxInterop::enableImagePrefetchingOnUiThreadAndroid(
581+
facebook::jni::alias_ref<JReactNativeFeatureFlagsCxxInterop> /*unused*/) {
582+
return ReactNativeFeatureFlags::enableImagePrefetchingOnUiThreadAndroid();
583+
}
584+
574585
bool JReactNativeFeatureFlagsCxxInterop::enableImmediateUpdateModeForContentOffsetChanges(
575586
facebook::jni::alias_ref<JReactNativeFeatureFlagsCxxInterop> /*unused*/) {
576587
return ReactNativeFeatureFlags::enableImmediateUpdateModeForContentOffsetChanges();
@@ -894,6 +905,9 @@ void JReactNativeFeatureFlagsCxxInterop::registerNatives() {
894905
makeNativeMethod(
895906
"enableImagePrefetchingAndroid",
896907
JReactNativeFeatureFlagsCxxInterop::enableImagePrefetchingAndroid),
908+
makeNativeMethod(
909+
"enableImagePrefetchingOnUiThreadAndroid",
910+
JReactNativeFeatureFlagsCxxInterop::enableImagePrefetchingOnUiThreadAndroid),
897911
makeNativeMethod(
898912
"enableImmediateUpdateModeForContentOffsetChanges",
899913
JReactNativeFeatureFlagsCxxInterop::enableImmediateUpdateModeForContentOffsetChanges),

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<<e4af13121a5af07dda8b4ed14a6f825f>>
7+
* @generated SignedSource<<81d70a5d005d308fdc3df3d0e7ec69b9>>
88
*/
99

1010
/**
@@ -102,6 +102,9 @@ class JReactNativeFeatureFlagsCxxInterop
102102
static bool enableImagePrefetchingAndroid(
103103
facebook::jni::alias_ref<JReactNativeFeatureFlagsCxxInterop>);
104104

105+
static bool enableImagePrefetchingOnUiThreadAndroid(
106+
facebook::jni::alias_ref<JReactNativeFeatureFlagsCxxInterop>);
107+
105108
static bool enableImmediateUpdateModeForContentOffsetChanges(
106109
facebook::jni::alias_ref<JReactNativeFeatureFlagsCxxInterop>);
107110

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<<1f30ac4b3a008f1a8cc8b08d5c3b1d36>>
7+
* @generated SignedSource<<c9ccf7038a26788fe2853ba1fabe8615>>
88
*/
99

1010
/**
@@ -122,6 +122,10 @@ bool ReactNativeFeatureFlags::enableImagePrefetchingAndroid() {
122122
return getAccessor().enableImagePrefetchingAndroid();
123123
}
124124

125+
bool ReactNativeFeatureFlags::enableImagePrefetchingOnUiThreadAndroid() {
126+
return getAccessor().enableImagePrefetchingOnUiThreadAndroid();
127+
}
128+
125129
bool ReactNativeFeatureFlags::enableImmediateUpdateModeForContentOffsetChanges() {
126130
return getAccessor().enableImmediateUpdateModeForContentOffsetChanges();
127131
}

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

Lines changed: 6 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<<550c6084049b176c9b3c220962c04ed7>>
7+
* @generated SignedSource<<83c1c5b181d47f4a54cb097f8d31c48a>>
88
*/
99

1010
/**
@@ -159,6 +159,11 @@ class ReactNativeFeatureFlags {
159159
*/
160160
RN_EXPORT static bool enableImagePrefetchingAndroid();
161161

162+
/**
163+
* When enabled, Android will initiate image prefetch requested on ImageShadowNode::layout on the UI thread
164+
*/
165+
RN_EXPORT static bool enableImagePrefetchingOnUiThreadAndroid();
166+
162167
/**
163168
* Dispatches state updates for content offset changes synchronously on the main thread.
164169
*/

0 commit comments

Comments
 (0)