react-native-tvos 0.83.4-2 → 0.83.9-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 (153) hide show
  1. package/Libraries/Core/ReactNativeVersion.js +2 -2
  2. package/Libraries/Utilities/Appearance.js +6 -1
  3. package/Libraries/Utilities/HMRClient.js +28 -1
  4. package/React/Base/RCTVersion.m +2 -2
  5. package/React/CoreModules/RCTDevLoadingView.mm +17 -0
  6. package/React/CoreModules/RCTJscSafeUrl+Internal.h +23 -0
  7. package/React/CoreModules/RCTJscSafeUrl.mm +38 -0
  8. package/React/CoreModules/RCTRedBox+Internal.h +42 -0
  9. package/React/CoreModules/RCTRedBox.mm +30 -471
  10. package/React/CoreModules/RCTRedBox2AnsiParser+Internal.h +22 -0
  11. package/React/CoreModules/RCTRedBox2AnsiParser.mm +55 -0
  12. package/React/CoreModules/RCTRedBox2Controller+Internal.h +34 -0
  13. package/React/CoreModules/RCTRedBox2Controller.mm +764 -0
  14. package/React/CoreModules/RCTRedBox2ErrorParser+Internal.h +46 -0
  15. package/React/CoreModules/RCTRedBox2ErrorParser.mm +57 -0
  16. package/React/CoreModules/RCTRedBoxController+Internal.h +31 -0
  17. package/React/CoreModules/RCTRedBoxController.mm +447 -0
  18. package/React/CoreModules/RCTRedBoxHMRClient+Internal.h +26 -0
  19. package/React/CoreModules/RCTRedBoxHMRClient.mm +125 -0
  20. package/React/CoreModules/React-CoreModules.podspec +1 -0
  21. package/React/DevSupport/RCTFrameTimingsObserver.h +24 -0
  22. package/React/DevSupport/RCTFrameTimingsObserver.mm +298 -0
  23. package/React/FBReactNativeSpec/FBReactNativeSpecJSI.h +40 -0
  24. package/React/Fabric/Mounting/ComponentViews/View/RCTViewComponentView.mm +1 -2
  25. package/ReactAndroid/api/ReactAndroid.api +0 -9
  26. package/ReactAndroid/gradle.properties +1 -1
  27. package/ReactAndroid/publish.gradle +20 -46
  28. package/ReactAndroid/src/main/java/com/facebook/react/devsupport/BridgelessDevSupportManager.kt +2 -2
  29. package/ReactAndroid/src/main/java/com/facebook/react/devsupport/DevSupportManagerBase.kt +7 -7
  30. package/ReactAndroid/src/main/java/com/facebook/react/devsupport/InspectorFlags.kt +4 -0
  31. package/ReactAndroid/src/main/java/com/facebook/react/devsupport/inspector/FrameTimingSequence.kt +16 -0
  32. package/ReactAndroid/src/main/java/com/facebook/react/devsupport/inspector/FrameTimingsObserver.kt +275 -0
  33. package/ReactAndroid/src/main/java/com/facebook/react/devsupport/inspector/TracingState.kt +17 -0
  34. package/ReactAndroid/src/main/java/com/facebook/react/devsupport/inspector/TracingStateListener.kt +15 -0
  35. package/ReactAndroid/src/main/java/com/facebook/react/devsupport/{interfaces → inspector}/TracingStateProvider.kt +1 -1
  36. package/ReactAndroid/src/main/java/com/facebook/react/devsupport/perfmonitor/PerfMonitorInspectorTargetBinding.kt +1 -1
  37. package/ReactAndroid/src/main/java/com/facebook/react/devsupport/perfmonitor/PerfMonitorOverlayManager.kt +4 -4
  38. package/ReactAndroid/src/main/java/com/facebook/react/devsupport/perfmonitor/PerfMonitorOverlayView.kt +3 -3
  39. package/ReactAndroid/src/main/java/com/facebook/react/devsupport/perfmonitor/PerfMonitorUpdateListener.kt +1 -1
  40. package/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlags.kt +31 -1
  41. package/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsCxxAccessor.kt +51 -1
  42. package/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsCxxInterop.kt +11 -1
  43. package/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsDefaults.kt +11 -1
  44. package/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsLocalAccessor.kt +56 -1
  45. package/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsProvider.kt +11 -1
  46. package/ReactAndroid/src/main/java/com/facebook/react/internal/tracing/PerformanceTracer.kt +39 -0
  47. package/ReactAndroid/src/main/java/com/facebook/react/modules/blob/BlobModule.kt +1 -1
  48. package/ReactAndroid/src/main/java/com/facebook/react/modules/network/NetworkEventUtil.kt +20 -19
  49. package/ReactAndroid/src/main/java/com/facebook/react/modules/network/NetworkingModule.kt +6 -12
  50. package/ReactAndroid/src/main/java/com/facebook/react/modules/systeminfo/ReactNativeVersion.kt +2 -2
  51. package/ReactAndroid/src/main/java/com/facebook/react/runtime/ReactHostImpl.kt +86 -4
  52. package/ReactAndroid/src/main/java/com/facebook/react/runtime/ReactHostImplDevHelper.kt +3 -3
  53. package/ReactAndroid/src/main/java/com/facebook/react/runtime/ReactHostInspectorTarget.kt +10 -6
  54. package/ReactAndroid/src/main/java/com/facebook/react/views/scroll/ReactHorizontalScrollView.java +7 -6
  55. package/ReactAndroid/src/main/java/com/facebook/react/views/scroll/ReactScrollView.java +21 -3
  56. package/ReactAndroid/src/main/jni/CMakeLists.txt +7 -0
  57. package/ReactAndroid/src/main/jni/react/devsupport/JInspectorFlags.cpp +22 -0
  58. package/ReactAndroid/src/main/jni/react/devsupport/JInspectorFlags.h +2 -0
  59. package/ReactAndroid/src/main/jni/react/featureflags/JReactNativeFeatureFlagsCxxInterop.cpp +71 -1
  60. package/ReactAndroid/src/main/jni/react/featureflags/JReactNativeFeatureFlagsCxxInterop.h +16 -1
  61. package/ReactAndroid/src/main/jni/react/runtime/jni/JReactHostInspectorTarget.cpp +196 -17
  62. package/ReactAndroid/src/main/jni/react/runtime/jni/JReactHostInspectorTarget.h +168 -18
  63. package/ReactAndroid/src/main/jni/third-party/folly/CMakeLists.txt +1 -0
  64. package/ReactCommon/React-Fabric.podspec +6 -0
  65. package/ReactCommon/cxxreact/ReactNativeVersion.h +3 -3
  66. package/ReactCommon/hermes/inspector-modern/chrome/Registration.cpp +44 -2
  67. package/ReactCommon/jsinspector-modern/HostAgent.cpp +45 -10
  68. package/ReactCommon/jsinspector-modern/HostAgent.h +2 -2
  69. package/ReactCommon/jsinspector-modern/HostTarget.cpp +14 -7
  70. package/ReactCommon/jsinspector-modern/HostTarget.h +101 -14
  71. package/ReactCommon/jsinspector-modern/HostTargetTraceRecording.cpp +39 -8
  72. package/ReactCommon/jsinspector-modern/HostTargetTraceRecording.h +42 -5
  73. package/ReactCommon/jsinspector-modern/HostTargetTracing.cpp +54 -21
  74. package/ReactCommon/jsinspector-modern/HostTargetTracing.h +89 -0
  75. package/ReactCommon/jsinspector-modern/InspectorFlags.cpp +12 -0
  76. package/ReactCommon/jsinspector-modern/InspectorFlags.h +12 -0
  77. package/ReactCommon/jsinspector-modern/InspectorInterfaces.cpp +3 -7
  78. package/ReactCommon/jsinspector-modern/InstanceAgent.cpp +2 -11
  79. package/ReactCommon/jsinspector-modern/NetworkIOAgent.cpp +1 -1
  80. package/ReactCommon/jsinspector-modern/RuntimeAgent.cpp +19 -0
  81. package/ReactCommon/jsinspector-modern/RuntimeAgent.h +7 -0
  82. package/ReactCommon/jsinspector-modern/RuntimeTarget.cpp +33 -0
  83. package/ReactCommon/jsinspector-modern/RuntimeTarget.h +6 -0
  84. package/ReactCommon/jsinspector-modern/TracingAgent.cpp +29 -13
  85. package/ReactCommon/jsinspector-modern/TracingAgent.h +5 -4
  86. package/ReactCommon/jsinspector-modern/tests/HostTargetTest.cpp +65 -0
  87. package/ReactCommon/jsinspector-modern/tests/InspectorMocks.h +23 -2
  88. package/ReactCommon/jsinspector-modern/tests/JsiIntegrationTest.cpp +1 -0
  89. package/ReactCommon/jsinspector-modern/tests/NetworkReporterTest.cpp +1 -0
  90. package/ReactCommon/jsinspector-modern/tests/TracingTest.cpp +335 -0
  91. package/ReactCommon/jsinspector-modern/tests/TracingTest.h +95 -0
  92. package/ReactCommon/jsinspector-modern/tests/utils/InspectorFlagOverridesGuard.cpp +10 -0
  93. package/ReactCommon/jsinspector-modern/tests/utils/InspectorFlagOverridesGuard.h +3 -1
  94. package/ReactCommon/jsinspector-modern/tracing/CMakeLists.txt +1 -0
  95. package/ReactCommon/jsinspector-modern/tracing/FrameTimingSequence.h +61 -0
  96. package/ReactCommon/jsinspector-modern/tracing/HostTracingProfile.h +43 -0
  97. package/ReactCommon/jsinspector-modern/tracing/HostTracingProfileSerializer.cpp +165 -0
  98. package/ReactCommon/jsinspector-modern/tracing/HostTracingProfileSerializer.h +50 -0
  99. package/ReactCommon/jsinspector-modern/tracing/PerformanceTracer.cpp +16 -14
  100. package/ReactCommon/jsinspector-modern/tracing/PerformanceTracerSection.h +113 -0
  101. package/ReactCommon/jsinspector-modern/tracing/React-jsinspectortracing.podspec +1 -0
  102. package/ReactCommon/jsinspector-modern/tracing/TimeWindowedBuffer.h +158 -0
  103. package/ReactCommon/jsinspector-modern/tracing/TraceEvent.h +2 -1
  104. package/ReactCommon/jsinspector-modern/tracing/TraceEventGenerator.cpp +100 -0
  105. package/ReactCommon/jsinspector-modern/tracing/TraceEventGenerator.h +60 -0
  106. package/ReactCommon/jsinspector-modern/tracing/TraceEventSerializer.cpp +44 -1
  107. package/ReactCommon/jsinspector-modern/tracing/TraceEventSerializer.h +7 -0
  108. package/ReactCommon/jsinspector-modern/tracing/TraceRecordingState.h +18 -7
  109. package/ReactCommon/jsinspector-modern/tracing/TracingCategory.h +136 -0
  110. package/ReactCommon/jsinspector-modern/tracing/tests/TimeWindowedBufferTest.cpp +352 -0
  111. package/ReactCommon/react/debug/CMakeLists.txt +2 -1
  112. package/ReactCommon/react/debug/React-debug.podspec +7 -1
  113. package/ReactCommon/react/debug/redbox/AnsiParser.cpp +139 -0
  114. package/ReactCommon/react/debug/redbox/AnsiParser.h +35 -0
  115. package/ReactCommon/react/debug/redbox/JscSafeUrl.cpp +179 -0
  116. package/ReactCommon/react/debug/redbox/JscSafeUrl.h +27 -0
  117. package/ReactCommon/react/debug/redbox/RedBoxErrorParser.cpp +171 -0
  118. package/ReactCommon/react/debug/redbox/RedBoxErrorParser.h +40 -0
  119. package/ReactCommon/react/debug/redbox/tests/AnsiParserTest.cpp +97 -0
  120. package/ReactCommon/react/debug/redbox/tests/JscSafeUrlTest.cpp +173 -0
  121. package/ReactCommon/react/debug/redbox/tests/RedBoxErrorParserTest.cpp +107 -0
  122. package/ReactCommon/react/featureflags/ReactNativeFeatureFlags.cpp +21 -1
  123. package/ReactCommon/react/featureflags/ReactNativeFeatureFlags.h +26 -1
  124. package/ReactCommon/react/featureflags/ReactNativeFeatureFlagsAccessor.cpp +140 -50
  125. package/ReactCommon/react/featureflags/ReactNativeFeatureFlagsAccessor.h +12 -2
  126. package/ReactCommon/react/featureflags/ReactNativeFeatureFlagsDefaults.h +21 -1
  127. package/ReactCommon/react/featureflags/ReactNativeFeatureFlagsDynamicProvider.h +46 -1
  128. package/ReactCommon/react/featureflags/ReactNativeFeatureFlagsProvider.h +6 -1
  129. package/ReactCommon/react/nativemodule/core/platform/ios/ReactCommon/RCTTurboModule.mm +3 -1
  130. package/ReactCommon/react/nativemodule/defaults/CMakeLists.txt +1 -0
  131. package/ReactCommon/react/nativemodule/defaults/DefaultTurboModules.cpp +7 -0
  132. package/ReactCommon/react/nativemodule/defaults/React-defaultsnativemodule.podspec +1 -0
  133. package/ReactCommon/react/nativemodule/featureflags/NativeReactNativeFeatureFlags.cpp +26 -1
  134. package/ReactCommon/react/nativemodule/featureflags/NativeReactNativeFeatureFlags.h +11 -1
  135. package/ReactCommon/react/nativemodule/mutationobserver/NativeMutationObserver.h +4 -0
  136. package/ReactCommon/react/nativemodule/mutationobserver/React-mutationobservernativemodule.podspec +66 -0
  137. package/ReactCommon/react/performance/timeline/PerformanceObserver.cpp +18 -6
  138. package/ReactCommon/react/performance/timeline/PerformanceObserver.h +2 -0
  139. package/ReactCommon/react/runtime/platform/ios/ReactCommon/RCTHost.mm +115 -0
  140. package/ReactCommon/{jsinspector-modern → react/utils}/Base64.h +2 -2
  141. package/gradle/libs.versions.toml +1 -1
  142. package/package.json +10 -10
  143. package/scripts/cocoapods/utils.rb +1 -0
  144. package/scripts/react_native_pods.rb +1 -0
  145. package/src/private/featureflags/ReactNativeFeatureFlags.js +26 -1
  146. package/src/private/featureflags/specs/NativeReactNativeFeatureFlags.js +6 -1
  147. package/src/private/setup/setUpDefaultReactNativeEnvironment.js +6 -0
  148. package/third-party-podspecs/RCT-Folly.podspec +1 -1
  149. package/third-party-podspecs/fmt.podspec +2 -2
  150. package/ReactAndroid/src/main/java/com/facebook/react/devsupport/interfaces/TracingState.kt +0 -19
  151. package/ReactCommon/jsinspector-modern/tracing/TraceRecordingStateSerializer.cpp +0 -68
  152. package/ReactCommon/jsinspector-modern/tracing/TraceRecordingStateSerializer.h +0 -42
  153. package/ReactCommon/jsinspector-modern/tracing/TracingState.h +0 -24
@@ -12,6 +12,7 @@ import android.content.Context
12
12
  import android.content.Intent
13
13
  import android.nfc.NfcAdapter
14
14
  import android.os.Bundle
15
+ import androidx.core.graphics.createBitmap
15
16
  import com.facebook.common.logging.FLog
16
17
  import com.facebook.infer.annotation.Assertions
17
18
  import com.facebook.infer.annotation.ThreadConfined
@@ -43,8 +44,11 @@ import com.facebook.react.devsupport.DevMenuConfiguration
43
44
  import com.facebook.react.devsupport.DevSupportManagerBase
44
45
  import com.facebook.react.devsupport.DevSupportManagerFactory
45
46
  import com.facebook.react.devsupport.InspectorFlags
47
+ import com.facebook.react.devsupport.inspector.FrameTimingsObserver
46
48
  import com.facebook.react.devsupport.inspector.InspectorNetworkHelper
47
49
  import com.facebook.react.devsupport.inspector.InspectorNetworkRequestListener
50
+ import com.facebook.react.devsupport.inspector.TracingState
51
+ import com.facebook.react.devsupport.inspector.TracingStateListener
48
52
  import com.facebook.react.devsupport.interfaces.BundleLoadCallback
49
53
  import com.facebook.react.devsupport.interfaces.DevSupportManager
50
54
  import com.facebook.react.devsupport.interfaces.DevSupportManager.PausedInDebuggerOverlayCommandListener
@@ -147,6 +151,7 @@ public class ReactHostImpl(
147
151
  private val beforeDestroyListeners: MutableList<() -> Unit> = CopyOnWriteArrayList()
148
152
 
149
153
  internal var reactHostInspectorTarget: ReactHostInspectorTarget? = null
154
+ private var frameTimingsObserver: FrameTimingsObserver? = null
150
155
 
151
156
  @Volatile private var hostInvalidated = false
152
157
 
@@ -246,6 +251,7 @@ public class ReactHostImpl(
246
251
  stateTracker.enterState("onHostResume(activity)")
247
252
 
248
253
  currentActivity = activity
254
+ frameTimingsObserver?.setCurrentWindow(activity?.window)
249
255
 
250
256
  maybeEnableDevSupport(true)
251
257
  reactLifecycleStateManager.moveToOnHostResume(currentReactContext, activity)
@@ -442,6 +448,43 @@ public class ReactHostImpl(
442
448
  InspectorNetworkHelper.loadNetworkResource(url, listener)
443
449
  }
444
450
 
451
+ @DoNotStrip
452
+ private fun captureScreenshot(format: String, quality: Int): String? {
453
+ val activity = currentActivity ?: return null
454
+ val window = activity.window ?: return null
455
+ val decorView = window.decorView.rootView
456
+
457
+ val width = decorView.width
458
+ val height = decorView.height
459
+ if (width <= 0 || height <= 0) {
460
+ return null
461
+ }
462
+
463
+ val bitmap = createBitmap(width, height)
464
+ val canvas = android.graphics.Canvas(bitmap)
465
+ decorView.draw(canvas)
466
+
467
+ val outputStream = java.io.ByteArrayOutputStream()
468
+ val compressFormat =
469
+ when (format) {
470
+ "jpeg" -> android.graphics.Bitmap.CompressFormat.JPEG
471
+ "webp" ->
472
+ if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.R) {
473
+ android.graphics.Bitmap.CompressFormat.WEBP_LOSSY
474
+ } else {
475
+ @Suppress("DEPRECATION") android.graphics.Bitmap.CompressFormat.WEBP
476
+ }
477
+ else -> android.graphics.Bitmap.CompressFormat.PNG
478
+ }
479
+ val compressQuality = if (quality in 0..100) quality else 80
480
+
481
+ bitmap.compress(compressFormat, compressQuality, outputStream)
482
+ bitmap.recycle()
483
+
484
+ val bytes = outputStream.toByteArray()
485
+ return android.util.Base64.encodeToString(bytes, android.util.Base64.NO_WRAP)
486
+ }
487
+
445
488
  /**
446
489
  * Entrypoint to destroy the ReactInstance. If the ReactInstance is reloading, will wait until
447
490
  * reload is finished, before destroying.
@@ -847,6 +890,7 @@ public class ReactHostImpl(
847
890
  private fun moveToHostDestroy(currentContext: ReactContext?) {
848
891
  reactLifecycleStateManager.moveToOnHostDestroy(currentContext)
849
892
  currentActivity = null
893
+ frameTimingsObserver?.setCurrentWindow(null)
850
894
  }
851
895
 
852
896
  private fun raiseSoftException(
@@ -1442,8 +1486,7 @@ public class ReactHostImpl(
1442
1486
  // If the host has been invalidated, now that the current context/instance
1443
1487
  // has been unregistered, we can safely destroy the host's inspector
1444
1488
  // target.
1445
- reactHostInspectorTarget?.close()
1446
- reactHostInspectorTarget = null
1489
+ destroyReactHostInspectorTarget()
1447
1490
  }
1448
1491
 
1449
1492
  // Step 1: Destroy DevSupportManager
@@ -1554,13 +1597,52 @@ public class ReactHostImpl(
1554
1597
 
1555
1598
  internal fun getOrCreateReactHostInspectorTarget(): ReactHostInspectorTarget? {
1556
1599
  if (reactHostInspectorTarget == null && InspectorFlags.getFuseboxEnabled()) {
1557
- // NOTE: ReactHostInspectorTarget only retains a weak reference to `this`.
1558
- reactHostInspectorTarget = ReactHostInspectorTarget(this)
1600
+ reactHostInspectorTarget = createReactHostInspectorTarget()
1559
1601
  }
1560
1602
 
1561
1603
  return reactHostInspectorTarget
1562
1604
  }
1563
1605
 
1606
+ private fun createReactHostInspectorTarget(): ReactHostInspectorTarget {
1607
+ // NOTE: ReactHostInspectorTarget only retains a weak reference to `this`.
1608
+ val inspectorTarget = ReactHostInspectorTarget(this)
1609
+ inspectorTarget.registerTracingStateListener(
1610
+ TracingStateListener { state: TracingState, _screenshotsEnabled: Boolean ->
1611
+ when (state) {
1612
+ TracingState.ENABLED_IN_BACKGROUND_MODE,
1613
+ TracingState.ENABLED_IN_CDP_MODE -> {
1614
+ if (InspectorFlags.getFrameRecordingEnabled()) {
1615
+ val observer =
1616
+ FrameTimingsObserver(
1617
+ _screenshotsEnabled,
1618
+ { frameTimingsSequence ->
1619
+ inspectorTarget.recordFrameTimings(frameTimingsSequence)
1620
+ },
1621
+ )
1622
+ observer.setCurrentWindow(currentActivity?.window)
1623
+ observer.start()
1624
+ frameTimingsObserver = observer
1625
+ }
1626
+ }
1627
+ TracingState.DISABLED -> {
1628
+ frameTimingsObserver?.stop()
1629
+ frameTimingsObserver = null
1630
+ }
1631
+ }
1632
+ }
1633
+ )
1634
+
1635
+ return inspectorTarget
1636
+ }
1637
+
1638
+ private fun destroyReactHostInspectorTarget() {
1639
+ frameTimingsObserver?.stop()
1640
+ frameTimingsObserver = null
1641
+
1642
+ reactHostInspectorTarget?.close()
1643
+ reactHostInspectorTarget = null
1644
+ }
1645
+
1564
1646
  @ThreadConfined(ThreadConfined.UI)
1565
1647
  internal fun unregisterInstanceFromInspector(reactInstance: ReactInstance?) {
1566
1648
  if (reactInstance != null) {
@@ -16,8 +16,8 @@ import com.facebook.react.bridge.ReactContext
16
16
  import com.facebook.react.common.annotations.FrameworkAPI
17
17
  import com.facebook.react.common.annotations.UnstableReactNativeAPI
18
18
  import com.facebook.react.devsupport.ReactInstanceDevHelper
19
- import com.facebook.react.devsupport.interfaces.TracingState
20
- import com.facebook.react.devsupport.interfaces.TracingStateProvider
19
+ import com.facebook.react.devsupport.inspector.TracingState
20
+ import com.facebook.react.devsupport.inspector.TracingStateProvider
21
21
  import com.facebook.react.devsupport.perfmonitor.PerfMonitorDevHelper
22
22
  import com.facebook.react.devsupport.perfmonitor.PerfMonitorInspectorTarget
23
23
  import com.facebook.react.interfaces.TaskInterface
@@ -81,6 +81,6 @@ internal class ReactHostImplDevHelper(private val delegate: ReactHostImpl) :
81
81
  delegate.loadBundle(bundleLoader)
82
82
 
83
83
  override fun getTracingState(): TracingState {
84
- return delegate.reactHostInspectorTarget?.getTracingState() ?: TracingState.ENABLEDINCDPMODE
84
+ return delegate.reactHostInspectorTarget?.getTracingState() ?: TracingState.ENABLED_IN_CDP_MODE
85
85
  }
86
86
  }
@@ -12,7 +12,9 @@ import com.facebook.proguard.annotations.DoNotStripAny
12
12
  import com.facebook.react.bridge.UiThreadUtil
13
13
  import com.facebook.react.common.annotations.FrameworkAPI
14
14
  import com.facebook.react.common.annotations.UnstableReactNativeAPI
15
- import com.facebook.react.devsupport.interfaces.TracingState
15
+ import com.facebook.react.devsupport.inspector.FrameTimingSequence
16
+ import com.facebook.react.devsupport.inspector.TracingState
17
+ import com.facebook.react.devsupport.inspector.TracingStateListener
16
18
  import com.facebook.react.devsupport.perfmonitor.PerfMonitorInspectorTarget
17
19
  import com.facebook.react.devsupport.perfmonitor.PerfMonitorUpdateListener
18
20
  import com.facebook.soloader.SoLoader
@@ -41,11 +43,13 @@ internal class ReactHostInspectorTarget(reactHostImpl: ReactHostImpl) :
41
43
 
42
44
  external fun stopAndDiscardBackgroundTrace()
43
45
 
44
- external fun tracingStateAsInt(): Int
46
+ external override fun getTracingState(): TracingState
45
47
 
46
- override fun getTracingState(): TracingState {
47
- return TracingState.entries[tracingStateAsInt()]
48
- }
48
+ external fun registerTracingStateListener(listener: TracingStateListener): Long
49
+
50
+ external fun unregisterTracingStateListener(subscriptionId: Long)
51
+
52
+ external fun recordFrameTimings(frameTimingSequence: FrameTimingSequence)
49
53
 
50
54
  override fun addPerfMonitorListener(listener: PerfMonitorUpdateListener) {
51
55
  perfMonitorListeners.add(listener)
@@ -63,7 +67,7 @@ internal class ReactHostInspectorTarget(reactHostImpl: ReactHostImpl) :
63
67
  override fun resumeBackgroundTrace() {
64
68
  startBackgroundTrace()
65
69
  perfMonitorListeners.forEach { listener ->
66
- listener.onRecordingStateChanged(TracingState.ENABLEDINBACKGROUNDMODE)
70
+ listener.onRecordingStateChanged(TracingState.ENABLED_IN_BACKGROUND_MODE)
67
71
  }
68
72
  }
69
73
 
@@ -257,6 +257,8 @@ public class ReactHorizontalScrollView extends HorizontalScrollView
257
257
  && !mScrollAnimationEnabled
258
258
  && mScroller != null
259
259
  && !mScroller.isFinished()) {
260
+ // Jump instantly to the target position instead of animating.
261
+ scrollTo(mScroller.getFinalX(), mScroller.getFinalY());
260
262
  mScroller.forceFinished(true);
261
263
  return;
262
264
  }
@@ -832,12 +834,11 @@ public class ReactHorizontalScrollView extends HorizontalScrollView
832
834
  public boolean arrowScroll(int direction) {
833
835
  boolean handled = false;
834
836
 
835
- if (!mScrollAnimationEnabled) {
836
- // When scroll animation is disabled, find the next focusable and request focus directly.
837
- // This must come before the mPagingEnabled check because snapToInterval on Android
838
- // auto-enables paging, and the paging branch uses smoothScrollToNextPage which
839
- // scrolls by full page width instead of by snap interval.
840
- // requestChildFocus → tryScrollSnapToChild/scrollToChild handles instant scrolling.
837
+ if (mSnapToAlignment == SNAP_ALIGNMENT_ITEM) {
838
+ // When snapToAlignment is "item", find the next focusable and request focus directly.
839
+ // This avoids super.arrowScroll() which starts its own scroll animation that conflicts
840
+ // with tryScrollSnapToChild's snap scrolling.
841
+ // requestChildFocus tryScrollSnapToChild handles scrolling.
841
842
  View currentFocused = findFocus();
842
843
  View nextFocused = FocusFinder.getInstance().findNextFocus(this, currentFocused, direction);
843
844
  if (nextFocused != null && nextFocused != currentFocused && nextFocused != this) {
@@ -24,6 +24,7 @@ import android.graphics.Rect;
24
24
  import android.graphics.drawable.ColorDrawable;
25
25
  import android.graphics.drawable.Drawable;
26
26
  import android.os.Build;
27
+ import android.view.FocusFinder;
27
28
  import android.view.KeyEvent;
28
29
  import android.view.MotionEvent;
29
30
  import android.view.View;
@@ -546,6 +547,24 @@ public class ReactScrollView extends ScrollView
546
547
  return true;
547
548
  }
548
549
 
550
+ @Override
551
+ public boolean arrowScroll(int direction) {
552
+ if (mSnapToAlignment == SNAP_ALIGNMENT_ITEM) {
553
+ // When snapToAlignment is "item", find the next focusable and request focus directly.
554
+ // This avoids super.arrowScroll() which starts its own scroll animation that conflicts
555
+ // with tryScrollSnapToChild's snap scrolling.
556
+ // requestChildFocus → tryScrollSnapToChild handles scrolling.
557
+ View currentFocused = findFocus();
558
+ View nextFocused = FocusFinder.getInstance().findNextFocus(this, currentFocused, direction);
559
+ if (nextFocused != null && nextFocused != currentFocused && nextFocused != this) {
560
+ nextFocused.requestFocus(direction);
561
+ return true;
562
+ }
563
+ return false;
564
+ }
565
+ return super.arrowScroll(direction);
566
+ }
567
+
549
568
  /**
550
569
  * Since ReactScrollView handles layout changes on JS side, it does not call super.onlayout due to
551
570
  * which mIsLayoutDirty flag in ScrollView remains true and prevents scrolling to child when
@@ -621,9 +640,8 @@ public class ReactScrollView extends ScrollView
621
640
  && !mScrollAnimationEnabled
622
641
  && mScroller != null
623
642
  && !mScroller.isFinished()) {
624
- // When scroll animation is disabled, just abort any in-flight smooth scroll.
625
- // The correct position has already been set synchronously by
626
- // requestChildFocus → tryScrollSnapToChild/scrollToChild.
643
+ // Jump instantly to the target position instead of animating.
644
+ scrollTo(mScroller.getFinalX(), mScroller.getFinalY());
627
645
  mScroller.forceFinished(true);
628
646
  return;
629
647
  }
@@ -115,6 +115,7 @@ add_react_common_subdir(react/renderer/components/safeareaview)
115
115
  add_react_common_subdir(react/renderer/leakchecker)
116
116
  add_react_common_subdir(react/renderer/observers/events)
117
117
  add_react_common_subdir(react/renderer/observers/intersection)
118
+ add_react_common_subdir(react/renderer/observers/mutation)
118
119
  add_react_common_subdir(react/renderer/textlayoutmanager)
119
120
  add_react_common_subdir(react/utils)
120
121
  add_react_common_subdir(react/bridging)
@@ -126,6 +127,7 @@ add_react_common_subdir(react/nativemodule/featureflags)
126
127
  add_react_common_subdir(react/nativemodule/microtasks)
127
128
  add_react_common_subdir(react/nativemodule/idlecallbacks)
128
129
  add_react_common_subdir(react/nativemodule/intersectionobserver)
130
+ add_react_common_subdir(react/nativemodule/mutationobserver)
129
131
  add_react_common_subdir(react/nativemodule/webperformance)
130
132
  add_react_common_subdir(react/networking)
131
133
  add_react_common_subdir(jserrorhandler)
@@ -195,6 +197,7 @@ add_library(reactnative
195
197
  $<TARGET_OBJECTS:react_nativemodule_idlecallbacks>
196
198
  $<TARGET_OBJECTS:react_nativemodule_intersectionobserver>
197
199
  $<TARGET_OBJECTS:react_nativemodule_microtasks>
200
+ $<TARGET_OBJECTS:react_nativemodule_mutationobserver>
198
201
  $<TARGET_OBJECTS:react_nativemodule_webperformance>
199
202
  $<TARGET_OBJECTS:react_networking>
200
203
  $<TARGET_OBJECTS:react_newarchdefaults>
@@ -215,6 +218,7 @@ add_library(reactnative
215
218
  $<TARGET_OBJECTS:react_renderer_mounting>
216
219
  $<TARGET_OBJECTS:react_renderer_observers_events>
217
220
  $<TARGET_OBJECTS:react_renderer_observers_intersection>
221
+ $<TARGET_OBJECTS:react_renderer_observers_mutation>
218
222
  $<TARGET_OBJECTS:react_renderer_runtimescheduler>
219
223
  $<TARGET_OBJECTS:react_renderer_scheduler>
220
224
  $<TARGET_OBJECTS:react_renderer_telemetry>
@@ -288,6 +292,7 @@ target_include_directories(reactnative
288
292
  $<TARGET_PROPERTY:react_nativemodule_idlecallbacks,INTERFACE_INCLUDE_DIRECTORIES>
289
293
  $<TARGET_PROPERTY:react_nativemodule_intersectionobserver,INTERFACE_INCLUDE_DIRECTORIES>
290
294
  $<TARGET_PROPERTY:react_nativemodule_microtasks,INTERFACE_INCLUDE_DIRECTORIES>
295
+ $<TARGET_PROPERTY:react_nativemodule_mutationobserver,INTERFACE_INCLUDE_DIRECTORIES>
291
296
  $<TARGET_PROPERTY:react_nativemodule_webperformance,INTERFACE_INCLUDE_DIRECTORIES>
292
297
  $<TARGET_PROPERTY:react_networking,INTERFACE_INCLUDE_DIRECTORIES>
293
298
  $<TARGET_PROPERTY:react_newarchdefaults,INTERFACE_INCLUDE_DIRECTORIES>
@@ -309,6 +314,8 @@ target_include_directories(reactnative
309
314
  $<TARGET_PROPERTY:react_renderer_mapbuffer,INTERFACE_INCLUDE_DIRECTORIES>
310
315
  $<TARGET_PROPERTY:react_renderer_mounting,INTERFACE_INCLUDE_DIRECTORIES>
311
316
  $<TARGET_PROPERTY:react_renderer_observers_events,INTERFACE_INCLUDE_DIRECTORIES>
317
+ $<TARGET_PROPERTY:react_renderer_observers_intersection,INTERFACE_INCLUDE_DIRECTORIES>
318
+ $<TARGET_PROPERTY:react_renderer_observers_mutation,INTERFACE_INCLUDE_DIRECTORIES>
312
319
  $<TARGET_PROPERTY:react_renderer_runtimescheduler,INTERFACE_INCLUDE_DIRECTORIES>
313
320
  $<TARGET_PROPERTY:react_renderer_scheduler,INTERFACE_INCLUDE_DIRECTORIES>
314
321
  $<TARGET_PROPERTY:react_renderer_telemetry,INTERFACE_INCLUDE_DIRECTORIES>
@@ -11,6 +11,12 @@
11
11
 
12
12
  namespace facebook::react::jsinspector_modern {
13
13
 
14
+ bool JInspectorFlags::getScreenshotCaptureEnabled(
15
+ jni::alias_ref<jclass> /*unused*/) {
16
+ auto& inspectorFlags = InspectorFlags::getInstance();
17
+ return inspectorFlags.getScreenshotCaptureEnabled();
18
+ }
19
+
14
20
  bool JInspectorFlags::getFuseboxEnabled(jni::alias_ref<jclass> /*unused*/) {
15
21
  auto& inspectorFlags = InspectorFlags::getInstance();
16
22
  return inspectorFlags.getFuseboxEnabled();
@@ -21,7 +27,18 @@ bool JInspectorFlags::getIsProfilingBuild(jni::alias_ref<jclass> /*unused*/) {
21
27
  return inspectorFlags.getIsProfilingBuild();
22
28
  }
23
29
 
30
+ bool JInspectorFlags::getFrameRecordingEnabled(
31
+ jni::alias_ref<jclass> /*unused*/) {
32
+ auto& inspectorFlags = InspectorFlags::getInstance();
33
+ return inspectorFlags.getFrameRecordingEnabled();
34
+ }
35
+
24
36
  void JInspectorFlags::registerNatives() {
37
+ javaClassLocal()->registerNatives({
38
+ makeNativeMethod(
39
+ "getScreenshotCaptureEnabled",
40
+ JInspectorFlags::getScreenshotCaptureEnabled),
41
+ });
25
42
  javaClassLocal()->registerNatives({
26
43
  makeNativeMethod("getFuseboxEnabled", JInspectorFlags::getFuseboxEnabled),
27
44
  });
@@ -29,6 +46,11 @@ void JInspectorFlags::registerNatives() {
29
46
  makeNativeMethod(
30
47
  "getIsProfilingBuild", JInspectorFlags::getIsProfilingBuild),
31
48
  });
49
+ javaClassLocal()->registerNatives({
50
+ makeNativeMethod(
51
+ "getFrameRecordingEnabled",
52
+ JInspectorFlags::getFrameRecordingEnabled),
53
+ });
32
54
  }
33
55
 
34
56
  } // namespace facebook::react::jsinspector_modern
@@ -18,8 +18,10 @@ class JInspectorFlags : public jni::JavaClass<JInspectorFlags> {
18
18
  public:
19
19
  static constexpr auto kJavaDescriptor = "Lcom/facebook/react/devsupport/InspectorFlags;";
20
20
 
21
+ static bool getScreenshotCaptureEnabled(jni::alias_ref<jclass> /*unused*/);
21
22
  static bool getFuseboxEnabled(jni::alias_ref<jclass> /*unused*/);
22
23
  static bool getIsProfilingBuild(jni::alias_ref<jclass> /*unused*/);
24
+ static bool getFrameRecordingEnabled(jni::alias_ref<jclass> /*unused*/);
23
25
 
24
26
  static void registerNatives();
25
27
 
@@ -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<<adc73df33ed2112584feaf83fb8d5e17>>
7
+ * @generated SignedSource<<9e684659117f413b92bcd0469fae37ba>>
8
8
  */
9
9
 
10
10
  /**
@@ -255,6 +255,12 @@ class ReactNativeFeatureFlagsJavaProvider
255
255
  return method(javaProvider_);
256
256
  }
257
257
 
258
+ bool enableMutationObserverByDefault() override {
259
+ static const auto method =
260
+ getReactNativeFeatureFlagsProviderJavaClass()->getMethod<jboolean()>("enableMutationObserverByDefault");
261
+ return method(javaProvider_);
262
+ }
263
+
258
264
  bool enableNativeCSSParsing() override {
259
265
  static const auto method =
260
266
  getReactNativeFeatureFlagsProviderJavaClass()->getMethod<jboolean()>("enableNativeCSSParsing");
@@ -381,12 +387,24 @@ class ReactNativeFeatureFlagsJavaProvider
381
387
  return method(javaProvider_);
382
388
  }
383
389
 
390
+ bool fuseboxFrameRecordingEnabled() override {
391
+ static const auto method =
392
+ getReactNativeFeatureFlagsProviderJavaClass()->getMethod<jboolean()>("fuseboxFrameRecordingEnabled");
393
+ return method(javaProvider_);
394
+ }
395
+
384
396
  bool fuseboxNetworkInspectionEnabled() override {
385
397
  static const auto method =
386
398
  getReactNativeFeatureFlagsProviderJavaClass()->getMethod<jboolean()>("fuseboxNetworkInspectionEnabled");
387
399
  return method(javaProvider_);
388
400
  }
389
401
 
402
+ bool fuseboxScreenshotCaptureEnabled() override {
403
+ static const auto method =
404
+ getReactNativeFeatureFlagsProviderJavaClass()->getMethod<jboolean()>("fuseboxScreenshotCaptureEnabled");
405
+ return method(javaProvider_);
406
+ }
407
+
390
408
  bool hideOffscreenVirtualViewsOnIOS() override {
391
409
  static const auto method =
392
410
  getReactNativeFeatureFlagsProviderJavaClass()->getMethod<jboolean()>("hideOffscreenVirtualViewsOnIOS");
@@ -423,6 +441,18 @@ class ReactNativeFeatureFlagsJavaProvider
423
441
  return method(javaProvider_);
424
442
  }
425
443
 
444
+ bool redBoxV2Android() override {
445
+ static const auto method =
446
+ getReactNativeFeatureFlagsProviderJavaClass()->getMethod<jboolean()>("redBoxV2Android");
447
+ return method(javaProvider_);
448
+ }
449
+
450
+ bool redBoxV2IOS() override {
451
+ static const auto method =
452
+ getReactNativeFeatureFlagsProviderJavaClass()->getMethod<jboolean()>("redBoxV2IOS");
453
+ return method(javaProvider_);
454
+ }
455
+
426
456
  bool shouldPressibilityUseW3CPointerEventsForHover() override {
427
457
  static const auto method =
428
458
  getReactNativeFeatureFlagsProviderJavaClass()->getMethod<jboolean()>("shouldPressibilityUseW3CPointerEventsForHover");
@@ -733,6 +763,11 @@ bool JReactNativeFeatureFlagsCxxInterop::enableModuleArgumentNSNullConversionIOS
733
763
  return ReactNativeFeatureFlags::enableModuleArgumentNSNullConversionIOS();
734
764
  }
735
765
 
766
+ bool JReactNativeFeatureFlagsCxxInterop::enableMutationObserverByDefault(
767
+ facebook::jni::alias_ref<JReactNativeFeatureFlagsCxxInterop> /*unused*/) {
768
+ return ReactNativeFeatureFlags::enableMutationObserverByDefault();
769
+ }
770
+
736
771
  bool JReactNativeFeatureFlagsCxxInterop::enableNativeCSSParsing(
737
772
  facebook::jni::alias_ref<JReactNativeFeatureFlagsCxxInterop> /*unused*/) {
738
773
  return ReactNativeFeatureFlags::enableNativeCSSParsing();
@@ -838,11 +873,21 @@ bool JReactNativeFeatureFlagsCxxInterop::fuseboxEnabledRelease(
838
873
  return ReactNativeFeatureFlags::fuseboxEnabledRelease();
839
874
  }
840
875
 
876
+ bool JReactNativeFeatureFlagsCxxInterop::fuseboxFrameRecordingEnabled(
877
+ facebook::jni::alias_ref<JReactNativeFeatureFlagsCxxInterop> /*unused*/) {
878
+ return ReactNativeFeatureFlags::fuseboxFrameRecordingEnabled();
879
+ }
880
+
841
881
  bool JReactNativeFeatureFlagsCxxInterop::fuseboxNetworkInspectionEnabled(
842
882
  facebook::jni::alias_ref<JReactNativeFeatureFlagsCxxInterop> /*unused*/) {
843
883
  return ReactNativeFeatureFlags::fuseboxNetworkInspectionEnabled();
844
884
  }
845
885
 
886
+ bool JReactNativeFeatureFlagsCxxInterop::fuseboxScreenshotCaptureEnabled(
887
+ facebook::jni::alias_ref<JReactNativeFeatureFlagsCxxInterop> /*unused*/) {
888
+ return ReactNativeFeatureFlags::fuseboxScreenshotCaptureEnabled();
889
+ }
890
+
846
891
  bool JReactNativeFeatureFlagsCxxInterop::hideOffscreenVirtualViewsOnIOS(
847
892
  facebook::jni::alias_ref<JReactNativeFeatureFlagsCxxInterop> /*unused*/) {
848
893
  return ReactNativeFeatureFlags::hideOffscreenVirtualViewsOnIOS();
@@ -873,6 +918,16 @@ bool JReactNativeFeatureFlagsCxxInterop::preventShadowTreeCommitExhaustion(
873
918
  return ReactNativeFeatureFlags::preventShadowTreeCommitExhaustion();
874
919
  }
875
920
 
921
+ bool JReactNativeFeatureFlagsCxxInterop::redBoxV2Android(
922
+ facebook::jni::alias_ref<JReactNativeFeatureFlagsCxxInterop> /*unused*/) {
923
+ return ReactNativeFeatureFlags::redBoxV2Android();
924
+ }
925
+
926
+ bool JReactNativeFeatureFlagsCxxInterop::redBoxV2IOS(
927
+ facebook::jni::alias_ref<JReactNativeFeatureFlagsCxxInterop> /*unused*/) {
928
+ return ReactNativeFeatureFlags::redBoxV2IOS();
929
+ }
930
+
876
931
  bool JReactNativeFeatureFlagsCxxInterop::shouldPressibilityUseW3CPointerEventsForHover(
877
932
  facebook::jni::alias_ref<JReactNativeFeatureFlagsCxxInterop> /*unused*/) {
878
933
  return ReactNativeFeatureFlags::shouldPressibilityUseW3CPointerEventsForHover();
@@ -1117,6 +1172,9 @@ void JReactNativeFeatureFlagsCxxInterop::registerNatives() {
1117
1172
  makeNativeMethod(
1118
1173
  "enableModuleArgumentNSNullConversionIOS",
1119
1174
  JReactNativeFeatureFlagsCxxInterop::enableModuleArgumentNSNullConversionIOS),
1175
+ makeNativeMethod(
1176
+ "enableMutationObserverByDefault",
1177
+ JReactNativeFeatureFlagsCxxInterop::enableMutationObserverByDefault),
1120
1178
  makeNativeMethod(
1121
1179
  "enableNativeCSSParsing",
1122
1180
  JReactNativeFeatureFlagsCxxInterop::enableNativeCSSParsing),
@@ -1180,9 +1238,15 @@ void JReactNativeFeatureFlagsCxxInterop::registerNatives() {
1180
1238
  makeNativeMethod(
1181
1239
  "fuseboxEnabledRelease",
1182
1240
  JReactNativeFeatureFlagsCxxInterop::fuseboxEnabledRelease),
1241
+ makeNativeMethod(
1242
+ "fuseboxFrameRecordingEnabled",
1243
+ JReactNativeFeatureFlagsCxxInterop::fuseboxFrameRecordingEnabled),
1183
1244
  makeNativeMethod(
1184
1245
  "fuseboxNetworkInspectionEnabled",
1185
1246
  JReactNativeFeatureFlagsCxxInterop::fuseboxNetworkInspectionEnabled),
1247
+ makeNativeMethod(
1248
+ "fuseboxScreenshotCaptureEnabled",
1249
+ JReactNativeFeatureFlagsCxxInterop::fuseboxScreenshotCaptureEnabled),
1186
1250
  makeNativeMethod(
1187
1251
  "hideOffscreenVirtualViewsOnIOS",
1188
1252
  JReactNativeFeatureFlagsCxxInterop::hideOffscreenVirtualViewsOnIOS),
@@ -1201,6 +1265,12 @@ void JReactNativeFeatureFlagsCxxInterop::registerNatives() {
1201
1265
  makeNativeMethod(
1202
1266
  "preventShadowTreeCommitExhaustion",
1203
1267
  JReactNativeFeatureFlagsCxxInterop::preventShadowTreeCommitExhaustion),
1268
+ makeNativeMethod(
1269
+ "redBoxV2Android",
1270
+ JReactNativeFeatureFlagsCxxInterop::redBoxV2Android),
1271
+ makeNativeMethod(
1272
+ "redBoxV2IOS",
1273
+ JReactNativeFeatureFlagsCxxInterop::redBoxV2IOS),
1204
1274
  makeNativeMethod(
1205
1275
  "shouldPressibilityUseW3CPointerEventsForHover",
1206
1276
  JReactNativeFeatureFlagsCxxInterop::shouldPressibilityUseW3CPointerEventsForHover),
@@ -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<<9853cf162b179249b2c6af120a662cf3>>
7
+ * @generated SignedSource<<bf1f3b156e29c081684a9bada7e81a4b>>
8
8
  */
9
9
 
10
10
  /**
@@ -138,6 +138,9 @@ class JReactNativeFeatureFlagsCxxInterop
138
138
  static bool enableModuleArgumentNSNullConversionIOS(
139
139
  facebook::jni::alias_ref<JReactNativeFeatureFlagsCxxInterop>);
140
140
 
141
+ static bool enableMutationObserverByDefault(
142
+ facebook::jni::alias_ref<JReactNativeFeatureFlagsCxxInterop>);
143
+
141
144
  static bool enableNativeCSSParsing(
142
145
  facebook::jni::alias_ref<JReactNativeFeatureFlagsCxxInterop>);
143
146
 
@@ -201,9 +204,15 @@ class JReactNativeFeatureFlagsCxxInterop
201
204
  static bool fuseboxEnabledRelease(
202
205
  facebook::jni::alias_ref<JReactNativeFeatureFlagsCxxInterop>);
203
206
 
207
+ static bool fuseboxFrameRecordingEnabled(
208
+ facebook::jni::alias_ref<JReactNativeFeatureFlagsCxxInterop>);
209
+
204
210
  static bool fuseboxNetworkInspectionEnabled(
205
211
  facebook::jni::alias_ref<JReactNativeFeatureFlagsCxxInterop>);
206
212
 
213
+ static bool fuseboxScreenshotCaptureEnabled(
214
+ facebook::jni::alias_ref<JReactNativeFeatureFlagsCxxInterop>);
215
+
207
216
  static bool hideOffscreenVirtualViewsOnIOS(
208
217
  facebook::jni::alias_ref<JReactNativeFeatureFlagsCxxInterop>);
209
218
 
@@ -222,6 +231,12 @@ class JReactNativeFeatureFlagsCxxInterop
222
231
  static bool preventShadowTreeCommitExhaustion(
223
232
  facebook::jni::alias_ref<JReactNativeFeatureFlagsCxxInterop>);
224
233
 
234
+ static bool redBoxV2Android(
235
+ facebook::jni::alias_ref<JReactNativeFeatureFlagsCxxInterop>);
236
+
237
+ static bool redBoxV2IOS(
238
+ facebook::jni::alias_ref<JReactNativeFeatureFlagsCxxInterop>);
239
+
225
240
  static bool shouldPressibilityUseW3CPointerEventsForHover(
226
241
  facebook::jni::alias_ref<JReactNativeFeatureFlagsCxxInterop>);
227
242