react-native-tvos 0.85.2-0 → 0.85.3-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.
- package/Libraries/Core/ReactNativeVersion.js +1 -1
- package/Libraries/Utilities/HMRClient.js +28 -1
- package/React/Base/RCTVersion.m +1 -1
- package/React/CoreModules/RCTJscSafeUrl+Internal.h +23 -0
- package/React/CoreModules/RCTJscSafeUrl.mm +38 -0
- package/React/CoreModules/RCTRedBox+Internal.h +42 -0
- package/React/CoreModules/RCTRedBox.mm +30 -471
- package/React/CoreModules/RCTRedBox2AnsiParser+Internal.h +22 -0
- package/React/CoreModules/RCTRedBox2AnsiParser.mm +55 -0
- package/React/CoreModules/RCTRedBox2Controller+Internal.h +34 -0
- package/React/CoreModules/RCTRedBox2Controller.mm +764 -0
- package/React/CoreModules/RCTRedBox2ErrorParser+Internal.h +46 -0
- package/React/CoreModules/RCTRedBox2ErrorParser.mm +57 -0
- package/React/CoreModules/RCTRedBoxController+Internal.h +31 -0
- package/React/CoreModules/RCTRedBoxController.mm +447 -0
- package/React/CoreModules/RCTRedBoxHMRClient+Internal.h +26 -0
- package/React/CoreModules/RCTRedBoxHMRClient.mm +125 -0
- package/React/CoreModules/React-CoreModules.podspec +1 -0
- package/React/DevSupport/RCTFrameTimingsObserver.h +24 -0
- package/React/DevSupport/RCTFrameTimingsObserver.mm +298 -0
- package/React/FBReactNativeSpec/FBReactNativeSpecJSI.h +40 -0
- package/ReactAndroid/gradle.properties +1 -1
- package/ReactAndroid/hermes-engine/build.gradle.kts +17 -0
- package/ReactAndroid/publish.gradle +20 -46
- package/ReactAndroid/src/main/java/com/facebook/react/devsupport/InspectorFlags.kt +4 -0
- package/ReactAndroid/src/main/java/com/facebook/react/devsupport/inspector/FrameTimingSequence.kt +1 -1
- package/ReactAndroid/src/main/java/com/facebook/react/devsupport/inspector/FrameTimingsObserver.kt +127 -26
- package/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlags.kt +31 -1
- package/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsCxxAccessor.kt +51 -1
- package/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsCxxInterop.kt +11 -1
- package/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsDefaults.kt +11 -1
- package/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsLocalAccessor.kt +56 -1
- package/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsProvider.kt +11 -1
- package/ReactAndroid/src/main/java/com/facebook/react/internal/tracing/PerformanceTracer.kt +39 -0
- package/ReactAndroid/src/main/java/com/facebook/react/modules/systeminfo/ReactNativeVersion.kt +1 -1
- package/ReactAndroid/src/main/java/com/facebook/react/runtime/ReactHostImpl.kt +50 -10
- package/ReactAndroid/src/main/jni/CMakeLists.txt +7 -0
- package/ReactAndroid/src/main/jni/react/devsupport/JInspectorFlags.cpp +22 -0
- package/ReactAndroid/src/main/jni/react/devsupport/JInspectorFlags.h +2 -0
- package/ReactAndroid/src/main/jni/react/featureflags/JReactNativeFeatureFlagsCxxInterop.cpp +71 -1
- package/ReactAndroid/src/main/jni/react/featureflags/JReactNativeFeatureFlagsCxxInterop.h +16 -1
- package/ReactAndroid/src/main/jni/react/runtime/jni/JReactHostInspectorTarget.cpp +14 -0
- package/ReactAndroid/src/main/jni/react/runtime/jni/JReactHostInspectorTarget.h +18 -4
- package/ReactCommon/React-Fabric.podspec +6 -0
- package/ReactCommon/cxxreact/ReactNativeVersion.h +2 -2
- package/ReactCommon/jsinspector-modern/HostAgent.cpp +36 -0
- package/ReactCommon/jsinspector-modern/HostTarget.cpp +7 -1
- package/ReactCommon/jsinspector-modern/HostTarget.h +25 -0
- package/ReactCommon/jsinspector-modern/HostTargetTracing.cpp +1 -1
- package/ReactCommon/jsinspector-modern/HostTargetTracing.h +4 -4
- package/ReactCommon/jsinspector-modern/InspectorFlags.cpp +12 -0
- package/ReactCommon/jsinspector-modern/InspectorFlags.h +12 -0
- package/ReactCommon/jsinspector-modern/NetworkIOAgent.cpp +1 -1
- package/ReactCommon/jsinspector-modern/RuntimeAgent.cpp +19 -0
- package/ReactCommon/jsinspector-modern/RuntimeAgent.h +7 -0
- package/ReactCommon/jsinspector-modern/RuntimeTarget.cpp +33 -0
- package/ReactCommon/jsinspector-modern/RuntimeTarget.h +6 -0
- package/ReactCommon/jsinspector-modern/tests/HostTargetTest.cpp +12 -0
- package/ReactCommon/jsinspector-modern/tests/InspectorMocks.h +3 -2
- package/ReactCommon/jsinspector-modern/tests/JsiIntegrationTest.cpp +1 -0
- package/ReactCommon/jsinspector-modern/tests/NetworkReporterTest.cpp +1 -1
- package/ReactCommon/jsinspector-modern/tests/TracingTest.cpp +1 -1
- package/ReactCommon/jsinspector-modern/tests/utils/InspectorFlagOverridesGuard.cpp +10 -0
- package/ReactCommon/jsinspector-modern/tests/utils/InspectorFlagOverridesGuard.h +3 -1
- package/ReactCommon/jsinspector-modern/tracing/CMakeLists.txt +1 -0
- package/ReactCommon/jsinspector-modern/tracing/FrameTimingSequence.h +7 -3
- package/ReactCommon/jsinspector-modern/tracing/HostTracingProfileSerializer.cpp +52 -29
- package/ReactCommon/jsinspector-modern/tracing/HostTracingProfileSerializer.h +6 -6
- package/ReactCommon/jsinspector-modern/tracing/PerformanceTracerSection.h +113 -0
- package/ReactCommon/jsinspector-modern/tracing/React-jsinspectortracing.podspec +1 -0
- package/ReactCommon/jsinspector-modern/tracing/TraceEventGenerator.cpp +12 -5
- package/ReactCommon/jsinspector-modern/tracing/TraceEventGenerator.h +3 -1
- package/ReactCommon/jsinspector-modern/tracing/TraceEventSerializer.cpp +42 -0
- package/ReactCommon/jsinspector-modern/tracing/TraceEventSerializer.h +7 -0
- package/ReactCommon/react/debug/CMakeLists.txt +2 -1
- package/ReactCommon/react/debug/React-debug.podspec +7 -1
- package/ReactCommon/react/debug/redbox/AnsiParser.cpp +139 -0
- package/ReactCommon/react/debug/redbox/AnsiParser.h +35 -0
- package/ReactCommon/react/debug/redbox/JscSafeUrl.cpp +179 -0
- package/ReactCommon/react/debug/redbox/JscSafeUrl.h +27 -0
- package/ReactCommon/react/debug/redbox/RedBoxErrorParser.cpp +171 -0
- package/ReactCommon/react/debug/redbox/RedBoxErrorParser.h +40 -0
- package/ReactCommon/react/debug/redbox/tests/AnsiParserTest.cpp +97 -0
- package/ReactCommon/react/debug/redbox/tests/JscSafeUrlTest.cpp +173 -0
- package/ReactCommon/react/debug/redbox/tests/RedBoxErrorParserTest.cpp +107 -0
- package/ReactCommon/react/featureflags/ReactNativeFeatureFlags.cpp +21 -1
- package/ReactCommon/react/featureflags/ReactNativeFeatureFlags.h +26 -1
- package/ReactCommon/react/featureflags/ReactNativeFeatureFlagsAccessor.cpp +135 -45
- package/ReactCommon/react/featureflags/ReactNativeFeatureFlagsAccessor.h +12 -2
- package/ReactCommon/react/featureflags/ReactNativeFeatureFlagsDefaults.h +21 -1
- package/ReactCommon/react/featureflags/ReactNativeFeatureFlagsDynamicProvider.h +46 -1
- package/ReactCommon/react/featureflags/ReactNativeFeatureFlagsProvider.h +6 -1
- package/ReactCommon/react/nativemodule/defaults/CMakeLists.txt +1 -0
- package/ReactCommon/react/nativemodule/defaults/DefaultTurboModules.cpp +7 -0
- package/ReactCommon/react/nativemodule/defaults/React-defaultsnativemodule.podspec +1 -0
- package/ReactCommon/react/nativemodule/featureflags/NativeReactNativeFeatureFlags.cpp +26 -1
- package/ReactCommon/react/nativemodule/featureflags/NativeReactNativeFeatureFlags.h +11 -1
- package/ReactCommon/react/nativemodule/mutationobserver/NativeMutationObserver.h +4 -0
- package/ReactCommon/react/nativemodule/mutationobserver/React-mutationobservernativemodule.podspec +66 -0
- package/ReactCommon/react/performance/timeline/PerformanceObserver.cpp +18 -6
- package/ReactCommon/react/performance/timeline/PerformanceObserver.h +2 -0
- package/ReactCommon/react/runtime/platform/ios/ReactCommon/RCTHost.mm +115 -0
- package/ReactCommon/{jsinspector-modern → react/utils}/Base64.h +2 -2
- package/package.json +11 -11
- package/scripts/cocoapods/utils.rb +1 -0
- package/scripts/react_native_pods.rb +1 -0
- package/scripts/replace-rncore-version.js +72 -15
- package/src/private/featureflags/ReactNativeFeatureFlags.js +26 -1
- package/src/private/featureflags/specs/NativeReactNativeFeatureFlags.js +6 -1
- package/src/private/setup/setUpDefaultReactNativeEnvironment.js +6 -0
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
* This source code is licensed under the MIT license found in the
|
|
5
5
|
* LICENSE file in the root directory of this source tree.
|
|
6
6
|
*
|
|
7
|
-
* @generated SignedSource<<
|
|
7
|
+
* @generated SignedSource<<499aedb10bae64c096e7ad2e096bdd1f>>
|
|
8
8
|
*/
|
|
9
9
|
|
|
10
10
|
/**
|
|
@@ -65,6 +65,7 @@ internal class ReactNativeFeatureFlagsLocalAccessor : ReactNativeFeatureFlagsAcc
|
|
|
65
65
|
private var enableLayoutAnimationsOnIOSCache: Boolean? = null
|
|
66
66
|
private var enableMainQueueCoordinatorOnIOSCache: Boolean? = null
|
|
67
67
|
private var enableModuleArgumentNSNullConversionIOSCache: Boolean? = null
|
|
68
|
+
private var enableMutationObserverByDefaultCache: Boolean? = null
|
|
68
69
|
private var enableNativeCSSParsingCache: Boolean? = null
|
|
69
70
|
private var enableNetworkEventReportingCache: Boolean? = null
|
|
70
71
|
private var enablePreparedTextLayoutCache: Boolean? = null
|
|
@@ -83,13 +84,17 @@ internal class ReactNativeFeatureFlagsLocalAccessor : ReactNativeFeatureFlagsAcc
|
|
|
83
84
|
private var fixTextClippingAndroid15useBoundsForWidthCache: Boolean? = null
|
|
84
85
|
private var fuseboxAssertSingleHostStateCache: Boolean? = null
|
|
85
86
|
private var fuseboxEnabledReleaseCache: Boolean? = null
|
|
87
|
+
private var fuseboxFrameRecordingEnabledCache: Boolean? = null
|
|
86
88
|
private var fuseboxNetworkInspectionEnabledCache: Boolean? = null
|
|
89
|
+
private var fuseboxScreenshotCaptureEnabledCache: Boolean? = null
|
|
87
90
|
private var hideOffscreenVirtualViewsOnIOSCache: Boolean? = null
|
|
88
91
|
private var overrideBySynchronousMountPropsAtMountingAndroidCache: Boolean? = null
|
|
89
92
|
private var perfIssuesEnabledCache: Boolean? = null
|
|
90
93
|
private var perfMonitorV2EnabledCache: Boolean? = null
|
|
91
94
|
private var preparedTextCacheSizeCache: Double? = null
|
|
92
95
|
private var preventShadowTreeCommitExhaustionCache: Boolean? = null
|
|
96
|
+
private var redBoxV2AndroidCache: Boolean? = null
|
|
97
|
+
private var redBoxV2IOSCache: Boolean? = null
|
|
93
98
|
private var shouldPressibilityUseW3CPointerEventsForHoverCache: Boolean? = null
|
|
94
99
|
private var shouldTriggerResponderTransferOnScrollAndroidCache: Boolean? = null
|
|
95
100
|
private var skipActivityIdentityAssertionOnHostPauseCache: Boolean? = null
|
|
@@ -520,6 +525,16 @@ internal class ReactNativeFeatureFlagsLocalAccessor : ReactNativeFeatureFlagsAcc
|
|
|
520
525
|
return cached
|
|
521
526
|
}
|
|
522
527
|
|
|
528
|
+
override fun enableMutationObserverByDefault(): Boolean {
|
|
529
|
+
var cached = enableMutationObserverByDefaultCache
|
|
530
|
+
if (cached == null) {
|
|
531
|
+
cached = currentProvider.enableMutationObserverByDefault()
|
|
532
|
+
accessedFeatureFlags.add("enableMutationObserverByDefault")
|
|
533
|
+
enableMutationObserverByDefaultCache = cached
|
|
534
|
+
}
|
|
535
|
+
return cached
|
|
536
|
+
}
|
|
537
|
+
|
|
523
538
|
override fun enableNativeCSSParsing(): Boolean {
|
|
524
539
|
var cached = enableNativeCSSParsingCache
|
|
525
540
|
if (cached == null) {
|
|
@@ -700,6 +715,16 @@ internal class ReactNativeFeatureFlagsLocalAccessor : ReactNativeFeatureFlagsAcc
|
|
|
700
715
|
return cached
|
|
701
716
|
}
|
|
702
717
|
|
|
718
|
+
override fun fuseboxFrameRecordingEnabled(): Boolean {
|
|
719
|
+
var cached = fuseboxFrameRecordingEnabledCache
|
|
720
|
+
if (cached == null) {
|
|
721
|
+
cached = currentProvider.fuseboxFrameRecordingEnabled()
|
|
722
|
+
accessedFeatureFlags.add("fuseboxFrameRecordingEnabled")
|
|
723
|
+
fuseboxFrameRecordingEnabledCache = cached
|
|
724
|
+
}
|
|
725
|
+
return cached
|
|
726
|
+
}
|
|
727
|
+
|
|
703
728
|
override fun fuseboxNetworkInspectionEnabled(): Boolean {
|
|
704
729
|
var cached = fuseboxNetworkInspectionEnabledCache
|
|
705
730
|
if (cached == null) {
|
|
@@ -710,6 +735,16 @@ internal class ReactNativeFeatureFlagsLocalAccessor : ReactNativeFeatureFlagsAcc
|
|
|
710
735
|
return cached
|
|
711
736
|
}
|
|
712
737
|
|
|
738
|
+
override fun fuseboxScreenshotCaptureEnabled(): Boolean {
|
|
739
|
+
var cached = fuseboxScreenshotCaptureEnabledCache
|
|
740
|
+
if (cached == null) {
|
|
741
|
+
cached = currentProvider.fuseboxScreenshotCaptureEnabled()
|
|
742
|
+
accessedFeatureFlags.add("fuseboxScreenshotCaptureEnabled")
|
|
743
|
+
fuseboxScreenshotCaptureEnabledCache = cached
|
|
744
|
+
}
|
|
745
|
+
return cached
|
|
746
|
+
}
|
|
747
|
+
|
|
713
748
|
override fun hideOffscreenVirtualViewsOnIOS(): Boolean {
|
|
714
749
|
var cached = hideOffscreenVirtualViewsOnIOSCache
|
|
715
750
|
if (cached == null) {
|
|
@@ -770,6 +805,26 @@ internal class ReactNativeFeatureFlagsLocalAccessor : ReactNativeFeatureFlagsAcc
|
|
|
770
805
|
return cached
|
|
771
806
|
}
|
|
772
807
|
|
|
808
|
+
override fun redBoxV2Android(): Boolean {
|
|
809
|
+
var cached = redBoxV2AndroidCache
|
|
810
|
+
if (cached == null) {
|
|
811
|
+
cached = currentProvider.redBoxV2Android()
|
|
812
|
+
accessedFeatureFlags.add("redBoxV2Android")
|
|
813
|
+
redBoxV2AndroidCache = cached
|
|
814
|
+
}
|
|
815
|
+
return cached
|
|
816
|
+
}
|
|
817
|
+
|
|
818
|
+
override fun redBoxV2IOS(): Boolean {
|
|
819
|
+
var cached = redBoxV2IOSCache
|
|
820
|
+
if (cached == null) {
|
|
821
|
+
cached = currentProvider.redBoxV2IOS()
|
|
822
|
+
accessedFeatureFlags.add("redBoxV2IOS")
|
|
823
|
+
redBoxV2IOSCache = cached
|
|
824
|
+
}
|
|
825
|
+
return cached
|
|
826
|
+
}
|
|
827
|
+
|
|
773
828
|
override fun shouldPressibilityUseW3CPointerEventsForHover(): Boolean {
|
|
774
829
|
var cached = shouldPressibilityUseW3CPointerEventsForHoverCache
|
|
775
830
|
if (cached == null) {
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
* This source code is licensed under the MIT license found in the
|
|
5
5
|
* LICENSE file in the root directory of this source tree.
|
|
6
6
|
*
|
|
7
|
-
* @generated SignedSource<<
|
|
7
|
+
* @generated SignedSource<<4ed94743d9eafd0be32bb04471a18fc6>>
|
|
8
8
|
*/
|
|
9
9
|
|
|
10
10
|
/**
|
|
@@ -105,6 +105,8 @@ public interface ReactNativeFeatureFlagsProvider {
|
|
|
105
105
|
|
|
106
106
|
@DoNotStrip public fun enableModuleArgumentNSNullConversionIOS(): Boolean
|
|
107
107
|
|
|
108
|
+
@DoNotStrip public fun enableMutationObserverByDefault(): Boolean
|
|
109
|
+
|
|
108
110
|
@DoNotStrip public fun enableNativeCSSParsing(): Boolean
|
|
109
111
|
|
|
110
112
|
@DoNotStrip public fun enableNetworkEventReporting(): Boolean
|
|
@@ -141,8 +143,12 @@ public interface ReactNativeFeatureFlagsProvider {
|
|
|
141
143
|
|
|
142
144
|
@DoNotStrip public fun fuseboxEnabledRelease(): Boolean
|
|
143
145
|
|
|
146
|
+
@DoNotStrip public fun fuseboxFrameRecordingEnabled(): Boolean
|
|
147
|
+
|
|
144
148
|
@DoNotStrip public fun fuseboxNetworkInspectionEnabled(): Boolean
|
|
145
149
|
|
|
150
|
+
@DoNotStrip public fun fuseboxScreenshotCaptureEnabled(): Boolean
|
|
151
|
+
|
|
146
152
|
@DoNotStrip public fun hideOffscreenVirtualViewsOnIOS(): Boolean
|
|
147
153
|
|
|
148
154
|
@DoNotStrip public fun overrideBySynchronousMountPropsAtMountingAndroid(): Boolean
|
|
@@ -155,6 +161,10 @@ public interface ReactNativeFeatureFlagsProvider {
|
|
|
155
161
|
|
|
156
162
|
@DoNotStrip public fun preventShadowTreeCommitExhaustion(): Boolean
|
|
157
163
|
|
|
164
|
+
@DoNotStrip public fun redBoxV2Android(): Boolean
|
|
165
|
+
|
|
166
|
+
@DoNotStrip public fun redBoxV2IOS(): Boolean
|
|
167
|
+
|
|
158
168
|
@DoNotStrip public fun shouldPressibilityUseW3CPointerEventsForHover(): Boolean
|
|
159
169
|
|
|
160
170
|
@DoNotStrip public fun shouldTriggerResponderTransferOnScrollAndroid(): Boolean
|
|
@@ -23,6 +23,45 @@ public object PerformanceTracer {
|
|
|
23
23
|
SoLoader.loadLibrary("react_performancetracerjni")
|
|
24
24
|
}
|
|
25
25
|
|
|
26
|
+
public fun <T> trace(name: String, block: () -> T): T {
|
|
27
|
+
return trace(name, null /* track */, null /* trackGroup */, null /* color */, block)
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
public fun <T> trace(name: String, track: String, block: () -> T): T {
|
|
31
|
+
return trace(name, track, null /* trackGroup */, null /* color */, block)
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
public fun <T> trace(name: String, track: String, trackGroup: String, block: () -> T): T {
|
|
35
|
+
return trace(name, track, trackGroup, null /* color */, block)
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
public fun <T> trace(
|
|
39
|
+
name: String,
|
|
40
|
+
track: String?,
|
|
41
|
+
trackGroup: String?,
|
|
42
|
+
color: String?,
|
|
43
|
+
block: () -> T,
|
|
44
|
+
): T {
|
|
45
|
+
if (!isTracing()) {
|
|
46
|
+
return block()
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
val startTimeNanos = java.lang.System.nanoTime()
|
|
50
|
+
try {
|
|
51
|
+
return block()
|
|
52
|
+
} finally {
|
|
53
|
+
val endTimeNanos = java.lang.System.nanoTime()
|
|
54
|
+
reportTimeStamp(
|
|
55
|
+
name,
|
|
56
|
+
startTimeNanos,
|
|
57
|
+
endTimeNanos,
|
|
58
|
+
track,
|
|
59
|
+
trackGroup,
|
|
60
|
+
color,
|
|
61
|
+
)
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
|
|
26
65
|
/** Callback interface for tracing state changes. */
|
|
27
66
|
@DoNotStrip
|
|
28
67
|
public interface TracingStateCallback {
|
|
@@ -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
|
|
@@ -447,6 +448,43 @@ public class ReactHostImpl(
|
|
|
447
448
|
InspectorNetworkHelper.loadNetworkResource(url, listener)
|
|
448
449
|
}
|
|
449
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
|
+
|
|
450
488
|
/**
|
|
451
489
|
* Entrypoint to destroy the ReactInstance. If the ReactInstance is reloading, will wait until
|
|
452
490
|
* reload is finished, before destroying.
|
|
@@ -1565,16 +1603,18 @@ public class ReactHostImpl(
|
|
|
1565
1603
|
when (state) {
|
|
1566
1604
|
TracingState.ENABLED_IN_BACKGROUND_MODE,
|
|
1567
1605
|
TracingState.ENABLED_IN_CDP_MODE -> {
|
|
1568
|
-
|
|
1569
|
-
|
|
1570
|
-
|
|
1571
|
-
|
|
1572
|
-
|
|
1573
|
-
|
|
1574
|
-
|
|
1575
|
-
|
|
1576
|
-
|
|
1577
|
-
|
|
1606
|
+
if (InspectorFlags.getFrameRecordingEnabled()) {
|
|
1607
|
+
val observer =
|
|
1608
|
+
FrameTimingsObserver(
|
|
1609
|
+
_screenshotsEnabled,
|
|
1610
|
+
{ frameTimingsSequence ->
|
|
1611
|
+
inspectorTarget.recordFrameTimings(frameTimingsSequence)
|
|
1612
|
+
},
|
|
1613
|
+
)
|
|
1614
|
+
observer.setCurrentWindow(currentActivity?.window)
|
|
1615
|
+
observer.start()
|
|
1616
|
+
frameTimingsObserver = observer
|
|
1617
|
+
}
|
|
1578
1618
|
}
|
|
1579
1619
|
TracingState.DISABLED -> {
|
|
1580
1620
|
frameTimingsObserver?.stop()
|
|
@@ -117,6 +117,7 @@ add_react_common_subdir(react/renderer/components/safeareaview)
|
|
|
117
117
|
add_react_common_subdir(react/renderer/leakchecker)
|
|
118
118
|
add_react_common_subdir(react/renderer/observers/events)
|
|
119
119
|
add_react_common_subdir(react/renderer/observers/intersection)
|
|
120
|
+
add_react_common_subdir(react/renderer/observers/mutation)
|
|
120
121
|
add_react_common_subdir(react/renderer/textlayoutmanager)
|
|
121
122
|
add_react_common_subdir(react/utils)
|
|
122
123
|
add_react_common_subdir(react/bridging)
|
|
@@ -128,6 +129,7 @@ add_react_common_subdir(react/nativemodule/featureflags)
|
|
|
128
129
|
add_react_common_subdir(react/nativemodule/microtasks)
|
|
129
130
|
add_react_common_subdir(react/nativemodule/idlecallbacks)
|
|
130
131
|
add_react_common_subdir(react/nativemodule/intersectionobserver)
|
|
132
|
+
add_react_common_subdir(react/nativemodule/mutationobserver)
|
|
131
133
|
add_react_common_subdir(react/nativemodule/webperformance)
|
|
132
134
|
add_react_common_subdir(react/networking)
|
|
133
135
|
add_react_common_subdir(jserrorhandler)
|
|
@@ -197,6 +199,7 @@ add_library(reactnative
|
|
|
197
199
|
$<TARGET_OBJECTS:react_nativemodule_idlecallbacks>
|
|
198
200
|
$<TARGET_OBJECTS:react_nativemodule_intersectionobserver>
|
|
199
201
|
$<TARGET_OBJECTS:react_nativemodule_microtasks>
|
|
202
|
+
$<TARGET_OBJECTS:react_nativemodule_mutationobserver>
|
|
200
203
|
$<TARGET_OBJECTS:react_nativemodule_webperformance>
|
|
201
204
|
$<TARGET_OBJECTS:react_networking>
|
|
202
205
|
$<TARGET_OBJECTS:react_newarchdefaults>
|
|
@@ -219,6 +222,7 @@ add_library(reactnative
|
|
|
219
222
|
$<TARGET_OBJECTS:react_renderer_mounting>
|
|
220
223
|
$<TARGET_OBJECTS:react_renderer_observers_events>
|
|
221
224
|
$<TARGET_OBJECTS:react_renderer_observers_intersection>
|
|
225
|
+
$<TARGET_OBJECTS:react_renderer_observers_mutation>
|
|
222
226
|
$<TARGET_OBJECTS:react_renderer_runtimescheduler>
|
|
223
227
|
$<TARGET_OBJECTS:react_renderer_scheduler>
|
|
224
228
|
$<TARGET_OBJECTS:react_renderer_telemetry>
|
|
@@ -292,6 +296,7 @@ target_include_directories(reactnative
|
|
|
292
296
|
$<TARGET_PROPERTY:react_nativemodule_idlecallbacks,INTERFACE_INCLUDE_DIRECTORIES>
|
|
293
297
|
$<TARGET_PROPERTY:react_nativemodule_intersectionobserver,INTERFACE_INCLUDE_DIRECTORIES>
|
|
294
298
|
$<TARGET_PROPERTY:react_nativemodule_microtasks,INTERFACE_INCLUDE_DIRECTORIES>
|
|
299
|
+
$<TARGET_PROPERTY:react_nativemodule_mutationobserver,INTERFACE_INCLUDE_DIRECTORIES>
|
|
295
300
|
$<TARGET_PROPERTY:react_nativemodule_webperformance,INTERFACE_INCLUDE_DIRECTORIES>
|
|
296
301
|
$<TARGET_PROPERTY:react_networking,INTERFACE_INCLUDE_DIRECTORIES>
|
|
297
302
|
$<TARGET_PROPERTY:react_newarchdefaults,INTERFACE_INCLUDE_DIRECTORIES>
|
|
@@ -315,6 +320,8 @@ target_include_directories(reactnative
|
|
|
315
320
|
$<TARGET_PROPERTY:react_renderer_mapbuffer,INTERFACE_INCLUDE_DIRECTORIES>
|
|
316
321
|
$<TARGET_PROPERTY:react_renderer_mounting,INTERFACE_INCLUDE_DIRECTORIES>
|
|
317
322
|
$<TARGET_PROPERTY:react_renderer_observers_events,INTERFACE_INCLUDE_DIRECTORIES>
|
|
323
|
+
$<TARGET_PROPERTY:react_renderer_observers_intersection,INTERFACE_INCLUDE_DIRECTORIES>
|
|
324
|
+
$<TARGET_PROPERTY:react_renderer_observers_mutation,INTERFACE_INCLUDE_DIRECTORIES>
|
|
318
325
|
$<TARGET_PROPERTY:react_renderer_runtimescheduler,INTERFACE_INCLUDE_DIRECTORIES>
|
|
319
326
|
$<TARGET_PROPERTY:react_renderer_scheduler,INTERFACE_INCLUDE_DIRECTORIES>
|
|
320
327
|
$<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<<
|
|
7
|
+
* @generated SignedSource<<fbfa1db0da68d08e055002244a6847de>>
|
|
8
8
|
*/
|
|
9
9
|
|
|
10
10
|
/**
|
|
@@ -285,6 +285,12 @@ class ReactNativeFeatureFlagsJavaProvider
|
|
|
285
285
|
return method(javaProvider_);
|
|
286
286
|
}
|
|
287
287
|
|
|
288
|
+
bool enableMutationObserverByDefault() override {
|
|
289
|
+
static const auto method =
|
|
290
|
+
getReactNativeFeatureFlagsProviderJavaClass()->getMethod<jboolean()>("enableMutationObserverByDefault");
|
|
291
|
+
return method(javaProvider_);
|
|
292
|
+
}
|
|
293
|
+
|
|
288
294
|
bool enableNativeCSSParsing() override {
|
|
289
295
|
static const auto method =
|
|
290
296
|
getReactNativeFeatureFlagsProviderJavaClass()->getMethod<jboolean()>("enableNativeCSSParsing");
|
|
@@ -393,12 +399,24 @@ class ReactNativeFeatureFlagsJavaProvider
|
|
|
393
399
|
return method(javaProvider_);
|
|
394
400
|
}
|
|
395
401
|
|
|
402
|
+
bool fuseboxFrameRecordingEnabled() override {
|
|
403
|
+
static const auto method =
|
|
404
|
+
getReactNativeFeatureFlagsProviderJavaClass()->getMethod<jboolean()>("fuseboxFrameRecordingEnabled");
|
|
405
|
+
return method(javaProvider_);
|
|
406
|
+
}
|
|
407
|
+
|
|
396
408
|
bool fuseboxNetworkInspectionEnabled() override {
|
|
397
409
|
static const auto method =
|
|
398
410
|
getReactNativeFeatureFlagsProviderJavaClass()->getMethod<jboolean()>("fuseboxNetworkInspectionEnabled");
|
|
399
411
|
return method(javaProvider_);
|
|
400
412
|
}
|
|
401
413
|
|
|
414
|
+
bool fuseboxScreenshotCaptureEnabled() override {
|
|
415
|
+
static const auto method =
|
|
416
|
+
getReactNativeFeatureFlagsProviderJavaClass()->getMethod<jboolean()>("fuseboxScreenshotCaptureEnabled");
|
|
417
|
+
return method(javaProvider_);
|
|
418
|
+
}
|
|
419
|
+
|
|
402
420
|
bool hideOffscreenVirtualViewsOnIOS() override {
|
|
403
421
|
static const auto method =
|
|
404
422
|
getReactNativeFeatureFlagsProviderJavaClass()->getMethod<jboolean()>("hideOffscreenVirtualViewsOnIOS");
|
|
@@ -435,6 +453,18 @@ class ReactNativeFeatureFlagsJavaProvider
|
|
|
435
453
|
return method(javaProvider_);
|
|
436
454
|
}
|
|
437
455
|
|
|
456
|
+
bool redBoxV2Android() override {
|
|
457
|
+
static const auto method =
|
|
458
|
+
getReactNativeFeatureFlagsProviderJavaClass()->getMethod<jboolean()>("redBoxV2Android");
|
|
459
|
+
return method(javaProvider_);
|
|
460
|
+
}
|
|
461
|
+
|
|
462
|
+
bool redBoxV2IOS() override {
|
|
463
|
+
static const auto method =
|
|
464
|
+
getReactNativeFeatureFlagsProviderJavaClass()->getMethod<jboolean()>("redBoxV2IOS");
|
|
465
|
+
return method(javaProvider_);
|
|
466
|
+
}
|
|
467
|
+
|
|
438
468
|
bool shouldPressibilityUseW3CPointerEventsForHover() override {
|
|
439
469
|
static const auto method =
|
|
440
470
|
getReactNativeFeatureFlagsProviderJavaClass()->getMethod<jboolean()>("shouldPressibilityUseW3CPointerEventsForHover");
|
|
@@ -758,6 +788,11 @@ bool JReactNativeFeatureFlagsCxxInterop::enableModuleArgumentNSNullConversionIOS
|
|
|
758
788
|
return ReactNativeFeatureFlags::enableModuleArgumentNSNullConversionIOS();
|
|
759
789
|
}
|
|
760
790
|
|
|
791
|
+
bool JReactNativeFeatureFlagsCxxInterop::enableMutationObserverByDefault(
|
|
792
|
+
facebook::jni::alias_ref<JReactNativeFeatureFlagsCxxInterop> /*unused*/) {
|
|
793
|
+
return ReactNativeFeatureFlags::enableMutationObserverByDefault();
|
|
794
|
+
}
|
|
795
|
+
|
|
761
796
|
bool JReactNativeFeatureFlagsCxxInterop::enableNativeCSSParsing(
|
|
762
797
|
facebook::jni::alias_ref<JReactNativeFeatureFlagsCxxInterop> /*unused*/) {
|
|
763
798
|
return ReactNativeFeatureFlags::enableNativeCSSParsing();
|
|
@@ -848,11 +883,21 @@ bool JReactNativeFeatureFlagsCxxInterop::fuseboxEnabledRelease(
|
|
|
848
883
|
return ReactNativeFeatureFlags::fuseboxEnabledRelease();
|
|
849
884
|
}
|
|
850
885
|
|
|
886
|
+
bool JReactNativeFeatureFlagsCxxInterop::fuseboxFrameRecordingEnabled(
|
|
887
|
+
facebook::jni::alias_ref<JReactNativeFeatureFlagsCxxInterop> /*unused*/) {
|
|
888
|
+
return ReactNativeFeatureFlags::fuseboxFrameRecordingEnabled();
|
|
889
|
+
}
|
|
890
|
+
|
|
851
891
|
bool JReactNativeFeatureFlagsCxxInterop::fuseboxNetworkInspectionEnabled(
|
|
852
892
|
facebook::jni::alias_ref<JReactNativeFeatureFlagsCxxInterop> /*unused*/) {
|
|
853
893
|
return ReactNativeFeatureFlags::fuseboxNetworkInspectionEnabled();
|
|
854
894
|
}
|
|
855
895
|
|
|
896
|
+
bool JReactNativeFeatureFlagsCxxInterop::fuseboxScreenshotCaptureEnabled(
|
|
897
|
+
facebook::jni::alias_ref<JReactNativeFeatureFlagsCxxInterop> /*unused*/) {
|
|
898
|
+
return ReactNativeFeatureFlags::fuseboxScreenshotCaptureEnabled();
|
|
899
|
+
}
|
|
900
|
+
|
|
856
901
|
bool JReactNativeFeatureFlagsCxxInterop::hideOffscreenVirtualViewsOnIOS(
|
|
857
902
|
facebook::jni::alias_ref<JReactNativeFeatureFlagsCxxInterop> /*unused*/) {
|
|
858
903
|
return ReactNativeFeatureFlags::hideOffscreenVirtualViewsOnIOS();
|
|
@@ -883,6 +928,16 @@ bool JReactNativeFeatureFlagsCxxInterop::preventShadowTreeCommitExhaustion(
|
|
|
883
928
|
return ReactNativeFeatureFlags::preventShadowTreeCommitExhaustion();
|
|
884
929
|
}
|
|
885
930
|
|
|
931
|
+
bool JReactNativeFeatureFlagsCxxInterop::redBoxV2Android(
|
|
932
|
+
facebook::jni::alias_ref<JReactNativeFeatureFlagsCxxInterop> /*unused*/) {
|
|
933
|
+
return ReactNativeFeatureFlags::redBoxV2Android();
|
|
934
|
+
}
|
|
935
|
+
|
|
936
|
+
bool JReactNativeFeatureFlagsCxxInterop::redBoxV2IOS(
|
|
937
|
+
facebook::jni::alias_ref<JReactNativeFeatureFlagsCxxInterop> /*unused*/) {
|
|
938
|
+
return ReactNativeFeatureFlags::redBoxV2IOS();
|
|
939
|
+
}
|
|
940
|
+
|
|
886
941
|
bool JReactNativeFeatureFlagsCxxInterop::shouldPressibilityUseW3CPointerEventsForHover(
|
|
887
942
|
facebook::jni::alias_ref<JReactNativeFeatureFlagsCxxInterop> /*unused*/) {
|
|
888
943
|
return ReactNativeFeatureFlags::shouldPressibilityUseW3CPointerEventsForHover();
|
|
@@ -1132,6 +1187,9 @@ void JReactNativeFeatureFlagsCxxInterop::registerNatives() {
|
|
|
1132
1187
|
makeNativeMethod(
|
|
1133
1188
|
"enableModuleArgumentNSNullConversionIOS",
|
|
1134
1189
|
JReactNativeFeatureFlagsCxxInterop::enableModuleArgumentNSNullConversionIOS),
|
|
1190
|
+
makeNativeMethod(
|
|
1191
|
+
"enableMutationObserverByDefault",
|
|
1192
|
+
JReactNativeFeatureFlagsCxxInterop::enableMutationObserverByDefault),
|
|
1135
1193
|
makeNativeMethod(
|
|
1136
1194
|
"enableNativeCSSParsing",
|
|
1137
1195
|
JReactNativeFeatureFlagsCxxInterop::enableNativeCSSParsing),
|
|
@@ -1186,9 +1244,15 @@ void JReactNativeFeatureFlagsCxxInterop::registerNatives() {
|
|
|
1186
1244
|
makeNativeMethod(
|
|
1187
1245
|
"fuseboxEnabledRelease",
|
|
1188
1246
|
JReactNativeFeatureFlagsCxxInterop::fuseboxEnabledRelease),
|
|
1247
|
+
makeNativeMethod(
|
|
1248
|
+
"fuseboxFrameRecordingEnabled",
|
|
1249
|
+
JReactNativeFeatureFlagsCxxInterop::fuseboxFrameRecordingEnabled),
|
|
1189
1250
|
makeNativeMethod(
|
|
1190
1251
|
"fuseboxNetworkInspectionEnabled",
|
|
1191
1252
|
JReactNativeFeatureFlagsCxxInterop::fuseboxNetworkInspectionEnabled),
|
|
1253
|
+
makeNativeMethod(
|
|
1254
|
+
"fuseboxScreenshotCaptureEnabled",
|
|
1255
|
+
JReactNativeFeatureFlagsCxxInterop::fuseboxScreenshotCaptureEnabled),
|
|
1192
1256
|
makeNativeMethod(
|
|
1193
1257
|
"hideOffscreenVirtualViewsOnIOS",
|
|
1194
1258
|
JReactNativeFeatureFlagsCxxInterop::hideOffscreenVirtualViewsOnIOS),
|
|
@@ -1207,6 +1271,12 @@ void JReactNativeFeatureFlagsCxxInterop::registerNatives() {
|
|
|
1207
1271
|
makeNativeMethod(
|
|
1208
1272
|
"preventShadowTreeCommitExhaustion",
|
|
1209
1273
|
JReactNativeFeatureFlagsCxxInterop::preventShadowTreeCommitExhaustion),
|
|
1274
|
+
makeNativeMethod(
|
|
1275
|
+
"redBoxV2Android",
|
|
1276
|
+
JReactNativeFeatureFlagsCxxInterop::redBoxV2Android),
|
|
1277
|
+
makeNativeMethod(
|
|
1278
|
+
"redBoxV2IOS",
|
|
1279
|
+
JReactNativeFeatureFlagsCxxInterop::redBoxV2IOS),
|
|
1210
1280
|
makeNativeMethod(
|
|
1211
1281
|
"shouldPressibilityUseW3CPointerEventsForHover",
|
|
1212
1282
|
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<<
|
|
7
|
+
* @generated SignedSource<<707465eb2a901c79a91681f2bcec1972>>
|
|
8
8
|
*/
|
|
9
9
|
|
|
10
10
|
/**
|
|
@@ -153,6 +153,9 @@ class JReactNativeFeatureFlagsCxxInterop
|
|
|
153
153
|
static bool enableModuleArgumentNSNullConversionIOS(
|
|
154
154
|
facebook::jni::alias_ref<JReactNativeFeatureFlagsCxxInterop>);
|
|
155
155
|
|
|
156
|
+
static bool enableMutationObserverByDefault(
|
|
157
|
+
facebook::jni::alias_ref<JReactNativeFeatureFlagsCxxInterop>);
|
|
158
|
+
|
|
156
159
|
static bool enableNativeCSSParsing(
|
|
157
160
|
facebook::jni::alias_ref<JReactNativeFeatureFlagsCxxInterop>);
|
|
158
161
|
|
|
@@ -207,9 +210,15 @@ class JReactNativeFeatureFlagsCxxInterop
|
|
|
207
210
|
static bool fuseboxEnabledRelease(
|
|
208
211
|
facebook::jni::alias_ref<JReactNativeFeatureFlagsCxxInterop>);
|
|
209
212
|
|
|
213
|
+
static bool fuseboxFrameRecordingEnabled(
|
|
214
|
+
facebook::jni::alias_ref<JReactNativeFeatureFlagsCxxInterop>);
|
|
215
|
+
|
|
210
216
|
static bool fuseboxNetworkInspectionEnabled(
|
|
211
217
|
facebook::jni::alias_ref<JReactNativeFeatureFlagsCxxInterop>);
|
|
212
218
|
|
|
219
|
+
static bool fuseboxScreenshotCaptureEnabled(
|
|
220
|
+
facebook::jni::alias_ref<JReactNativeFeatureFlagsCxxInterop>);
|
|
221
|
+
|
|
213
222
|
static bool hideOffscreenVirtualViewsOnIOS(
|
|
214
223
|
facebook::jni::alias_ref<JReactNativeFeatureFlagsCxxInterop>);
|
|
215
224
|
|
|
@@ -228,6 +237,12 @@ class JReactNativeFeatureFlagsCxxInterop
|
|
|
228
237
|
static bool preventShadowTreeCommitExhaustion(
|
|
229
238
|
facebook::jni::alias_ref<JReactNativeFeatureFlagsCxxInterop>);
|
|
230
239
|
|
|
240
|
+
static bool redBoxV2Android(
|
|
241
|
+
facebook::jni::alias_ref<JReactNativeFeatureFlagsCxxInterop>);
|
|
242
|
+
|
|
243
|
+
static bool redBoxV2IOS(
|
|
244
|
+
facebook::jni::alias_ref<JReactNativeFeatureFlagsCxxInterop>);
|
|
245
|
+
|
|
231
246
|
static bool shouldPressibilityUseW3CPointerEventsForHover(
|
|
232
247
|
facebook::jni::alias_ref<JReactNativeFeatureFlagsCxxInterop>);
|
|
233
248
|
|
|
@@ -145,6 +145,20 @@ void JReactHostInspectorTarget::loadNetworkResource(
|
|
|
145
145
|
}
|
|
146
146
|
}
|
|
147
147
|
|
|
148
|
+
std::optional<std::string> JReactHostInspectorTarget::captureScreenshot(
|
|
149
|
+
const jsinspector_modern::HostTargetDelegate::PageCaptureScreenshotRequest&
|
|
150
|
+
request) {
|
|
151
|
+
if (auto javaReactHostImplStrong = javaReactHostImpl_->get()) {
|
|
152
|
+
std::string format = request.format.value_or("png");
|
|
153
|
+
int quality = request.quality.value_or(-1);
|
|
154
|
+
auto result = javaReactHostImplStrong->captureScreenshot(format, quality);
|
|
155
|
+
if (result) {
|
|
156
|
+
return result->toStdString();
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
return std::nullopt;
|
|
160
|
+
}
|
|
161
|
+
|
|
148
162
|
HostTarget* JReactHostInspectorTarget::getInspectorTarget() {
|
|
149
163
|
return inspectorTarget_ ? inspectorTarget_.get() : nullptr;
|
|
150
164
|
}
|
|
@@ -7,6 +7,7 @@
|
|
|
7
7
|
|
|
8
8
|
#pragma once
|
|
9
9
|
|
|
10
|
+
#include <fbjni/ByteBuffer.h>
|
|
10
11
|
#include <fbjni/fbjni.h>
|
|
11
12
|
|
|
12
13
|
#include <jsinspector-modern/HostTarget.h>
|
|
@@ -98,13 +99,17 @@ struct JFrameTimingSequence : public jni::JavaClass<JFrameTimingSequence> {
|
|
|
98
99
|
std::chrono::steady_clock::time_point(std::chrono::nanoseconds(getFieldValue(field))));
|
|
99
100
|
}
|
|
100
101
|
|
|
101
|
-
std::optional<std::
|
|
102
|
+
std::optional<std::vector<uint8_t>> getScreenshot() const
|
|
102
103
|
{
|
|
103
|
-
auto field = javaClassStatic()->getField<
|
|
104
|
+
auto field = javaClassStatic()->getField<jbyteArray>("screenshot");
|
|
104
105
|
auto javaScreenshot = getFieldValue(field);
|
|
105
106
|
if (javaScreenshot) {
|
|
106
|
-
auto
|
|
107
|
-
|
|
107
|
+
auto size = static_cast<size_t>(javaScreenshot->size());
|
|
108
|
+
if (size > 0) {
|
|
109
|
+
std::vector<uint8_t> result(size);
|
|
110
|
+
javaScreenshot->getRegion(0, javaScreenshot->size(), reinterpret_cast<jbyte *>(result.data()));
|
|
111
|
+
return result;
|
|
112
|
+
}
|
|
108
113
|
}
|
|
109
114
|
return std::nullopt;
|
|
110
115
|
}
|
|
@@ -140,6 +145,13 @@ struct JReactHostImpl : public jni::JavaClass<JReactHostImpl> {
|
|
|
140
145
|
"loadNetworkResource");
|
|
141
146
|
return method(self(), jni::make_jstring(url), listener);
|
|
142
147
|
}
|
|
148
|
+
|
|
149
|
+
jni::local_ref<jni::JString> captureScreenshot(const std::string &format, int quality) const
|
|
150
|
+
{
|
|
151
|
+
auto method = javaClassStatic()->getMethod<jni::local_ref<jni::JString>(jni::local_ref<jni::JString>, jint)>(
|
|
152
|
+
"captureScreenshot");
|
|
153
|
+
return method(self(), jni::make_jstring(format), static_cast<jint>(quality));
|
|
154
|
+
}
|
|
143
155
|
};
|
|
144
156
|
|
|
145
157
|
/**
|
|
@@ -270,6 +282,8 @@ class JReactHostInspectorTarget : public jni::HybridClass<JReactHostInspectorTar
|
|
|
270
282
|
void loadNetworkResource(
|
|
271
283
|
const jsinspector_modern::LoadNetworkResourceRequest ¶ms,
|
|
272
284
|
jsinspector_modern::ScopedExecutor<jsinspector_modern::NetworkRequestListener> executor) override;
|
|
285
|
+
std::optional<std::string> captureScreenshot(
|
|
286
|
+
const jsinspector_modern::HostTargetDelegate::PageCaptureScreenshotRequest &request) override;
|
|
273
287
|
jsinspector_modern::HostTargetTracingDelegate *getTracingDelegate() override;
|
|
274
288
|
|
|
275
289
|
private:
|