react-native 0.83.4 → 0.83.6

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 (114) hide show
  1. package/Libraries/Core/ReactNativeVersion.js +1 -1
  2. package/Libraries/Utilities/Appearance.js +6 -1
  3. package/Libraries/Utilities/HMRClient.js +28 -1
  4. package/React/Base/RCTVersion.m +1 -1
  5. package/React/CoreModules/RCTDevLoadingView.mm +17 -0
  6. package/React/DevSupport/RCTFrameTimingsObserver.h +24 -0
  7. package/React/DevSupport/RCTFrameTimingsObserver.mm +298 -0
  8. package/React/FBReactNativeSpec/FBReactNativeSpecJSI.h +16 -0
  9. package/ReactAndroid/api/ReactAndroid.api +0 -9
  10. package/ReactAndroid/gradle.properties +1 -1
  11. package/ReactAndroid/src/main/java/com/facebook/react/devsupport/BridgelessDevSupportManager.kt +2 -2
  12. package/ReactAndroid/src/main/java/com/facebook/react/devsupport/DevSupportManagerBase.kt +7 -7
  13. package/ReactAndroid/src/main/java/com/facebook/react/devsupport/InspectorFlags.kt +4 -0
  14. package/ReactAndroid/src/main/java/com/facebook/react/devsupport/inspector/FrameTimingSequence.kt +16 -0
  15. package/ReactAndroid/src/main/java/com/facebook/react/devsupport/inspector/FrameTimingsObserver.kt +275 -0
  16. package/ReactAndroid/src/main/java/com/facebook/react/devsupport/inspector/TracingState.kt +17 -0
  17. package/ReactAndroid/src/main/java/com/facebook/react/devsupport/inspector/TracingStateListener.kt +15 -0
  18. package/ReactAndroid/src/main/java/com/facebook/react/devsupport/{interfaces → inspector}/TracingStateProvider.kt +1 -1
  19. package/ReactAndroid/src/main/java/com/facebook/react/devsupport/perfmonitor/PerfMonitorInspectorTargetBinding.kt +1 -1
  20. package/ReactAndroid/src/main/java/com/facebook/react/devsupport/perfmonitor/PerfMonitorOverlayManager.kt +4 -4
  21. package/ReactAndroid/src/main/java/com/facebook/react/devsupport/perfmonitor/PerfMonitorOverlayView.kt +3 -3
  22. package/ReactAndroid/src/main/java/com/facebook/react/devsupport/perfmonitor/PerfMonitorUpdateListener.kt +1 -1
  23. package/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlags.kt +13 -1
  24. package/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsCxxAccessor.kt +21 -1
  25. package/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsCxxInterop.kt +5 -1
  26. package/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsDefaults.kt +5 -1
  27. package/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsLocalAccessor.kt +23 -1
  28. package/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsProvider.kt +5 -1
  29. package/ReactAndroid/src/main/java/com/facebook/react/internal/tracing/PerformanceTracer.kt +39 -0
  30. package/ReactAndroid/src/main/java/com/facebook/react/modules/blob/BlobModule.kt +1 -1
  31. package/ReactAndroid/src/main/java/com/facebook/react/modules/network/NetworkEventUtil.kt +20 -19
  32. package/ReactAndroid/src/main/java/com/facebook/react/modules/network/NetworkingModule.kt +6 -12
  33. package/ReactAndroid/src/main/java/com/facebook/react/modules/systeminfo/ReactNativeVersion.kt +1 -1
  34. package/ReactAndroid/src/main/java/com/facebook/react/runtime/ReactHostImpl.kt +86 -4
  35. package/ReactAndroid/src/main/java/com/facebook/react/runtime/ReactHostImplDevHelper.kt +3 -3
  36. package/ReactAndroid/src/main/java/com/facebook/react/runtime/ReactHostInspectorTarget.kt +10 -6
  37. package/ReactAndroid/src/main/jni/react/devsupport/JInspectorFlags.cpp +22 -0
  38. package/ReactAndroid/src/main/jni/react/devsupport/JInspectorFlags.h +2 -0
  39. package/ReactAndroid/src/main/jni/react/featureflags/JReactNativeFeatureFlagsCxxInterop.cpp +29 -1
  40. package/ReactAndroid/src/main/jni/react/featureflags/JReactNativeFeatureFlagsCxxInterop.h +7 -1
  41. package/ReactAndroid/src/main/jni/react/runtime/jni/JReactHostInspectorTarget.cpp +196 -17
  42. package/ReactAndroid/src/main/jni/react/runtime/jni/JReactHostInspectorTarget.h +168 -18
  43. package/ReactAndroid/src/main/jni/third-party/folly/CMakeLists.txt +1 -0
  44. package/ReactCommon/cxxreact/ReactNativeVersion.h +2 -2
  45. package/ReactCommon/hermes/inspector-modern/chrome/Registration.cpp +44 -2
  46. package/ReactCommon/jsinspector-modern/HostAgent.cpp +45 -10
  47. package/ReactCommon/jsinspector-modern/HostAgent.h +2 -2
  48. package/ReactCommon/jsinspector-modern/HostTarget.cpp +14 -7
  49. package/ReactCommon/jsinspector-modern/HostTarget.h +101 -14
  50. package/ReactCommon/jsinspector-modern/HostTargetTraceRecording.cpp +39 -8
  51. package/ReactCommon/jsinspector-modern/HostTargetTraceRecording.h +42 -5
  52. package/ReactCommon/jsinspector-modern/HostTargetTracing.cpp +54 -21
  53. package/ReactCommon/jsinspector-modern/HostTargetTracing.h +89 -0
  54. package/ReactCommon/jsinspector-modern/InspectorFlags.cpp +12 -0
  55. package/ReactCommon/jsinspector-modern/InspectorFlags.h +12 -0
  56. package/ReactCommon/jsinspector-modern/InspectorInterfaces.cpp +3 -7
  57. package/ReactCommon/jsinspector-modern/InstanceAgent.cpp +2 -11
  58. package/ReactCommon/jsinspector-modern/NetworkIOAgent.cpp +1 -1
  59. package/ReactCommon/jsinspector-modern/RuntimeAgent.cpp +19 -0
  60. package/ReactCommon/jsinspector-modern/RuntimeAgent.h +7 -0
  61. package/ReactCommon/jsinspector-modern/RuntimeTarget.cpp +33 -0
  62. package/ReactCommon/jsinspector-modern/RuntimeTarget.h +6 -0
  63. package/ReactCommon/jsinspector-modern/TracingAgent.cpp +29 -13
  64. package/ReactCommon/jsinspector-modern/TracingAgent.h +5 -4
  65. package/ReactCommon/jsinspector-modern/tests/HostTargetTest.cpp +65 -0
  66. package/ReactCommon/jsinspector-modern/tests/InspectorMocks.h +23 -2
  67. package/ReactCommon/jsinspector-modern/tests/JsiIntegrationTest.cpp +1 -0
  68. package/ReactCommon/jsinspector-modern/tests/NetworkReporterTest.cpp +1 -0
  69. package/ReactCommon/jsinspector-modern/tests/TracingTest.cpp +335 -0
  70. package/ReactCommon/jsinspector-modern/tests/TracingTest.h +95 -0
  71. package/ReactCommon/jsinspector-modern/tests/utils/InspectorFlagOverridesGuard.cpp +10 -0
  72. package/ReactCommon/jsinspector-modern/tests/utils/InspectorFlagOverridesGuard.h +3 -1
  73. package/ReactCommon/jsinspector-modern/tracing/CMakeLists.txt +1 -0
  74. package/ReactCommon/jsinspector-modern/tracing/FrameTimingSequence.h +61 -0
  75. package/ReactCommon/jsinspector-modern/tracing/HostTracingProfile.h +43 -0
  76. package/ReactCommon/jsinspector-modern/tracing/HostTracingProfileSerializer.cpp +165 -0
  77. package/ReactCommon/jsinspector-modern/tracing/HostTracingProfileSerializer.h +50 -0
  78. package/ReactCommon/jsinspector-modern/tracing/PerformanceTracer.cpp +16 -14
  79. package/ReactCommon/jsinspector-modern/tracing/PerformanceTracerSection.h +113 -0
  80. package/ReactCommon/jsinspector-modern/tracing/React-jsinspectortracing.podspec +1 -0
  81. package/ReactCommon/jsinspector-modern/tracing/TimeWindowedBuffer.h +158 -0
  82. package/ReactCommon/jsinspector-modern/tracing/TraceEvent.h +2 -1
  83. package/ReactCommon/jsinspector-modern/tracing/TraceEventGenerator.cpp +100 -0
  84. package/ReactCommon/jsinspector-modern/tracing/TraceEventGenerator.h +60 -0
  85. package/ReactCommon/jsinspector-modern/tracing/TraceEventSerializer.cpp +44 -1
  86. package/ReactCommon/jsinspector-modern/tracing/TraceEventSerializer.h +7 -0
  87. package/ReactCommon/jsinspector-modern/tracing/TraceRecordingState.h +18 -7
  88. package/ReactCommon/jsinspector-modern/tracing/TracingCategory.h +136 -0
  89. package/ReactCommon/jsinspector-modern/tracing/tests/TimeWindowedBufferTest.cpp +352 -0
  90. package/ReactCommon/react/featureflags/ReactNativeFeatureFlags.cpp +9 -1
  91. package/ReactCommon/react/featureflags/ReactNativeFeatureFlags.h +11 -1
  92. package/ReactCommon/react/featureflags/ReactNativeFeatureFlagsAccessor.cpp +65 -29
  93. package/ReactCommon/react/featureflags/ReactNativeFeatureFlagsAccessor.h +6 -2
  94. package/ReactCommon/react/featureflags/ReactNativeFeatureFlagsDefaults.h +9 -1
  95. package/ReactCommon/react/featureflags/ReactNativeFeatureFlagsDynamicProvider.h +19 -1
  96. package/ReactCommon/react/featureflags/ReactNativeFeatureFlagsProvider.h +3 -1
  97. package/ReactCommon/react/nativemodule/core/platform/ios/ReactCommon/RCTTurboModule.mm +3 -1
  98. package/ReactCommon/react/nativemodule/featureflags/NativeReactNativeFeatureFlags.cpp +11 -1
  99. package/ReactCommon/react/nativemodule/featureflags/NativeReactNativeFeatureFlags.h +5 -1
  100. package/ReactCommon/react/performance/timeline/PerformanceObserver.cpp +18 -6
  101. package/ReactCommon/react/performance/timeline/PerformanceObserver.h +2 -0
  102. package/ReactCommon/react/runtime/platform/ios/ReactCommon/RCTHost.mm +115 -0
  103. package/ReactCommon/{jsinspector-modern → react/utils}/Base64.h +2 -2
  104. package/gradle/libs.versions.toml +1 -1
  105. package/package.json +10 -10
  106. package/scripts/cocoapods/utils.rb +1 -0
  107. package/src/private/featureflags/ReactNativeFeatureFlags.js +11 -1
  108. package/src/private/featureflags/specs/NativeReactNativeFeatureFlags.js +3 -1
  109. package/third-party-podspecs/RCT-Folly.podspec +1 -1
  110. package/third-party-podspecs/fmt.podspec +2 -2
  111. package/ReactAndroid/src/main/java/com/facebook/react/devsupport/interfaces/TracingState.kt +0 -19
  112. package/ReactCommon/jsinspector-modern/tracing/TraceRecordingStateSerializer.cpp +0 -68
  113. package/ReactCommon/jsinspector-modern/tracing/TraceRecordingStateSerializer.h +0 -42
  114. package/ReactCommon/jsinspector-modern/tracing/TracingState.h +0 -24
@@ -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<<b570de65df6806128465d53dc26fb6da>>
7
+ * @generated SignedSource<<3c510c97c279768dbf3bfd5c2b2c1903>>
8
8
  */
9
9
 
10
10
  /**
@@ -1055,6 +1055,24 @@ bool ReactNativeFeatureFlagsAccessor::fuseboxEnabledRelease() {
1055
1055
  return flagValue.value();
1056
1056
  }
1057
1057
 
1058
+ bool ReactNativeFeatureFlagsAccessor::fuseboxFrameRecordingEnabled() {
1059
+ auto flagValue = fuseboxFrameRecordingEnabled_.load();
1060
+
1061
+ if (!flagValue.has_value()) {
1062
+ // This block is not exclusive but it is not necessary.
1063
+ // If multiple threads try to initialize the feature flag, we would only
1064
+ // be accessing the provider multiple times but the end state of this
1065
+ // instance and the returned flag value would be the same.
1066
+
1067
+ markFlagAsAccessed(57, "fuseboxFrameRecordingEnabled");
1068
+
1069
+ flagValue = currentProvider_->fuseboxFrameRecordingEnabled();
1070
+ fuseboxFrameRecordingEnabled_ = flagValue;
1071
+ }
1072
+
1073
+ return flagValue.value();
1074
+ }
1075
+
1058
1076
  bool ReactNativeFeatureFlagsAccessor::fuseboxNetworkInspectionEnabled() {
1059
1077
  auto flagValue = fuseboxNetworkInspectionEnabled_.load();
1060
1078
 
@@ -1064,7 +1082,7 @@ bool ReactNativeFeatureFlagsAccessor::fuseboxNetworkInspectionEnabled() {
1064
1082
  // be accessing the provider multiple times but the end state of this
1065
1083
  // instance and the returned flag value would be the same.
1066
1084
 
1067
- markFlagAsAccessed(57, "fuseboxNetworkInspectionEnabled");
1085
+ markFlagAsAccessed(58, "fuseboxNetworkInspectionEnabled");
1068
1086
 
1069
1087
  flagValue = currentProvider_->fuseboxNetworkInspectionEnabled();
1070
1088
  fuseboxNetworkInspectionEnabled_ = flagValue;
@@ -1073,6 +1091,24 @@ bool ReactNativeFeatureFlagsAccessor::fuseboxNetworkInspectionEnabled() {
1073
1091
  return flagValue.value();
1074
1092
  }
1075
1093
 
1094
+ bool ReactNativeFeatureFlagsAccessor::fuseboxScreenshotCaptureEnabled() {
1095
+ auto flagValue = fuseboxScreenshotCaptureEnabled_.load();
1096
+
1097
+ if (!flagValue.has_value()) {
1098
+ // This block is not exclusive but it is not necessary.
1099
+ // If multiple threads try to initialize the feature flag, we would only
1100
+ // be accessing the provider multiple times but the end state of this
1101
+ // instance and the returned flag value would be the same.
1102
+
1103
+ markFlagAsAccessed(59, "fuseboxScreenshotCaptureEnabled");
1104
+
1105
+ flagValue = currentProvider_->fuseboxScreenshotCaptureEnabled();
1106
+ fuseboxScreenshotCaptureEnabled_ = flagValue;
1107
+ }
1108
+
1109
+ return flagValue.value();
1110
+ }
1111
+
1076
1112
  bool ReactNativeFeatureFlagsAccessor::hideOffscreenVirtualViewsOnIOS() {
1077
1113
  auto flagValue = hideOffscreenVirtualViewsOnIOS_.load();
1078
1114
 
@@ -1082,7 +1118,7 @@ bool ReactNativeFeatureFlagsAccessor::hideOffscreenVirtualViewsOnIOS() {
1082
1118
  // be accessing the provider multiple times but the end state of this
1083
1119
  // instance and the returned flag value would be the same.
1084
1120
 
1085
- markFlagAsAccessed(58, "hideOffscreenVirtualViewsOnIOS");
1121
+ markFlagAsAccessed(60, "hideOffscreenVirtualViewsOnIOS");
1086
1122
 
1087
1123
  flagValue = currentProvider_->hideOffscreenVirtualViewsOnIOS();
1088
1124
  hideOffscreenVirtualViewsOnIOS_ = flagValue;
@@ -1100,7 +1136,7 @@ bool ReactNativeFeatureFlagsAccessor::overrideBySynchronousMountPropsAtMountingA
1100
1136
  // be accessing the provider multiple times but the end state of this
1101
1137
  // instance and the returned flag value would be the same.
1102
1138
 
1103
- markFlagAsAccessed(59, "overrideBySynchronousMountPropsAtMountingAndroid");
1139
+ markFlagAsAccessed(61, "overrideBySynchronousMountPropsAtMountingAndroid");
1104
1140
 
1105
1141
  flagValue = currentProvider_->overrideBySynchronousMountPropsAtMountingAndroid();
1106
1142
  overrideBySynchronousMountPropsAtMountingAndroid_ = flagValue;
@@ -1118,7 +1154,7 @@ bool ReactNativeFeatureFlagsAccessor::perfIssuesEnabled() {
1118
1154
  // be accessing the provider multiple times but the end state of this
1119
1155
  // instance and the returned flag value would be the same.
1120
1156
 
1121
- markFlagAsAccessed(60, "perfIssuesEnabled");
1157
+ markFlagAsAccessed(62, "perfIssuesEnabled");
1122
1158
 
1123
1159
  flagValue = currentProvider_->perfIssuesEnabled();
1124
1160
  perfIssuesEnabled_ = flagValue;
@@ -1136,7 +1172,7 @@ bool ReactNativeFeatureFlagsAccessor::perfMonitorV2Enabled() {
1136
1172
  // be accessing the provider multiple times but the end state of this
1137
1173
  // instance and the returned flag value would be the same.
1138
1174
 
1139
- markFlagAsAccessed(61, "perfMonitorV2Enabled");
1175
+ markFlagAsAccessed(63, "perfMonitorV2Enabled");
1140
1176
 
1141
1177
  flagValue = currentProvider_->perfMonitorV2Enabled();
1142
1178
  perfMonitorV2Enabled_ = flagValue;
@@ -1154,7 +1190,7 @@ double ReactNativeFeatureFlagsAccessor::preparedTextCacheSize() {
1154
1190
  // be accessing the provider multiple times but the end state of this
1155
1191
  // instance and the returned flag value would be the same.
1156
1192
 
1157
- markFlagAsAccessed(62, "preparedTextCacheSize");
1193
+ markFlagAsAccessed(64, "preparedTextCacheSize");
1158
1194
 
1159
1195
  flagValue = currentProvider_->preparedTextCacheSize();
1160
1196
  preparedTextCacheSize_ = flagValue;
@@ -1172,7 +1208,7 @@ bool ReactNativeFeatureFlagsAccessor::preventShadowTreeCommitExhaustion() {
1172
1208
  // be accessing the provider multiple times but the end state of this
1173
1209
  // instance and the returned flag value would be the same.
1174
1210
 
1175
- markFlagAsAccessed(63, "preventShadowTreeCommitExhaustion");
1211
+ markFlagAsAccessed(65, "preventShadowTreeCommitExhaustion");
1176
1212
 
1177
1213
  flagValue = currentProvider_->preventShadowTreeCommitExhaustion();
1178
1214
  preventShadowTreeCommitExhaustion_ = flagValue;
@@ -1190,7 +1226,7 @@ bool ReactNativeFeatureFlagsAccessor::shouldPressibilityUseW3CPointerEventsForHo
1190
1226
  // be accessing the provider multiple times but the end state of this
1191
1227
  // instance and the returned flag value would be the same.
1192
1228
 
1193
- markFlagAsAccessed(64, "shouldPressibilityUseW3CPointerEventsForHover");
1229
+ markFlagAsAccessed(66, "shouldPressibilityUseW3CPointerEventsForHover");
1194
1230
 
1195
1231
  flagValue = currentProvider_->shouldPressibilityUseW3CPointerEventsForHover();
1196
1232
  shouldPressibilityUseW3CPointerEventsForHover_ = flagValue;
@@ -1208,7 +1244,7 @@ bool ReactNativeFeatureFlagsAccessor::shouldTriggerResponderTransferOnScrollAndr
1208
1244
  // be accessing the provider multiple times but the end state of this
1209
1245
  // instance and the returned flag value would be the same.
1210
1246
 
1211
- markFlagAsAccessed(65, "shouldTriggerResponderTransferOnScrollAndroid");
1247
+ markFlagAsAccessed(67, "shouldTriggerResponderTransferOnScrollAndroid");
1212
1248
 
1213
1249
  flagValue = currentProvider_->shouldTriggerResponderTransferOnScrollAndroid();
1214
1250
  shouldTriggerResponderTransferOnScrollAndroid_ = flagValue;
@@ -1226,7 +1262,7 @@ bool ReactNativeFeatureFlagsAccessor::skipActivityIdentityAssertionOnHostPause()
1226
1262
  // be accessing the provider multiple times but the end state of this
1227
1263
  // instance and the returned flag value would be the same.
1228
1264
 
1229
- markFlagAsAccessed(66, "skipActivityIdentityAssertionOnHostPause");
1265
+ markFlagAsAccessed(68, "skipActivityIdentityAssertionOnHostPause");
1230
1266
 
1231
1267
  flagValue = currentProvider_->skipActivityIdentityAssertionOnHostPause();
1232
1268
  skipActivityIdentityAssertionOnHostPause_ = flagValue;
@@ -1244,7 +1280,7 @@ bool ReactNativeFeatureFlagsAccessor::sweepActiveTouchOnChildNativeGesturesAndro
1244
1280
  // be accessing the provider multiple times but the end state of this
1245
1281
  // instance and the returned flag value would be the same.
1246
1282
 
1247
- markFlagAsAccessed(67, "sweepActiveTouchOnChildNativeGesturesAndroid");
1283
+ markFlagAsAccessed(69, "sweepActiveTouchOnChildNativeGesturesAndroid");
1248
1284
 
1249
1285
  flagValue = currentProvider_->sweepActiveTouchOnChildNativeGesturesAndroid();
1250
1286
  sweepActiveTouchOnChildNativeGesturesAndroid_ = flagValue;
@@ -1262,7 +1298,7 @@ bool ReactNativeFeatureFlagsAccessor::traceTurboModulePromiseRejectionsOnAndroid
1262
1298
  // be accessing the provider multiple times but the end state of this
1263
1299
  // instance and the returned flag value would be the same.
1264
1300
 
1265
- markFlagAsAccessed(68, "traceTurboModulePromiseRejectionsOnAndroid");
1301
+ markFlagAsAccessed(70, "traceTurboModulePromiseRejectionsOnAndroid");
1266
1302
 
1267
1303
  flagValue = currentProvider_->traceTurboModulePromiseRejectionsOnAndroid();
1268
1304
  traceTurboModulePromiseRejectionsOnAndroid_ = flagValue;
@@ -1280,7 +1316,7 @@ bool ReactNativeFeatureFlagsAccessor::updateRuntimeShadowNodeReferencesOnCommit(
1280
1316
  // be accessing the provider multiple times but the end state of this
1281
1317
  // instance and the returned flag value would be the same.
1282
1318
 
1283
- markFlagAsAccessed(69, "updateRuntimeShadowNodeReferencesOnCommit");
1319
+ markFlagAsAccessed(71, "updateRuntimeShadowNodeReferencesOnCommit");
1284
1320
 
1285
1321
  flagValue = currentProvider_->updateRuntimeShadowNodeReferencesOnCommit();
1286
1322
  updateRuntimeShadowNodeReferencesOnCommit_ = flagValue;
@@ -1298,7 +1334,7 @@ bool ReactNativeFeatureFlagsAccessor::useAlwaysAvailableJSErrorHandling() {
1298
1334
  // be accessing the provider multiple times but the end state of this
1299
1335
  // instance and the returned flag value would be the same.
1300
1336
 
1301
- markFlagAsAccessed(70, "useAlwaysAvailableJSErrorHandling");
1337
+ markFlagAsAccessed(72, "useAlwaysAvailableJSErrorHandling");
1302
1338
 
1303
1339
  flagValue = currentProvider_->useAlwaysAvailableJSErrorHandling();
1304
1340
  useAlwaysAvailableJSErrorHandling_ = flagValue;
@@ -1316,7 +1352,7 @@ bool ReactNativeFeatureFlagsAccessor::useFabricInterop() {
1316
1352
  // be accessing the provider multiple times but the end state of this
1317
1353
  // instance and the returned flag value would be the same.
1318
1354
 
1319
- markFlagAsAccessed(71, "useFabricInterop");
1355
+ markFlagAsAccessed(73, "useFabricInterop");
1320
1356
 
1321
1357
  flagValue = currentProvider_->useFabricInterop();
1322
1358
  useFabricInterop_ = flagValue;
@@ -1334,7 +1370,7 @@ bool ReactNativeFeatureFlagsAccessor::useNativeEqualsInNativeReadableArrayAndroi
1334
1370
  // be accessing the provider multiple times but the end state of this
1335
1371
  // instance and the returned flag value would be the same.
1336
1372
 
1337
- markFlagAsAccessed(72, "useNativeEqualsInNativeReadableArrayAndroid");
1373
+ markFlagAsAccessed(74, "useNativeEqualsInNativeReadableArrayAndroid");
1338
1374
 
1339
1375
  flagValue = currentProvider_->useNativeEqualsInNativeReadableArrayAndroid();
1340
1376
  useNativeEqualsInNativeReadableArrayAndroid_ = flagValue;
@@ -1352,7 +1388,7 @@ bool ReactNativeFeatureFlagsAccessor::useNativeTransformHelperAndroid() {
1352
1388
  // be accessing the provider multiple times but the end state of this
1353
1389
  // instance and the returned flag value would be the same.
1354
1390
 
1355
- markFlagAsAccessed(73, "useNativeTransformHelperAndroid");
1391
+ markFlagAsAccessed(75, "useNativeTransformHelperAndroid");
1356
1392
 
1357
1393
  flagValue = currentProvider_->useNativeTransformHelperAndroid();
1358
1394
  useNativeTransformHelperAndroid_ = flagValue;
@@ -1370,7 +1406,7 @@ bool ReactNativeFeatureFlagsAccessor::useNativeViewConfigsInBridgelessMode() {
1370
1406
  // be accessing the provider multiple times but the end state of this
1371
1407
  // instance and the returned flag value would be the same.
1372
1408
 
1373
- markFlagAsAccessed(74, "useNativeViewConfigsInBridgelessMode");
1409
+ markFlagAsAccessed(76, "useNativeViewConfigsInBridgelessMode");
1374
1410
 
1375
1411
  flagValue = currentProvider_->useNativeViewConfigsInBridgelessMode();
1376
1412
  useNativeViewConfigsInBridgelessMode_ = flagValue;
@@ -1388,7 +1424,7 @@ bool ReactNativeFeatureFlagsAccessor::useOptimizedEventBatchingOnAndroid() {
1388
1424
  // be accessing the provider multiple times but the end state of this
1389
1425
  // instance and the returned flag value would be the same.
1390
1426
 
1391
- markFlagAsAccessed(75, "useOptimizedEventBatchingOnAndroid");
1427
+ markFlagAsAccessed(77, "useOptimizedEventBatchingOnAndroid");
1392
1428
 
1393
1429
  flagValue = currentProvider_->useOptimizedEventBatchingOnAndroid();
1394
1430
  useOptimizedEventBatchingOnAndroid_ = flagValue;
@@ -1406,7 +1442,7 @@ bool ReactNativeFeatureFlagsAccessor::useRawPropsJsiValue() {
1406
1442
  // be accessing the provider multiple times but the end state of this
1407
1443
  // instance and the returned flag value would be the same.
1408
1444
 
1409
- markFlagAsAccessed(76, "useRawPropsJsiValue");
1445
+ markFlagAsAccessed(78, "useRawPropsJsiValue");
1410
1446
 
1411
1447
  flagValue = currentProvider_->useRawPropsJsiValue();
1412
1448
  useRawPropsJsiValue_ = flagValue;
@@ -1424,7 +1460,7 @@ bool ReactNativeFeatureFlagsAccessor::useShadowNodeStateOnClone() {
1424
1460
  // be accessing the provider multiple times but the end state of this
1425
1461
  // instance and the returned flag value would be the same.
1426
1462
 
1427
- markFlagAsAccessed(77, "useShadowNodeStateOnClone");
1463
+ markFlagAsAccessed(79, "useShadowNodeStateOnClone");
1428
1464
 
1429
1465
  flagValue = currentProvider_->useShadowNodeStateOnClone();
1430
1466
  useShadowNodeStateOnClone_ = flagValue;
@@ -1442,7 +1478,7 @@ bool ReactNativeFeatureFlagsAccessor::useSharedAnimatedBackend() {
1442
1478
  // be accessing the provider multiple times but the end state of this
1443
1479
  // instance and the returned flag value would be the same.
1444
1480
 
1445
- markFlagAsAccessed(78, "useSharedAnimatedBackend");
1481
+ markFlagAsAccessed(80, "useSharedAnimatedBackend");
1446
1482
 
1447
1483
  flagValue = currentProvider_->useSharedAnimatedBackend();
1448
1484
  useSharedAnimatedBackend_ = flagValue;
@@ -1460,7 +1496,7 @@ bool ReactNativeFeatureFlagsAccessor::useTraitHiddenOnAndroid() {
1460
1496
  // be accessing the provider multiple times but the end state of this
1461
1497
  // instance and the returned flag value would be the same.
1462
1498
 
1463
- markFlagAsAccessed(79, "useTraitHiddenOnAndroid");
1499
+ markFlagAsAccessed(81, "useTraitHiddenOnAndroid");
1464
1500
 
1465
1501
  flagValue = currentProvider_->useTraitHiddenOnAndroid();
1466
1502
  useTraitHiddenOnAndroid_ = flagValue;
@@ -1478,7 +1514,7 @@ bool ReactNativeFeatureFlagsAccessor::useTurboModuleInterop() {
1478
1514
  // be accessing the provider multiple times but the end state of this
1479
1515
  // instance and the returned flag value would be the same.
1480
1516
 
1481
- markFlagAsAccessed(80, "useTurboModuleInterop");
1517
+ markFlagAsAccessed(82, "useTurboModuleInterop");
1482
1518
 
1483
1519
  flagValue = currentProvider_->useTurboModuleInterop();
1484
1520
  useTurboModuleInterop_ = flagValue;
@@ -1496,7 +1532,7 @@ bool ReactNativeFeatureFlagsAccessor::useTurboModules() {
1496
1532
  // be accessing the provider multiple times but the end state of this
1497
1533
  // instance and the returned flag value would be the same.
1498
1534
 
1499
- markFlagAsAccessed(81, "useTurboModules");
1535
+ markFlagAsAccessed(83, "useTurboModules");
1500
1536
 
1501
1537
  flagValue = currentProvider_->useTurboModules();
1502
1538
  useTurboModules_ = flagValue;
@@ -1514,7 +1550,7 @@ double ReactNativeFeatureFlagsAccessor::viewCullingOutsetRatio() {
1514
1550
  // be accessing the provider multiple times but the end state of this
1515
1551
  // instance and the returned flag value would be the same.
1516
1552
 
1517
- markFlagAsAccessed(82, "viewCullingOutsetRatio");
1553
+ markFlagAsAccessed(84, "viewCullingOutsetRatio");
1518
1554
 
1519
1555
  flagValue = currentProvider_->viewCullingOutsetRatio();
1520
1556
  viewCullingOutsetRatio_ = flagValue;
@@ -1532,7 +1568,7 @@ double ReactNativeFeatureFlagsAccessor::virtualViewHysteresisRatio() {
1532
1568
  // be accessing the provider multiple times but the end state of this
1533
1569
  // instance and the returned flag value would be the same.
1534
1570
 
1535
- markFlagAsAccessed(83, "virtualViewHysteresisRatio");
1571
+ markFlagAsAccessed(85, "virtualViewHysteresisRatio");
1536
1572
 
1537
1573
  flagValue = currentProvider_->virtualViewHysteresisRatio();
1538
1574
  virtualViewHysteresisRatio_ = flagValue;
@@ -1550,7 +1586,7 @@ double ReactNativeFeatureFlagsAccessor::virtualViewPrerenderRatio() {
1550
1586
  // be accessing the provider multiple times but the end state of this
1551
1587
  // instance and the returned flag value would be the same.
1552
1588
 
1553
- markFlagAsAccessed(84, "virtualViewPrerenderRatio");
1589
+ markFlagAsAccessed(86, "virtualViewPrerenderRatio");
1554
1590
 
1555
1591
  flagValue = currentProvider_->virtualViewPrerenderRatio();
1556
1592
  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<<b88e97176f25900602b0821e16af4d12>>
7
+ * @generated SignedSource<<c2d5d69c054d37738687e71db5da210d>>
8
8
  */
9
9
 
10
10
  /**
@@ -89,7 +89,9 @@ class ReactNativeFeatureFlagsAccessor {
89
89
  bool fixMappingOfEventPrioritiesBetweenFabricAndReact();
90
90
  bool fuseboxAssertSingleHostState();
91
91
  bool fuseboxEnabledRelease();
92
+ bool fuseboxFrameRecordingEnabled();
92
93
  bool fuseboxNetworkInspectionEnabled();
94
+ bool fuseboxScreenshotCaptureEnabled();
93
95
  bool hideOffscreenVirtualViewsOnIOS();
94
96
  bool overrideBySynchronousMountPropsAtMountingAndroid();
95
97
  bool perfIssuesEnabled();
@@ -128,7 +130,7 @@ class ReactNativeFeatureFlagsAccessor {
128
130
  std::unique_ptr<ReactNativeFeatureFlagsProvider> currentProvider_;
129
131
  bool wasOverridden_;
130
132
 
131
- std::array<std::atomic<const char*>, 85> accessedFeatureFlags_;
133
+ std::array<std::atomic<const char*>, 87> accessedFeatureFlags_;
132
134
 
133
135
  std::atomic<std::optional<bool>> commonTestFlag_;
134
136
  std::atomic<std::optional<bool>> cdpInteractionMetricsEnabled_;
@@ -187,7 +189,9 @@ class ReactNativeFeatureFlagsAccessor {
187
189
  std::atomic<std::optional<bool>> fixMappingOfEventPrioritiesBetweenFabricAndReact_;
188
190
  std::atomic<std::optional<bool>> fuseboxAssertSingleHostState_;
189
191
  std::atomic<std::optional<bool>> fuseboxEnabledRelease_;
192
+ std::atomic<std::optional<bool>> fuseboxFrameRecordingEnabled_;
190
193
  std::atomic<std::optional<bool>> fuseboxNetworkInspectionEnabled_;
194
+ std::atomic<std::optional<bool>> fuseboxScreenshotCaptureEnabled_;
191
195
  std::atomic<std::optional<bool>> hideOffscreenVirtualViewsOnIOS_;
192
196
  std::atomic<std::optional<bool>> overrideBySynchronousMountPropsAtMountingAndroid_;
193
197
  std::atomic<std::optional<bool>> perfIssuesEnabled_;
@@ -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<<f8c2279957d1c654502ea5aa0f66beba>>
7
+ * @generated SignedSource<<d726518e7e191f59f8c89b5c14c168fd>>
8
8
  */
9
9
 
10
10
  /**
@@ -255,10 +255,18 @@ class ReactNativeFeatureFlagsDefaults : public ReactNativeFeatureFlagsProvider {
255
255
  return false;
256
256
  }
257
257
 
258
+ bool fuseboxFrameRecordingEnabled() override {
259
+ return false;
260
+ }
261
+
258
262
  bool fuseboxNetworkInspectionEnabled() override {
259
263
  return true;
260
264
  }
261
265
 
266
+ bool fuseboxScreenshotCaptureEnabled() override {
267
+ return false;
268
+ }
269
+
262
270
  bool hideOffscreenVirtualViewsOnIOS() override {
263
271
  return false;
264
272
  }
@@ -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<<b4abe68bba3cca50754f060a278f9896>>
7
+ * @generated SignedSource<<6e8731d9d7642d65b9b707741ef71873>>
8
8
  */
9
9
 
10
10
  /**
@@ -558,6 +558,15 @@ class ReactNativeFeatureFlagsDynamicProvider : public ReactNativeFeatureFlagsDef
558
558
  return ReactNativeFeatureFlagsDefaults::fuseboxEnabledRelease();
559
559
  }
560
560
 
561
+ bool fuseboxFrameRecordingEnabled() override {
562
+ auto value = values_["fuseboxFrameRecordingEnabled"];
563
+ if (!value.isNull()) {
564
+ return value.getBool();
565
+ }
566
+
567
+ return ReactNativeFeatureFlagsDefaults::fuseboxFrameRecordingEnabled();
568
+ }
569
+
561
570
  bool fuseboxNetworkInspectionEnabled() override {
562
571
  auto value = values_["fuseboxNetworkInspectionEnabled"];
563
572
  if (!value.isNull()) {
@@ -567,6 +576,15 @@ class ReactNativeFeatureFlagsDynamicProvider : public ReactNativeFeatureFlagsDef
567
576
  return ReactNativeFeatureFlagsDefaults::fuseboxNetworkInspectionEnabled();
568
577
  }
569
578
 
579
+ bool fuseboxScreenshotCaptureEnabled() override {
580
+ auto value = values_["fuseboxScreenshotCaptureEnabled"];
581
+ if (!value.isNull()) {
582
+ return value.getBool();
583
+ }
584
+
585
+ return ReactNativeFeatureFlagsDefaults::fuseboxScreenshotCaptureEnabled();
586
+ }
587
+
570
588
  bool hideOffscreenVirtualViewsOnIOS() override {
571
589
  auto value = values_["hideOffscreenVirtualViewsOnIOS"];
572
590
  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<<06c6740fe7d613f235ae791da750bd52>>
7
+ * @generated SignedSource<<886710691ddc524f90129b6921cb2c2a>>
8
8
  */
9
9
 
10
10
  /**
@@ -82,7 +82,9 @@ class ReactNativeFeatureFlagsProvider {
82
82
  virtual bool fixMappingOfEventPrioritiesBetweenFabricAndReact() = 0;
83
83
  virtual bool fuseboxAssertSingleHostState() = 0;
84
84
  virtual bool fuseboxEnabledRelease() = 0;
85
+ virtual bool fuseboxFrameRecordingEnabled() = 0;
85
86
  virtual bool fuseboxNetworkInspectionEnabled() = 0;
87
+ virtual bool fuseboxScreenshotCaptureEnabled() = 0;
86
88
  virtual bool hideOffscreenVirtualViewsOnIOS() = 0;
87
89
  virtual bool overrideBySynchronousMountPropsAtMountingAndroid() = 0;
88
90
  virtual bool perfIssuesEnabled() = 0;
@@ -470,7 +470,9 @@ void ObjCTurboModule::performVoidMethodInvocation(
470
470
  @try {
471
471
  [inv invokeWithTarget:strongModule];
472
472
  } @catch (NSException *exception) {
473
- throw convertNSExceptionToJSError(runtime, exception, std::string{moduleName}, methodNameStr);
473
+ // Void methods are always async, re-throw instead of converting to
474
+ // JSError, same as the async branch in performMethodInvocation.
475
+ @throw exception;
474
476
  } @finally {
475
477
  [retainedObjectsForInvocation removeAllObjects];
476
478
  }
@@ -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<<3f6cc9604905bb29a9524a97eaa294bd>>
7
+ * @generated SignedSource<<884b5382bd771ceb400f15ab4069bc75>>
8
8
  */
9
9
 
10
10
  /**
@@ -329,11 +329,21 @@ bool NativeReactNativeFeatureFlags::fuseboxEnabledRelease(
329
329
  return ReactNativeFeatureFlags::fuseboxEnabledRelease();
330
330
  }
331
331
 
332
+ bool NativeReactNativeFeatureFlags::fuseboxFrameRecordingEnabled(
333
+ jsi::Runtime& /*runtime*/) {
334
+ return ReactNativeFeatureFlags::fuseboxFrameRecordingEnabled();
335
+ }
336
+
332
337
  bool NativeReactNativeFeatureFlags::fuseboxNetworkInspectionEnabled(
333
338
  jsi::Runtime& /*runtime*/) {
334
339
  return ReactNativeFeatureFlags::fuseboxNetworkInspectionEnabled();
335
340
  }
336
341
 
342
+ bool NativeReactNativeFeatureFlags::fuseboxScreenshotCaptureEnabled(
343
+ jsi::Runtime& /*runtime*/) {
344
+ return ReactNativeFeatureFlags::fuseboxScreenshotCaptureEnabled();
345
+ }
346
+
337
347
  bool NativeReactNativeFeatureFlags::hideOffscreenVirtualViewsOnIOS(
338
348
  jsi::Runtime& /*runtime*/) {
339
349
  return ReactNativeFeatureFlags::hideOffscreenVirtualViewsOnIOS();
@@ -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<<dece70d27e5d2e4d052ca4e158c4b968>>
7
+ * @generated SignedSource<<41e6644bf2ceca861bfb1e491c912c1d>>
8
8
  */
9
9
 
10
10
  /**
@@ -150,8 +150,12 @@ class NativeReactNativeFeatureFlags
150
150
 
151
151
  bool fuseboxEnabledRelease(jsi::Runtime& runtime);
152
152
 
153
+ bool fuseboxFrameRecordingEnabled(jsi::Runtime& runtime);
154
+
153
155
  bool fuseboxNetworkInspectionEnabled(jsi::Runtime& runtime);
154
156
 
157
+ bool fuseboxScreenshotCaptureEnabled(jsi::Runtime& runtime);
158
+
155
159
  bool hideOffscreenVirtualViewsOnIOS(jsi::Runtime& runtime);
156
160
 
157
161
  bool overrideBySynchronousMountPropsAtMountingAndroid(jsi::Runtime& runtime);
@@ -25,16 +25,21 @@ void PerformanceObserver::handleEntry(const PerformanceEntry& entry) {
25
25
  return;
26
26
  }
27
27
 
28
- buffer_.push_back(entry);
28
+ {
29
+ std::lock_guard lock(bufferMutex_);
30
+ buffer_.push_back(entry);
31
+ }
29
32
  scheduleFlushBuffer();
30
33
  }
31
34
  }
32
35
 
33
36
  std::vector<PerformanceEntry> PerformanceObserver::takeRecords() {
34
37
  std::vector<PerformanceEntry> result;
35
- buffer_.swap(result);
36
-
37
- didScheduleFlushBuffer_ = false;
38
+ {
39
+ std::lock_guard lock(bufferMutex_);
40
+ buffer_.swap(result);
41
+ didScheduleFlushBuffer_ = false;
42
+ }
38
43
 
39
44
  return result;
40
45
  }
@@ -87,9 +92,16 @@ void PerformanceObserver::disconnect() noexcept {
87
92
  }
88
93
 
89
94
  void PerformanceObserver::scheduleFlushBuffer() {
90
- if (!didScheduleFlushBuffer_) {
91
- didScheduleFlushBuffer_ = true;
95
+ bool shouldSchedule = false;
96
+ {
97
+ std::lock_guard lock(bufferMutex_);
98
+ if (!didScheduleFlushBuffer_) {
99
+ didScheduleFlushBuffer_ = true;
100
+ shouldSchedule = true;
101
+ }
102
+ }
92
103
 
104
+ if (shouldSchedule) {
93
105
  callback_();
94
106
  }
95
107
  }
@@ -14,6 +14,7 @@
14
14
 
15
15
  #include <functional>
16
16
  #include <memory>
17
+ #include <mutex>
17
18
  #include <unordered_set>
18
19
  #include <vector>
19
20
 
@@ -126,6 +127,7 @@ class PerformanceObserver : public std::enable_shared_from_this<PerformanceObser
126
127
 
127
128
  /// https://www.w3.org/TR/event-timing/#sec-modifications-perf-timeline
128
129
  HighResDuration durationThreshold_ = DEFAULT_DURATION_THRESHOLD;
130
+ std::mutex bufferMutex_;
129
131
  std::vector<PerformanceEntry> buffer_;
130
132
  bool didScheduleFlushBuffer_ = false;
131
133
  bool requiresDroppedEntries_ = false;