Skip to content

Commit 5210f00

Browse files
Add ImagePrefetching feature flag for JNI calls (#53865)
Summary: This adds an additional feature flag to enable/disable image prefetch requests via JNI batching Changelog: [Internal] Differential Revision: D82871006
1 parent 00e18da commit 5210f00

22 files changed

+214
-82
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<<ce122427070db337420728a1028bc2b6>>
7+
* @generated SignedSource<<6b632ac7553ae149fa42a67efde5acfa>>
88
*/
99

1010
/**
@@ -180,6 +180,12 @@ public object ReactNativeFeatureFlags {
180180
@JvmStatic
181181
public fun enableImagePrefetchingAndroid(): Boolean = accessor.enableImagePrefetchingAndroid()
182182

183+
/**
184+
* When enabled, Android will build and initiate image prefetch requests on ImageShadowNode::layout and batch them together in a single JNI call
185+
*/
186+
@JvmStatic
187+
public fun enableImagePrefetchingJNIBatchingAndroid(): Boolean = accessor.enableImagePrefetchingJNIBatchingAndroid()
188+
183189
/**
184190
* When enabled, Android will initiate image prefetch requested on ImageShadowNode::layout on the UI thread
185191
*/

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

1010
/**
@@ -45,6 +45,7 @@ internal class ReactNativeFeatureFlagsCxxAccessor : ReactNativeFeatureFlagsAcces
4545
private var enableIOSTextBaselineOffsetPerLineCache: Boolean? = null
4646
private var enableIOSViewClipToPaddingBoxCache: Boolean? = null
4747
private var enableImagePrefetchingAndroidCache: Boolean? = null
48+
private var enableImagePrefetchingJNIBatchingAndroidCache: Boolean? = null
4849
private var enableImagePrefetchingOnUiThreadAndroidCache: Boolean? = null
4950
private var enableImmediateUpdateModeForContentOffsetChangesCache: Boolean? = null
5051
private var enableImperativeFocusCache: Boolean? = null
@@ -320,6 +321,15 @@ internal class ReactNativeFeatureFlagsCxxAccessor : ReactNativeFeatureFlagsAcces
320321
return cached
321322
}
322323

324+
override fun enableImagePrefetchingJNIBatchingAndroid(): Boolean {
325+
var cached = enableImagePrefetchingJNIBatchingAndroidCache
326+
if (cached == null) {
327+
cached = ReactNativeFeatureFlagsCxxInterop.enableImagePrefetchingJNIBatchingAndroid()
328+
enableImagePrefetchingJNIBatchingAndroidCache = cached
329+
}
330+
return cached
331+
}
332+
323333
override fun enableImagePrefetchingOnUiThreadAndroid(): Boolean {
324334
var cached = enableImagePrefetchingOnUiThreadAndroidCache
325335
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<<d73f5df2130479a4cd1000dc76b15d1b>>
7+
* @generated SignedSource<<26dce1945df5641ab84cbca9eaf2b10f>>
88
*/
99

1010
/**
@@ -78,6 +78,8 @@ public object ReactNativeFeatureFlagsCxxInterop {
7878

7979
@DoNotStrip @JvmStatic public external fun enableImagePrefetchingAndroid(): Boolean
8080

81+
@DoNotStrip @JvmStatic public external fun enableImagePrefetchingJNIBatchingAndroid(): Boolean
82+
8183
@DoNotStrip @JvmStatic public external fun enableImagePrefetchingOnUiThreadAndroid(): Boolean
8284

8385
@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<<4fa15189361a6c92bdd44bafc9356167>>
7+
* @generated SignedSource<<11051ece1b61fd4bf4ca003a3b7fc4f9>>
88
*/
99

1010
/**
@@ -73,6 +73,8 @@ public open class ReactNativeFeatureFlagsDefaults : ReactNativeFeatureFlagsProvi
7373

7474
override fun enableImagePrefetchingAndroid(): Boolean = false
7575

76+
override fun enableImagePrefetchingJNIBatchingAndroid(): Boolean = false
77+
7678
override fun enableImagePrefetchingOnUiThreadAndroid(): Boolean = false
7779

7880
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<<962c60d1761b0a1f4945b44767aa7b02>>
7+
* @generated SignedSource<<66fa583c37021750123a483ab0ccb030>>
88
*/
99

1010
/**
@@ -49,6 +49,7 @@ internal class ReactNativeFeatureFlagsLocalAccessor : ReactNativeFeatureFlagsAcc
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
@@ -349,6 +350,16 @@ internal class ReactNativeFeatureFlagsLocalAccessor : ReactNativeFeatureFlagsAcc
349350
return cached
350351
}
351352

353+
override fun enableImagePrefetchingJNIBatchingAndroid(): Boolean {
354+
var cached = enableImagePrefetchingJNIBatchingAndroidCache
355+
if (cached == null) {
356+
cached = currentProvider.enableImagePrefetchingJNIBatchingAndroid()
357+
accessedFeatureFlags.add("enableImagePrefetchingJNIBatchingAndroid")
358+
enableImagePrefetchingJNIBatchingAndroidCache = cached
359+
}
360+
return cached
361+
}
362+
352363
override fun enableImagePrefetchingOnUiThreadAndroid(): Boolean {
353364
var cached = enableImagePrefetchingOnUiThreadAndroidCache
354365
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<<f9f3dee3dde2f7f6f851ce4525a4ebec>>
7+
* @generated SignedSource<<f26998daf87c8b90c2ec822c8316b134>>
88
*/
99

1010
/**
@@ -73,6 +73,8 @@ public interface ReactNativeFeatureFlagsProvider {
7373

7474
@DoNotStrip public fun enableImagePrefetchingAndroid(): Boolean
7575

76+
@DoNotStrip public fun enableImagePrefetchingJNIBatchingAndroid(): Boolean
77+
7678
@DoNotStrip public fun enableImagePrefetchingOnUiThreadAndroid(): Boolean
7779

7880
@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<<de817bc06ae5ef584db08d6a094c9d03>>
7+
* @generated SignedSource<<8e1821e9a153a4b725890cb4a7f262ee>>
88
*/
99

1010
/**
@@ -189,6 +189,12 @@ class ReactNativeFeatureFlagsJavaProvider
189189
return method(javaProvider_);
190190
}
191191

192+
bool enableImagePrefetchingJNIBatchingAndroid() override {
193+
static const auto method =
194+
getReactNativeFeatureFlagsProviderJavaClass()->getMethod<jboolean()>("enableImagePrefetchingJNIBatchingAndroid");
195+
return method(javaProvider_);
196+
}
197+
192198
bool enableImagePrefetchingOnUiThreadAndroid() override {
193199
static const auto method =
194200
getReactNativeFeatureFlagsProviderJavaClass()->getMethod<jboolean()>("enableImagePrefetchingOnUiThreadAndroid");
@@ -612,6 +618,11 @@ bool JReactNativeFeatureFlagsCxxInterop::enableImagePrefetchingAndroid(
612618
return ReactNativeFeatureFlags::enableImagePrefetchingAndroid();
613619
}
614620

621+
bool JReactNativeFeatureFlagsCxxInterop::enableImagePrefetchingJNIBatchingAndroid(
622+
facebook::jni::alias_ref<JReactNativeFeatureFlagsCxxInterop> /*unused*/) {
623+
return ReactNativeFeatureFlags::enableImagePrefetchingJNIBatchingAndroid();
624+
}
625+
615626
bool JReactNativeFeatureFlagsCxxInterop::enableImagePrefetchingOnUiThreadAndroid(
616627
facebook::jni::alias_ref<JReactNativeFeatureFlagsCxxInterop> /*unused*/) {
617628
return ReactNativeFeatureFlags::enableImagePrefetchingOnUiThreadAndroid();
@@ -963,6 +974,9 @@ void JReactNativeFeatureFlagsCxxInterop::registerNatives() {
963974
makeNativeMethod(
964975
"enableImagePrefetchingAndroid",
965976
JReactNativeFeatureFlagsCxxInterop::enableImagePrefetchingAndroid),
977+
makeNativeMethod(
978+
"enableImagePrefetchingJNIBatchingAndroid",
979+
JReactNativeFeatureFlagsCxxInterop::enableImagePrefetchingJNIBatchingAndroid),
966980
makeNativeMethod(
967981
"enableImagePrefetchingOnUiThreadAndroid",
968982
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<<f163997b1149c1f1ac1e60f273a5448f>>
7+
* @generated SignedSource<<5be2ec52bda638a1eac837c402149b9f>>
88
*/
99

1010
/**
@@ -105,6 +105,9 @@ class JReactNativeFeatureFlagsCxxInterop
105105
static bool enableImagePrefetchingAndroid(
106106
facebook::jni::alias_ref<JReactNativeFeatureFlagsCxxInterop>);
107107

108+
static bool enableImagePrefetchingJNIBatchingAndroid(
109+
facebook::jni::alias_ref<JReactNativeFeatureFlagsCxxInterop>);
110+
108111
static bool enableImagePrefetchingOnUiThreadAndroid(
109112
facebook::jni::alias_ref<JReactNativeFeatureFlagsCxxInterop>);
110113

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<<50f81f60d4c2d2e08fde98f4a2d841ea>>
7+
* @generated SignedSource<<e335c5069e7fe7a67f2d754602d2200e>>
88
*/
99

1010
/**
@@ -126,6 +126,10 @@ bool ReactNativeFeatureFlags::enableImagePrefetchingAndroid() {
126126
return getAccessor().enableImagePrefetchingAndroid();
127127
}
128128

129+
bool ReactNativeFeatureFlags::enableImagePrefetchingJNIBatchingAndroid() {
130+
return getAccessor().enableImagePrefetchingJNIBatchingAndroid();
131+
}
132+
129133
bool ReactNativeFeatureFlags::enableImagePrefetchingOnUiThreadAndroid() {
130134
return getAccessor().enableImagePrefetchingOnUiThreadAndroid();
131135
}

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<<3446eebd26c1142fd78cd5413771569d>>
7+
* @generated SignedSource<<bad2aadea64eba29430e9c93c169d621>>
88
*/
99

1010
/**
@@ -164,6 +164,11 @@ class ReactNativeFeatureFlags {
164164
*/
165165
RN_EXPORT static bool enableImagePrefetchingAndroid();
166166

167+
/**
168+
* When enabled, Android will build and initiate image prefetch requests on ImageShadowNode::layout and batch them together in a single JNI call
169+
*/
170+
RN_EXPORT static bool enableImagePrefetchingJNIBatchingAndroid();
171+
167172
/**
168173
* When enabled, Android will initiate image prefetch requested on ImageShadowNode::layout on the UI thread
169174
*/

0 commit comments

Comments
 (0)