react-native-tvos 0.76.5-0 → 0.76.7-0

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 (62) hide show
  1. package/Libraries/AppDelegate/RCTAppDelegate.mm +0 -5
  2. package/Libraries/AppDelegate/RCTAppSetupUtils.mm +3 -1
  3. package/Libraries/AppDelegate/RCTRootViewFactory.mm +3 -3
  4. package/Libraries/Components/Pressable/Pressable.d.ts +1 -1
  5. package/Libraries/Components/TV/TVFocusGuideView.js +0 -1
  6. package/Libraries/Components/View/ViewPropTypes.d.ts +4 -2
  7. package/Libraries/Core/ReactNativeVersion.js +1 -1
  8. package/Libraries/Image/RCTImageLoader.mm +9 -1
  9. package/Libraries/Pressability/Pressability.js +2 -2
  10. package/Libraries/Text/TextInput/RCTBaseTextInputView.mm +1 -1
  11. package/Libraries/Utilities/Appearance.js +3 -1
  12. package/React/Base/RCTConvert.mm +3 -1
  13. package/React/Base/RCTVersion.m +1 -1
  14. package/React/Base/Surface/SurfaceHostingView/RCTSurfaceHostingProxyRootView.mm +2 -5
  15. package/React/Fabric/Mounting/ComponentViews/ScrollView/RCTScrollViewComponentView.mm +85 -31
  16. package/React/Fabric/Mounting/ComponentViews/TextInput/RCTTextInputComponentView.mm +4 -0
  17. package/React/Fabric/Mounting/ComponentViews/View/RCTViewComponentView.mm +17 -11
  18. package/React/Views/RCTTVView.m +5 -2
  19. package/React/Views/ScrollView/RCTScrollView.m +63 -26
  20. package/ReactAndroid/api/ReactAndroid.api +2 -0
  21. package/ReactAndroid/cmake-utils/ReactNative-application.cmake +18 -3
  22. package/ReactAndroid/gradle.properties +2 -2
  23. package/ReactAndroid/src/main/java/com/facebook/react/fabric/mounting/MountingManager.java +15 -8
  24. package/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlags.kt +1 -7
  25. package/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsCxxAccessor.kt +1 -11
  26. package/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsCxxInterop.kt +1 -3
  27. package/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsDefaults.kt +1 -3
  28. package/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsLocalAccessor.kt +1 -12
  29. package/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsProvider.kt +1 -3
  30. package/ReactAndroid/src/main/java/com/facebook/react/modules/systeminfo/ReactNativeVersion.java +1 -1
  31. package/ReactAndroid/src/main/java/com/facebook/react/views/text/TextAttributeProps.java +16 -2
  32. package/ReactAndroid/src/main/java/com/facebook/react/views/view/ReactViewGroup.java +1 -0
  33. package/ReactAndroid/src/main/jni/react/fabric/Binding.cpp +17 -19
  34. package/ReactAndroid/src/main/jni/react/featureflags/JReactNativeFeatureFlagsCxxInterop.cpp +1 -15
  35. package/ReactAndroid/src/main/jni/react/featureflags/JReactNativeFeatureFlagsCxxInterop.h +1 -4
  36. package/ReactCommon/cxxreact/ReactNativeVersion.h +1 -1
  37. package/ReactCommon/react/featureflags/ReactNativeFeatureFlags.cpp +1 -5
  38. package/ReactCommon/react/featureflags/ReactNativeFeatureFlags.h +1 -6
  39. package/ReactCommon/react/featureflags/ReactNativeFeatureFlagsAccessor.cpp +47 -65
  40. package/ReactCommon/react/featureflags/ReactNativeFeatureFlagsAccessor.h +2 -4
  41. package/ReactCommon/react/featureflags/ReactNativeFeatureFlagsDefaults.h +1 -5
  42. package/ReactCommon/react/featureflags/ReactNativeFeatureFlagsProvider.h +1 -2
  43. package/ReactCommon/react/nativemodule/core/platform/ios/ReactCommon/RCTInteropTurboModule.mm +9 -0
  44. package/ReactCommon/react/nativemodule/featureflags/NativeReactNativeFeatureFlags.cpp +1 -6
  45. package/ReactCommon/react/nativemodule/featureflags/NativeReactNativeFeatureFlags.h +1 -3
  46. package/ReactCommon/react/renderer/attributedstring/TextAttributes.cpp +5 -0
  47. package/ReactCommon/react/renderer/attributedstring/TextAttributes.h +2 -0
  48. package/ReactCommon/react/renderer/attributedstring/conversions.h +5 -0
  49. package/ReactCommon/react/renderer/components/text/BaseTextProps.cpp +12 -0
  50. package/ReactCommon/react/renderer/textlayoutmanager/TextMeasureCache.h +2 -3
  51. package/ReactCommon/react/renderer/textlayoutmanager/platform/ios/react/renderer/textlayoutmanager/RCTAttributedTextUtils.mm +7 -3
  52. package/gradle/libs.versions.toml +1 -1
  53. package/package.json +8 -8
  54. package/scripts/cocoapods/utils.rb +6 -6
  55. package/scripts/codegen/generate-artifacts-executor.js +6 -6
  56. package/sdks/hermesc/linux64-bin/hermesc +0 -0
  57. package/sdks/hermesc/osx-bin/hermes +0 -0
  58. package/sdks/hermesc/osx-bin/hermesc +0 -0
  59. package/sdks/hermesc/win64-bin/hermesc.exe +0 -0
  60. package/src/private/featureflags/ReactNativeFeatureFlags.js +1 -6
  61. package/src/private/featureflags/specs/NativeReactNativeFeatureFlags.js +1 -2
  62. package/types/public/ReactNativeTVTypes.d.ts +9 -7
@@ -7859,6 +7859,7 @@ public class com/facebook/react/views/text/TextAttributeProps {
7859
7859
  public static final field TA_KEY_LETTER_SPACING S
7860
7860
  public static final field TA_KEY_LINE_BREAK_STRATEGY S
7861
7861
  public static final field TA_KEY_LINE_HEIGHT S
7862
+ public static final field TA_KEY_MAX_FONT_SIZE_MULTIPLIER S
7862
7863
  public static final field TA_KEY_OPACITY S
7863
7864
  public static final field TA_KEY_ROLE S
7864
7865
  public static final field TA_KEY_TEXT_DECORATION_COLOR S
@@ -7891,6 +7892,7 @@ public class com/facebook/react/views/text/TextAttributeProps {
7891
7892
  protected field mLetterSpacingInput F
7892
7893
  protected field mLineHeight F
7893
7894
  protected field mLineHeightInput F
7895
+ protected field mMaxFontSizeMultiplier F
7894
7896
  protected field mNumberOfLines I
7895
7897
  protected field mOpacity F
7896
7898
  protected field mRole Lcom/facebook/react/uimanager/ReactAccessibilityDelegate$Role;
@@ -34,9 +34,24 @@ set(BUILD_DIR ${PROJECT_BUILD_DIR})
34
34
  file(TO_CMAKE_PATH "${BUILD_DIR}" BUILD_DIR)
35
35
  file(TO_CMAKE_PATH "${REACT_ANDROID_DIR}" REACT_ANDROID_DIR)
36
36
 
37
- file(GLOB input_SRC CONFIGURE_DEPENDS
38
- ${REACT_ANDROID_DIR}/cmake-utils/default-app-setup/*.cpp
39
- ${BUILD_DIR}/generated/autolinking/src/main/jni/*.cpp)
37
+ if (PROJECT_ROOT_DIR)
38
+ # This empty `if` is just to silence a CMake warning and make sure the `PROJECT_ROOT_DIR`
39
+ # variable is defined if user need to access it.
40
+ endif ()
41
+
42
+ file(GLOB override_cpp_SRC CONFIGURE_DEPENDS *.cpp)
43
+ # We check if the user is providing a custom OnLoad.cpp file. If so, we pick that
44
+ # for compilation. Otherwise we fallback to using the `default-app-setup/OnLoad.cpp`
45
+ # file instead.
46
+ if(override_cpp_SRC)
47
+ file(GLOB input_SRC CONFIGURE_DEPENDS
48
+ *.cpp
49
+ ${BUILD_DIR}/generated/autolinking/src/main/jni/*.cpp)
50
+ else()
51
+ file(GLOB input_SRC CONFIGURE_DEPENDS
52
+ ${REACT_ANDROID_DIR}/cmake-utils/default-app-setup/*.cpp
53
+ ${BUILD_DIR}/generated/autolinking/src/main/jni/*.cpp)
54
+ endif()
40
55
 
41
56
  add_library(${CMAKE_PROJECT_NAME} SHARED ${input_SRC})
42
57
 
@@ -1,4 +1,4 @@
1
- VERSION_NAME=0.76.5-0
1
+ VERSION_NAME=0.76.7-0
2
2
  react.internal.publishingGroup=io.github.react-native-tvos
3
3
 
4
4
  android.useAndroidX=true
@@ -25,4 +25,4 @@ binaryCompatibilityValidator.ignoredPackages=com.facebook.debug,\
25
25
  binaryCompatibilityValidator.nonPublicMarkers=com.facebook.react.common.annotations.VisibleForTesting,\
26
26
  com.facebook.react.common.annotations.UnstableReactNativeAPI
27
27
  binaryCompatibilityValidator.validationDisabled=true
28
- binaryCompatibilityValidator.outputApiFileName=ReactAndroid
28
+ binaryCompatibilityValidator.outputApiFileName=ReactAndroid
@@ -330,14 +330,11 @@ public class MountingManager {
330
330
  @AnyThread
331
331
  @ThreadConfined(ANY)
332
332
  public @Nullable EventEmitterWrapper getEventEmitter(int surfaceId, int reactTag) {
333
- SurfaceMountingManager surfaceMountingManager =
334
- (surfaceId == ViewUtil.NO_SURFACE_ID
335
- ? getSurfaceManagerForView(reactTag)
336
- : getSurfaceManager(surfaceId));
337
- if (surfaceMountingManager == null) {
333
+ SurfaceMountingManager smm = getSurfaceMountingManager(surfaceId, reactTag);
334
+ if (smm == null) {
338
335
  return null;
339
336
  }
340
- return surfaceMountingManager.getEventEmitter(reactTag);
337
+ return smm.getEventEmitter(reactTag);
341
338
  }
342
339
 
343
340
  /**
@@ -434,11 +431,21 @@ public class MountingManager {
434
431
  boolean canCoalesceEvent,
435
432
  @Nullable WritableMap params,
436
433
  @EventCategoryDef int eventCategory) {
437
- @Nullable SurfaceMountingManager smm = getSurfaceManager(surfaceId);
434
+ SurfaceMountingManager smm = getSurfaceMountingManager(surfaceId, reactTag);
438
435
  if (smm == null) {
439
- // Cannot queue event without valid surface mountng manager. Do nothing here.
436
+ FLog.d(
437
+ TAG,
438
+ "Cannot queue event without valid surface mounting manager for tag: %d, surfaceId: %d",
439
+ reactTag,
440
+ surfaceId);
440
441
  return;
441
442
  }
442
443
  smm.enqueuePendingEvent(reactTag, eventName, canCoalesceEvent, params, eventCategory);
443
444
  }
445
+
446
+ private @Nullable SurfaceMountingManager getSurfaceMountingManager(int surfaceId, int reactTag) {
447
+ return (surfaceId == ViewUtil.NO_SURFACE_ID
448
+ ? getSurfaceManagerForView(reactTag)
449
+ : getSurfaceManager(surfaceId));
450
+ }
444
451
  }
@@ -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<<6cc52570dd571ddc792a0fd842c05dd9>>
7
+ * @generated SignedSource<<89491eb63a7ca59b17419ed4432a4f88>>
8
8
  */
9
9
 
10
10
  /**
@@ -34,12 +34,6 @@ public object ReactNativeFeatureFlags {
34
34
  @JvmStatic
35
35
  public fun commonTestFlag(): Boolean = accessor.commonTestFlag()
36
36
 
37
- /**
38
- * Adds support for recursively processing commits that mount synchronously (Android only).
39
- */
40
- @JvmStatic
41
- public fun allowRecursiveCommitsWithSynchronousMountOnAndroid(): Boolean = accessor.allowRecursiveCommitsWithSynchronousMountOnAndroid()
42
-
43
37
  /**
44
38
  * When enabled, the RuntimeScheduler processing the event loop will batch all rendering updates and dispatch them together at the end of each iteration of the loop.
45
39
  */
@@ -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<<eca842a1b1c823b72136c625b3bfd16e>>
7
+ * @generated SignedSource<<9f741ec3df7cd5ecd8d5c3c099c86aba>>
8
8
  */
9
9
 
10
10
  /**
@@ -21,7 +21,6 @@ package com.facebook.react.internal.featureflags
21
21
 
22
22
  public class ReactNativeFeatureFlagsCxxAccessor : ReactNativeFeatureFlagsAccessor {
23
23
  private var commonTestFlagCache: Boolean? = null
24
- private var allowRecursiveCommitsWithSynchronousMountOnAndroidCache: Boolean? = null
25
24
  private var batchRenderingUpdatesInEventLoopCache: Boolean? = null
26
25
  private var completeReactInstanceCreationOnBgThreadOnAndroidCache: Boolean? = null
27
26
  private var destroyFabricSurfacesInReactInstanceManagerCache: Boolean? = null
@@ -78,15 +77,6 @@ public class ReactNativeFeatureFlagsCxxAccessor : ReactNativeFeatureFlagsAccesso
78
77
  return cached
79
78
  }
80
79
 
81
- override fun allowRecursiveCommitsWithSynchronousMountOnAndroid(): Boolean {
82
- var cached = allowRecursiveCommitsWithSynchronousMountOnAndroidCache
83
- if (cached == null) {
84
- cached = ReactNativeFeatureFlagsCxxInterop.allowRecursiveCommitsWithSynchronousMountOnAndroid()
85
- allowRecursiveCommitsWithSynchronousMountOnAndroidCache = cached
86
- }
87
- return cached
88
- }
89
-
90
80
  override fun batchRenderingUpdatesInEventLoop(): Boolean {
91
81
  var cached = batchRenderingUpdatesInEventLoopCache
92
82
  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<<ad54375c4ae3be2f377260887ae5aaf9>>
7
+ * @generated SignedSource<<774337b6aee6f528b0852704271ed96f>>
8
8
  */
9
9
 
10
10
  /**
@@ -30,8 +30,6 @@ public object ReactNativeFeatureFlagsCxxInterop {
30
30
 
31
31
  @DoNotStrip @JvmStatic public external fun commonTestFlag(): Boolean
32
32
 
33
- @DoNotStrip @JvmStatic public external fun allowRecursiveCommitsWithSynchronousMountOnAndroid(): Boolean
34
-
35
33
  @DoNotStrip @JvmStatic public external fun batchRenderingUpdatesInEventLoop(): Boolean
36
34
 
37
35
  @DoNotStrip @JvmStatic public external fun completeReactInstanceCreationOnBgThreadOnAndroid(): Boolean
@@ -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<<2a0cd5a4875a54bb724e5765ffe7753e>>
7
+ * @generated SignedSource<<43c4ba7a6c4f5a12ada181c081f91bfc>>
8
8
  */
9
9
 
10
10
  /**
@@ -25,8 +25,6 @@ public open class ReactNativeFeatureFlagsDefaults : ReactNativeFeatureFlagsProvi
25
25
 
26
26
  override fun commonTestFlag(): Boolean = false
27
27
 
28
- override fun allowRecursiveCommitsWithSynchronousMountOnAndroid(): Boolean = false
29
-
30
28
  override fun batchRenderingUpdatesInEventLoop(): Boolean = false
31
29
 
32
30
  override fun completeReactInstanceCreationOnBgThreadOnAndroid(): Boolean = false
@@ -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<<d02af2a8ef015c57d45aba8280539606>>
7
+ * @generated SignedSource<<0ca6ebf7ef1418d721b6f183f89b96a2>>
8
8
  */
9
9
 
10
10
  /**
@@ -25,7 +25,6 @@ public class ReactNativeFeatureFlagsLocalAccessor : ReactNativeFeatureFlagsAcces
25
25
  private val accessedFeatureFlags = mutableSetOf<String>()
26
26
 
27
27
  private var commonTestFlagCache: Boolean? = null
28
- private var allowRecursiveCommitsWithSynchronousMountOnAndroidCache: Boolean? = null
29
28
  private var batchRenderingUpdatesInEventLoopCache: Boolean? = null
30
29
  private var completeReactInstanceCreationOnBgThreadOnAndroidCache: Boolean? = null
31
30
  private var destroyFabricSurfacesInReactInstanceManagerCache: Boolean? = null
@@ -83,16 +82,6 @@ public class ReactNativeFeatureFlagsLocalAccessor : ReactNativeFeatureFlagsAcces
83
82
  return cached
84
83
  }
85
84
 
86
- override fun allowRecursiveCommitsWithSynchronousMountOnAndroid(): Boolean {
87
- var cached = allowRecursiveCommitsWithSynchronousMountOnAndroidCache
88
- if (cached == null) {
89
- cached = currentProvider.allowRecursiveCommitsWithSynchronousMountOnAndroid()
90
- accessedFeatureFlags.add("allowRecursiveCommitsWithSynchronousMountOnAndroid")
91
- allowRecursiveCommitsWithSynchronousMountOnAndroidCache = cached
92
- }
93
- return cached
94
- }
95
-
96
85
  override fun batchRenderingUpdatesInEventLoop(): Boolean {
97
86
  var cached = batchRenderingUpdatesInEventLoopCache
98
87
  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<<92b1214e3a526d7c67dcc7b0c2a131de>>
7
+ * @generated SignedSource<<94e1e69be22ec978859e3f242610f21b>>
8
8
  */
9
9
 
10
10
  /**
@@ -25,8 +25,6 @@ import com.facebook.proguard.annotations.DoNotStrip
25
25
  public interface ReactNativeFeatureFlagsProvider {
26
26
  @DoNotStrip public fun commonTestFlag(): Boolean
27
27
 
28
- @DoNotStrip public fun allowRecursiveCommitsWithSynchronousMountOnAndroid(): Boolean
29
-
30
28
  @DoNotStrip public fun batchRenderingUpdatesInEventLoop(): Boolean
31
29
 
32
30
  @DoNotStrip public fun completeReactInstanceCreationOnBgThreadOnAndroid(): Boolean
@@ -17,6 +17,6 @@ public class ReactNativeVersion {
17
17
  public static final Map<String, Object> VERSION = MapBuilder.<String, Object>of(
18
18
  "major", 0,
19
19
  "minor", 76,
20
- "patch", 5,
20
+ "patch", 7,
21
21
  "prerelease", "0");
22
22
  }
@@ -61,6 +61,7 @@ public class TextAttributeProps {
61
61
  public static final short TA_KEY_LINE_BREAK_STRATEGY = 25;
62
62
  public static final short TA_KEY_ROLE = 26;
63
63
  public static final short TA_KEY_TEXT_TRANSFORM = 27;
64
+ public static final short TA_KEY_MAX_FONT_SIZE_MULTIPLIER = 29;
64
65
 
65
66
  public static final int UNSET = -1;
66
67
 
@@ -81,6 +82,7 @@ public class TextAttributeProps {
81
82
  protected float mLineHeight = Float.NaN;
82
83
  protected boolean mIsColorSet = false;
83
84
  protected boolean mAllowFontScaling = true;
85
+ protected float mMaxFontSizeMultiplier = Float.NaN;
84
86
  protected int mColor;
85
87
  protected boolean mIsBackgroundColorSet = false;
86
88
  protected int mBackgroundColor;
@@ -227,6 +229,9 @@ public class TextAttributeProps {
227
229
  case TA_KEY_TEXT_TRANSFORM:
228
230
  result.setTextTransform(entry.getStringValue());
229
231
  break;
232
+ case TA_KEY_MAX_FONT_SIZE_MULTIPLIER:
233
+ result.setMaxFontSizeMultiplier((float) entry.getDoubleValue());
234
+ break;
230
235
  }
231
236
  }
232
237
 
@@ -243,6 +248,8 @@ public class TextAttributeProps {
243
248
  result.setLineHeight(getFloatProp(props, ViewProps.LINE_HEIGHT, ReactConstants.UNSET));
244
249
  result.setLetterSpacing(getFloatProp(props, ViewProps.LETTER_SPACING, Float.NaN));
245
250
  result.setAllowFontScaling(getBooleanProp(props, ViewProps.ALLOW_FONT_SCALING, true));
251
+ result.setMaxFontSizeMultiplier(
252
+ getFloatProp(props, ViewProps.MAX_FONT_SIZE_MULTIPLIER, Float.NaN));
246
253
  result.setFontSize(getFloatProp(props, ViewProps.FONT_SIZE, ReactConstants.UNSET));
247
254
  result.setColor(props.hasKey(ViewProps.COLOR) ? props.getInt(ViewProps.COLOR, 0) : null);
248
255
  result.setColor(
@@ -411,7 +418,14 @@ public class TextAttributeProps {
411
418
  mAllowFontScaling = allowFontScaling;
412
419
  setFontSize(mFontSizeInput);
413
420
  setLineHeight(mLineHeightInput);
414
- setLetterSpacing(mLetterSpacingInput);
421
+ }
422
+ }
423
+
424
+ private void setMaxFontSizeMultiplier(float maxFontSizeMultiplier) {
425
+ if (maxFontSizeMultiplier != mMaxFontSizeMultiplier) {
426
+ mMaxFontSizeMultiplier = maxFontSizeMultiplier;
427
+ setFontSize(mFontSizeInput);
428
+ setLineHeight(mLineHeightInput);
415
429
  }
416
430
  }
417
431
 
@@ -420,7 +434,7 @@ public class TextAttributeProps {
420
434
  if (fontSize != ReactConstants.UNSET) {
421
435
  fontSize =
422
436
  mAllowFontScaling
423
- ? (float) Math.ceil(PixelUtil.toPixelFromSP(fontSize))
437
+ ? (float) Math.ceil(PixelUtil.toPixelFromSP(fontSize, mMaxFontSizeMultiplier))
424
438
  : (float) Math.ceil(PixelUtil.toPixelFromDIP(fontSize));
425
439
  }
426
440
  mFontSize = (int) fontSize;
@@ -889,6 +889,7 @@ public class ReactViewGroup extends ViewGroup
889
889
  }
890
890
  }
891
891
  removeViewsInLayout(index - clippedSoFar, 1);
892
+ invalidate();
892
893
  }
893
894
  removeFromArray(index);
894
895
  }
@@ -501,27 +501,25 @@ void Binding::schedulerShouldRenderTransactions(
501
501
  return;
502
502
  }
503
503
 
504
- if (ReactNativeFeatureFlags::
505
- allowRecursiveCommitsWithSynchronousMountOnAndroid()) {
506
- std::vector<MountingTransaction> pendingTransactions;
507
-
508
- {
509
- // Retain the lock to access the pending transactions but not to execute
510
- // the mount operations because that method can call into this method
511
- // again.
512
- std::unique_lock<std::mutex> lock(pendingTransactionsMutex_);
513
- pendingTransactions_.swap(pendingTransactions);
514
- }
515
504
 
516
- for (auto& transaction : pendingTransactions) {
517
- mountingManager->executeMount(transaction);
518
- }
519
- } else {
505
+ std::vector<MountingTransaction> pendingTransactions;
506
+
507
+ {
508
+ // Retain the lock to access the pending transactions but not to execute
509
+ // the mount operations because that method can call into this method
510
+ // again.
511
+ //
512
+ // This can be re-entrant when mounting manager triggers state updates
513
+ // synchronously (this can happen when committing from the UI thread).
514
+ // This is safe because we're already combining all the transactions for the
515
+ // same surface ID in a single transaction in the pending transactions list,
516
+ // so operations won't run out of order.
520
517
  std::unique_lock<std::mutex> lock(pendingTransactionsMutex_);
521
- for (auto& transaction : pendingTransactions_) {
522
- mountingManager->executeMount(transaction);
523
- }
524
- pendingTransactions_.clear();
518
+ pendingTransactions_.swap(pendingTransactions);
519
+ }
520
+
521
+ for (auto& transaction : pendingTransactions) {
522
+ mountingManager->executeMount(transaction);
525
523
  }
526
524
  }
527
525
 
@@ -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<<c23b21fca18699470580e54b99de1126>>
7
+ * @generated SignedSource<<68e5d4ce0ed3c237eeababaa04821101>>
8
8
  */
9
9
 
10
10
  /**
@@ -45,12 +45,6 @@ class ReactNativeFeatureFlagsProviderHolder
45
45
  return method(javaProvider_);
46
46
  }
47
47
 
48
- bool allowRecursiveCommitsWithSynchronousMountOnAndroid() override {
49
- static const auto method =
50
- getReactNativeFeatureFlagsProviderJavaClass()->getMethod<jboolean()>("allowRecursiveCommitsWithSynchronousMountOnAndroid");
51
- return method(javaProvider_);
52
- }
53
-
54
48
  bool batchRenderingUpdatesInEventLoop() override {
55
49
  static const auto method =
56
50
  getReactNativeFeatureFlagsProviderJavaClass()->getMethod<jboolean()>("batchRenderingUpdatesInEventLoop");
@@ -336,11 +330,6 @@ bool JReactNativeFeatureFlagsCxxInterop::commonTestFlag(
336
330
  return ReactNativeFeatureFlags::commonTestFlag();
337
331
  }
338
332
 
339
- bool JReactNativeFeatureFlagsCxxInterop::allowRecursiveCommitsWithSynchronousMountOnAndroid(
340
- facebook::jni::alias_ref<JReactNativeFeatureFlagsCxxInterop> /*unused*/) {
341
- return ReactNativeFeatureFlags::allowRecursiveCommitsWithSynchronousMountOnAndroid();
342
- }
343
-
344
333
  bool JReactNativeFeatureFlagsCxxInterop::batchRenderingUpdatesInEventLoop(
345
334
  facebook::jni::alias_ref<JReactNativeFeatureFlagsCxxInterop> /*unused*/) {
346
335
  return ReactNativeFeatureFlags::batchRenderingUpdatesInEventLoop();
@@ -591,9 +580,6 @@ void JReactNativeFeatureFlagsCxxInterop::registerNatives() {
591
580
  makeNativeMethod(
592
581
  "commonTestFlag",
593
582
  JReactNativeFeatureFlagsCxxInterop::commonTestFlag),
594
- makeNativeMethod(
595
- "allowRecursiveCommitsWithSynchronousMountOnAndroid",
596
- JReactNativeFeatureFlagsCxxInterop::allowRecursiveCommitsWithSynchronousMountOnAndroid),
597
583
  makeNativeMethod(
598
584
  "batchRenderingUpdatesInEventLoop",
599
585
  JReactNativeFeatureFlagsCxxInterop::batchRenderingUpdatesInEventLoop),
@@ -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<<89d0da3b2bb56a4ee3c887e6c57491b2>>
7
+ * @generated SignedSource<<bba5d2a290f39b6572db7f90b67e8469>>
8
8
  */
9
9
 
10
10
  /**
@@ -33,9 +33,6 @@ class JReactNativeFeatureFlagsCxxInterop
33
33
  static bool commonTestFlag(
34
34
  facebook::jni::alias_ref<JReactNativeFeatureFlagsCxxInterop>);
35
35
 
36
- static bool allowRecursiveCommitsWithSynchronousMountOnAndroid(
37
- facebook::jni::alias_ref<JReactNativeFeatureFlagsCxxInterop>);
38
-
39
36
  static bool batchRenderingUpdatesInEventLoop(
40
37
  facebook::jni::alias_ref<JReactNativeFeatureFlagsCxxInterop>);
41
38
 
@@ -17,7 +17,7 @@ namespace facebook::react {
17
17
  constexpr struct {
18
18
  int32_t Major = 0;
19
19
  int32_t Minor = 76;
20
- int32_t Patch = 5;
20
+ int32_t Patch = 7;
21
21
  std::string_view Prerelease = "0";
22
22
  } ReactNativeVersion;
23
23
 
@@ -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<<6139aa47aac3e5682a453a416bc10236>>
7
+ * @generated SignedSource<<5c4ae3a29f0191428284e0c660353edf>>
8
8
  */
9
9
 
10
10
  /**
@@ -25,10 +25,6 @@ bool ReactNativeFeatureFlags::commonTestFlag() {
25
25
  return getAccessor().commonTestFlag();
26
26
  }
27
27
 
28
- bool ReactNativeFeatureFlags::allowRecursiveCommitsWithSynchronousMountOnAndroid() {
29
- return getAccessor().allowRecursiveCommitsWithSynchronousMountOnAndroid();
30
- }
31
-
32
28
  bool ReactNativeFeatureFlags::batchRenderingUpdatesInEventLoop() {
33
29
  return getAccessor().batchRenderingUpdatesInEventLoop();
34
30
  }
@@ -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<<c8266eb27ec23aaa856fa95275503a81>>
7
+ * @generated SignedSource<<8c40f45357799de60f939b510f1d2ae5>>
8
8
  */
9
9
 
10
10
  /**
@@ -42,11 +42,6 @@ class ReactNativeFeatureFlags {
42
42
  */
43
43
  RN_EXPORT static bool commonTestFlag();
44
44
 
45
- /**
46
- * Adds support for recursively processing commits that mount synchronously (Android only).
47
- */
48
- RN_EXPORT static bool allowRecursiveCommitsWithSynchronousMountOnAndroid();
49
-
50
45
  /**
51
46
  * When enabled, the RuntimeScheduler processing the event loop will batch all rendering updates and dispatch them together at the end of each iteration of the loop.
52
47
  */