Skip to content

Commit 3071bfa

Browse files
Bring back ImagePrefetching feature flag for JNI calls (#54485)
Summary: This brings back an additional feature flag to enable/disable image prefetch requests via JNI batching Changelog: [Internal] Differential Revision: D86675748
1 parent d8f9b3f commit 3071bfa

20 files changed

+193
-76
lines changed

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<<862c5a78fec94408ca78ef2349627a02>>
7+
* @generated SignedSource<<a9af5f83c6e958cf170cd77f69e85ef0>>
88
*/
99

1010
/**
@@ -204,6 +204,12 @@ 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+
207213
/**
208214
* When enabled, Android will initiate image prefetch requested on ImageShadowNode::layout on the UI thread
209215
*/

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<<67b008ecdc29278a7019f60e24673fc1>>
7+
* @generated SignedSource<<3b95ad320a62bf77d5090436f457d87a>>
88
*/
99

1010
/**
@@ -49,6 +49,7 @@ 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
5253
private var enableImagePrefetchingOnUiThreadAndroidCache: Boolean? = null
5354
private var enableImmediateUpdateModeForContentOffsetChangesCache: Boolean? = null
5455
private var enableImperativeFocusCache: Boolean? = null
@@ -367,6 +368,15 @@ internal class ReactNativeFeatureFlagsCxxAccessor : ReactNativeFeatureFlagsAcces
367368
return cached
368369
}
369370

371+
override fun enableImagePrefetchingJNIBatchingAndroid(): Boolean {
372+
var cached = enableImagePrefetchingJNIBatchingAndroidCache
373+
if (cached == null) {
374+
cached = ReactNativeFeatureFlagsCxxInterop.enableImagePrefetchingJNIBatchingAndroid()
375+
enableImagePrefetchingJNIBatchingAndroidCache = cached
376+
}
377+
return cached
378+
}
379+
370380
override fun enableImagePrefetchingOnUiThreadAndroid(): Boolean {
371381
var cached = enableImagePrefetchingOnUiThreadAndroidCache
372382
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<<553d71b2c9e8e89b2e5d48723f3009b4>>
7+
* @generated SignedSource<<ba3df1f078a7f5f10dced908ef1d170a>>
88
*/
99

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

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

89+
@DoNotStrip @JvmStatic public external fun enableImagePrefetchingJNIBatchingAndroid(): Boolean
90+
8991
@DoNotStrip @JvmStatic public external fun enableImagePrefetchingOnUiThreadAndroid(): Boolean
9092

9193
@DoNotStrip @JvmStatic public external fun enableImmediateUpdateModeForContentOffsetChanges(): 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<<bf1a3a96ae311f186f7fffacc466407e>>
7+
* @generated SignedSource<<e5c3f111e00075dac0a6e594ce622ca7>>
88
*/
99

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

8282
override fun enableImagePrefetchingAndroid(): Boolean = false
8383

84+
override fun enableImagePrefetchingJNIBatchingAndroid(): Boolean = false
85+
8486
override fun enableImagePrefetchingOnUiThreadAndroid(): Boolean = false
8587

8688
override fun enableImmediateUpdateModeForContentOffsetChanges(): 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<<7a2517498558f2c0f69831d5466ddec3>>
7+
* @generated SignedSource<<f484a05ce73cdf166d785560dca0536b>>
88
*/
99

1010
/**
@@ -53,6 +53,7 @@ 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
5657
private var enableImagePrefetchingOnUiThreadAndroidCache: Boolean? = null
5758
private var enableImmediateUpdateModeForContentOffsetChangesCache: Boolean? = null
5859
private var enableImperativeFocusCache: Boolean? = null
@@ -400,6 +401,16 @@ internal class ReactNativeFeatureFlagsLocalAccessor : ReactNativeFeatureFlagsAcc
400401
return cached
401402
}
402403

404+
override fun enableImagePrefetchingJNIBatchingAndroid(): Boolean {
405+
var cached = enableImagePrefetchingJNIBatchingAndroidCache
406+
if (cached == null) {
407+
cached = currentProvider.enableImagePrefetchingJNIBatchingAndroid()
408+
accessedFeatureFlags.add("enableImagePrefetchingJNIBatchingAndroid")
409+
enableImagePrefetchingJNIBatchingAndroidCache = cached
410+
}
411+
return cached
412+
}
413+
403414
override fun enableImagePrefetchingOnUiThreadAndroid(): Boolean {
404415
var cached = enableImagePrefetchingOnUiThreadAndroidCache
405416
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<<0efef5db3ded62f312486ac2fb04bcdb>>
7+
* @generated SignedSource<<a2bdf7bbb1c18dbcdd4ea424362d3e9d>>
88
*/
99

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

8282
@DoNotStrip public fun enableImagePrefetchingAndroid(): Boolean
8383

84+
@DoNotStrip public fun enableImagePrefetchingJNIBatchingAndroid(): Boolean
85+
8486
@DoNotStrip public fun enableImagePrefetchingOnUiThreadAndroid(): Boolean
8587

8688
@DoNotStrip public fun enableImmediateUpdateModeForContentOffsetChanges(): 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<<09f32ad880a470e45d3e5ba67a6e5831>>
7+
* @generated SignedSource<<4c9dda599d2c1467fb1602f71c7c7a54>>
88
*/
99

1010
/**
@@ -213,6 +213,12 @@ 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+
216222
bool enableImagePrefetchingOnUiThreadAndroid() override {
217223
static const auto method =
218224
getReactNativeFeatureFlagsProviderJavaClass()->getMethod<jboolean()>("enableImagePrefetchingOnUiThreadAndroid");
@@ -698,6 +704,11 @@ bool JReactNativeFeatureFlagsCxxInterop::enableImagePrefetchingAndroid(
698704
return ReactNativeFeatureFlags::enableImagePrefetchingAndroid();
699705
}
700706

707+
bool JReactNativeFeatureFlagsCxxInterop::enableImagePrefetchingJNIBatchingAndroid(
708+
facebook::jni::alias_ref<JReactNativeFeatureFlagsCxxInterop> /*unused*/) {
709+
return ReactNativeFeatureFlags::enableImagePrefetchingJNIBatchingAndroid();
710+
}
711+
701712
bool JReactNativeFeatureFlagsCxxInterop::enableImagePrefetchingOnUiThreadAndroid(
702713
facebook::jni::alias_ref<JReactNativeFeatureFlagsCxxInterop> /*unused*/) {
703714
return ReactNativeFeatureFlags::enableImagePrefetchingOnUiThreadAndroid();
@@ -1096,6 +1107,9 @@ void JReactNativeFeatureFlagsCxxInterop::registerNatives() {
10961107
makeNativeMethod(
10971108
"enableImagePrefetchingAndroid",
10981109
JReactNativeFeatureFlagsCxxInterop::enableImagePrefetchingAndroid),
1110+
makeNativeMethod(
1111+
"enableImagePrefetchingJNIBatchingAndroid",
1112+
JReactNativeFeatureFlagsCxxInterop::enableImagePrefetchingJNIBatchingAndroid),
10991113
makeNativeMethod(
11001114
"enableImagePrefetchingOnUiThreadAndroid",
11011115
JReactNativeFeatureFlagsCxxInterop::enableImagePrefetchingOnUiThreadAndroid),

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<<414ebc294bc434bdf5f9eca094eac268>>
7+
* @generated SignedSource<<7a72ab75c6e155769bf583cc8cac6a66>>
88
*/
99

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

120+
static bool enableImagePrefetchingJNIBatchingAndroid(
121+
facebook::jni::alias_ref<JReactNativeFeatureFlagsCxxInterop>);
122+
120123
static bool enableImagePrefetchingOnUiThreadAndroid(
121124
facebook::jni::alias_ref<JReactNativeFeatureFlagsCxxInterop>);
122125

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

1010
/**
@@ -142,6 +142,10 @@ bool ReactNativeFeatureFlags::enableImagePrefetchingAndroid() {
142142
return getAccessor().enableImagePrefetchingAndroid();
143143
}
144144

145+
bool ReactNativeFeatureFlags::enableImagePrefetchingJNIBatchingAndroid() {
146+
return getAccessor().enableImagePrefetchingJNIBatchingAndroid();
147+
}
148+
145149
bool ReactNativeFeatureFlags::enableImagePrefetchingOnUiThreadAndroid() {
146150
return getAccessor().enableImagePrefetchingOnUiThreadAndroid();
147151
}

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<<0117140f60ecb65706734187cb0c2169>>
7+
* @generated SignedSource<<972740252a5ef5f89f739599da789b79>>
88
*/
99

1010
/**
@@ -184,6 +184,11 @@ class ReactNativeFeatureFlags {
184184
*/
185185
RN_EXPORT static bool enableImagePrefetchingAndroid();
186186

187+
/**
188+
* When enabled, Android will build and initiate image prefetch requests on ImageShadowNode::layout and batch them together in a single JNI call
189+
*/
190+
RN_EXPORT static bool enableImagePrefetchingJNIBatchingAndroid();
191+
187192
/**
188193
* When enabled, Android will initiate image prefetch requested on ImageShadowNode::layout on the UI thread
189194
*/

0 commit comments

Comments
 (0)