@office-iss/react-native-win32 0.72.7 → 0.73.0-preview.1
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 +15 -4
- package/CHANGELOG.json +523 -94
- package/CHANGELOG.md +209 -52
- package/IntegrationTests/PromiseTest.js +1 -0
- package/IntegrationTests/websocket_integration_test_server.js +1 -1
- package/Libraries/Animated/Animated.js +1 -1
- package/Libraries/Animated/AnimatedImplementation.js +1 -1
- package/Libraries/Animated/NativeAnimatedHelper.js +14 -10
- package/Libraries/Animated/NativeAnimatedHelper.win32.js +16 -12
- package/Libraries/Animated/NativeAnimatedModule.js +6 -2
- package/Libraries/Animated/NativeAnimatedTurboModule.js +7 -4
- package/Libraries/Animated/animations/Animation.js +57 -3
- package/Libraries/Animated/animations/DecayAnimation.js +9 -0
- package/Libraries/Animated/animations/SpringAnimation.js +8 -0
- package/Libraries/Animated/animations/TimingAnimation.js +8 -0
- package/Libraries/Animated/components/AnimatedFlatList.js +2 -1
- package/Libraries/Animated/components/AnimatedScrollView.js +2 -0
- package/Libraries/Animated/components/AnimatedSectionList.js +2 -1
- package/Libraries/Animated/createAnimatedComponent.js +1 -0
- package/Libraries/Animated/nodes/AnimatedColor.js +1 -1
- package/Libraries/Animated/nodes/AnimatedObject.js +146 -0
- package/Libraries/Animated/nodes/AnimatedProps.js +19 -7
- package/Libraries/Animated/nodes/AnimatedStyle.js +29 -55
- package/Libraries/Animated/nodes/AnimatedValueXY.js +3 -17
- package/Libraries/Animated/shouldUseTurboAnimatedModule.js +17 -0
- package/Libraries/Animated/useAnimatedProps.js +9 -10
- package/Libraries/AppState/AppState.d.ts +1 -1
- package/Libraries/AppState/NativeAppState.js +8 -4
- package/Libraries/BatchedBridge/MessageQueue.js +45 -36
- package/Libraries/Blob/Blob.js +6 -2
- package/Libraries/Blob/BlobManager.js +9 -10
- package/Libraries/Blob/BlobRegistry.js +14 -9
- package/Libraries/Blob/File.js +1 -1
- package/Libraries/Blob/FileReader.js +1 -2
- package/Libraries/Components/Button/ButtonWin32.Props.d.ts +1 -1
- package/Libraries/Components/Button/ButtonWin32.Props.js.map +1 -1
- package/Libraries/Components/Button/ButtonWin32.d.ts +1 -1
- package/Libraries/Components/Button/ButtonWin32.js +1 -4
- package/Libraries/Components/Button/ButtonWin32.js.map +1 -1
- package/Libraries/Components/Clipboard/Clipboard.d.ts +4 -4
- package/Libraries/Components/DrawerAndroid/DrawerLayoutAndroid.android.js +3 -1
- package/Libraries/Components/EnterString.win32.d.ts +1 -1
- package/Libraries/Components/Keyboard/KeyboardAvoidingView.js +26 -6
- package/Libraries/Components/Pressable/Pressable.js +3 -2
- package/Libraries/Components/Pressable/Pressable.win32.js +4 -3
- package/Libraries/Components/Pressable/useAndroidRippleForView.js +1 -1
- package/Libraries/Components/SafeAreaView/SafeAreaView.js +7 -7
- package/Libraries/Components/SafeAreaView/SafeAreaView.win32.js +7 -8
- package/Libraries/Components/ScrollView/ScrollView.js +3 -1
- package/Libraries/Components/ScrollView/ScrollView.win32.js +3 -1
- package/Libraries/Components/ScrollView/ScrollViewStickyHeader.js +39 -46
- package/Libraries/Components/Switch/Switch.js +1 -0
- package/Libraries/Components/Text/TextWin32.d.ts +1 -1
- package/Libraries/Components/TextInput/RCTTextInputViewConfig.js +1 -0
- package/Libraries/Components/TextInput/TextInput.d.ts +49 -7
- package/Libraries/Components/TextInput/TextInput.flow.js +43 -10
- package/Libraries/Components/TextInput/TextInput.js +62 -10
- package/Libraries/Components/TextInput/TextInput.win32.js +953 -206
- package/Libraries/Components/TextInput/Win32TextInputNativeComponent.js +23 -0
- package/Libraries/Components/ToastAndroid/{ToastAndroid.ios.js → ToastAndroid.js} +9 -1
- package/Libraries/Components/ToastAndroid/ToastAndroid.win32.js +9 -1
- package/Libraries/Components/Touchable/Tests/TouchableWin32Test.js +2 -2
- package/Libraries/Components/Touchable/Tests/TouchableWin32Test.js.map +1 -1
- package/Libraries/Components/Touchable/TouchableBounce.js +1 -1
- package/Libraries/Components/Touchable/TouchableHighlight.js +1 -1
- package/Libraries/Components/Touchable/TouchableNativeFeedback.js +1 -1
- package/Libraries/Components/Touchable/TouchableOpacity.js +4 -1
- package/Libraries/Components/Touchable/TouchableWin32.d.ts +1 -1
- package/Libraries/Components/Touchable/TouchableWin32.js.map +1 -1
- package/Libraries/Components/Touchable/TouchableWithoutFeedback.js +1 -0
- package/Libraries/Components/TraceUpdateOverlay/TraceUpdateOverlay.js +16 -6
- package/Libraries/Components/View/ReactNativeStyleAttributes.js +9 -0
- package/Libraries/Components/View/ReactNativeViewAttributes.js +1 -0
- package/Libraries/Components/View/ReactNativeViewAttributes.win32.js +1 -0
- package/Libraries/Components/View/View.js +46 -32
- package/Libraries/Components/View/View.win32.js +37 -6
- package/Libraries/Components/View/ViewAccessibility.d.ts +8 -2
- package/Libraries/Components/View/ViewNativeComponent.js +1 -0
- package/Libraries/Components/View/ViewPropTypes.js +18 -3
- package/Libraries/Components/View/ViewPropTypes.win32.js +30 -4
- package/Libraries/Components/View/ViewWin32.js +3 -2
- package/Libraries/Core/Devtools/loadBundleFromServer.js +152 -0
- package/Libraries/Core/Devtools/symbolicateStackTrace.js +2 -1
- package/Libraries/Core/ExceptionsManager.js +16 -7
- package/Libraries/Core/ExtendedError.js +12 -0
- package/Libraries/Core/ReactNativeVersion.js +3 -3
- package/Libraries/Core/ReactNativeVersionCheck.js +0 -2
- package/Libraries/Core/ReactNativeVersionCheck.win32.js +0 -2
- package/Libraries/Core/__mocks__/NativeExceptionsManager.js +20 -0
- package/Libraries/Core/setUpDeveloperTools.js +5 -1
- package/Libraries/Core/setUpIntersectionObserver.js +16 -0
- package/Libraries/{Components/ProgressBarAndroid/ProgressBarAndroid.ios.js → Core/setUpMutationObserver.js} +6 -2
- package/Libraries/Core/setUpPerformance.js +6 -13
- package/Libraries/Core/setUpPerformanceObserver.js +16 -0
- package/Libraries/Core/setUpRegeneratorRuntime.js +4 -2
- package/Libraries/DOM/Nodes/ReactNativeElement.js +135 -18
- package/Libraries/DOM/Nodes/ReadOnlyCharacterData.js +72 -0
- package/Libraries/DOM/Nodes/ReadOnlyElement.js +209 -21
- package/Libraries/DOM/Nodes/ReadOnlyNode.js +206 -17
- package/Libraries/DOM/Nodes/ReadOnlyText.js +30 -0
- package/Libraries/DOM/Nodes/Utilities/Traversal.js +54 -0
- package/Libraries/EventEmitter/NativeEventEmitter.d.ts +0 -6
- package/Libraries/EventEmitter/RCTDeviceEventEmitter.js +15 -4
- package/Libraries/Image/Image.android.js +8 -2
- package/Libraries/Image/Image.d.ts +1 -1
- package/Libraries/Image/Image.ios.js +4 -1
- package/Libraries/Image/Image.win32.js +6 -3
- package/Libraries/Image/ImageBackground.js +3 -0
- package/Libraries/Image/resolveAssetSource.win32.js +1 -1
- package/Libraries/Inspector/DevtoolsOverlay.js +6 -3
- package/Libraries/Inspector/NetworkOverlay.js +2 -2
- package/Libraries/Interaction/JSEventLoopWatchdog.js +1 -5
- package/Libraries/Interaction/PanResponder.js +1 -4
- package/Libraries/IntersectionObserver/IntersectionObserver.js +252 -0
- package/Libraries/IntersectionObserver/IntersectionObserverEntry.js +140 -0
- package/Libraries/IntersectionObserver/IntersectionObserverManager.js +221 -0
- package/Libraries/IntersectionObserver/NativeIntersectionObserver.js +41 -0
- package/Libraries/IntersectionObserver/__mocks__/NativeIntersectionObserver.js +162 -0
- package/Libraries/LayoutAnimation/LayoutAnimation.js +1 -1
- package/Libraries/Lists/FlatList.d.ts +2 -1
- package/Libraries/Lists/FlatList.js +15 -5
- package/Libraries/Lists/SectionList.js +4 -0
- package/Libraries/LogBox/Data/LogBoxLog.js +4 -1
- package/Libraries/LogBox/Data/LogBoxSymbolication.js +5 -2
- package/Libraries/LogBox/Data/parseLogBoxLog.js +57 -20
- package/Libraries/LogBox/UI/AnsiHighlight.js +1 -1
- package/Libraries/LogBox/UI/LogBoxInspectorFooter.js +24 -31
- package/Libraries/LogBox/UI/LogBoxInspectorHeader.js +1 -1
- package/Libraries/LogBox/UI/LogBoxMessage.js +4 -7
- package/Libraries/MutationObserver/MutationObserver.js +184 -0
- package/Libraries/MutationObserver/MutationObserverManager.js +218 -0
- package/Libraries/MutationObserver/MutationRecord.js +82 -0
- package/Libraries/MutationObserver/NativeMutationObserver.js +58 -0
- package/Libraries/MutationObserver/__mocks__/NativeMutationObserver.js +327 -0
- package/Libraries/NativeComponent/BaseViewConfig.android.js +18 -3
- package/Libraries/NativeComponent/BaseViewConfig.ios.js +33 -0
- package/Libraries/NativeComponent/BaseViewConfig.win32.js +33 -0
- package/Libraries/NativeComponent/NativeComponentRegistry.js +3 -5
- package/Libraries/NativeModules/specs/NativeSourceCode.js +6 -6
- package/Libraries/Network/RCTNetworking.android.js +2 -1
- package/Libraries/Network/XMLHttpRequest.js +1 -1
- package/Libraries/NewAppScreen/components/DebugInstructions.js +4 -4
- package/Libraries/NewAppScreen/components/LearnMoreLinks.js +9 -2
- package/Libraries/Performance/QuickPerformanceLogger.js +1 -1
- package/Libraries/PermissionsAndroid/NativePermissionsAndroid.js +1 -0
- package/Libraries/PermissionsAndroid/PermissionsAndroid.d.ts +1 -0
- package/Libraries/PermissionsAndroid/PermissionsAndroid.js +3 -1
- package/Libraries/Pressability/Pressability.js +28 -3
- package/Libraries/Pressability/Pressability.win32.js +30 -5
- package/Libraries/ReactNative/AppContainer.js +2 -3
- package/Libraries/ReactNative/AppRegistry.d.ts +0 -5
- package/Libraries/ReactNative/AppRegistry.js +66 -53
- package/Libraries/ReactNative/BridgelessUIManager.js +38 -9
- package/Libraries/ReactNative/FabricUIManager.js +143 -34
- package/Libraries/ReactNative/I18nManager.js +5 -11
- package/Libraries/ReactNative/NativeI18nManager.js +7 -5
- package/Libraries/ReactNative/PaperUIManager.win32.js +2 -2
- package/Libraries/ReactNative/ReactFabricPublicInstance/ReactFabricHostComponent.js +151 -0
- package/Libraries/ReactNative/ReactFabricPublicInstance/ReactFabricPublicInstance.js +81 -0
- package/Libraries/ReactNative/ReactFabricPublicInstance/ReactNativeAttributePayload.js +492 -0
- package/Libraries/ReactNative/ReactFabricPublicInstance/warnForStyleProps.js +32 -0
- package/Libraries/ReactNative/ReactNativeFeatureFlags.js +19 -3
- package/Libraries/ReactNative/UIManager.js +8 -0
- package/Libraries/ReactNative/__mocks__/FabricUIManager.js +648 -0
- package/Libraries/ReactPrivate/ReactNativePrivateInterface.js +38 -2
- package/Libraries/Renderer/implementations/ReactFabric-dev.js +27 -27
- package/Libraries/Renderer/implementations/ReactFabric-prod.js +3 -3
- package/Libraries/Renderer/implementations/ReactFabric-profiling.js +3 -3
- package/Libraries/Renderer/implementations/ReactNativeRenderer-dev.js +27 -27
- package/Libraries/Renderer/implementations/ReactNativeRenderer-prod.js +3 -3
- package/Libraries/Renderer/implementations/ReactNativeRenderer-profiling.js +3 -3
- package/Libraries/Renderer/shims/ReactFabric.js +5 -6
- package/Libraries/Renderer/shims/ReactFeatureFlags.js +2 -3
- package/Libraries/Renderer/shims/ReactNative.js +2 -3
- package/Libraries/Renderer/shims/ReactNativeTypes.js +35 -17
- package/Libraries/Renderer/shims/ReactNativeViewConfigRegistry.js +3 -3
- package/Libraries/Renderer/shims/createReactNativeComponentClass.js +2 -3
- package/Libraries/Settings/{Settings.android.js → Settings.js} +4 -4
- package/Libraries/Share/Share.d.ts +3 -9
- package/Libraries/StyleSheet/PlatformColorValueTypes.android.js +9 -4
- package/Libraries/StyleSheet/PlatformColorValueTypes.ios.js +28 -13
- package/Libraries/StyleSheet/PlatformColorValueTypes.win32.js +14 -4
- package/Libraries/StyleSheet/PlatformColorValueTypesIOS.ios.js +1 -1
- package/Libraries/StyleSheet/PlatformColorValueTypesWin32.d.ts +1 -1
- package/Libraries/StyleSheet/StyleSheet.d.ts +10 -1
- package/Libraries/StyleSheet/StyleSheet.js +3 -0
- package/Libraries/StyleSheet/StyleSheet.win32.js +3 -0
- package/Libraries/StyleSheet/StyleSheetTypes.d.ts +31 -17
- package/Libraries/StyleSheet/StyleSheetTypes.js +90 -6
- package/Libraries/StyleSheet/flattenStyle.js +4 -0
- package/Libraries/StyleSheet/private/_TransformStyle.js +16 -2
- package/Libraries/StyleSheet/processColor.js +1 -2
- package/Libraries/StyleSheet/processTransformOrigin.js +136 -0
- package/Libraries/StyleSheet/splitLayoutProps.js +1 -0
- package/Libraries/Text/Text.d.ts +5 -5
- package/Libraries/Text/Text.js +17 -10
- package/Libraries/Text/Text.win32.js +354 -0
- package/Libraries/Text/TextProps.win32.js +281 -0
- package/Libraries/TurboModule/TurboModuleRegistry.js +47 -7
- package/Libraries/TurboModule/samples/NativeSampleTurboModule.js +6 -0
- package/Libraries/Types/CoreEventTypes.d.ts +5 -2
- package/Libraries/Utilities/GlobalPerformanceLogger.js +2 -12
- package/Libraries/Utilities/NativeDeviceInfo.js +8 -9
- package/Libraries/Utilities/NativePlatformConstantsAndroid.js +23 -18
- package/Libraries/Utilities/NativePlatformConstantsIOS.js +16 -13
- package/Libraries/Utilities/NativePlatformConstantsWin.js +13 -10
- package/Libraries/Utilities/PerformanceLoggerContext.js +1 -1
- package/Libraries/Utilities/Platform.android.js +12 -8
- package/Libraries/Utilities/Platform.d.ts +1 -0
- package/Libraries/Utilities/Platform.flow.js +84 -0
- package/Libraries/Utilities/Platform.flow.win32.js +111 -0
- package/Libraries/Utilities/Platform.ios.js +12 -8
- package/Libraries/Utilities/Platform.win32.js +12 -8
- package/Libraries/Utilities/PolyfillFunctions.js +1 -1
- package/Libraries/Utilities/ReactNativeTestTools.js +1 -2
- package/Libraries/Utilities/SceneTracker.js +1 -1
- package/Libraries/Utilities/createPerformanceLogger.js +63 -32
- package/Libraries/Utilities/useColorScheme.js +7 -8
- package/Libraries/WebPerformance/MemoryInfo.js +1 -1
- package/Libraries/WebPerformance/NativePerformance.js +3 -8
- package/Libraries/WebPerformance/NativePerformanceObserver.js +4 -0
- package/Libraries/WebPerformance/Performance.js +42 -15
- package/Libraries/WebPerformance/PerformanceEntry.js +14 -6
- package/Libraries/WebPerformance/PerformanceEventTiming.js +18 -1
- package/Libraries/WebPerformance/ReactNativeStartupTiming.js +40 -14
- package/Libraries/WebPerformance/__mocks__/NativePerformance.js +4 -2
- package/Libraries/WebPerformance/__mocks__/NativePerformanceObserver.js +21 -3
- package/Libraries/promiseRejectionTrackingOptions.js +1 -3
- package/Libraries/vendor/emitter/EventEmitter.js +17 -17
- package/flow/global.js +1 -3
- package/flow/jest.js +5 -1
- package/{Libraries/Components/DrawerAndroid/DrawerLayoutAndroid.ios.js → jest/ReactNativeInternalFeatureFlagsMock.js} +2 -1
- package/jest/__tests__/setup-test.js +18 -0
- package/jest/mockModal.js +6 -4
- package/jest/setup.js +61 -30
- package/jest.config.js +1 -1
- package/just-task.js +1 -0
- package/overrides.json +51 -46
- package/package.json +35 -33
- package/src/Libraries/Components/Button/ButtonWin32.Props.ts +1 -1
- package/src/Libraries/Components/Button/ButtonWin32.tsx +0 -2
- package/src/Libraries/Components/Touchable/Tests/TouchableWin32Test.tsx +2 -2
- package/src/Libraries/Components/Touchable/TouchableWin32.tsx +1 -1
- package/src/Libraries/Components/View/ViewAccessibility.d.ts +8 -2
- package/src/Libraries/StyleSheet/PlatformColorValueTypesWin32.d.ts +1 -1
- package/types/experimental.d.ts +44 -0
- package/types/index.d.ts +2 -1
- package/types/modules/Devtools.d.ts +1 -0
- package/types/modules/globals.d.ts +16 -1
- package/IntegrationTests/BUCK +0 -32
- package/IntegrationTests/PropertiesUpdateTest.js +0 -29
- package/IntegrationTests/RCTRootViewIntegrationTestApp.js +0 -86
- package/IntegrationTests/ReactContentSizeUpdateTest.js +0 -89
- package/IntegrationTests/SizeFlexibilityUpdateTest.js +0 -106
- package/Libraries/Components/TextInput/TextInput.Types.win32.d.ts +0 -51
- package/Libraries/Components/TextInput/TextInput.Types.win32.js +0 -3
- package/Libraries/Components/TextInput/TextInput.Types.win32.js.map +0 -1
- package/Libraries/Utilities/AcessibilityMapping.js +0 -154
- package/Libraries/Utilities/AcessibilityMapping.win32.js +0 -156
- package/Libraries/Utilities/NativeDevSplitBundleLoader.js +0 -19
- package/Libraries/Utilities/useColorScheme.win32.js +0 -26
- package/flow/use-sync-external-store.js +0 -20
- package/flow-typed/npm/base64-js_v1.x.x.js +0 -12
- package/flow-typed/npm/glob_v7.x.x.js +0 -79
- package/flow-typed/npm/pretty-format_v26.x.x.js +0 -49
- package/flow-typed/npm/promise_v8.x.x.js +0 -30
- package/flow-typed/npm/react-dom_v17.x.x.js +0 -139
- package/flow-typed/npm/react-test-renderer_v16.x.x.js +0 -79
- package/flow-typed/npm/stacktrace-parser_v0.1.x.js +0 -17
- package/flow-typed/npm/yargs_v17.x.x.js +0 -341
- package/src/Libraries/Components/TextInput/TextInput.Types.win32.ts +0 -68
- /package/Libraries/{Renderer/public → ReactNative/ReactFabricPublicInstance}/ReactFabricPublicInstanceUtils.js +0 -0
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
3
|
+
*
|
|
4
|
+
* This source code is licensed under the MIT license found in the
|
|
5
|
+
* LICENSE file in the root directory of this source tree.
|
|
6
|
+
*
|
|
7
|
+
* @flow strict
|
|
8
|
+
* @format
|
|
9
|
+
*/
|
|
10
|
+
|
|
11
|
+
export type PlatformSelectSpec<T> = {
|
|
12
|
+
default?: T,
|
|
13
|
+
native?: T,
|
|
14
|
+
ios?: T,
|
|
15
|
+
android?: T,
|
|
16
|
+
...
|
|
17
|
+
};
|
|
18
|
+
|
|
19
|
+
type IOSPlatform = {
|
|
20
|
+
__constants: null,
|
|
21
|
+
OS: $TEMPORARY$string<'ios'>,
|
|
22
|
+
// $FlowFixMe[unsafe-getters-setters]
|
|
23
|
+
get Version(): string,
|
|
24
|
+
// $FlowFixMe[unsafe-getters-setters]
|
|
25
|
+
get constants(): {|
|
|
26
|
+
forceTouchAvailable: boolean,
|
|
27
|
+
interfaceIdiom: string,
|
|
28
|
+
isTesting: boolean,
|
|
29
|
+
isDisableAnimations?: boolean,
|
|
30
|
+
osVersion: string,
|
|
31
|
+
reactNativeVersion: {|
|
|
32
|
+
major: number,
|
|
33
|
+
minor: number,
|
|
34
|
+
patch: number,
|
|
35
|
+
prerelease: ?number,
|
|
36
|
+
|},
|
|
37
|
+
systemName: string,
|
|
38
|
+
|},
|
|
39
|
+
// $FlowFixMe[unsafe-getters-setters]
|
|
40
|
+
get isPad(): boolean,
|
|
41
|
+
// $FlowFixMe[unsafe-getters-setters]
|
|
42
|
+
get isTV(): boolean,
|
|
43
|
+
// $FlowFixMe[unsafe-getters-setters]
|
|
44
|
+
get isTesting(): boolean,
|
|
45
|
+
// $FlowFixMe[unsafe-getters-setters]
|
|
46
|
+
get isDisableAnimations(): boolean,
|
|
47
|
+
select: <T>(spec: PlatformSelectSpec<T>) => T,
|
|
48
|
+
};
|
|
49
|
+
|
|
50
|
+
type AndroidPlatform = {
|
|
51
|
+
__constants: null,
|
|
52
|
+
OS: $TEMPORARY$string<'android'>,
|
|
53
|
+
// $FlowFixMe[unsafe-getters-setters]
|
|
54
|
+
get Version(): number,
|
|
55
|
+
// $FlowFixMe[unsafe-getters-setters]
|
|
56
|
+
get constants(): {|
|
|
57
|
+
isTesting: boolean,
|
|
58
|
+
isDisableAnimations?: boolean,
|
|
59
|
+
reactNativeVersion: {|
|
|
60
|
+
major: number,
|
|
61
|
+
minor: number,
|
|
62
|
+
patch: number,
|
|
63
|
+
prerelease: ?number,
|
|
64
|
+
|},
|
|
65
|
+
Version: number,
|
|
66
|
+
Release: string,
|
|
67
|
+
Serial: string,
|
|
68
|
+
Fingerprint: string,
|
|
69
|
+
Model: string,
|
|
70
|
+
ServerHost?: string,
|
|
71
|
+
uiMode: string,
|
|
72
|
+
Brand: string,
|
|
73
|
+
Manufacturer: string,
|
|
74
|
+
|},
|
|
75
|
+
// $FlowFixMe[unsafe-getters-setters]
|
|
76
|
+
get isTV(): boolean,
|
|
77
|
+
// $FlowFixMe[unsafe-getters-setters]
|
|
78
|
+
get isTesting(): boolean,
|
|
79
|
+
// $FlowFixMe[unsafe-getters-setters]
|
|
80
|
+
get isDisableAnimations(): boolean,
|
|
81
|
+
select: <T>(spec: PlatformSelectSpec<T>) => T,
|
|
82
|
+
};
|
|
83
|
+
|
|
84
|
+
export type Platform = IOSPlatform | AndroidPlatform;
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
3
|
+
*
|
|
4
|
+
* This source code is licensed under the MIT license found in the
|
|
5
|
+
* LICENSE file in the root directory of this source tree.
|
|
6
|
+
*
|
|
7
|
+
* @flow strict
|
|
8
|
+
* @format
|
|
9
|
+
*/
|
|
10
|
+
|
|
11
|
+
export type PlatformSelectSpec<T> = {
|
|
12
|
+
default?: T,
|
|
13
|
+
native?: T,
|
|
14
|
+
ios?: T,
|
|
15
|
+
android?: T,
|
|
16
|
+
win32?: T,
|
|
17
|
+
...
|
|
18
|
+
};
|
|
19
|
+
|
|
20
|
+
type IOSPlatform = {
|
|
21
|
+
__constants: null,
|
|
22
|
+
OS: $TEMPORARY$string<'ios'>,
|
|
23
|
+
// $FlowFixMe[unsafe-getters-setters]
|
|
24
|
+
get Version(): string,
|
|
25
|
+
// $FlowFixMe[unsafe-getters-setters]
|
|
26
|
+
get constants(): {|
|
|
27
|
+
forceTouchAvailable: boolean,
|
|
28
|
+
interfaceIdiom: string,
|
|
29
|
+
isTesting: boolean,
|
|
30
|
+
isDisableAnimations?: boolean,
|
|
31
|
+
osVersion: string,
|
|
32
|
+
reactNativeVersion: {|
|
|
33
|
+
major: number,
|
|
34
|
+
minor: number,
|
|
35
|
+
patch: number,
|
|
36
|
+
prerelease: ?number,
|
|
37
|
+
|},
|
|
38
|
+
systemName: string,
|
|
39
|
+
|},
|
|
40
|
+
// $FlowFixMe[unsafe-getters-setters]
|
|
41
|
+
get isPad(): boolean,
|
|
42
|
+
// $FlowFixMe[unsafe-getters-setters]
|
|
43
|
+
get isTV(): boolean,
|
|
44
|
+
// $FlowFixMe[unsafe-getters-setters]
|
|
45
|
+
get isTesting(): boolean,
|
|
46
|
+
// $FlowFixMe[unsafe-getters-setters]
|
|
47
|
+
get isDisableAnimations(): boolean,
|
|
48
|
+
select: <T>(spec: PlatformSelectSpec<T>) => T,
|
|
49
|
+
};
|
|
50
|
+
|
|
51
|
+
type AndroidPlatform = {
|
|
52
|
+
__constants: null,
|
|
53
|
+
OS: $TEMPORARY$string<'android'>,
|
|
54
|
+
// $FlowFixMe[unsafe-getters-setters]
|
|
55
|
+
get Version(): number,
|
|
56
|
+
// $FlowFixMe[unsafe-getters-setters]
|
|
57
|
+
get constants(): {|
|
|
58
|
+
isTesting: boolean,
|
|
59
|
+
isDisableAnimations?: boolean,
|
|
60
|
+
reactNativeVersion: {|
|
|
61
|
+
major: number,
|
|
62
|
+
minor: number,
|
|
63
|
+
patch: number,
|
|
64
|
+
prerelease: ?number,
|
|
65
|
+
|},
|
|
66
|
+
Version: number,
|
|
67
|
+
Release: string,
|
|
68
|
+
Serial: string,
|
|
69
|
+
Fingerprint: string,
|
|
70
|
+
Model: string,
|
|
71
|
+
ServerHost?: string,
|
|
72
|
+
uiMode: string,
|
|
73
|
+
Brand: string,
|
|
74
|
+
Manufacturer: string,
|
|
75
|
+
|},
|
|
76
|
+
// $FlowFixMe[unsafe-getters-setters]
|
|
77
|
+
get isTV(): boolean,
|
|
78
|
+
// $FlowFixMe[unsafe-getters-setters]
|
|
79
|
+
get isTesting(): boolean,
|
|
80
|
+
// $FlowFixMe[unsafe-getters-setters]
|
|
81
|
+
get isDisableAnimations(): boolean,
|
|
82
|
+
select: <T>(spec: PlatformSelectSpec<T>) => T,
|
|
83
|
+
};
|
|
84
|
+
|
|
85
|
+
type Win32Platform = {
|
|
86
|
+
__constants: null,
|
|
87
|
+
OS: $TEMPORARY$string<'win32'>,
|
|
88
|
+
// $FlowFixMe[unsafe-getters-setters]
|
|
89
|
+
get Version(): number,
|
|
90
|
+
// $FlowFixMe[unsafe-getters-setters]
|
|
91
|
+
get constants(): {|
|
|
92
|
+
isTesting: boolean,
|
|
93
|
+
isDisableAnimations?: boolean,
|
|
94
|
+
reactNativeVersion: {|
|
|
95
|
+
major: number,
|
|
96
|
+
minor: number,
|
|
97
|
+
patch: number,
|
|
98
|
+
prerelease: ?string | number,
|
|
99
|
+
|},
|
|
100
|
+
osVersion: number,
|
|
101
|
+
|},
|
|
102
|
+
// $FlowFixMe[unsafe-getters-setters]
|
|
103
|
+
get isTV(): boolean,
|
|
104
|
+
// $FlowFixMe[unsafe-getters-setters]
|
|
105
|
+
get isTesting(): boolean,
|
|
106
|
+
// $FlowFixMe[unsafe-getters-setters]
|
|
107
|
+
get isDisableAnimations(): boolean,
|
|
108
|
+
select: <T>(spec: PlatformSelectSpec<T>) => T,
|
|
109
|
+
};
|
|
110
|
+
|
|
111
|
+
export type Platform = IOSPlatform | AndroidPlatform | Win32Platform;
|
|
@@ -8,16 +8,14 @@
|
|
|
8
8
|
* @flow strict
|
|
9
9
|
*/
|
|
10
10
|
|
|
11
|
-
import
|
|
11
|
+
import type {
|
|
12
|
+
Platform as PlatformType,
|
|
13
|
+
PlatformSelectSpec,
|
|
14
|
+
} from './Platform.flow';
|
|
12
15
|
|
|
13
|
-
|
|
14
|
-
default?: T,
|
|
15
|
-
native?: T,
|
|
16
|
-
ios?: T,
|
|
17
|
-
...
|
|
18
|
-
};
|
|
16
|
+
import NativePlatformConstantsIOS from './NativePlatformConstantsIOS';
|
|
19
17
|
|
|
20
|
-
const Platform = {
|
|
18
|
+
const Platform: PlatformType = {
|
|
21
19
|
__constants: null,
|
|
22
20
|
OS: 'ios',
|
|
23
21
|
// $FlowFixMe[unsafe-getters-setters]
|
|
@@ -30,6 +28,7 @@ const Platform = {
|
|
|
30
28
|
forceTouchAvailable: boolean,
|
|
31
29
|
interfaceIdiom: string,
|
|
32
30
|
isTesting: boolean,
|
|
31
|
+
isDisableAnimations?: boolean,
|
|
33
32
|
osVersion: string,
|
|
34
33
|
reactNativeVersion: {|
|
|
35
34
|
major: number,
|
|
@@ -65,6 +64,11 @@ const Platform = {
|
|
|
65
64
|
}
|
|
66
65
|
return false;
|
|
67
66
|
},
|
|
67
|
+
// $FlowFixMe[unsafe-getters-setters]
|
|
68
|
+
get isDisableAnimations(): boolean {
|
|
69
|
+
// $FlowFixMe[object-this-reference]
|
|
70
|
+
return this.constants.isDisableAnimations ?? this.isTesting;
|
|
71
|
+
},
|
|
68
72
|
select: <T>(spec: PlatformSelectSpec<T>): T =>
|
|
69
73
|
// $FlowFixMe[incompatible-return]
|
|
70
74
|
'ios' in spec ? spec.ios : 'native' in spec ? spec.native : spec.default,
|
|
@@ -6,16 +6,14 @@
|
|
|
6
6
|
* @flow strict
|
|
7
7
|
*/
|
|
8
8
|
|
|
9
|
-
import
|
|
9
|
+
import type {
|
|
10
|
+
Platform as PlatformType,
|
|
11
|
+
PlatformSelectSpec,
|
|
12
|
+
} from './Platform.flow';
|
|
10
13
|
|
|
11
|
-
|
|
12
|
-
win32?: T,
|
|
13
|
-
native?: T,
|
|
14
|
-
default?: T,
|
|
15
|
-
...
|
|
16
|
-
};
|
|
14
|
+
import NativePlatformConstantsWin from './NativePlatformConstantsWin';
|
|
17
15
|
|
|
18
|
-
const Platform = {
|
|
16
|
+
const Platform: PlatformType = {
|
|
19
17
|
__constants: null,
|
|
20
18
|
OS: 'win32',
|
|
21
19
|
// $FlowFixMe[unsafe-getters-setters]
|
|
@@ -26,6 +24,7 @@ const Platform = {
|
|
|
26
24
|
// $FlowFixMe[unsafe-getters-setters]
|
|
27
25
|
get constants(): {|
|
|
28
26
|
isTesting: boolean,
|
|
27
|
+
isDisableAnimations?: boolean,
|
|
29
28
|
reactNativeVersion: {|
|
|
30
29
|
major: number,
|
|
31
30
|
minor: number,
|
|
@@ -51,6 +50,11 @@ const Platform = {
|
|
|
51
50
|
return false;
|
|
52
51
|
},
|
|
53
52
|
// $FlowFixMe[unsafe-getters-setters]
|
|
53
|
+
get isDisableAnimations(): boolean {
|
|
54
|
+
// $FlowFixMe[object-this-reference]
|
|
55
|
+
return this.constants.isDisableAnimations ?? this.isTesting;
|
|
56
|
+
},
|
|
57
|
+
// $FlowFixMe[unsafe-getters-setters]
|
|
54
58
|
get isTV(): boolean {
|
|
55
59
|
// $FlowFixMe[object-this-reference]
|
|
56
60
|
return false;
|
|
@@ -32,7 +32,7 @@ function polyfillObjectProperty<T>(
|
|
|
32
32
|
): void {
|
|
33
33
|
const descriptor = Object.getOwnPropertyDescriptor<$FlowFixMe>(object, name);
|
|
34
34
|
if (__DEV__ && descriptor) {
|
|
35
|
-
const backupName = `original${name[0].toUpperCase()}${name.
|
|
35
|
+
const backupName = `original${name[0].toUpperCase()}${name.slice(1)}`;
|
|
36
36
|
Object.defineProperty(object, backupName, descriptor);
|
|
37
37
|
}
|
|
38
38
|
|
|
@@ -28,7 +28,6 @@ const ReactTestRenderer = require('react-test-renderer');
|
|
|
28
28
|
const shallowRenderer = new ShallowRenderer();
|
|
29
29
|
export type ReactTestInstance = $PropertyType<ReactTestRendererType, 'root'>;
|
|
30
30
|
export type Predicate = (node: ReactTestInstance) => boolean;
|
|
31
|
-
type $ReturnType<Fn> = $Call<<Ret, A>((...A) => Ret) => Ret, Fn>;
|
|
32
31
|
/* $FlowFixMe[value-as-type] (>=0.125.1 site=react_native_fb) This comment
|
|
33
32
|
* suppresses an error found when Flow v0.125.1 was deployed. To see the error,
|
|
34
33
|
* delete this comment and run Flow. */
|
|
@@ -36,7 +35,7 @@ export type ReactTestRendererJSON =
|
|
|
36
35
|
/* $FlowFixMe[prop-missing] (>=0.125.1 site=react_native_fb) This comment
|
|
37
36
|
* suppresses an error found when Flow v0.125.1 was deployed. To see the error,
|
|
38
37
|
* delete this comment and run Flow. */
|
|
39
|
-
|
|
38
|
+
ReturnType<ReactTestRenderer.create.toJSON>;
|
|
40
39
|
|
|
41
40
|
function byClickable(): Predicate {
|
|
42
41
|
return withMessage(
|
|
@@ -16,7 +16,8 @@ import type {
|
|
|
16
16
|
} from './IPerformanceLogger';
|
|
17
17
|
|
|
18
18
|
import * as Systrace from '../Performance/Systrace';
|
|
19
|
-
import
|
|
19
|
+
import ReactNativeFeatureFlags from '../ReactNative/ReactNativeFeatureFlags';
|
|
20
|
+
import NativePerformance from '../WebPerformance/NativePerformance';
|
|
20
21
|
import infoLog from './infoLog';
|
|
21
22
|
|
|
22
23
|
const _cookies: {[key: string]: number, ...} = {};
|
|
@@ -27,11 +28,8 @@ const PRINT_TO_CONSOLE: false = false; // Type as false to prevent accidentally
|
|
|
27
28
|
// used to separate these internally from other marks/measures
|
|
28
29
|
const WEB_PERFORMANCE_PREFIX = 'global_perf_';
|
|
29
30
|
|
|
30
|
-
// TODO: Remove once T143070419 is done
|
|
31
|
-
const performance = new Performance();
|
|
32
|
-
|
|
33
31
|
export const getCurrentTimestamp: () => number =
|
|
34
|
-
global.nativeQPLTimestamp ?? global.performance.now
|
|
32
|
+
global.nativeQPLTimestamp ?? (() => global.performance.now());
|
|
35
33
|
|
|
36
34
|
class PerformanceLogger implements IPerformanceLogger {
|
|
37
35
|
_timespans: {[key: string]: ?Timespan} = {};
|
|
@@ -39,10 +37,50 @@ class PerformanceLogger implements IPerformanceLogger {
|
|
|
39
37
|
_points: {[key: string]: ?number} = {};
|
|
40
38
|
_pointExtras: {[key: string]: ?Extras, ...} = {};
|
|
41
39
|
_closed: boolean = false;
|
|
42
|
-
|
|
40
|
+
_isGlobalLogger: boolean = false;
|
|
41
|
+
_isGlobalWebPerformanceLoggerEnabled: ?boolean;
|
|
43
42
|
|
|
44
|
-
constructor(
|
|
45
|
-
this.
|
|
43
|
+
constructor(isGlobalLogger?: boolean) {
|
|
44
|
+
this._isGlobalLogger = isGlobalLogger === true;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
_isLoggingForWebPerformance(): boolean {
|
|
48
|
+
if (!this._isGlobalLogger || NativePerformance == null) {
|
|
49
|
+
return false;
|
|
50
|
+
}
|
|
51
|
+
if (this._isGlobalWebPerformanceLoggerEnabled == null) {
|
|
52
|
+
this._isGlobalWebPerformanceLoggerEnabled =
|
|
53
|
+
ReactNativeFeatureFlags.isGlobalWebPerformanceLoggerEnabled();
|
|
54
|
+
}
|
|
55
|
+
return this._isGlobalWebPerformanceLoggerEnabled === true;
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
// NOTE: The Performance.mark/measure calls are wrapped here to ensure that
|
|
59
|
+
// we are safe from the cases when the global 'peformance' object is still not yet defined.
|
|
60
|
+
// It is only necessary in this file because of potential race conditions in the initialization
|
|
61
|
+
// order between 'createPerformanceLogger' and 'setUpPerformance'.
|
|
62
|
+
//
|
|
63
|
+
// In most of the other cases this kind of check for `performance` being defined
|
|
64
|
+
// wouldn't be necessary.
|
|
65
|
+
_performanceMark(key: string, startTime: number) {
|
|
66
|
+
if (this._isLoggingForWebPerformance()) {
|
|
67
|
+
global.performance?.mark?.(key, {
|
|
68
|
+
startTime,
|
|
69
|
+
});
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
_performanceMeasure(
|
|
74
|
+
key: string,
|
|
75
|
+
start: number | string,
|
|
76
|
+
end: number | string,
|
|
77
|
+
) {
|
|
78
|
+
if (this._isLoggingForWebPerformance()) {
|
|
79
|
+
global.performance?.measure?.(key, {
|
|
80
|
+
start,
|
|
81
|
+
end,
|
|
82
|
+
});
|
|
83
|
+
}
|
|
46
84
|
}
|
|
47
85
|
|
|
48
86
|
addTimespan(
|
|
@@ -76,12 +114,11 @@ class PerformanceLogger implements IPerformanceLogger {
|
|
|
76
114
|
endExtras,
|
|
77
115
|
};
|
|
78
116
|
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
}
|
|
117
|
+
this._performanceMeasure(
|
|
118
|
+
`${WEB_PERFORMANCE_PREFIX}_${key}`,
|
|
119
|
+
startTime,
|
|
120
|
+
endTime,
|
|
121
|
+
);
|
|
85
122
|
}
|
|
86
123
|
|
|
87
124
|
append(performanceLogger: IPerformanceLogger) {
|
|
@@ -197,11 +234,7 @@ class PerformanceLogger implements IPerformanceLogger {
|
|
|
197
234
|
this._pointExtras[key] = extras;
|
|
198
235
|
}
|
|
199
236
|
|
|
200
|
-
|
|
201
|
-
performance.mark(`${WEB_PERFORMANCE_PREFIX}_${key}`, {
|
|
202
|
-
startTime: timestamp,
|
|
203
|
-
});
|
|
204
|
-
}
|
|
237
|
+
this._performanceMark(`${WEB_PERFORMANCE_PREFIX}_${key}`, timestamp);
|
|
205
238
|
}
|
|
206
239
|
|
|
207
240
|
removeExtra(key: string): ?ExtraValue {
|
|
@@ -264,11 +297,10 @@ class PerformanceLogger implements IPerformanceLogger {
|
|
|
264
297
|
infoLog('PerformanceLogger.js', 'start: ' + key);
|
|
265
298
|
}
|
|
266
299
|
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
}
|
|
300
|
+
this._performanceMark(
|
|
301
|
+
`${WEB_PERFORMANCE_PREFIX}_timespan_start_${key}`,
|
|
302
|
+
timestamp,
|
|
303
|
+
);
|
|
272
304
|
}
|
|
273
305
|
|
|
274
306
|
stopTimespan(
|
|
@@ -315,12 +347,11 @@ class PerformanceLogger implements IPerformanceLogger {
|
|
|
315
347
|
delete _cookies[key];
|
|
316
348
|
}
|
|
317
349
|
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
}
|
|
350
|
+
this._performanceMeasure(
|
|
351
|
+
`${WEB_PERFORMANCE_PREFIX}_${key}`,
|
|
352
|
+
`${WEB_PERFORMANCE_PREFIX}_timespan_start_${key}`,
|
|
353
|
+
timestamp,
|
|
354
|
+
);
|
|
324
355
|
}
|
|
325
356
|
}
|
|
326
357
|
|
|
@@ -334,7 +365,7 @@ export type {Extras, ExtraValue, IPerformanceLogger, Timespan};
|
|
|
334
365
|
* The loggers need to have minimal overhead since they're used in production.
|
|
335
366
|
*/
|
|
336
367
|
export default function createPerformanceLogger(
|
|
337
|
-
|
|
368
|
+
isGlobalLogger?: boolean,
|
|
338
369
|
): IPerformanceLogger {
|
|
339
|
-
return new PerformanceLogger(
|
|
370
|
+
return new PerformanceLogger(isGlobalLogger);
|
|
340
371
|
}
|
|
@@ -13,14 +13,13 @@
|
|
|
13
13
|
import type {ColorSchemeName} from './NativeAppearance';
|
|
14
14
|
|
|
15
15
|
import Appearance from './Appearance';
|
|
16
|
-
import {useSyncExternalStore} from '
|
|
16
|
+
import {useSyncExternalStore} from 'react';
|
|
17
|
+
|
|
18
|
+
const subscribe = (onStoreChange: () => void) => {
|
|
19
|
+
const appearanceSubscription = Appearance.addChangeListener(onStoreChange);
|
|
20
|
+
return () => appearanceSubscription.remove();
|
|
21
|
+
};
|
|
17
22
|
|
|
18
23
|
export default function useColorScheme(): ?ColorSchemeName {
|
|
19
|
-
return useSyncExternalStore(
|
|
20
|
-
callback => {
|
|
21
|
-
const appearanceSubscription = Appearance.addChangeListener(callback);
|
|
22
|
-
return () => appearanceSubscription.remove();
|
|
23
|
-
},
|
|
24
|
-
() => Appearance.getColorScheme(),
|
|
25
|
-
);
|
|
24
|
+
return useSyncExternalStore(subscribe, Appearance.getColorScheme);
|
|
26
25
|
}
|
|
@@ -12,17 +12,12 @@ import type {TurboModule} from '../TurboModule/RCTExport';
|
|
|
12
12
|
|
|
13
13
|
import * as TurboModuleRegistry from '../TurboModule/TurboModuleRegistry';
|
|
14
14
|
|
|
15
|
-
export type NativeMemoryInfo = {[key: string]: number};
|
|
15
|
+
export type NativeMemoryInfo = {[key: string]: ?number};
|
|
16
16
|
|
|
17
|
-
export type ReactNativeStartupTiming = {
|
|
18
|
-
startTime: number,
|
|
19
|
-
endTime: number,
|
|
20
|
-
executeJavaScriptBundleEntryPointStart: number,
|
|
21
|
-
executeJavaScriptBundleEntryPointEnd: number,
|
|
22
|
-
|};
|
|
17
|
+
export type ReactNativeStartupTiming = {[key: string]: ?number};
|
|
23
18
|
|
|
24
19
|
export interface Spec extends TurboModule {
|
|
25
|
-
+mark: (name: string, startTime: number
|
|
20
|
+
+mark: (name: string, startTime: number) => void;
|
|
26
21
|
+measure: (
|
|
27
22
|
name: string,
|
|
28
23
|
startTime: number,
|
|
@@ -33,6 +33,10 @@ export type GetPendingEntriesResult = {|
|
|
|
33
33
|
export interface Spec extends TurboModule {
|
|
34
34
|
+startReporting: (entryType: RawPerformanceEntryType) => void;
|
|
35
35
|
+stopReporting: (entryType: RawPerformanceEntryType) => void;
|
|
36
|
+
+setIsBuffered: (
|
|
37
|
+
entryTypes: $ReadOnlyArray<RawPerformanceEntryType>,
|
|
38
|
+
isBuffered: boolean,
|
|
39
|
+
) => void;
|
|
36
40
|
+popPendingEntries: () => GetPendingEntriesResult;
|
|
37
41
|
+setOnPerformanceEntryCallback: (callback?: () => void) => void;
|
|
38
42
|
+logRawEntry: (entry: RawPerformanceEntry) => void;
|
|
@@ -18,7 +18,7 @@ import EventCounts from './EventCounts';
|
|
|
18
18
|
import MemoryInfo from './MemoryInfo';
|
|
19
19
|
import NativePerformance from './NativePerformance';
|
|
20
20
|
import NativePerformanceObserver from './NativePerformanceObserver';
|
|
21
|
-
import {PerformanceEntry} from './PerformanceEntry';
|
|
21
|
+
import {ALWAYS_LOGGED_ENTRY_TYPES, PerformanceEntry} from './PerformanceEntry';
|
|
22
22
|
import {warnNoNativePerformanceObserver} from './PerformanceObserver';
|
|
23
23
|
import {
|
|
24
24
|
performanceEntryTypeToRaw,
|
|
@@ -43,6 +43,17 @@ const getCurrentTimeStamp: () => HighResTimeStamp = global.nativePerformanceNow
|
|
|
43
43
|
? global.nativePerformanceNow
|
|
44
44
|
: () => Date.now();
|
|
45
45
|
|
|
46
|
+
// We want some of the performance entry types to be always logged,
|
|
47
|
+
// even if they are not currently observed - this is either to be able to
|
|
48
|
+
// retrieve them at any time via Performance.getEntries* or to refer by other entries
|
|
49
|
+
// (such as when measures may refer to marks, even if the latter are not observed)
|
|
50
|
+
if (NativePerformanceObserver?.setIsBuffered) {
|
|
51
|
+
NativePerformanceObserver?.setIsBuffered(
|
|
52
|
+
ALWAYS_LOGGED_ENTRY_TYPES.map(performanceEntryTypeToRaw),
|
|
53
|
+
true,
|
|
54
|
+
);
|
|
55
|
+
}
|
|
56
|
+
|
|
46
57
|
export class PerformanceMark extends PerformanceEntry {
|
|
47
58
|
detail: DetailType;
|
|
48
59
|
|
|
@@ -132,9 +143,22 @@ export default class Performance {
|
|
|
132
143
|
// Startup metrics is not used in web, but only in React Native.
|
|
133
144
|
get reactNativeStartupTiming(): ReactNativeStartupTiming {
|
|
134
145
|
if (NativePerformance?.getReactNativeStartupTiming) {
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
146
|
+
const {
|
|
147
|
+
startTime,
|
|
148
|
+
endTime,
|
|
149
|
+
initializeRuntimeStart,
|
|
150
|
+
initializeRuntimeEnd,
|
|
151
|
+
executeJavaScriptBundleEntryPointStart,
|
|
152
|
+
executeJavaScriptBundleEntryPointEnd,
|
|
153
|
+
} = NativePerformance.getReactNativeStartupTiming();
|
|
154
|
+
return new ReactNativeStartupTiming({
|
|
155
|
+
startTime,
|
|
156
|
+
endTime,
|
|
157
|
+
initializeRuntimeStart,
|
|
158
|
+
initializeRuntimeEnd,
|
|
159
|
+
executeJavaScriptBundleEntryPointStart,
|
|
160
|
+
executeJavaScriptBundleEntryPointEnd,
|
|
161
|
+
});
|
|
138
162
|
}
|
|
139
163
|
return new ReactNativeStartupTiming();
|
|
140
164
|
}
|
|
@@ -146,7 +170,7 @@ export default class Performance {
|
|
|
146
170
|
const mark = new PerformanceMark(markName, markOptions);
|
|
147
171
|
|
|
148
172
|
if (NativePerformance?.mark) {
|
|
149
|
-
NativePerformance.mark(markName, mark.startTime
|
|
173
|
+
NativePerformance.mark(markName, mark.startTime);
|
|
150
174
|
} else {
|
|
151
175
|
warnNoNativePerformance();
|
|
152
176
|
}
|
|
@@ -261,7 +285,7 @@ export default class Performance {
|
|
|
261
285
|
* https://www.w3.org/TR/performance-timeline/#extensions-to-the-performance-interface
|
|
262
286
|
*/
|
|
263
287
|
getEntries(): PerformanceEntryList {
|
|
264
|
-
if (!NativePerformanceObserver?.
|
|
288
|
+
if (!NativePerformanceObserver?.getEntries) {
|
|
265
289
|
warnNoNativePerformanceObserver();
|
|
266
290
|
return [];
|
|
267
291
|
}
|
|
@@ -269,14 +293,16 @@ export default class Performance {
|
|
|
269
293
|
}
|
|
270
294
|
|
|
271
295
|
getEntriesByType(entryType: PerformanceEntryType): PerformanceEntryList {
|
|
272
|
-
if (entryType
|
|
273
|
-
console.
|
|
274
|
-
`Performance.getEntriesByType: Only valid for
|
|
296
|
+
if (!ALWAYS_LOGGED_ENTRY_TYPES.includes(entryType)) {
|
|
297
|
+
console.warn(
|
|
298
|
+
`Performance.getEntriesByType: Only valid for ${JSON.stringify(
|
|
299
|
+
ALWAYS_LOGGED_ENTRY_TYPES,
|
|
300
|
+
)} entry types, got ${entryType}`,
|
|
275
301
|
);
|
|
276
302
|
return [];
|
|
277
303
|
}
|
|
278
304
|
|
|
279
|
-
if (!NativePerformanceObserver?.
|
|
305
|
+
if (!NativePerformanceObserver?.getEntries) {
|
|
280
306
|
warnNoNativePerformanceObserver();
|
|
281
307
|
return [];
|
|
282
308
|
}
|
|
@@ -291,16 +317,17 @@ export default class Performance {
|
|
|
291
317
|
): PerformanceEntryList {
|
|
292
318
|
if (
|
|
293
319
|
entryType !== undefined &&
|
|
294
|
-
entryType
|
|
295
|
-
entryType !== 'measure'
|
|
320
|
+
!ALWAYS_LOGGED_ENTRY_TYPES.includes(entryType)
|
|
296
321
|
) {
|
|
297
|
-
console.
|
|
298
|
-
`Performance.getEntriesByName: Only valid for
|
|
322
|
+
console.warn(
|
|
323
|
+
`Performance.getEntriesByName: Only valid for ${JSON.stringify(
|
|
324
|
+
ALWAYS_LOGGED_ENTRY_TYPES,
|
|
325
|
+
)} entry types, got ${entryType}`,
|
|
299
326
|
);
|
|
300
327
|
return [];
|
|
301
328
|
}
|
|
302
329
|
|
|
303
|
-
if (!NativePerformanceObserver?.
|
|
330
|
+
if (!NativePerformanceObserver?.getEntries) {
|
|
304
331
|
warnNoNativePerformanceObserver();
|
|
305
332
|
return [];
|
|
306
333
|
}
|
|
@@ -11,6 +11,19 @@
|
|
|
11
11
|
export type HighResTimeStamp = number;
|
|
12
12
|
export type PerformanceEntryType = 'mark' | 'measure' | 'event';
|
|
13
13
|
|
|
14
|
+
export type PerformanceEntryJSON = {
|
|
15
|
+
name: string,
|
|
16
|
+
entryType: PerformanceEntryType,
|
|
17
|
+
startTime: HighResTimeStamp,
|
|
18
|
+
duration: HighResTimeStamp,
|
|
19
|
+
...
|
|
20
|
+
};
|
|
21
|
+
|
|
22
|
+
export const ALWAYS_LOGGED_ENTRY_TYPES: $ReadOnlyArray<PerformanceEntryType> = [
|
|
23
|
+
'mark',
|
|
24
|
+
'measure',
|
|
25
|
+
];
|
|
26
|
+
|
|
14
27
|
export class PerformanceEntry {
|
|
15
28
|
name: string;
|
|
16
29
|
entryType: PerformanceEntryType;
|
|
@@ -29,12 +42,7 @@ export class PerformanceEntry {
|
|
|
29
42
|
this.duration = init.duration;
|
|
30
43
|
}
|
|
31
44
|
|
|
32
|
-
toJSON(): {
|
|
33
|
-
name: string,
|
|
34
|
-
entryType: PerformanceEntryType,
|
|
35
|
-
startTime: HighResTimeStamp,
|
|
36
|
-
duration: HighResTimeStamp,
|
|
37
|
-
} {
|
|
45
|
+
toJSON(): PerformanceEntryJSON {
|
|
38
46
|
return {
|
|
39
47
|
name: this.name,
|
|
40
48
|
entryType: this.entryType,
|