@office-iss/react-native-win32 0.0.0-canary.272 → 0.0.0-canary.274
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/.flowconfig +1 -1
- package/CHANGELOG.json +31 -1
- package/CHANGELOG.md +20 -4
- package/Libraries/Animated/AnimatedEvent.js +1 -1
- package/Libraries/Animated/animations/Animation.js +1 -1
- package/Libraries/Animated/createAnimatedComponent.js +7 -7
- package/Libraries/Animated/nodes/AnimatedColor.js +1 -1
- package/Libraries/Animated/nodes/AnimatedInterpolation.js +1 -1
- package/Libraries/Animated/nodes/AnimatedProps.js +1 -1
- package/Libraries/Animated/nodes/AnimatedTransform.js +1 -1
- package/Libraries/Animated/nodes/AnimatedValue.js +1 -1
- package/Libraries/Animated/useAnimatedProps.js +3 -3
- package/Libraries/Components/ActivityIndicator/ActivityIndicator.js +1 -1
- package/Libraries/Components/Keyboard/KeyboardAvoidingView.js +5 -0
- package/Libraries/Components/RefreshControl/__mocks__/RefreshControlMock.js +3 -2
- package/Libraries/Components/ScrollView/ScrollView.js +4 -4
- package/Libraries/Components/ScrollView/ScrollViewCommands.js +1 -1
- package/Libraries/Components/ScrollView/ScrollViewContext.js +2 -0
- package/Libraries/Components/ScrollView/ScrollViewStickyHeader.js +4 -4
- package/Libraries/Components/TextInput/InputAccessoryView.js +1 -1
- package/Libraries/Components/TextInput/RCTMultilineTextInputNativeComponent.js +4 -4
- package/Libraries/Components/TextInput/RCTSingelineTextInputNativeComponent.js +6 -4
- package/Libraries/Components/TextInput/TextInput.d.ts +4 -0
- package/Libraries/Components/TextInput/TextInput.flow.js +7 -9
- package/Libraries/Components/TextInput/TextInput.js +2 -0
- package/Libraries/Components/TextInput/TextInput.win32.js +3 -0
- package/Libraries/Components/TextInput/Win32TextInputNativeComponent.js +3 -0
- package/Libraries/Components/Touchable/TouchableBounce.js +1 -0
- package/Libraries/Components/Touchable/TouchableOpacity.js +1 -0
- package/Libraries/Components/View/ViewNativeComponent.js +3 -88
- package/Libraries/Components/View/ViewWin32.js +1 -0
- package/Libraries/Core/ExceptionsManager.js +44 -27
- package/Libraries/Core/ReactNativeVersion.js +1 -1
- package/Libraries/Core/__mocks__/NativeExceptionsManager.js +0 -1
- package/Libraries/Core/setUpErrorHandling.js +1 -7
- package/Libraries/Core/setUpReactDevTools.js +74 -1
- package/Libraries/Core/setUpTimers.js +21 -10
- package/Libraries/Image/Image.android.js +1 -3
- package/Libraries/Image/Image.d.ts +18 -29
- package/Libraries/Image/Image.ios.js +0 -2
- package/Libraries/Image/Image.win32.js +0 -2
- package/Libraries/Inspector/Inspector.js +1 -0
- package/Libraries/Inspector/Inspector.win32.js +1 -0
- package/Libraries/Lists/SectionListModern.js +7 -7
- package/Libraries/LogBox/Data/LogBoxData.js +2 -2
- package/Libraries/LogBox/LogBoxInspectorContainer.js +1 -1
- package/Libraries/LogBox/LogBoxNotificationContainer.js +2 -2
- package/Libraries/LogBox/UI/LogBoxInspectorHeader.js +1 -1
- package/Libraries/LogBox/UI/LogBoxInspectorHeader.win32.js +1 -1
- package/Libraries/Modal/Modal.js +5 -3
- package/Libraries/NativeComponent/BaseViewConfig.android.js +65 -0
- package/Libraries/NativeComponent/NativeComponentRegistry.js +3 -3
- package/Libraries/PermissionsAndroid/PermissionsAndroid.js +4 -4
- package/Libraries/ReactNative/AppContainer.js +1 -1
- package/Libraries/ReactNative/AppRegistry.js +1 -1
- package/Libraries/ReactNative/DisplayMode.js +1 -1
- package/Libraries/ReactNative/RendererImplementation.js +2 -2
- package/Libraries/ReactNative/getCachedComponentWithDebugName.js +1 -3
- package/Libraries/ReactNative/renderApplication.js +6 -4
- package/Libraries/ReactNative/requireNativeComponent.js +3 -1
- package/Libraries/Renderer/shims/ReactNativeTypes.js +9 -18
- package/Libraries/StyleSheet/StyleSheet.js +7 -1
- package/Libraries/StyleSheet/StyleSheet.win32.js +7 -1
- package/Libraries/StyleSheet/StyleSheetTypes.d.ts +1 -1
- package/Libraries/StyleSheet/StyleSheetTypes.js +1 -1
- package/Libraries/Utilities/FocusManager.win32.js +1 -1
- package/Libraries/Utilities/codegenNativeComponent.js +1 -1
- package/Libraries/Utilities/useMergeRefs.js +26 -7
- package/Libraries/__flowtests__/ReactNativeTypes-flowtest.js +1 -1
- package/index.js +2 -2
- package/index.win32.js +2 -2
- package/jest/setup.js +1 -0
- package/overrides.json +10 -10
- package/package.json +12 -12
- package/src/private/animated/NativeAnimatedHelper.js +4 -4
- package/src/private/animated/NativeAnimatedHelper.win32.js +4 -4
- package/src/private/animated/useAnimatedPropsMemo.js +0 -1
- package/src/private/components/SafeAreaView_INTERNAL_DO_NOT_USE.js +6 -5
- package/src/private/featureflags/ReactNativeFeatureFlags.js +31 -21
- package/src/private/featureflags/specs/NativeReactNativeFeatureFlags.js +8 -6
- package/src/private/specs/modules/NativeExceptionsManager.js +0 -12
- package/src/private/webapis/intersectionobserver/IntersectionObserver.js +6 -0
- package/src/private/webapis/performance/EventTiming.js +1 -1
- package/src/private/webapis/performance/Performance.js +36 -15
- package/src/private/webapis/performance/PerformanceObserver.js +2 -2
- package/src/private/webapis/performance/UserTiming.js +5 -5
- package/src/private/webapis/performance/specs/NativePerformance.js +18 -2
- package/src/private/webapis/performance/specs/__mocks__/NativePerformanceMock.js +32 -12
|
@@ -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<<27ae96c2bc3459bd89e52063a8ed9490>>
|
|
8
8
|
* @flow strict
|
|
9
9
|
*/
|
|
10
10
|
|
|
@@ -15,7 +15,7 @@
|
|
|
15
15
|
* packages/react-native/scripts/featureflags/ReactNativeFeatureFlags.config.js.
|
|
16
16
|
*
|
|
17
17
|
* To regenerate this code, run the following script from the repo root:
|
|
18
|
-
* yarn featureflags
|
|
18
|
+
* yarn featureflags --update
|
|
19
19
|
*/
|
|
20
20
|
|
|
21
21
|
import {
|
|
@@ -51,13 +51,16 @@ export type ReactNativeFeatureFlagsJsOnlyOverrides = OverridesFor<ReactNativeFea
|
|
|
51
51
|
export type ReactNativeFeatureFlags = {
|
|
52
52
|
...ReactNativeFeatureFlagsJsOnly,
|
|
53
53
|
commonTestFlag: Getter<boolean>,
|
|
54
|
+
commonTestFlagWithoutNativeImplementation: Getter<boolean>,
|
|
54
55
|
allowRecursiveCommitsWithSynchronousMountOnAndroid: Getter<boolean>,
|
|
55
56
|
batchRenderingUpdatesInEventLoop: Getter<boolean>,
|
|
56
57
|
completeReactInstanceCreationOnBgThreadOnAndroid: Getter<boolean>,
|
|
58
|
+
disableEventLoopOnBridgeless: Getter<boolean>,
|
|
59
|
+
disableMountItemReorderingAndroid: Getter<boolean>,
|
|
57
60
|
enableAlignItemsBaselineOnFabricIOS: Getter<boolean>,
|
|
58
61
|
enableAndroidLineHeightCentering: Getter<boolean>,
|
|
59
62
|
enableBridgelessArchitecture: Getter<boolean>,
|
|
60
|
-
|
|
63
|
+
enableCppPropsIteratorSetter: Getter<boolean>,
|
|
61
64
|
enableDeletionOfUnmountedViews: Getter<boolean>,
|
|
62
65
|
enableEagerRootViewAttachment: Getter<boolean>,
|
|
63
66
|
enableEventEmitterRetentionDuringGesturesOnAndroid: Getter<boolean>,
|
|
@@ -70,15 +73,14 @@ export type ReactNativeFeatureFlags = {
|
|
|
70
73
|
enableLayoutAnimationsOnIOS: Getter<boolean>,
|
|
71
74
|
enableLongTaskAPI: Getter<boolean>,
|
|
72
75
|
enableMicrotasks: Getter<boolean>,
|
|
76
|
+
enableNewBackgroundAndBorderDrawables: Getter<boolean>,
|
|
73
77
|
enablePreciseSchedulingForPremountItemsOnAndroid: Getter<boolean>,
|
|
74
78
|
enablePropsUpdateReconciliationAndroid: Getter<boolean>,
|
|
75
79
|
enableReportEventPaintTime: Getter<boolean>,
|
|
76
80
|
enableSynchronousStateUpdates: Getter<boolean>,
|
|
77
|
-
enableTextPreallocationOptimisation: Getter<boolean>,
|
|
78
81
|
enableUIConsistency: Getter<boolean>,
|
|
79
82
|
enableViewRecycling: Getter<boolean>,
|
|
80
83
|
excludeYogaFromRawProps: Getter<boolean>,
|
|
81
|
-
fetchImagesInViewPreallocation: Getter<boolean>,
|
|
82
84
|
fixMappingOfEventPrioritiesBetweenFabricAndReact: Getter<boolean>,
|
|
83
85
|
fixMountingCoordinatorReportedPendingTransactionsOnAndroid: Getter<boolean>,
|
|
84
86
|
forceBatchingMountItemsOnAndroid: Getter<boolean>,
|
|
@@ -87,9 +89,9 @@ export type ReactNativeFeatureFlags = {
|
|
|
87
89
|
initEagerTurboModulesOnNativeModulesQueueAndroid: Getter<boolean>,
|
|
88
90
|
lazyAnimationCallbacks: Getter<boolean>,
|
|
89
91
|
loadVectorDrawablesOnImages: Getter<boolean>,
|
|
90
|
-
removeNestedCallsToDispatchMountItemsOnAndroid: Getter<boolean>,
|
|
91
92
|
setAndroidLayoutDirection: Getter<boolean>,
|
|
92
93
|
traceTurboModulePromiseRejectionsOnAndroid: Getter<boolean>,
|
|
94
|
+
useAlwaysAvailableJSErrorHandling: Getter<boolean>,
|
|
93
95
|
useFabricInterop: Getter<boolean>,
|
|
94
96
|
useImmediateExecutorInAndroidBridgeless: Getter<boolean>,
|
|
95
97
|
useModernRuntimeScheduler: Getter<boolean>,
|
|
@@ -190,6 +192,10 @@ export const useRefsForTextInputState: Getter<boolean> = createJavaScriptFlagGet
|
|
|
190
192
|
* Common flag for testing. Do NOT modify.
|
|
191
193
|
*/
|
|
192
194
|
export const commonTestFlag: Getter<boolean> = createNativeFlagGetter('commonTestFlag', false);
|
|
195
|
+
/**
|
|
196
|
+
* Common flag for testing (without native implementation). Do NOT modify.
|
|
197
|
+
*/
|
|
198
|
+
export const commonTestFlagWithoutNativeImplementation: Getter<boolean> = createNativeFlagGetter('commonTestFlagWithoutNativeImplementation', false);
|
|
193
199
|
/**
|
|
194
200
|
* Adds support for recursively processing commits that mount synchronously (Android only).
|
|
195
201
|
*/
|
|
@@ -202,6 +208,14 @@ export const batchRenderingUpdatesInEventLoop: Getter<boolean> = createNativeFla
|
|
|
202
208
|
* Do not wait for a main-thread dispatch to complete init to start executing work on the JS thread on Android
|
|
203
209
|
*/
|
|
204
210
|
export const completeReactInstanceCreationOnBgThreadOnAndroid: Getter<boolean> = createNativeFlagGetter('completeReactInstanceCreationOnBgThreadOnAndroid', false);
|
|
211
|
+
/**
|
|
212
|
+
* The bridgeless architecture enables the event loop by default. This feature flag allows us to force disabling it in specific instances.
|
|
213
|
+
*/
|
|
214
|
+
export const disableEventLoopOnBridgeless: Getter<boolean> = createNativeFlagGetter('disableEventLoopOnBridgeless', false);
|
|
215
|
+
/**
|
|
216
|
+
* Prevent FabricMountingManager from reordering mountitems, which may lead to invalid state on the UI thread
|
|
217
|
+
*/
|
|
218
|
+
export const disableMountItemReorderingAndroid: Getter<boolean> = createNativeFlagGetter('disableMountItemReorderingAndroid', false);
|
|
205
219
|
/**
|
|
206
220
|
* Kill-switch to turn off support for aling-items:baseline on Fabric iOS.
|
|
207
221
|
*/
|
|
@@ -209,15 +223,15 @@ export const enableAlignItemsBaselineOnFabricIOS: Getter<boolean> = createNative
|
|
|
209
223
|
/**
|
|
210
224
|
* When enabled, custom line height calculation will be centered from top to bottom.
|
|
211
225
|
*/
|
|
212
|
-
export const enableAndroidLineHeightCentering: Getter<boolean> = createNativeFlagGetter('enableAndroidLineHeightCentering',
|
|
226
|
+
export const enableAndroidLineHeightCentering: Getter<boolean> = createNativeFlagGetter('enableAndroidLineHeightCentering', true);
|
|
213
227
|
/**
|
|
214
228
|
* Feature flag to enable the new bridgeless architecture. Note: Enabling this will force enable the following flags: `useTurboModules` & `enableFabricRenderer.
|
|
215
229
|
*/
|
|
216
230
|
export const enableBridgelessArchitecture: Getter<boolean> = createNativeFlagGetter('enableBridgelessArchitecture', false);
|
|
217
231
|
/**
|
|
218
|
-
*
|
|
232
|
+
* Enable prop iterator setter-style construction of Props in C++ (this flag is not used in Java).
|
|
219
233
|
*/
|
|
220
|
-
export const
|
|
234
|
+
export const enableCppPropsIteratorSetter: Getter<boolean> = createNativeFlagGetter('enableCppPropsIteratorSetter', false);
|
|
221
235
|
/**
|
|
222
236
|
* Deletes views that were pre-allocated but never mounted on the screen.
|
|
223
237
|
*/
|
|
@@ -266,6 +280,10 @@ export const enableLongTaskAPI: Getter<boolean> = createNativeFlagGetter('enable
|
|
|
266
280
|
* Enables the use of microtasks in Hermes (scheduling) and RuntimeScheduler (execution).
|
|
267
281
|
*/
|
|
268
282
|
export const enableMicrotasks: Getter<boolean> = createNativeFlagGetter('enableMicrotasks', false);
|
|
283
|
+
/**
|
|
284
|
+
* Use BackgroundDrawable and BorderDrawable instead of CSSBackgroundDrawable
|
|
285
|
+
*/
|
|
286
|
+
export const enableNewBackgroundAndBorderDrawables: Getter<boolean> = createNativeFlagGetter('enableNewBackgroundAndBorderDrawables', false);
|
|
269
287
|
/**
|
|
270
288
|
* Moves execution of pre-mount items to outside the choregrapher in the main thread, so we can estimate idle time more precisely (Android only).
|
|
271
289
|
*/
|
|
@@ -282,10 +300,6 @@ export const enableReportEventPaintTime: Getter<boolean> = createNativeFlagGette
|
|
|
282
300
|
* Dispatches state updates synchronously in Fabric (e.g.: updates the scroll position in the shadow tree synchronously from the main thread).
|
|
283
301
|
*/
|
|
284
302
|
export const enableSynchronousStateUpdates: Getter<boolean> = createNativeFlagGetter('enableSynchronousStateUpdates', false);
|
|
285
|
-
/**
|
|
286
|
-
* Text preallocation optimisation where unnecessary work is removed.
|
|
287
|
-
*/
|
|
288
|
-
export const enableTextPreallocationOptimisation: Getter<boolean> = createNativeFlagGetter('enableTextPreallocationOptimisation', false);
|
|
289
303
|
/**
|
|
290
304
|
* Ensures that JavaScript always has a consistent view of the state of the UI (e.g.: commits done in other threads are not immediately propagated to JS during its execution).
|
|
291
305
|
*/
|
|
@@ -298,10 +312,6 @@ export const enableViewRecycling: Getter<boolean> = createNativeFlagGetter('enab
|
|
|
298
312
|
* When enabled, rawProps in Props will not include Yoga specific props.
|
|
299
313
|
*/
|
|
300
314
|
export const excludeYogaFromRawProps: Getter<boolean> = createNativeFlagGetter('excludeYogaFromRawProps', false);
|
|
301
|
-
/**
|
|
302
|
-
* Start image fetching during view preallocation instead of waiting for layout pass
|
|
303
|
-
*/
|
|
304
|
-
export const fetchImagesInViewPreallocation: Getter<boolean> = createNativeFlagGetter('fetchImagesInViewPreallocation', false);
|
|
305
315
|
/**
|
|
306
316
|
* Uses the default event priority instead of the discreet event priority by default when dispatching events from Fabric to React.
|
|
307
317
|
*/
|
|
@@ -334,10 +344,6 @@ export const lazyAnimationCallbacks: Getter<boolean> = createNativeFlagGetter('l
|
|
|
334
344
|
* Adds support for loading vector drawable assets in the Image component (only on Android)
|
|
335
345
|
*/
|
|
336
346
|
export const loadVectorDrawablesOnImages: Getter<boolean> = createNativeFlagGetter('loadVectorDrawablesOnImages', false);
|
|
337
|
-
/**
|
|
338
|
-
* Removes nested calls to MountItemDispatcher.dispatchMountItems on Android, so we do less work per frame on the UI thread.
|
|
339
|
-
*/
|
|
340
|
-
export const removeNestedCallsToDispatchMountItemsOnAndroid: Getter<boolean> = createNativeFlagGetter('removeNestedCallsToDispatchMountItemsOnAndroid', false);
|
|
341
347
|
/**
|
|
342
348
|
* Propagate layout direction to Android views.
|
|
343
349
|
*/
|
|
@@ -346,6 +352,10 @@ export const setAndroidLayoutDirection: Getter<boolean> = createNativeFlagGetter
|
|
|
346
352
|
* Enables storing js caller stack when creating promise in native module. This is useful in case of Promise rejection and tracing the cause.
|
|
347
353
|
*/
|
|
348
354
|
export const traceTurboModulePromiseRejectionsOnAndroid: Getter<boolean> = createNativeFlagGetter('traceTurboModulePromiseRejectionsOnAndroid', false);
|
|
355
|
+
/**
|
|
356
|
+
* In Bridgeless mode, use the always available javascript error reporting pipeline.
|
|
357
|
+
*/
|
|
358
|
+
export const useAlwaysAvailableJSErrorHandling: Getter<boolean> = createNativeFlagGetter('useAlwaysAvailableJSErrorHandling', false);
|
|
349
359
|
/**
|
|
350
360
|
* Should this application enable the Fabric Interop Layer for Android? If yes, the application will behave so that it can accept non-Fabric components and render them on Fabric. This toggle is controlling extra logic such as custom event dispatching that are needed for the Fabric Interop Layer to work correctly.
|
|
351
361
|
*/
|
|
@@ -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<<d4297e2a804f238f538463d3d9af480a>>
|
|
8
8
|
* @flow strict
|
|
9
9
|
*/
|
|
10
10
|
|
|
@@ -15,7 +15,7 @@
|
|
|
15
15
|
* packages/react-native/scripts/featureflags/ReactNativeFeatureFlags.config.js.
|
|
16
16
|
*
|
|
17
17
|
* To regenerate this code, run the following script from the repo root:
|
|
18
|
-
* yarn featureflags
|
|
18
|
+
* yarn featureflags --update
|
|
19
19
|
*/
|
|
20
20
|
|
|
21
21
|
import type {TurboModule} from '../../../../Libraries/TurboModule/RCTExport';
|
|
@@ -24,13 +24,16 @@ import * as TurboModuleRegistry from '../../../../Libraries/TurboModule/TurboMod
|
|
|
24
24
|
|
|
25
25
|
export interface Spec extends TurboModule {
|
|
26
26
|
+commonTestFlag?: () => boolean;
|
|
27
|
+
+commonTestFlagWithoutNativeImplementation?: () => boolean;
|
|
27
28
|
+allowRecursiveCommitsWithSynchronousMountOnAndroid?: () => boolean;
|
|
28
29
|
+batchRenderingUpdatesInEventLoop?: () => boolean;
|
|
29
30
|
+completeReactInstanceCreationOnBgThreadOnAndroid?: () => boolean;
|
|
31
|
+
+disableEventLoopOnBridgeless?: () => boolean;
|
|
32
|
+
+disableMountItemReorderingAndroid?: () => boolean;
|
|
30
33
|
+enableAlignItemsBaselineOnFabricIOS?: () => boolean;
|
|
31
34
|
+enableAndroidLineHeightCentering?: () => boolean;
|
|
32
35
|
+enableBridgelessArchitecture?: () => boolean;
|
|
33
|
-
+
|
|
36
|
+
+enableCppPropsIteratorSetter?: () => boolean;
|
|
34
37
|
+enableDeletionOfUnmountedViews?: () => boolean;
|
|
35
38
|
+enableEagerRootViewAttachment?: () => boolean;
|
|
36
39
|
+enableEventEmitterRetentionDuringGesturesOnAndroid?: () => boolean;
|
|
@@ -43,15 +46,14 @@ export interface Spec extends TurboModule {
|
|
|
43
46
|
+enableLayoutAnimationsOnIOS?: () => boolean;
|
|
44
47
|
+enableLongTaskAPI?: () => boolean;
|
|
45
48
|
+enableMicrotasks?: () => boolean;
|
|
49
|
+
+enableNewBackgroundAndBorderDrawables?: () => boolean;
|
|
46
50
|
+enablePreciseSchedulingForPremountItemsOnAndroid?: () => boolean;
|
|
47
51
|
+enablePropsUpdateReconciliationAndroid?: () => boolean;
|
|
48
52
|
+enableReportEventPaintTime?: () => boolean;
|
|
49
53
|
+enableSynchronousStateUpdates?: () => boolean;
|
|
50
|
-
+enableTextPreallocationOptimisation?: () => boolean;
|
|
51
54
|
+enableUIConsistency?: () => boolean;
|
|
52
55
|
+enableViewRecycling?: () => boolean;
|
|
53
56
|
+excludeYogaFromRawProps?: () => boolean;
|
|
54
|
-
+fetchImagesInViewPreallocation?: () => boolean;
|
|
55
57
|
+fixMappingOfEventPrioritiesBetweenFabricAndReact?: () => boolean;
|
|
56
58
|
+fixMountingCoordinatorReportedPendingTransactionsOnAndroid?: () => boolean;
|
|
57
59
|
+forceBatchingMountItemsOnAndroid?: () => boolean;
|
|
@@ -60,9 +62,9 @@ export interface Spec extends TurboModule {
|
|
|
60
62
|
+initEagerTurboModulesOnNativeModulesQueueAndroid?: () => boolean;
|
|
61
63
|
+lazyAnimationCallbacks?: () => boolean;
|
|
62
64
|
+loadVectorDrawablesOnImages?: () => boolean;
|
|
63
|
-
+removeNestedCallsToDispatchMountItemsOnAndroid?: () => boolean;
|
|
64
65
|
+setAndroidLayoutDirection?: () => boolean;
|
|
65
66
|
+traceTurboModulePromiseRejectionsOnAndroid?: () => boolean;
|
|
67
|
+
+useAlwaysAvailableJSErrorHandling?: () => boolean;
|
|
66
68
|
+useFabricInterop?: () => boolean;
|
|
67
69
|
+useImmediateExecutorInAndroidBridgeless?: () => boolean;
|
|
68
70
|
+useModernRuntimeScheduler?: () => boolean;
|
|
@@ -47,11 +47,6 @@ export interface Spec extends TurboModule {
|
|
|
47
47
|
exceptionId: number,
|
|
48
48
|
) => void;
|
|
49
49
|
+reportException?: (data: ExceptionData) => void;
|
|
50
|
-
+updateExceptionMessage: (
|
|
51
|
-
message: string,
|
|
52
|
-
stack: Array<StackFrame>,
|
|
53
|
-
exceptionId: number,
|
|
54
|
-
) => void;
|
|
55
50
|
// TODO(T53311281): This is a noop on iOS now. Implement it.
|
|
56
51
|
+dismissRedbox?: () => void;
|
|
57
52
|
}
|
|
@@ -74,13 +69,6 @@ const ExceptionsManager = {
|
|
|
74
69
|
) {
|
|
75
70
|
NativeModule.reportSoftException(message, stack, exceptionId);
|
|
76
71
|
},
|
|
77
|
-
updateExceptionMessage(
|
|
78
|
-
message: string,
|
|
79
|
-
stack: Array<StackFrame>,
|
|
80
|
-
exceptionId: number,
|
|
81
|
-
) {
|
|
82
|
-
NativeModule.updateExceptionMessage(message, stack, exceptionId);
|
|
83
|
-
},
|
|
84
72
|
dismissRedbox(): void {
|
|
85
73
|
if (Platform.OS !== 'ios' && NativeModule.dismissRedbox) {
|
|
86
74
|
// TODO(T53311281): This is a noop on iOS now. Implement it.
|
|
@@ -131,6 +131,12 @@ export default class IntersectionObserver {
|
|
|
131
131
|
* To stop observing the element, call `IntersectionObserver.unobserve()`.
|
|
132
132
|
*/
|
|
133
133
|
observe(target: ReactNativeElement): void {
|
|
134
|
+
if (target == null) {
|
|
135
|
+
throw new TypeError(
|
|
136
|
+
"Failed to execute 'observe' on 'IntersectionObserver': parameter 1 is null or undefined.",
|
|
137
|
+
);
|
|
138
|
+
}
|
|
139
|
+
|
|
134
140
|
if (!(target instanceof ReactNativeElement)) {
|
|
135
141
|
throw new TypeError(
|
|
136
142
|
"Failed to execute 'observe' on 'IntersectionObserver': parameter 1 is not of type 'ReactNativeElement'.",
|
|
@@ -16,8 +16,8 @@ import type {
|
|
|
16
16
|
} from './PerformanceEntry';
|
|
17
17
|
|
|
18
18
|
import {PerformanceEntry} from './PerformanceEntry';
|
|
19
|
-
import {warnNoNativePerformance} from './Utilities';
|
|
20
19
|
import NativePerformance from './specs/NativePerformance';
|
|
20
|
+
import {warnNoNativePerformance} from './Utilities';
|
|
21
21
|
|
|
22
22
|
export type PerformanceEventTimingJSON = {
|
|
23
23
|
...PerformanceEntryJSON,
|
|
@@ -12,8 +12,8 @@
|
|
|
12
12
|
|
|
13
13
|
import type {
|
|
14
14
|
DOMHighResTimeStamp,
|
|
15
|
-
PerformanceEntryType,
|
|
16
15
|
PerformanceEntryList,
|
|
16
|
+
PerformanceEntryType,
|
|
17
17
|
} from './PerformanceEntry';
|
|
18
18
|
import type {DetailType, PerformanceMarkOptions} from './UserTiming';
|
|
19
19
|
|
|
@@ -109,15 +109,24 @@ export default class Performance {
|
|
|
109
109
|
markName: string,
|
|
110
110
|
markOptions?: PerformanceMarkOptions,
|
|
111
111
|
): PerformanceMark {
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
112
|
+
let computedStartTime;
|
|
113
|
+
if (NativePerformance?.markWithResult) {
|
|
114
|
+
computedStartTime = NativePerformance.markWithResult(
|
|
115
|
+
markName,
|
|
116
|
+
markOptions?.startTime,
|
|
117
|
+
);
|
|
118
|
+
} else if (NativePerformance?.mark) {
|
|
119
|
+
computedStartTime = markOptions?.startTime ?? performance.now();
|
|
120
|
+
NativePerformance?.mark?.(markName, computedStartTime);
|
|
116
121
|
} else {
|
|
117
122
|
warnNoNativePerformance();
|
|
123
|
+
computedStartTime = performance.now();
|
|
118
124
|
}
|
|
119
125
|
|
|
120
|
-
return
|
|
126
|
+
return new PerformanceMark(markName, {
|
|
127
|
+
startTime: computedStartTime,
|
|
128
|
+
detail: markOptions?.detail,
|
|
129
|
+
});
|
|
121
130
|
}
|
|
122
131
|
|
|
123
132
|
clearMarks(markName?: string): void {
|
|
@@ -143,6 +152,7 @@ export default class Performance {
|
|
|
143
152
|
|
|
144
153
|
if (typeof startMarkOrOptions === 'string') {
|
|
145
154
|
startMarkName = startMarkOrOptions;
|
|
155
|
+
options = {};
|
|
146
156
|
} else if (startMarkOrOptions !== undefined) {
|
|
147
157
|
options = startMarkOrOptions;
|
|
148
158
|
if (endMark !== undefined) {
|
|
@@ -180,15 +190,20 @@ export default class Performance {
|
|
|
180
190
|
duration = options.duration ?? duration;
|
|
181
191
|
}
|
|
182
192
|
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
193
|
+
let computedStartTime = startTime;
|
|
194
|
+
let computedDuration = duration;
|
|
195
|
+
|
|
196
|
+
if (NativePerformance?.measureWithResult) {
|
|
197
|
+
[computedStartTime, computedDuration] =
|
|
198
|
+
NativePerformance.measureWithResult(
|
|
199
|
+
measureName,
|
|
200
|
+
startTime,
|
|
201
|
+
endTime,
|
|
202
|
+
duration,
|
|
203
|
+
startMarkName,
|
|
204
|
+
endMarkName,
|
|
205
|
+
);
|
|
206
|
+
} else if (NativePerformance?.measure) {
|
|
192
207
|
NativePerformance.measure(
|
|
193
208
|
measureName,
|
|
194
209
|
startTime,
|
|
@@ -201,6 +216,12 @@ export default class Performance {
|
|
|
201
216
|
warnNoNativePerformance();
|
|
202
217
|
}
|
|
203
218
|
|
|
219
|
+
const measure = new PerformanceMeasure(measureName, {
|
|
220
|
+
startTime: computedStartTime,
|
|
221
|
+
duration: computedDuration ?? 0,
|
|
222
|
+
detail: options?.detail,
|
|
223
|
+
});
|
|
224
|
+
|
|
204
225
|
return measure;
|
|
205
226
|
}
|
|
206
227
|
|
|
@@ -10,9 +10,10 @@
|
|
|
10
10
|
|
|
11
11
|
import type {
|
|
12
12
|
DOMHighResTimeStamp,
|
|
13
|
-
PerformanceEntryType,
|
|
14
13
|
PerformanceEntryList,
|
|
14
|
+
PerformanceEntryType,
|
|
15
15
|
} from './PerformanceEntry';
|
|
16
|
+
import type {OpaqueNativeObserverHandle} from './specs/NativePerformance';
|
|
16
17
|
|
|
17
18
|
import {PerformanceEventTiming} from './EventTiming';
|
|
18
19
|
import {
|
|
@@ -21,7 +22,6 @@ import {
|
|
|
21
22
|
rawToPerformanceEntryType,
|
|
22
23
|
} from './RawPerformanceEntry';
|
|
23
24
|
import NativePerformance from './specs/NativePerformance';
|
|
24
|
-
import type {OpaqueNativeObserverHandle} from './specs/NativePerformance';
|
|
25
25
|
import {warnNoNativePerformance} from './Utilities';
|
|
26
26
|
|
|
27
27
|
export {PerformanceEntry} from './PerformanceEntry';
|
|
@@ -25,8 +25,8 @@ export type TimeStampOrName = DOMHighResTimeStamp | string;
|
|
|
25
25
|
|
|
26
26
|
export type PerformanceMeasureInit = {
|
|
27
27
|
detail?: DetailType,
|
|
28
|
-
startTime
|
|
29
|
-
duration
|
|
28
|
+
startTime: DOMHighResTimeStamp,
|
|
29
|
+
duration: DOMHighResTimeStamp,
|
|
30
30
|
};
|
|
31
31
|
|
|
32
32
|
export class PerformanceMark extends PerformanceEntry {
|
|
@@ -53,12 +53,12 @@ export class PerformanceMark extends PerformanceEntry {
|
|
|
53
53
|
export class PerformanceMeasure extends PerformanceEntry {
|
|
54
54
|
#detail: DetailType;
|
|
55
55
|
|
|
56
|
-
constructor(measureName: string, measureOptions
|
|
56
|
+
constructor(measureName: string, measureOptions: PerformanceMeasureInit) {
|
|
57
57
|
super({
|
|
58
58
|
name: measureName,
|
|
59
59
|
entryType: 'measure',
|
|
60
|
-
startTime: measureOptions
|
|
61
|
-
duration: measureOptions
|
|
60
|
+
startTime: measureOptions.startTime,
|
|
61
|
+
duration: measureOptions.duration,
|
|
62
62
|
});
|
|
63
63
|
|
|
64
64
|
if (measureOptions) {
|
|
@@ -33,6 +33,8 @@ export type RawPerformanceEntry = {
|
|
|
33
33
|
export type OpaqueNativeObserverHandle = mixed;
|
|
34
34
|
|
|
35
35
|
export type NativeBatchedObserverCallback = () => void;
|
|
36
|
+
export type NativePerformanceMarkResult = number;
|
|
37
|
+
export type NativePerformanceMeasureResult = $ReadOnlyArray<number>; // [startTime, duration]
|
|
36
38
|
|
|
37
39
|
export type PerformanceObserverInit = {
|
|
38
40
|
entryTypes?: $ReadOnlyArray<number>,
|
|
@@ -43,8 +45,10 @@ export type PerformanceObserverInit = {
|
|
|
43
45
|
|
|
44
46
|
export interface Spec extends TurboModule {
|
|
45
47
|
+now?: () => number;
|
|
46
|
-
|
|
47
|
-
+
|
|
48
|
+
// TODO: remove when `markWithResult` is fully rolled out.
|
|
49
|
+
+mark?: (name: string, startTime: number) => void;
|
|
50
|
+
// TODO: remove when `measureWithResult` is fully rolled out.
|
|
51
|
+
+measure?: (
|
|
48
52
|
name: string,
|
|
49
53
|
startTime: number,
|
|
50
54
|
endTime: number,
|
|
@@ -52,6 +56,18 @@ export interface Spec extends TurboModule {
|
|
|
52
56
|
startMark?: string,
|
|
53
57
|
endMark?: string,
|
|
54
58
|
) => void;
|
|
59
|
+
+markWithResult?: (
|
|
60
|
+
name: string,
|
|
61
|
+
startTime?: number,
|
|
62
|
+
) => NativePerformanceMarkResult;
|
|
63
|
+
+measureWithResult?: (
|
|
64
|
+
name: string,
|
|
65
|
+
startTime: number,
|
|
66
|
+
endTime: number,
|
|
67
|
+
duration?: number,
|
|
68
|
+
startMark?: string,
|
|
69
|
+
endMark?: string,
|
|
70
|
+
) => NativePerformanceMeasureResult;
|
|
55
71
|
+clearMarks?: (entryName?: string) => void;
|
|
56
72
|
+clearMeasures?: (entryName?: string) => void;
|
|
57
73
|
+getEntries?: () => $ReadOnlyArray<RawPerformanceEntry>;
|
|
@@ -11,13 +11,14 @@
|
|
|
11
11
|
import type {
|
|
12
12
|
NativeBatchedObserverCallback,
|
|
13
13
|
NativeMemoryInfo,
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
PerformanceObserverInit,
|
|
14
|
+
NativePerformanceMarkResult,
|
|
15
|
+
NativePerformanceMeasureResult,
|
|
17
16
|
OpaqueNativeObserverHandle,
|
|
17
|
+
PerformanceObserverInit,
|
|
18
|
+
RawPerformanceEntry,
|
|
18
19
|
RawPerformanceEntryType,
|
|
20
|
+
ReactNativeStartupTiming,
|
|
19
21
|
} from '../NativePerformance';
|
|
20
|
-
|
|
21
22
|
import typeof NativePerformance from '../NativePerformance';
|
|
22
23
|
|
|
23
24
|
import {RawPerformanceEntryTypeValues} from '../../RawPerformanceEntry';
|
|
@@ -109,32 +110,51 @@ const NativePerformanceMock = {
|
|
|
109
110
|
|
|
110
111
|
now: (): number => currentTime,
|
|
111
112
|
|
|
112
|
-
|
|
113
|
-
|
|
113
|
+
markWithResult: (
|
|
114
|
+
name: string,
|
|
115
|
+
startTime?: number,
|
|
116
|
+
): NativePerformanceMarkResult => {
|
|
117
|
+
const computedStartTime = startTime ?? performance.now();
|
|
118
|
+
|
|
119
|
+
marks.set(name, computedStartTime);
|
|
114
120
|
reportEntry({
|
|
115
121
|
entryType: RawPerformanceEntryTypeValues.MARK,
|
|
116
122
|
name,
|
|
117
|
-
startTime,
|
|
123
|
+
startTime: computedStartTime,
|
|
118
124
|
duration: 0,
|
|
119
125
|
});
|
|
126
|
+
|
|
127
|
+
return computedStartTime;
|
|
120
128
|
},
|
|
121
129
|
|
|
122
|
-
|
|
130
|
+
measureWithResult: (
|
|
123
131
|
name: string,
|
|
124
132
|
startTime: number,
|
|
125
133
|
endTime: number,
|
|
126
134
|
duration?: number,
|
|
127
135
|
startMark?: string,
|
|
128
136
|
endMark?: string,
|
|
129
|
-
):
|
|
130
|
-
const start = startMark != null ? marks.get(startMark)
|
|
131
|
-
const end = endMark != null ? marks.get(endMark)
|
|
137
|
+
): NativePerformanceMeasureResult => {
|
|
138
|
+
const start = startMark != null ? marks.get(startMark) : startTime;
|
|
139
|
+
const end = endMark != null ? marks.get(endMark) : endTime;
|
|
140
|
+
|
|
141
|
+
if (start === undefined) {
|
|
142
|
+
throw new Error('startMark does not exist');
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
if (end === undefined) {
|
|
146
|
+
throw new Error('endMark does not exist');
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
const computedDuration = duration ?? end - start;
|
|
132
150
|
reportEntry({
|
|
133
151
|
entryType: RawPerformanceEntryTypeValues.MEASURE,
|
|
134
152
|
name,
|
|
135
153
|
startTime: start,
|
|
136
|
-
duration:
|
|
154
|
+
duration: computedDuration,
|
|
137
155
|
});
|
|
156
|
+
|
|
157
|
+
return [start, computedDuration];
|
|
138
158
|
},
|
|
139
159
|
|
|
140
160
|
getSimpleMemoryInfo: (): NativeMemoryInfo => {
|