react-native 0.83.0-nightly-20250927-99b7cb77a → 0.83.0-nightly-20250929-2f40224fa

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (31) hide show
  1. package/Libraries/Core/ReactNativeVersion.js +1 -1
  2. package/React/Base/RCTVersion.m +1 -1
  3. package/React/FBReactNativeSpec/FBReactNativeSpecJSI-generated.cpp +6 -0
  4. package/React/FBReactNativeSpec/FBReactNativeSpecJSI.h +9 -0
  5. package/ReactAndroid/gradle.properties +1 -1
  6. package/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlags.kt +7 -1
  7. package/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsCxxAccessor.kt +11 -1
  8. package/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsCxxInterop.kt +3 -1
  9. package/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsDefaults.kt +3 -1
  10. package/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsLocalAccessor.kt +12 -1
  11. package/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsProvider.kt +3 -1
  12. package/ReactAndroid/src/main/java/com/facebook/react/modules/systeminfo/ReactNativeVersion.kt +1 -1
  13. package/ReactAndroid/src/main/jni/react/featureflags/JReactNativeFeatureFlagsCxxInterop.cpp +15 -1
  14. package/ReactAndroid/src/main/jni/react/featureflags/JReactNativeFeatureFlagsCxxInterop.h +4 -1
  15. package/ReactCommon/cxxreact/ReactNativeVersion.h +1 -1
  16. package/ReactCommon/react/featureflags/ReactNativeFeatureFlags.cpp +5 -1
  17. package/ReactCommon/react/featureflags/ReactNativeFeatureFlags.h +6 -1
  18. package/ReactCommon/react/featureflags/ReactNativeFeatureFlagsAccessor.cpp +21 -3
  19. package/ReactCommon/react/featureflags/ReactNativeFeatureFlagsAccessor.h +4 -2
  20. package/ReactCommon/react/featureflags/ReactNativeFeatureFlagsDefaults.h +5 -1
  21. package/ReactCommon/react/featureflags/ReactNativeFeatureFlagsDynamicProvider.h +10 -1
  22. package/ReactCommon/react/featureflags/ReactNativeFeatureFlagsProvider.h +2 -1
  23. package/ReactCommon/react/nativemodule/featureflags/NativeReactNativeFeatureFlags.cpp +6 -1
  24. package/ReactCommon/react/nativemodule/featureflags/NativeReactNativeFeatureFlags.h +3 -1
  25. package/ReactCommon/react/renderer/mounting/internal/CullingContext.cpp +14 -0
  26. package/package.json +8 -8
  27. package/sdks/hermesc/osx-bin/hermes +0 -0
  28. package/sdks/hermesc/osx-bin/hermesc +0 -0
  29. package/sdks/hermesc/win64-bin/hermesc.exe +0 -0
  30. package/src/private/featureflags/ReactNativeFeatureFlags.js +6 -1
  31. package/src/private/featureflags/specs/NativeReactNativeFeatureFlags.js +2 -1
@@ -29,7 +29,7 @@ export default class ReactNativeVersion {
29
29
  static major: number = 0;
30
30
  static minor: number = 83;
31
31
  static patch: number = 0;
32
- static prerelease: string | null = 'nightly-20250927-99b7cb77a';
32
+ static prerelease: string | null = 'nightly-20250929-2f40224fa';
33
33
 
34
34
  static getVersionString(): string {
35
35
  return `${this.major}.${this.minor}.${this.patch}${this.prerelease != null ? `-${this.prerelease}` : ''}`;
@@ -24,7 +24,7 @@ NSDictionary* RCTGetReactNativeVersion(void)
24
24
  RCTVersionMajor: @(0),
25
25
  RCTVersionMinor: @(83),
26
26
  RCTVersionPatch: @(0),
27
- RCTVersionPrerelease: @"nightly-20250927-99b7cb77a",
27
+ RCTVersionPrerelease: @"nightly-20250929-2f40224fa",
28
28
  };
29
29
  });
30
30
  return __rnVersion;
@@ -452,6 +452,11 @@ static jsi::Value __hostFunction_NativeReactNativeFeatureFlagsCxxSpecJSI_useTurb
452
452
  rt
453
453
  );
454
454
  }
455
+ static jsi::Value __hostFunction_NativeReactNativeFeatureFlagsCxxSpecJSI_viewCullingOutsetRatio(jsi::Runtime &rt, TurboModule &turboModule, const jsi::Value* args, size_t count) {
456
+ return static_cast<NativeReactNativeFeatureFlagsCxxSpecJSI *>(&turboModule)->viewCullingOutsetRatio(
457
+ rt
458
+ );
459
+ }
455
460
  static jsi::Value __hostFunction_NativeReactNativeFeatureFlagsCxxSpecJSI_virtualViewHysteresisRatio(jsi::Runtime &rt, TurboModule &turboModule, const jsi::Value* args, size_t count) {
456
461
  return static_cast<NativeReactNativeFeatureFlagsCxxSpecJSI *>(&turboModule)->virtualViewHysteresisRatio(
457
462
  rt
@@ -539,6 +544,7 @@ NativeReactNativeFeatureFlagsCxxSpecJSI::NativeReactNativeFeatureFlagsCxxSpecJSI
539
544
  methodMap_["useShadowNodeStateOnClone"] = MethodMetadata {0, __hostFunction_NativeReactNativeFeatureFlagsCxxSpecJSI_useShadowNodeStateOnClone};
540
545
  methodMap_["useTurboModuleInterop"] = MethodMetadata {0, __hostFunction_NativeReactNativeFeatureFlagsCxxSpecJSI_useTurboModuleInterop};
541
546
  methodMap_["useTurboModules"] = MethodMetadata {0, __hostFunction_NativeReactNativeFeatureFlagsCxxSpecJSI_useTurboModules};
547
+ methodMap_["viewCullingOutsetRatio"] = MethodMetadata {0, __hostFunction_NativeReactNativeFeatureFlagsCxxSpecJSI_viewCullingOutsetRatio};
542
548
  methodMap_["virtualViewHysteresisRatio"] = MethodMetadata {0, __hostFunction_NativeReactNativeFeatureFlagsCxxSpecJSI_virtualViewHysteresisRatio};
543
549
  methodMap_["virtualViewPrerenderRatio"] = MethodMetadata {0, __hostFunction_NativeReactNativeFeatureFlagsCxxSpecJSI_virtualViewPrerenderRatio};
544
550
  }
@@ -400,6 +400,7 @@ public:
400
400
  virtual bool useShadowNodeStateOnClone(jsi::Runtime &rt) = 0;
401
401
  virtual bool useTurboModuleInterop(jsi::Runtime &rt) = 0;
402
402
  virtual bool useTurboModules(jsi::Runtime &rt) = 0;
403
+ virtual double viewCullingOutsetRatio(jsi::Runtime &rt) = 0;
403
404
  virtual double virtualViewHysteresisRatio(jsi::Runtime &rt) = 0;
404
405
  virtual double virtualViewPrerenderRatio(jsi::Runtime &rt) = 0;
405
406
 
@@ -1024,6 +1025,14 @@ private:
1024
1025
  return bridging::callFromJs<bool>(
1025
1026
  rt, &T::useTurboModules, jsInvoker_, instance_);
1026
1027
  }
1028
+ double viewCullingOutsetRatio(jsi::Runtime &rt) override {
1029
+ static_assert(
1030
+ bridging::getParameterCount(&T::viewCullingOutsetRatio) == 1,
1031
+ "Expected viewCullingOutsetRatio(...) to have 1 parameters");
1032
+
1033
+ return bridging::callFromJs<double>(
1034
+ rt, &T::viewCullingOutsetRatio, jsInvoker_, instance_);
1035
+ }
1027
1036
  double virtualViewHysteresisRatio(jsi::Runtime &rt) override {
1028
1037
  static_assert(
1029
1038
  bridging::getParameterCount(&T::virtualViewHysteresisRatio) == 1,
@@ -1,4 +1,4 @@
1
- VERSION_NAME=0.83.0-nightly-20250927-99b7cb77a
1
+ VERSION_NAME=0.83.0-nightly-20250929-2f40224fa
2
2
  react.internal.publishingGroup=com.facebook.react
3
3
  react.internal.hermesPublishingGroup=com.facebook.hermes
4
4
 
@@ -4,7 +4,7 @@
4
4
  * This source code is licensed under the MIT license found in the
5
5
  * LICENSE file in the root directory of this source tree.
6
6
  *
7
- * @generated SignedSource<<6b632ac7553ae149fa42a67efde5acfa>>
7
+ * @generated SignedSource<<f707e26d09b6f7962ec97296a1a215b6>>
8
8
  */
9
9
 
10
10
  /**
@@ -468,6 +468,12 @@ public object ReactNativeFeatureFlags {
468
468
  @JvmStatic
469
469
  public fun useTurboModules(): Boolean = accessor.useTurboModules()
470
470
 
471
+ /**
472
+ * Outset the culling context frame with the provided ratio. The culling context frame size will be outset by width * ratio on the left and right, and height * ratio on the top and bottom.
473
+ */
474
+ @JvmStatic
475
+ public fun viewCullingOutsetRatio(): Double = accessor.viewCullingOutsetRatio()
476
+
471
477
  /**
472
478
  * Sets a hysteresis window for transition between prerender and hidden modes.
473
479
  */
@@ -4,7 +4,7 @@
4
4
  * This source code is licensed under the MIT license found in the
5
5
  * LICENSE file in the root directory of this source tree.
6
6
  *
7
- * @generated SignedSource<<c228bdbf6120b4715f49e03c04918a7c>>
7
+ * @generated SignedSource<<e7cfc5135c7b3c731324297e92e41e3f>>
8
8
  */
9
9
 
10
10
  /**
@@ -93,6 +93,7 @@ internal class ReactNativeFeatureFlagsCxxAccessor : ReactNativeFeatureFlagsAcces
93
93
  private var useShadowNodeStateOnCloneCache: Boolean? = null
94
94
  private var useTurboModuleInteropCache: Boolean? = null
95
95
  private var useTurboModulesCache: Boolean? = null
96
+ private var viewCullingOutsetRatioCache: Double? = null
96
97
  private var virtualViewHysteresisRatioCache: Double? = null
97
98
  private var virtualViewPrerenderRatioCache: Double? = null
98
99
 
@@ -753,6 +754,15 @@ internal class ReactNativeFeatureFlagsCxxAccessor : ReactNativeFeatureFlagsAcces
753
754
  return cached
754
755
  }
755
756
 
757
+ override fun viewCullingOutsetRatio(): Double {
758
+ var cached = viewCullingOutsetRatioCache
759
+ if (cached == null) {
760
+ cached = ReactNativeFeatureFlagsCxxInterop.viewCullingOutsetRatio()
761
+ viewCullingOutsetRatioCache = cached
762
+ }
763
+ return cached
764
+ }
765
+
756
766
  override fun virtualViewHysteresisRatio(): Double {
757
767
  var cached = virtualViewHysteresisRatioCache
758
768
  if (cached == null) {
@@ -4,7 +4,7 @@
4
4
  * This source code is licensed under the MIT license found in the
5
5
  * LICENSE file in the root directory of this source tree.
6
6
  *
7
- * @generated SignedSource<<26dce1945df5641ab84cbca9eaf2b10f>>
7
+ * @generated SignedSource<<3254fef626b10ef21d8d9ee1bdbb1880>>
8
8
  */
9
9
 
10
10
  /**
@@ -174,6 +174,8 @@ public object ReactNativeFeatureFlagsCxxInterop {
174
174
 
175
175
  @DoNotStrip @JvmStatic public external fun useTurboModules(): Boolean
176
176
 
177
+ @DoNotStrip @JvmStatic public external fun viewCullingOutsetRatio(): Double
178
+
177
179
  @DoNotStrip @JvmStatic public external fun virtualViewHysteresisRatio(): Double
178
180
 
179
181
  @DoNotStrip @JvmStatic public external fun virtualViewPrerenderRatio(): Double
@@ -4,7 +4,7 @@
4
4
  * This source code is licensed under the MIT license found in the
5
5
  * LICENSE file in the root directory of this source tree.
6
6
  *
7
- * @generated SignedSource<<11051ece1b61fd4bf4ca003a3b7fc4f9>>
7
+ * @generated SignedSource<<9f7eb1bb5e24fd8ee87accf60209cce3>>
8
8
  */
9
9
 
10
10
  /**
@@ -169,6 +169,8 @@ public open class ReactNativeFeatureFlagsDefaults : ReactNativeFeatureFlagsProvi
169
169
 
170
170
  override fun useTurboModules(): Boolean = false
171
171
 
172
+ override fun viewCullingOutsetRatio(): Double = 0.0
173
+
172
174
  override fun virtualViewHysteresisRatio(): Double = 0.0
173
175
 
174
176
  override fun virtualViewPrerenderRatio(): Double = 5.0
@@ -4,7 +4,7 @@
4
4
  * This source code is licensed under the MIT license found in the
5
5
  * LICENSE file in the root directory of this source tree.
6
6
  *
7
- * @generated SignedSource<<66fa583c37021750123a483ab0ccb030>>
7
+ * @generated SignedSource<<9e6e04ca37edd1ad9265b74e251ff4de>>
8
8
  */
9
9
 
10
10
  /**
@@ -97,6 +97,7 @@ internal class ReactNativeFeatureFlagsLocalAccessor : ReactNativeFeatureFlagsAcc
97
97
  private var useShadowNodeStateOnCloneCache: Boolean? = null
98
98
  private var useTurboModuleInteropCache: Boolean? = null
99
99
  private var useTurboModulesCache: Boolean? = null
100
+ private var viewCullingOutsetRatioCache: Double? = null
100
101
  private var virtualViewHysteresisRatioCache: Double? = null
101
102
  private var virtualViewPrerenderRatioCache: Double? = null
102
103
 
@@ -830,6 +831,16 @@ internal class ReactNativeFeatureFlagsLocalAccessor : ReactNativeFeatureFlagsAcc
830
831
  return cached
831
832
  }
832
833
 
834
+ override fun viewCullingOutsetRatio(): Double {
835
+ var cached = viewCullingOutsetRatioCache
836
+ if (cached == null) {
837
+ cached = currentProvider.viewCullingOutsetRatio()
838
+ accessedFeatureFlags.add("viewCullingOutsetRatio")
839
+ viewCullingOutsetRatioCache = cached
840
+ }
841
+ return cached
842
+ }
843
+
833
844
  override fun virtualViewHysteresisRatio(): Double {
834
845
  var cached = virtualViewHysteresisRatioCache
835
846
  if (cached == null) {
@@ -4,7 +4,7 @@
4
4
  * This source code is licensed under the MIT license found in the
5
5
  * LICENSE file in the root directory of this source tree.
6
6
  *
7
- * @generated SignedSource<<f26998daf87c8b90c2ec822c8316b134>>
7
+ * @generated SignedSource<<65e895433fc609bd7c2b5d7faa507f46>>
8
8
  */
9
9
 
10
10
  /**
@@ -169,6 +169,8 @@ public interface ReactNativeFeatureFlagsProvider {
169
169
 
170
170
  @DoNotStrip public fun useTurboModules(): Boolean
171
171
 
172
+ @DoNotStrip public fun viewCullingOutsetRatio(): Double
173
+
172
174
  @DoNotStrip public fun virtualViewHysteresisRatio(): Double
173
175
 
174
176
  @DoNotStrip public fun virtualViewPrerenderRatio(): Double
@@ -15,6 +15,6 @@ public object ReactNativeVersion {
15
15
  "major" to 0,
16
16
  "minor" to 83,
17
17
  "patch" to 0,
18
- "prerelease" to "nightly-20250927-99b7cb77a"
18
+ "prerelease" to "nightly-20250929-2f40224fa"
19
19
  )
20
20
  }
@@ -4,7 +4,7 @@
4
4
  * This source code is licensed under the MIT license found in the
5
5
  * LICENSE file in the root directory of this source tree.
6
6
  *
7
- * @generated SignedSource<<8e1821e9a153a4b725890cb4a7f262ee>>
7
+ * @generated SignedSource<<7a0a26494846d6b4881bea01beabb9d6>>
8
8
  */
9
9
 
10
10
  /**
@@ -477,6 +477,12 @@ class ReactNativeFeatureFlagsJavaProvider
477
477
  return method(javaProvider_);
478
478
  }
479
479
 
480
+ double viewCullingOutsetRatio() override {
481
+ static const auto method =
482
+ getReactNativeFeatureFlagsProviderJavaClass()->getMethod<jdouble()>("viewCullingOutsetRatio");
483
+ return method(javaProvider_);
484
+ }
485
+
480
486
  double virtualViewHysteresisRatio() override {
481
487
  static const auto method =
482
488
  getReactNativeFeatureFlagsProviderJavaClass()->getMethod<jdouble()>("virtualViewHysteresisRatio");
@@ -858,6 +864,11 @@ bool JReactNativeFeatureFlagsCxxInterop::useTurboModules(
858
864
  return ReactNativeFeatureFlags::useTurboModules();
859
865
  }
860
866
 
867
+ double JReactNativeFeatureFlagsCxxInterop::viewCullingOutsetRatio(
868
+ facebook::jni::alias_ref<JReactNativeFeatureFlagsCxxInterop> /*unused*/) {
869
+ return ReactNativeFeatureFlags::viewCullingOutsetRatio();
870
+ }
871
+
861
872
  double JReactNativeFeatureFlagsCxxInterop::virtualViewHysteresisRatio(
862
873
  facebook::jni::alias_ref<JReactNativeFeatureFlagsCxxInterop> /*unused*/) {
863
874
  return ReactNativeFeatureFlags::virtualViewHysteresisRatio();
@@ -1118,6 +1129,9 @@ void JReactNativeFeatureFlagsCxxInterop::registerNatives() {
1118
1129
  makeNativeMethod(
1119
1130
  "useTurboModules",
1120
1131
  JReactNativeFeatureFlagsCxxInterop::useTurboModules),
1132
+ makeNativeMethod(
1133
+ "viewCullingOutsetRatio",
1134
+ JReactNativeFeatureFlagsCxxInterop::viewCullingOutsetRatio),
1121
1135
  makeNativeMethod(
1122
1136
  "virtualViewHysteresisRatio",
1123
1137
  JReactNativeFeatureFlagsCxxInterop::virtualViewHysteresisRatio),
@@ -4,7 +4,7 @@
4
4
  * This source code is licensed under the MIT license found in the
5
5
  * LICENSE file in the root directory of this source tree.
6
6
  *
7
- * @generated SignedSource<<5be2ec52bda638a1eac837c402149b9f>>
7
+ * @generated SignedSource<<ad2e322ef177ced7eb07412552596a5b>>
8
8
  */
9
9
 
10
10
  /**
@@ -249,6 +249,9 @@ class JReactNativeFeatureFlagsCxxInterop
249
249
  static bool useTurboModules(
250
250
  facebook::jni::alias_ref<JReactNativeFeatureFlagsCxxInterop>);
251
251
 
252
+ static double viewCullingOutsetRatio(
253
+ facebook::jni::alias_ref<JReactNativeFeatureFlagsCxxInterop>);
254
+
252
255
  static double virtualViewHysteresisRatio(
253
256
  facebook::jni::alias_ref<JReactNativeFeatureFlagsCxxInterop>);
254
257
 
@@ -22,7 +22,7 @@ constexpr struct {
22
22
  int32_t Major = 0;
23
23
  int32_t Minor = 83;
24
24
  int32_t Patch = 0;
25
- std::string_view Prerelease = "nightly-20250927-99b7cb77a";
25
+ std::string_view Prerelease = "nightly-20250929-2f40224fa";
26
26
  } ReactNativeVersion;
27
27
 
28
28
  } // namespace facebook::react
@@ -4,7 +4,7 @@
4
4
  * This source code is licensed under the MIT license found in the
5
5
  * LICENSE file in the root directory of this source tree.
6
6
  *
7
- * @generated SignedSource<<e335c5069e7fe7a67f2d754602d2200e>>
7
+ * @generated SignedSource<<f01f3d1a08880a7fa9d3490e6bd9c61a>>
8
8
  */
9
9
 
10
10
  /**
@@ -318,6 +318,10 @@ bool ReactNativeFeatureFlags::useTurboModules() {
318
318
  return getAccessor().useTurboModules();
319
319
  }
320
320
 
321
+ double ReactNativeFeatureFlags::viewCullingOutsetRatio() {
322
+ return getAccessor().viewCullingOutsetRatio();
323
+ }
324
+
321
325
  double ReactNativeFeatureFlags::virtualViewHysteresisRatio() {
322
326
  return getAccessor().virtualViewHysteresisRatio();
323
327
  }
@@ -4,7 +4,7 @@
4
4
  * This source code is licensed under the MIT license found in the
5
5
  * LICENSE file in the root directory of this source tree.
6
6
  *
7
- * @generated SignedSource<<bad2aadea64eba29430e9c93c169d621>>
7
+ * @generated SignedSource<<559a8be87c24238e70fceded8ac962a0>>
8
8
  */
9
9
 
10
10
  /**
@@ -404,6 +404,11 @@ class ReactNativeFeatureFlags {
404
404
  */
405
405
  RN_EXPORT static bool useTurboModules();
406
406
 
407
+ /**
408
+ * Outset the culling context frame with the provided ratio. The culling context frame size will be outset by width * ratio on the left and right, and height * ratio on the top and bottom.
409
+ */
410
+ RN_EXPORT static double viewCullingOutsetRatio();
411
+
407
412
  /**
408
413
  * Sets a hysteresis window for transition between prerender and hidden modes.
409
414
  */
@@ -4,7 +4,7 @@
4
4
  * This source code is licensed under the MIT license found in the
5
5
  * LICENSE file in the root directory of this source tree.
6
6
  *
7
- * @generated SignedSource<<908baa1dbc4608be4b6407ffd670c066>>
7
+ * @generated SignedSource<<379732a049a8539a1cde814996ff4791>>
8
8
  */
9
9
 
10
10
  /**
@@ -1343,6 +1343,24 @@ bool ReactNativeFeatureFlagsAccessor::useTurboModules() {
1343
1343
  return flagValue.value();
1344
1344
  }
1345
1345
 
1346
+ double ReactNativeFeatureFlagsAccessor::viewCullingOutsetRatio() {
1347
+ auto flagValue = viewCullingOutsetRatio_.load();
1348
+
1349
+ if (!flagValue.has_value()) {
1350
+ // This block is not exclusive but it is not necessary.
1351
+ // If multiple threads try to initialize the feature flag, we would only
1352
+ // be accessing the provider multiple times but the end state of this
1353
+ // instance and the returned flag value would be the same.
1354
+
1355
+ markFlagAsAccessed(73, "viewCullingOutsetRatio");
1356
+
1357
+ flagValue = currentProvider_->viewCullingOutsetRatio();
1358
+ viewCullingOutsetRatio_ = flagValue;
1359
+ }
1360
+
1361
+ return flagValue.value();
1362
+ }
1363
+
1346
1364
  double ReactNativeFeatureFlagsAccessor::virtualViewHysteresisRatio() {
1347
1365
  auto flagValue = virtualViewHysteresisRatio_.load();
1348
1366
 
@@ -1352,7 +1370,7 @@ double ReactNativeFeatureFlagsAccessor::virtualViewHysteresisRatio() {
1352
1370
  // be accessing the provider multiple times but the end state of this
1353
1371
  // instance and the returned flag value would be the same.
1354
1372
 
1355
- markFlagAsAccessed(73, "virtualViewHysteresisRatio");
1373
+ markFlagAsAccessed(74, "virtualViewHysteresisRatio");
1356
1374
 
1357
1375
  flagValue = currentProvider_->virtualViewHysteresisRatio();
1358
1376
  virtualViewHysteresisRatio_ = flagValue;
@@ -1370,7 +1388,7 @@ double ReactNativeFeatureFlagsAccessor::virtualViewPrerenderRatio() {
1370
1388
  // be accessing the provider multiple times but the end state of this
1371
1389
  // instance and the returned flag value would be the same.
1372
1390
 
1373
- markFlagAsAccessed(74, "virtualViewPrerenderRatio");
1391
+ markFlagAsAccessed(75, "virtualViewPrerenderRatio");
1374
1392
 
1375
1393
  flagValue = currentProvider_->virtualViewPrerenderRatio();
1376
1394
  virtualViewPrerenderRatio_ = flagValue;
@@ -4,7 +4,7 @@
4
4
  * This source code is licensed under the MIT license found in the
5
5
  * LICENSE file in the root directory of this source tree.
6
6
  *
7
- * @generated SignedSource<<d4453ed23422fc05e53ac2b5e342b0e8>>
7
+ * @generated SignedSource<<ae0e9dbf8605126b358f776226e68130>>
8
8
  */
9
9
 
10
10
  /**
@@ -105,6 +105,7 @@ class ReactNativeFeatureFlagsAccessor {
105
105
  bool useShadowNodeStateOnClone();
106
106
  bool useTurboModuleInterop();
107
107
  bool useTurboModules();
108
+ double viewCullingOutsetRatio();
108
109
  double virtualViewHysteresisRatio();
109
110
  double virtualViewPrerenderRatio();
110
111
 
@@ -118,7 +119,7 @@ class ReactNativeFeatureFlagsAccessor {
118
119
  std::unique_ptr<ReactNativeFeatureFlagsProvider> currentProvider_;
119
120
  bool wasOverridden_;
120
121
 
121
- std::array<std::atomic<const char*>, 75> accessedFeatureFlags_;
122
+ std::array<std::atomic<const char*>, 76> accessedFeatureFlags_;
122
123
 
123
124
  std::atomic<std::optional<bool>> commonTestFlag_;
124
125
  std::atomic<std::optional<bool>> cdpInteractionMetricsEnabled_;
@@ -193,6 +194,7 @@ class ReactNativeFeatureFlagsAccessor {
193
194
  std::atomic<std::optional<bool>> useShadowNodeStateOnClone_;
194
195
  std::atomic<std::optional<bool>> useTurboModuleInterop_;
195
196
  std::atomic<std::optional<bool>> useTurboModules_;
197
+ std::atomic<std::optional<double>> viewCullingOutsetRatio_;
196
198
  std::atomic<std::optional<double>> virtualViewHysteresisRatio_;
197
199
  std::atomic<std::optional<double>> virtualViewPrerenderRatio_;
198
200
  };
@@ -4,7 +4,7 @@
4
4
  * This source code is licensed under the MIT license found in the
5
5
  * LICENSE file in the root directory of this source tree.
6
6
  *
7
- * @generated SignedSource<<5e6ee2118acc15edb9da813bb43978f3>>
7
+ * @generated SignedSource<<e8eb056e546c41e5863073e460362020>>
8
8
  */
9
9
 
10
10
  /**
@@ -319,6 +319,10 @@ class ReactNativeFeatureFlagsDefaults : public ReactNativeFeatureFlagsProvider {
319
319
  return false;
320
320
  }
321
321
 
322
+ double viewCullingOutsetRatio() override {
323
+ return 0.0;
324
+ }
325
+
322
326
  double virtualViewHysteresisRatio() override {
323
327
  return 0.0;
324
328
  }
@@ -4,7 +4,7 @@
4
4
  * This source code is licensed under the MIT license found in the
5
5
  * LICENSE file in the root directory of this source tree.
6
6
  *
7
- * @generated SignedSource<<edcc579f1ecfd47b8fc480bc1e4e7988>>
7
+ * @generated SignedSource<<00b4d80631374e0714c8aa9f65060220>>
8
8
  */
9
9
 
10
10
  /**
@@ -702,6 +702,15 @@ class ReactNativeFeatureFlagsDynamicProvider : public ReactNativeFeatureFlagsDef
702
702
  return ReactNativeFeatureFlagsDefaults::useTurboModules();
703
703
  }
704
704
 
705
+ double viewCullingOutsetRatio() override {
706
+ auto value = values_["viewCullingOutsetRatio"];
707
+ if (!value.isNull()) {
708
+ return value.getDouble();
709
+ }
710
+
711
+ return ReactNativeFeatureFlagsDefaults::viewCullingOutsetRatio();
712
+ }
713
+
705
714
  double virtualViewHysteresisRatio() override {
706
715
  auto value = values_["virtualViewHysteresisRatio"];
707
716
  if (!value.isNull()) {
@@ -4,7 +4,7 @@
4
4
  * This source code is licensed under the MIT license found in the
5
5
  * LICENSE file in the root directory of this source tree.
6
6
  *
7
- * @generated SignedSource<<4d141c52bc66225656194eeb8786f475>>
7
+ * @generated SignedSource<<fde4b531c2b0f19bef7bc69aaf3c5639>>
8
8
  */
9
9
 
10
10
  /**
@@ -98,6 +98,7 @@ class ReactNativeFeatureFlagsProvider {
98
98
  virtual bool useShadowNodeStateOnClone() = 0;
99
99
  virtual bool useTurboModuleInterop() = 0;
100
100
  virtual bool useTurboModules() = 0;
101
+ virtual double viewCullingOutsetRatio() = 0;
101
102
  virtual double virtualViewHysteresisRatio() = 0;
102
103
  virtual double virtualViewPrerenderRatio() = 0;
103
104
  };
@@ -4,7 +4,7 @@
4
4
  * This source code is licensed under the MIT license found in the
5
5
  * LICENSE file in the root directory of this source tree.
6
6
  *
7
- * @generated SignedSource<<faa71f6cfef7a803bb034507eabd264e>>
7
+ * @generated SignedSource<<27c7bc7a528da06ffe2bcea48211f6bd>>
8
8
  */
9
9
 
10
10
  /**
@@ -409,6 +409,11 @@ bool NativeReactNativeFeatureFlags::useTurboModules(
409
409
  return ReactNativeFeatureFlags::useTurboModules();
410
410
  }
411
411
 
412
+ double NativeReactNativeFeatureFlags::viewCullingOutsetRatio(
413
+ jsi::Runtime& /*runtime*/) {
414
+ return ReactNativeFeatureFlags::viewCullingOutsetRatio();
415
+ }
416
+
412
417
  double NativeReactNativeFeatureFlags::virtualViewHysteresisRatio(
413
418
  jsi::Runtime& /*runtime*/) {
414
419
  return ReactNativeFeatureFlags::virtualViewHysteresisRatio();
@@ -4,7 +4,7 @@
4
4
  * This source code is licensed under the MIT license found in the
5
5
  * LICENSE file in the root directory of this source tree.
6
6
  *
7
- * @generated SignedSource<<2dcd8b3add6f1fdc1bf378714deb41d7>>
7
+ * @generated SignedSource<<39140c882a6faa0403d3a59806c6bea5>>
8
8
  */
9
9
 
10
10
  /**
@@ -182,6 +182,8 @@ class NativeReactNativeFeatureFlags
182
182
 
183
183
  bool useTurboModules(jsi::Runtime& runtime);
184
184
 
185
+ double viewCullingOutsetRatio(jsi::Runtime& runtime);
186
+
185
187
  double virtualViewHysteresisRatio(jsi::Runtime& runtime);
186
188
 
187
189
  double virtualViewPrerenderRatio(jsi::Runtime& runtime);
@@ -32,6 +32,20 @@ CullingContext CullingContext::adjustCullingContextIfNeeded(
32
32
  /* includeTransform */ true);
33
33
  cullingContext.frame.size =
34
34
  scrollViewShadowNode->getLayoutMetrics().frame.size;
35
+
36
+ // Enlarge the frame if an outset ratio is defined
37
+ auto outsetRatio = ReactNativeFeatureFlags::viewCullingOutsetRatio();
38
+ if (outsetRatio > 0) {
39
+ auto xOutset = static_cast<float>(
40
+ floor(cullingContext.frame.size.width * outsetRatio));
41
+ auto yOutset = static_cast<float>(
42
+ floor(cullingContext.frame.size.height * outsetRatio));
43
+ cullingContext.frame.origin.x -= xOutset;
44
+ cullingContext.frame.origin.y -= yOutset;
45
+ cullingContext.frame.size.width += 2.0f * xOutset;
46
+ cullingContext.frame.size.height += 2.0f * yOutset;
47
+ }
48
+
35
49
  cullingContext.transform = Transform::Identity();
36
50
 
37
51
  if (layoutMetrics.layoutDirection == LayoutDirection::RightToLeft) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "react-native",
3
- "version": "0.83.0-nightly-20250927-99b7cb77a",
3
+ "version": "0.83.0-nightly-20250929-2f40224fa",
4
4
  "description": "A framework for building native apps using React",
5
5
  "license": "MIT",
6
6
  "repository": {
@@ -159,13 +159,13 @@
159
159
  },
160
160
  "dependencies": {
161
161
  "@jest/create-cache-key-function": "^29.7.0",
162
- "@react-native/assets-registry": "0.83.0-nightly-20250927-99b7cb77a",
163
- "@react-native/codegen": "0.83.0-nightly-20250927-99b7cb77a",
164
- "@react-native/community-cli-plugin": "0.83.0-nightly-20250927-99b7cb77a",
165
- "@react-native/gradle-plugin": "0.83.0-nightly-20250927-99b7cb77a",
166
- "@react-native/js-polyfills": "0.83.0-nightly-20250927-99b7cb77a",
167
- "@react-native/normalize-colors": "0.83.0-nightly-20250927-99b7cb77a",
168
- "@react-native/virtualized-lists": "0.83.0-nightly-20250927-99b7cb77a",
162
+ "@react-native/assets-registry": "0.83.0-nightly-20250929-2f40224fa",
163
+ "@react-native/codegen": "0.83.0-nightly-20250929-2f40224fa",
164
+ "@react-native/community-cli-plugin": "0.83.0-nightly-20250929-2f40224fa",
165
+ "@react-native/gradle-plugin": "0.83.0-nightly-20250929-2f40224fa",
166
+ "@react-native/js-polyfills": "0.83.0-nightly-20250929-2f40224fa",
167
+ "@react-native/normalize-colors": "0.83.0-nightly-20250929-2f40224fa",
168
+ "@react-native/virtualized-lists": "0.83.0-nightly-20250929-2f40224fa",
169
169
  "abort-controller": "^3.0.0",
170
170
  "anser": "^1.4.9",
171
171
  "ansi-regex": "^5.0.0",
Binary file
Binary file
Binary file
@@ -4,7 +4,7 @@
4
4
  * This source code is licensed under the MIT license found in the
5
5
  * LICENSE file in the root directory of this source tree.
6
6
  *
7
- * @generated SignedSource<<44c491f4078e75b8b77ee346ac802a70>>
7
+ * @generated SignedSource<<cddccaa2570aa27af142d90430a14044>>
8
8
  * @flow strict
9
9
  * @noformat
10
10
  */
@@ -123,6 +123,7 @@ export type ReactNativeFeatureFlags = $ReadOnly<{
123
123
  useShadowNodeStateOnClone: Getter<boolean>,
124
124
  useTurboModuleInterop: Getter<boolean>,
125
125
  useTurboModules: Getter<boolean>,
126
+ viewCullingOutsetRatio: Getter<number>,
126
127
  virtualViewHysteresisRatio: Getter<number>,
127
128
  virtualViewPrerenderRatio: Getter<number>,
128
129
  }>;
@@ -498,6 +499,10 @@ export const useTurboModuleInterop: Getter<boolean> = createNativeFlagGetter('us
498
499
  * When enabled, NativeModules will be executed by using the TurboModule system
499
500
  */
500
501
  export const useTurboModules: Getter<boolean> = createNativeFlagGetter('useTurboModules', false);
502
+ /**
503
+ * Outset the culling context frame with the provided ratio. The culling context frame size will be outset by width * ratio on the left and right, and height * ratio on the top and bottom.
504
+ */
505
+ export const viewCullingOutsetRatio: Getter<number> = createNativeFlagGetter('viewCullingOutsetRatio', 0);
501
506
  /**
502
507
  * Sets a hysteresis window for transition between prerender and hidden modes.
503
508
  */
@@ -4,7 +4,7 @@
4
4
  * This source code is licensed under the MIT license found in the
5
5
  * LICENSE file in the root directory of this source tree.
6
6
  *
7
- * @generated SignedSource<<18ae10cff4e5611d4774252917f57c13>>
7
+ * @generated SignedSource<<765a2f99602c00c38047e25ce805af86>>
8
8
  * @flow strict
9
9
  * @noformat
10
10
  */
@@ -98,6 +98,7 @@ export interface Spec extends TurboModule {
98
98
  +useShadowNodeStateOnClone?: () => boolean;
99
99
  +useTurboModuleInterop?: () => boolean;
100
100
  +useTurboModules?: () => boolean;
101
+ +viewCullingOutsetRatio?: () => number;
101
102
  +virtualViewHysteresisRatio?: () => number;
102
103
  +virtualViewPrerenderRatio?: () => number;
103
104
  }