react-native 0.83.4 → 0.83.5

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 (107) hide show
  1. package/Libraries/Core/ReactNativeVersion.js +1 -1
  2. package/Libraries/Utilities/Appearance.js +6 -1
  3. package/React/Base/RCTVersion.m +1 -1
  4. package/React/DevSupport/RCTFrameTimingsObserver.h +24 -0
  5. package/React/DevSupport/RCTFrameTimingsObserver.mm +298 -0
  6. package/React/FBReactNativeSpec/FBReactNativeSpecJSI.h +16 -0
  7. package/ReactAndroid/api/ReactAndroid.api +0 -9
  8. package/ReactAndroid/gradle.properties +1 -1
  9. package/ReactAndroid/src/main/java/com/facebook/react/devsupport/BridgelessDevSupportManager.kt +2 -2
  10. package/ReactAndroid/src/main/java/com/facebook/react/devsupport/DevSupportManagerBase.kt +7 -7
  11. package/ReactAndroid/src/main/java/com/facebook/react/devsupport/InspectorFlags.kt +4 -0
  12. package/ReactAndroid/src/main/java/com/facebook/react/devsupport/inspector/FrameTimingSequence.kt +16 -0
  13. package/ReactAndroid/src/main/java/com/facebook/react/devsupport/inspector/FrameTimingsObserver.kt +275 -0
  14. package/ReactAndroid/src/main/java/com/facebook/react/devsupport/inspector/TracingState.kt +17 -0
  15. package/ReactAndroid/src/main/java/com/facebook/react/devsupport/inspector/TracingStateListener.kt +15 -0
  16. package/ReactAndroid/src/main/java/com/facebook/react/devsupport/{interfaces → inspector}/TracingStateProvider.kt +1 -1
  17. package/ReactAndroid/src/main/java/com/facebook/react/devsupport/perfmonitor/PerfMonitorInspectorTargetBinding.kt +1 -1
  18. package/ReactAndroid/src/main/java/com/facebook/react/devsupport/perfmonitor/PerfMonitorOverlayManager.kt +4 -4
  19. package/ReactAndroid/src/main/java/com/facebook/react/devsupport/perfmonitor/PerfMonitorOverlayView.kt +3 -3
  20. package/ReactAndroid/src/main/java/com/facebook/react/devsupport/perfmonitor/PerfMonitorUpdateListener.kt +1 -1
  21. package/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlags.kt +13 -1
  22. package/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsCxxAccessor.kt +21 -1
  23. package/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsCxxInterop.kt +5 -1
  24. package/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsDefaults.kt +5 -1
  25. package/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsLocalAccessor.kt +23 -1
  26. package/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsProvider.kt +5 -1
  27. package/ReactAndroid/src/main/java/com/facebook/react/internal/tracing/PerformanceTracer.kt +39 -0
  28. package/ReactAndroid/src/main/java/com/facebook/react/modules/blob/BlobModule.kt +1 -1
  29. package/ReactAndroid/src/main/java/com/facebook/react/modules/network/NetworkEventUtil.kt +20 -19
  30. package/ReactAndroid/src/main/java/com/facebook/react/modules/network/NetworkingModule.kt +6 -12
  31. package/ReactAndroid/src/main/java/com/facebook/react/modules/systeminfo/ReactNativeVersion.kt +1 -1
  32. package/ReactAndroid/src/main/java/com/facebook/react/runtime/ReactHostImpl.kt +86 -4
  33. package/ReactAndroid/src/main/java/com/facebook/react/runtime/ReactHostImplDevHelper.kt +3 -3
  34. package/ReactAndroid/src/main/java/com/facebook/react/runtime/ReactHostInspectorTarget.kt +10 -6
  35. package/ReactAndroid/src/main/jni/react/devsupport/JInspectorFlags.cpp +22 -0
  36. package/ReactAndroid/src/main/jni/react/devsupport/JInspectorFlags.h +2 -0
  37. package/ReactAndroid/src/main/jni/react/featureflags/JReactNativeFeatureFlagsCxxInterop.cpp +29 -1
  38. package/ReactAndroid/src/main/jni/react/featureflags/JReactNativeFeatureFlagsCxxInterop.h +7 -1
  39. package/ReactAndroid/src/main/jni/react/runtime/jni/JReactHostInspectorTarget.cpp +196 -17
  40. package/ReactAndroid/src/main/jni/react/runtime/jni/JReactHostInspectorTarget.h +168 -18
  41. package/ReactAndroid/src/main/jni/third-party/folly/CMakeLists.txt +1 -0
  42. package/ReactCommon/cxxreact/ReactNativeVersion.h +2 -2
  43. package/ReactCommon/jsinspector-modern/HostAgent.cpp +45 -10
  44. package/ReactCommon/jsinspector-modern/HostAgent.h +2 -2
  45. package/ReactCommon/jsinspector-modern/HostTarget.cpp +14 -7
  46. package/ReactCommon/jsinspector-modern/HostTarget.h +101 -14
  47. package/ReactCommon/jsinspector-modern/HostTargetTraceRecording.cpp +39 -8
  48. package/ReactCommon/jsinspector-modern/HostTargetTraceRecording.h +42 -5
  49. package/ReactCommon/jsinspector-modern/HostTargetTracing.cpp +54 -21
  50. package/ReactCommon/jsinspector-modern/HostTargetTracing.h +89 -0
  51. package/ReactCommon/jsinspector-modern/InspectorFlags.cpp +12 -0
  52. package/ReactCommon/jsinspector-modern/InspectorFlags.h +12 -0
  53. package/ReactCommon/jsinspector-modern/InspectorInterfaces.cpp +3 -7
  54. package/ReactCommon/jsinspector-modern/InstanceAgent.cpp +2 -11
  55. package/ReactCommon/jsinspector-modern/NetworkIOAgent.cpp +1 -1
  56. package/ReactCommon/jsinspector-modern/TracingAgent.cpp +29 -13
  57. package/ReactCommon/jsinspector-modern/TracingAgent.h +5 -4
  58. package/ReactCommon/jsinspector-modern/tests/HostTargetTest.cpp +65 -0
  59. package/ReactCommon/jsinspector-modern/tests/InspectorMocks.h +23 -2
  60. package/ReactCommon/jsinspector-modern/tests/JsiIntegrationTest.cpp +1 -0
  61. package/ReactCommon/jsinspector-modern/tests/NetworkReporterTest.cpp +1 -0
  62. package/ReactCommon/jsinspector-modern/tests/TracingTest.cpp +335 -0
  63. package/ReactCommon/jsinspector-modern/tests/TracingTest.h +95 -0
  64. package/ReactCommon/jsinspector-modern/tests/utils/InspectorFlagOverridesGuard.cpp +10 -0
  65. package/ReactCommon/jsinspector-modern/tests/utils/InspectorFlagOverridesGuard.h +3 -1
  66. package/ReactCommon/jsinspector-modern/tracing/CMakeLists.txt +1 -0
  67. package/ReactCommon/jsinspector-modern/tracing/FrameTimingSequence.h +61 -0
  68. package/ReactCommon/jsinspector-modern/tracing/HostTracingProfile.h +43 -0
  69. package/ReactCommon/jsinspector-modern/tracing/HostTracingProfileSerializer.cpp +165 -0
  70. package/ReactCommon/jsinspector-modern/tracing/HostTracingProfileSerializer.h +50 -0
  71. package/ReactCommon/jsinspector-modern/tracing/PerformanceTracer.cpp +16 -14
  72. package/ReactCommon/jsinspector-modern/tracing/PerformanceTracerSection.h +113 -0
  73. package/ReactCommon/jsinspector-modern/tracing/React-jsinspectortracing.podspec +1 -0
  74. package/ReactCommon/jsinspector-modern/tracing/TimeWindowedBuffer.h +158 -0
  75. package/ReactCommon/jsinspector-modern/tracing/TraceEvent.h +2 -1
  76. package/ReactCommon/jsinspector-modern/tracing/TraceEventGenerator.cpp +100 -0
  77. package/ReactCommon/jsinspector-modern/tracing/TraceEventGenerator.h +60 -0
  78. package/ReactCommon/jsinspector-modern/tracing/TraceEventSerializer.cpp +44 -1
  79. package/ReactCommon/jsinspector-modern/tracing/TraceEventSerializer.h +7 -0
  80. package/ReactCommon/jsinspector-modern/tracing/TraceRecordingState.h +18 -7
  81. package/ReactCommon/jsinspector-modern/tracing/TracingCategory.h +136 -0
  82. package/ReactCommon/jsinspector-modern/tracing/tests/TimeWindowedBufferTest.cpp +352 -0
  83. package/ReactCommon/react/featureflags/ReactNativeFeatureFlags.cpp +9 -1
  84. package/ReactCommon/react/featureflags/ReactNativeFeatureFlags.h +11 -1
  85. package/ReactCommon/react/featureflags/ReactNativeFeatureFlagsAccessor.cpp +65 -29
  86. package/ReactCommon/react/featureflags/ReactNativeFeatureFlagsAccessor.h +6 -2
  87. package/ReactCommon/react/featureflags/ReactNativeFeatureFlagsDefaults.h +9 -1
  88. package/ReactCommon/react/featureflags/ReactNativeFeatureFlagsDynamicProvider.h +19 -1
  89. package/ReactCommon/react/featureflags/ReactNativeFeatureFlagsProvider.h +3 -1
  90. package/ReactCommon/react/nativemodule/core/platform/ios/ReactCommon/RCTTurboModule.mm +3 -1
  91. package/ReactCommon/react/nativemodule/featureflags/NativeReactNativeFeatureFlags.cpp +11 -1
  92. package/ReactCommon/react/nativemodule/featureflags/NativeReactNativeFeatureFlags.h +5 -1
  93. package/ReactCommon/react/performance/timeline/PerformanceObserver.cpp +18 -6
  94. package/ReactCommon/react/performance/timeline/PerformanceObserver.h +2 -0
  95. package/ReactCommon/react/runtime/platform/ios/ReactCommon/RCTHost.mm +115 -0
  96. package/ReactCommon/{jsinspector-modern → react/utils}/Base64.h +2 -2
  97. package/gradle/libs.versions.toml +1 -1
  98. package/package.json +8 -8
  99. package/scripts/cocoapods/utils.rb +1 -0
  100. package/src/private/featureflags/ReactNativeFeatureFlags.js +11 -1
  101. package/src/private/featureflags/specs/NativeReactNativeFeatureFlags.js +3 -1
  102. package/third-party-podspecs/RCT-Folly.podspec +1 -1
  103. package/third-party-podspecs/fmt.podspec +2 -2
  104. package/ReactAndroid/src/main/java/com/facebook/react/devsupport/interfaces/TracingState.kt +0 -19
  105. package/ReactCommon/jsinspector-modern/tracing/TraceRecordingStateSerializer.cpp +0 -68
  106. package/ReactCommon/jsinspector-modern/tracing/TraceRecordingStateSerializer.h +0 -42
  107. package/ReactCommon/jsinspector-modern/tracing/TracingState.h +0 -24
@@ -19,9 +19,7 @@ import com.facebook.react.common.build.ReactBuildConfig
19
19
  import com.facebook.react.internal.featureflags.ReactNativeFeatureFlags
20
20
  import java.net.SocketTimeoutException
21
21
  import okhttp3.Headers
22
- import okhttp3.Protocol
23
22
  import okhttp3.Request
24
- import okhttp3.Response
25
23
 
26
24
  /**
27
25
  * Utility class for reporting network lifecycle events to JavaScript and InspectorNetworkReporter.
@@ -206,11 +204,12 @@ internal object NetworkEventUtil {
206
204
  requestId: Int,
207
205
  devToolsRequestId: String,
208
206
  requestUrl: String?,
209
- response: Response,
207
+ statusCode: Int,
208
+ headers: Map<String, String>,
209
+ contentLength: Long,
210
210
  ) {
211
- val headersMap = okHttpHeadersToMap(response.headers())
212
211
  val headersBundle = Bundle()
213
- for ((headerName, headerValue) in headersMap) {
212
+ for ((headerName, headerValue) in headers) {
214
213
  headersBundle.putString(headerName, headerValue)
215
214
  }
216
215
 
@@ -218,16 +217,16 @@ internal object NetworkEventUtil {
218
217
  InspectorNetworkReporter.reportResponseStart(
219
218
  devToolsRequestId,
220
219
  requestUrl.orEmpty(),
221
- response.code(),
222
- headersMap,
223
- response.body()?.contentLength() ?: 0,
220
+ statusCode,
221
+ headers,
222
+ contentLength,
224
223
  )
225
224
  }
226
225
  reactContext?.emitDeviceEvent(
227
226
  "didReceiveNetworkResponse",
228
227
  Arguments.createArray().apply {
229
228
  pushInt(requestId)
230
- pushInt(response.code())
229
+ pushInt(statusCode)
231
230
  pushMap(Arguments.fromBundle(headersBundle))
232
231
  pushString(requestUrl)
233
232
  },
@@ -244,33 +243,35 @@ internal object NetworkEventUtil {
244
243
  headers: WritableMap?,
245
244
  url: String?,
246
245
  ) {
247
- val headersBuilder = Headers.Builder()
246
+ val headersMap = mutableMapOf<String, String>()
248
247
  headers?.let { map ->
249
248
  val iterator = map.keySetIterator()
250
249
  while (iterator.hasNextKey()) {
251
250
  val key = iterator.nextKey()
252
251
  val value = map.getString(key)
253
252
  if (value != null) {
254
- headersBuilder.add(key, value)
253
+ headersMap[key] = value
255
254
  }
256
255
  }
257
256
  }
257
+
258
+ val contentLength =
259
+ headersMap["Content-Length"]?.toLongOrNull()
260
+ ?: headersMap["content-length"]?.toLongOrNull()
261
+ ?: 0L
262
+
258
263
  onResponseReceived(
259
264
  reactContext,
260
265
  requestId,
261
266
  devToolsRequestId,
262
267
  url,
263
- Response.Builder()
264
- .protocol(Protocol.HTTP_1_1)
265
- .request(Request.Builder().url(url.orEmpty()).build())
266
- .headers(headersBuilder.build())
267
- .code(statusCode)
268
- .message("")
269
- .build(),
268
+ statusCode,
269
+ headersMap,
270
+ contentLength,
270
271
  )
271
272
  }
272
273
 
273
- private fun okHttpHeadersToMap(headers: Headers): Map<String, String> {
274
+ internal fun okHttpHeadersToMap(headers: Headers): Map<String, String> {
274
275
  val responseHeaders = mutableMapOf<String, String>()
275
276
  for (i in 0 until headers.size()) {
276
277
  val headerName = headers.name(i)
@@ -36,7 +36,6 @@ import okhttp3.JavaNetCookieJar
36
36
  import okhttp3.MediaType
37
37
  import okhttp3.MultipartBody
38
38
  import okhttp3.OkHttpClient
39
- import okhttp3.Protocol
40
39
  import okhttp3.Request
41
40
  import okhttp3.RequestBody
42
41
  import okhttp3.Response
@@ -310,21 +309,14 @@ public class NetworkingModule(
310
309
  if (handler.supports(uri, responseType)) {
311
310
  val (res, rawBody) = handler.fetch(uri)
312
311
  val encodedDataLength = res.toString().toByteArray().size
313
- // fix: UriHandlers which are not using file:// scheme fail in whatwg-fetch at this line
314
- // https://github.com/JakeChampion/fetch/blob/main/fetch.js#L547
315
- val response =
316
- Response.Builder()
317
- .protocol(Protocol.HTTP_1_1)
318
- .request(Request.Builder().url(url.orEmpty()).build())
319
- .code(200)
320
- .message("OK")
321
- .build()
322
312
  NetworkEventUtil.onResponseReceived(
323
313
  reactApplicationContext,
324
314
  requestId,
325
315
  devToolsRequestId,
326
316
  url,
327
- response,
317
+ 200,
318
+ emptyMap(),
319
+ encodedDataLength.toLong(),
328
320
  )
329
321
  NetworkEventUtil.onDataReceived(
330
322
  reactApplicationContext,
@@ -645,7 +637,9 @@ public class NetworkingModule(
645
637
  requestId,
646
638
  devToolsRequestId,
647
639
  url,
648
- response,
640
+ response.code(),
641
+ NetworkEventUtil.okHttpHeadersToMap(response.headers()),
642
+ response.body()?.contentLength() ?: 0L,
649
643
  )
650
644
 
651
645
  try {
@@ -14,7 +14,7 @@ public object ReactNativeVersion {
14
14
  public val VERSION: Map<String, Any?> = mapOf(
15
15
  "major" to 0,
16
16
  "minor" to 83,
17
- "patch" to 4,
17
+ "patch" to 5,
18
18
  "prerelease" to null
19
19
  )
20
20
  }
@@ -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
 
@@ -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<<d4aa5fd7828c31ac309551066662eeaa>>
8
8
  */
9
9
 
10
10
  /**
@@ -381,12 +381,24 @@ class ReactNativeFeatureFlagsJavaProvider
381
381
  return method(javaProvider_);
382
382
  }
383
383
 
384
+ bool fuseboxFrameRecordingEnabled() override {
385
+ static const auto method =
386
+ getReactNativeFeatureFlagsProviderJavaClass()->getMethod<jboolean()>("fuseboxFrameRecordingEnabled");
387
+ return method(javaProvider_);
388
+ }
389
+
384
390
  bool fuseboxNetworkInspectionEnabled() override {
385
391
  static const auto method =
386
392
  getReactNativeFeatureFlagsProviderJavaClass()->getMethod<jboolean()>("fuseboxNetworkInspectionEnabled");
387
393
  return method(javaProvider_);
388
394
  }
389
395
 
396
+ bool fuseboxScreenshotCaptureEnabled() override {
397
+ static const auto method =
398
+ getReactNativeFeatureFlagsProviderJavaClass()->getMethod<jboolean()>("fuseboxScreenshotCaptureEnabled");
399
+ return method(javaProvider_);
400
+ }
401
+
390
402
  bool hideOffscreenVirtualViewsOnIOS() override {
391
403
  static const auto method =
392
404
  getReactNativeFeatureFlagsProviderJavaClass()->getMethod<jboolean()>("hideOffscreenVirtualViewsOnIOS");
@@ -838,11 +850,21 @@ bool JReactNativeFeatureFlagsCxxInterop::fuseboxEnabledRelease(
838
850
  return ReactNativeFeatureFlags::fuseboxEnabledRelease();
839
851
  }
840
852
 
853
+ bool JReactNativeFeatureFlagsCxxInterop::fuseboxFrameRecordingEnabled(
854
+ facebook::jni::alias_ref<JReactNativeFeatureFlagsCxxInterop> /*unused*/) {
855
+ return ReactNativeFeatureFlags::fuseboxFrameRecordingEnabled();
856
+ }
857
+
841
858
  bool JReactNativeFeatureFlagsCxxInterop::fuseboxNetworkInspectionEnabled(
842
859
  facebook::jni::alias_ref<JReactNativeFeatureFlagsCxxInterop> /*unused*/) {
843
860
  return ReactNativeFeatureFlags::fuseboxNetworkInspectionEnabled();
844
861
  }
845
862
 
863
+ bool JReactNativeFeatureFlagsCxxInterop::fuseboxScreenshotCaptureEnabled(
864
+ facebook::jni::alias_ref<JReactNativeFeatureFlagsCxxInterop> /*unused*/) {
865
+ return ReactNativeFeatureFlags::fuseboxScreenshotCaptureEnabled();
866
+ }
867
+
846
868
  bool JReactNativeFeatureFlagsCxxInterop::hideOffscreenVirtualViewsOnIOS(
847
869
  facebook::jni::alias_ref<JReactNativeFeatureFlagsCxxInterop> /*unused*/) {
848
870
  return ReactNativeFeatureFlags::hideOffscreenVirtualViewsOnIOS();
@@ -1180,9 +1202,15 @@ void JReactNativeFeatureFlagsCxxInterop::registerNatives() {
1180
1202
  makeNativeMethod(
1181
1203
  "fuseboxEnabledRelease",
1182
1204
  JReactNativeFeatureFlagsCxxInterop::fuseboxEnabledRelease),
1205
+ makeNativeMethod(
1206
+ "fuseboxFrameRecordingEnabled",
1207
+ JReactNativeFeatureFlagsCxxInterop::fuseboxFrameRecordingEnabled),
1183
1208
  makeNativeMethod(
1184
1209
  "fuseboxNetworkInspectionEnabled",
1185
1210
  JReactNativeFeatureFlagsCxxInterop::fuseboxNetworkInspectionEnabled),
1211
+ makeNativeMethod(
1212
+ "fuseboxScreenshotCaptureEnabled",
1213
+ JReactNativeFeatureFlagsCxxInterop::fuseboxScreenshotCaptureEnabled),
1186
1214
  makeNativeMethod(
1187
1215
  "hideOffscreenVirtualViewsOnIOS",
1188
1216
  JReactNativeFeatureFlagsCxxInterop::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<<9853cf162b179249b2c6af120a662cf3>>
7
+ * @generated SignedSource<<554bd02cd328ba462d4e703b653d6cdd>>
8
8
  */
9
9
 
10
10
  /**
@@ -201,9 +201,15 @@ class JReactNativeFeatureFlagsCxxInterop
201
201
  static bool fuseboxEnabledRelease(
202
202
  facebook::jni::alias_ref<JReactNativeFeatureFlagsCxxInterop>);
203
203
 
204
+ static bool fuseboxFrameRecordingEnabled(
205
+ facebook::jni::alias_ref<JReactNativeFeatureFlagsCxxInterop>);
206
+
204
207
  static bool fuseboxNetworkInspectionEnabled(
205
208
  facebook::jni::alias_ref<JReactNativeFeatureFlagsCxxInterop>);
206
209
 
210
+ static bool fuseboxScreenshotCaptureEnabled(
211
+ facebook::jni::alias_ref<JReactNativeFeatureFlagsCxxInterop>);
212
+
207
213
  static bool hideOffscreenVirtualViewsOnIOS(
208
214
  facebook::jni::alias_ref<JReactNativeFeatureFlagsCxxInterop>);
209
215