@office-iss/react-native-win32 0.71.5 → 0.72.0-preview.2
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 -3
- package/CHANGELOG.json +321 -45
- package/CHANGELOG.md +149 -26
- package/IntegrationTests/IntegrationTestHarnessTest.js +1 -0
- package/Libraries/ActionSheetIOS/ActionSheetIOS.js +1 -1
- package/Libraries/Alert/Alert.d.ts +4 -4
- package/Libraries/Alert/Alert.win32.js +1 -0
- package/Libraries/Animated/Animated.d.ts +17 -6
- package/Libraries/Animated/NativeAnimatedHelper.js +18 -6
- package/Libraries/Animated/NativeAnimatedHelper.win32.js +606 -0
- package/Libraries/Animated/bezier.js +1 -1
- package/Libraries/Animated/components/AnimatedFlatList.js +8 -3
- package/Libraries/Animated/components/AnimatedScrollView.js +4 -1
- package/Libraries/Animated/components/AnimatedSectionList.js +12 -3
- package/Libraries/Animated/createAnimatedComponent.js +26 -239
- package/Libraries/Animated/nodes/AnimatedColor.js +47 -80
- package/Libraries/Animated/nodes/AnimatedInterpolation.js +167 -121
- package/Libraries/Animated/nodes/AnimatedNode.js +3 -5
- package/Libraries/Animated/nodes/AnimatedProps.js +7 -6
- package/Libraries/Animated/nodes/AnimatedStyle.js +42 -8
- package/Libraries/Animated/nodes/AnimatedTransform.js +1 -1
- package/Libraries/Animated/nodes/AnimatedValue.js +8 -12
- package/Libraries/Animated/nodes/AnimatedWithChildren.js +1 -1
- package/Libraries/Animated/useAnimatedProps.js +7 -10
- package/Libraries/BatchedBridge/MessageQueue.js +2 -1
- package/Libraries/BatchedBridge/NativeModules.d.ts +1 -1
- package/Libraries/BatchedBridge/NativeModules.js +1 -0
- package/Libraries/Blob/Blob.js +4 -0
- package/Libraries/Blob/FileReader.js +30 -2
- package/Libraries/Blob/URL.js +3 -1
- package/Libraries/Components/AccessibilityInfo/AccessibilityInfo.d.ts +2 -2
- package/Libraries/Components/AccessibilityInfo/AccessibilityInfo.js +2 -3
- package/Libraries/Components/AccessibilityInfo/AccessibilityInfo.win32.js +2 -3
- package/Libraries/Components/ActivityIndicator/ActivityIndicator.js +6 -4
- package/Libraries/Components/Button.js +3 -2
- package/Libraries/Components/Button.win32.js +451 -0
- package/Libraries/Components/Clipboard/Clipboard.js +1 -1
- package/Libraries/Components/DrawerAndroid/DrawerLayoutAndroid.android.js +4 -0
- package/Libraries/Components/Keyboard/KeyboardAvoidingView.js +1 -0
- package/Libraries/Components/Pressable/Pressable.d.ts +1 -1
- package/Libraries/Components/Pressable/Pressable.js +1 -1
- package/Libraries/Components/RefreshControl/RefreshControl.js +1 -0
- package/Libraries/Components/SafeAreaView/SafeAreaView.js +1 -2
- package/Libraries/Components/SafeAreaView/SafeAreaView.win32.js +1 -2
- package/Libraries/Components/ScrollView/AndroidHorizontalScrollViewNativeComponent.js +12 -6
- package/Libraries/Components/ScrollView/ScrollView.d.ts +2 -2
- package/Libraries/Components/ScrollView/ScrollView.js +149 -91
- package/Libraries/Components/ScrollView/ScrollView.win32.js +1939 -0
- package/Libraries/Components/ScrollView/ScrollViewNativeComponent.js +16 -6
- package/Libraries/Components/ScrollView/ScrollViewStickyHeader.js +5 -7
- package/Libraries/Components/ScrollView/ScrollViewViewConfig.js +1 -1
- package/Libraries/Components/StatusBar/StatusBar.js +3 -0
- package/Libraries/Components/Switch/Switch.js +3 -1
- package/Libraries/Components/TextInput/AndroidTextInputNativeComponent.js +21 -11
- package/Libraries/Components/TextInput/InputAccessoryView.d.ts +1 -1
- package/Libraries/Components/TextInput/RCTTextInputViewConfig.js +11 -5
- package/Libraries/Components/TextInput/TextInput.Types.win32.d.ts +51 -0
- package/Libraries/Components/TextInput/TextInput.Types.win32.js +3 -0
- package/Libraries/Components/TextInput/TextInput.Types.win32.js.map +1 -0
- package/Libraries/Components/TextInput/TextInput.d.ts +15 -5
- package/Libraries/Components/TextInput/TextInput.flow.js +1 -1
- package/Libraries/Components/TextInput/TextInput.js +130 -103
- package/Libraries/Components/TextInput/TextInput.win32.js +202 -890
- package/Libraries/Components/Touchable/Touchable.d.ts +1 -1
- package/Libraries/Components/Touchable/Touchable.flow.js +30 -4
- package/Libraries/Components/Touchable/Touchable.js +6 -3
- package/Libraries/Components/Touchable/Touchable.win32.js +6 -3
- package/Libraries/Components/Touchable/TouchableHighlight.js +1 -1
- package/Libraries/Components/Touchable/TouchableNativeFeedback.js +2 -2
- package/Libraries/Components/Touchable/TouchableOpacity.js +3 -0
- package/Libraries/Components/Touchable/TouchableWin32.js.map +1 -1
- package/Libraries/Components/Touchable/TouchableWithoutFeedback.d.ts +1 -1
- package/Libraries/Components/Touchable/TouchableWithoutFeedback.js +2 -2
- package/Libraries/Components/TraceUpdateOverlay/TraceUpdateOverlay.js +179 -0
- package/Libraries/Components/TraceUpdateOverlay/TraceUpdateOverlayNativeComponent.js +43 -0
- package/Libraries/Components/View/ReactNativeStyleAttributes.js +26 -0
- package/Libraries/Components/View/View.js +35 -16
- package/Libraries/Components/View/View.win32.js +38 -16
- package/Libraries/Components/View/ViewAccessibility.d.ts +6 -6
- package/Libraries/Components/View/ViewAccessibility.js +10 -1
- package/Libraries/Components/View/ViewAccessibility.win32.d.ts +5 -5
- package/Libraries/Components/View/ViewNativeComponent.js +32 -8
- package/Libraries/Components/View/ViewPropTypes.d.ts +1 -1
- package/Libraries/Components/View/ViewPropTypes.js +1 -1
- package/Libraries/Components/View/ViewPropTypes.win32.d.ts +1 -1
- package/Libraries/Components/View/ViewPropTypes.win32.js +1 -1
- package/Libraries/Components/View/ViewWin32.js +2 -35
- package/Libraries/Core/Devtools/openFileInEditor.js +1 -0
- package/Libraries/Core/Devtools/openURLInBrowser.js +1 -0
- package/Libraries/Core/Devtools/parseErrorStack.js +2 -2
- package/Libraries/Core/Devtools/parseHermesStack.js +54 -34
- package/Libraries/Core/ExceptionsManager.js +2 -2
- package/Libraries/Core/InitializeCore.js +2 -1
- package/Libraries/Core/ReactNativeVersion.js +3 -3
- package/Libraries/Core/ReactNativeVersionCheck.js +4 -8
- package/Libraries/Core/ReactNativeVersionCheck.win32.js +4 -8
- package/Libraries/Core/Timers/JSTimers.js +1 -1
- package/Libraries/Core/Timers/immediateShim.js +1 -0
- package/Libraries/Core/Timers/queueMicrotask.js +1 -1
- package/Libraries/Core/setUpAlert.js +1 -1
- package/Libraries/Core/setUpDOM.js +18 -0
- package/Libraries/Core/setUpDeveloperTools.js +1 -1
- package/Libraries/Core/setUpGlobals.js +5 -2
- package/Libraries/Core/setUpNavigator.js +6 -5
- package/Libraries/Core/setUpPerformance.js +23 -13
- package/Libraries/Core/setUpReactDevTools.js +2 -0
- package/Libraries/Core/setUpSegmentFetcher.js +0 -41
- package/Libraries/Core/setUpTimers.js +2 -2
- package/Libraries/DOM/Geometry/DOMRect.js +82 -0
- package/Libraries/DOM/Geometry/DOMRectReadOnly.js +188 -0
- package/Libraries/DOM/Nodes/ReactNativeElement.js +75 -0
- package/Libraries/DOM/Nodes/ReadOnlyElement.js +89 -0
- package/Libraries/DOM/Nodes/ReadOnlyNode.js +167 -0
- package/Libraries/DOM/OldStyleCollections/ArrayLikeUtils.js +46 -0
- package/Libraries/DOM/OldStyleCollections/DOMRectList.js +76 -0
- package/Libraries/DOM/OldStyleCollections/HTMLCollection.js +82 -0
- package/Libraries/DOM/OldStyleCollections/NodeList.js +104 -0
- package/Libraries/DevToolsSettings/DevToolsSettingsManager.android.js +35 -0
- package/Libraries/DevToolsSettings/DevToolsSettingsManager.d.ts +20 -0
- package/Libraries/DevToolsSettings/DevToolsSettingsManager.ios.js +49 -0
- package/Libraries/DevToolsSettings/DevToolsSettingsManager.win32.js +35 -0
- package/Libraries/DevToolsSettings/NativeDevToolsSettingsManager.js +24 -0
- package/Libraries/EventEmitter/NativeEventEmitter.d.ts +1 -2
- package/Libraries/EventEmitter/RCTDeviceEventEmitter.d.ts +1 -2
- package/Libraries/EventEmitter/RCTDeviceEventEmitter.js +9 -1
- package/Libraries/Events/EventPolyfill.js +1 -1
- package/Libraries/Image/AssetRegistry.js +1 -1
- package/Libraries/Image/AssetSourceResolver.js +3 -3
- package/Libraries/Image/Image.android.js +4 -1
- package/Libraries/Image/Image.d.ts +63 -2
- package/Libraries/Image/Image.ios.js +3 -0
- package/Libraries/Image/Image.win32.js +3 -0
- package/Libraries/Image/ImageBackground.js +1 -0
- package/Libraries/Image/ImageProps.js +1 -1
- package/Libraries/Image/ImageViewNativeComponent.js +4 -4
- package/Libraries/Image/RelativeImageStub.js +1 -1
- package/Libraries/Image/TextInlineImageNativeComponent.js +1 -1
- package/Libraries/Image/resolveAssetSource.js +1 -1
- package/Libraries/Inspector/DevtoolsOverlay.js +26 -19
- package/Libraries/Inspector/ElementBox.js +4 -1
- package/Libraries/Inspector/Inspector.js +5 -6
- package/Libraries/Inspector/Inspector.win32.js +7 -6
- package/Libraries/Inspector/InspectorOverlay.js +3 -3
- package/Libraries/Inspector/InspectorOverlay.win32.js +2 -1
- package/Libraries/Inspector/NetworkOverlay.js +1 -1
- package/Libraries/Interaction/JSEventLoopWatchdog.js +1 -1
- package/Libraries/Interaction/PanResponder.js +5 -6
- package/Libraries/LayoutAnimation/LayoutAnimation.js +2 -1
- package/Libraries/Linking/Linking.js +1 -4
- package/Libraries/Lists/FillRateHelper.js +4 -238
- package/Libraries/Lists/FlatList.d.ts +15 -22
- package/Libraries/Lists/FlatList.js +9 -6
- package/Libraries/Lists/SectionList.d.ts +10 -6
- package/Libraries/Lists/SectionList.js +5 -3
- package/Libraries/Lists/SectionListModern.js +3 -3
- package/Libraries/Lists/ViewabilityHelper.js +8 -344
- package/Libraries/Lists/VirtualizeUtils.js +4 -244
- package/Libraries/Lists/VirtualizedList.js +10 -1867
- package/Libraries/Lists/VirtualizedListContext.js +6 -104
- package/Libraries/Lists/VirtualizedSectionList.js +9 -602
- package/Libraries/Lists/__flowtests__/FlatList-flowtest.js +1 -0
- package/Libraries/Lists/__flowtests__/SectionList-flowtest.js +1 -1
- package/Libraries/LogBox/Data/LogBoxData.js +1 -1
- package/Libraries/LogBox/Data/parseLogBoxLog.js +1 -1
- package/Libraries/LogBox/LogBox.js +1 -1
- package/Libraries/LogBox/UI/LogBoxInspector.js +1 -3
- package/Libraries/LogBox/UI/LogBoxInspectorCodeFrame.win32.js +168 -0
- package/Libraries/LogBox/UI/LogBoxInspectorHeader.win32.js +3 -0
- package/Libraries/LogBox/UI/LogBoxInspectorReactFrames.win32.js +193 -0
- package/Libraries/LogBox/UI/LogBoxInspectorSourceMapStatus.js +1 -0
- package/Libraries/LogBox/UI/LogBoxInspectorStackFrame.js +2 -2
- package/Libraries/LogBox/UI/LogBoxInspectorStackFrame.win32.js +7 -3
- package/Libraries/LogBox/UI/LogBoxMessage.js +87 -5
- package/Libraries/LogBox/UI/LogBoxNotification.js +5 -7
- package/Libraries/Modal/Modal.js +2 -2
- package/Libraries/NativeComponent/BaseViewConfig.android.js +32 -12
- package/Libraries/NativeComponent/BaseViewConfig.ios.js +43 -19
- package/Libraries/NativeComponent/BaseViewConfig.win32.js +43 -19
- package/Libraries/NativeComponent/NativeComponentRegistryUnstable.js +4 -1
- package/Libraries/NativeComponent/ViewConfig.js +1 -0
- package/Libraries/NativeComponent/ViewConfigIgnore.js +1 -4
- package/Libraries/Network/RCTNetworking.android.js +2 -2
- package/Libraries/Network/RCTNetworking.ios.js +1 -1
- package/Libraries/Network/RCTNetworking.win32.js +1 -1
- package/Libraries/Network/XMLHttpRequest.js +1 -1
- package/Libraries/Pressability/Pressability.js +10 -4
- package/Libraries/Pressability/Pressability.win32.js +9 -3
- package/Libraries/ReactNative/AppContainer.js +7 -1
- package/Libraries/ReactNative/AppRegistry.d.ts +1 -1
- package/Libraries/ReactNative/AppRegistry.js +10 -13
- package/Libraries/ReactNative/FabricUIManager.js +24 -8
- package/Libraries/ReactNative/NativeUIManager.js +5 -5
- package/Libraries/ReactNative/ReactNativeFeatureFlags.js +10 -10
- package/Libraries/ReactNative/UIManager.js +168 -1
- package/Libraries/ReactNative/getCachedComponentWithDebugName.js +5 -5
- package/Libraries/ReactNative/getNativeComponentAttributes.js +1 -1
- package/Libraries/ReactNative/requireNativeComponent.d.ts +1 -1
- package/Libraries/ReactNative/requireNativeComponent.js +1 -1
- package/Libraries/ReactPrivate/ReactNativePrivateInterface.js +1 -0
- package/Libraries/Renderer/implementations/ReactFabric-dev.js +26 -3
- package/Libraries/Renderer/implementations/ReactFabric-prod.js +13 -1
- package/Libraries/Renderer/implementations/ReactFabric-profiling.js +13 -1
- package/Libraries/Renderer/public/ReactFabricPublicInstanceUtils.js +38 -0
- package/Libraries/Renderer/shims/ReactNativeTypes.js +6 -6
- package/Libraries/Renderer/shims/ReactNativeViewConfigRegistry.js +7 -7
- package/Libraries/Renderer/shims/createReactNativeComponentClass.js +2 -2
- package/Libraries/Share/Share.js +1 -1
- package/Libraries/StyleSheet/PlatformColorValueTypes.ios.js +1 -1
- package/Libraries/StyleSheet/StyleSheet.js +1 -1
- package/Libraries/StyleSheet/StyleSheet.win32.js +1 -1
- package/Libraries/StyleSheet/StyleSheetTypes.d.ts +115 -76
- package/Libraries/StyleSheet/StyleSheetTypes.js +188 -33
- package/Libraries/StyleSheet/flattenStyle.js +2 -0
- package/Libraries/StyleSheet/normalizeColor.js +1 -1
- package/Libraries/StyleSheet/processColor.js +1 -1
- package/Libraries/Text/Text.d.ts +12 -2
- package/Libraries/Text/Text.js +50 -41
- package/Libraries/Text/TextProps.js +3 -4
- package/Libraries/TurboModule/samples/NativeSampleTurboModule.js +6 -0
- package/Libraries/Types/CodegenTypes.js +1 -0
- package/Libraries/UTFSequence.js +3 -1
- package/Libraries/Utilities/Appearance.d.ts +10 -0
- package/Libraries/Utilities/Appearance.js +13 -0
- package/Libraries/Utilities/Dimensions.js +1 -1
- package/Libraries/Utilities/Dimensions.win32.js +1 -1
- package/Libraries/Utilities/GlobalPerformanceLogger.js +12 -1
- package/Libraries/Utilities/HMRClient.js +16 -10
- package/Libraries/Utilities/{createPerformanceLogger.d.ts → IPerformanceLogger.d.ts} +4 -4
- package/Libraries/Utilities/IPerformanceLogger.js +49 -0
- package/Libraries/Utilities/LoadingView.android.js +28 -11
- package/Libraries/Utilities/NativeAppearance.js +1 -0
- package/Libraries/Utilities/NativePlatformConstantsWin.js +1 -1
- package/Libraries/Utilities/PixelRatio.js +2 -2
- package/Libraries/Utilities/Platform.win32.js +1 -1
- package/Libraries/Utilities/ReactNativeTestTools.js +1 -1
- package/Libraries/Utilities/__mocks__/PixelRatio.js +1 -1
- package/Libraries/Utilities/codegenNativeCommands.js +2 -0
- package/Libraries/Utilities/createPerformanceLogger.js +55 -43
- package/Libraries/Utilities/stringifySafe.js +2 -7
- package/Libraries/Utilities/useColorScheme.win32.js +26 -0
- package/Libraries/Utilities/useWindowDimensions.js +3 -3
- package/Libraries/WebPerformance/EventCounts.js +78 -0
- package/Libraries/WebPerformance/MemoryInfo.js +54 -0
- package/Libraries/WebPerformance/NativePerformance.js +38 -0
- package/Libraries/WebPerformance/NativePerformanceObserver.js +22 -7
- package/Libraries/WebPerformance/Performance.js +312 -0
- package/Libraries/WebPerformance/PerformanceEntry.js +45 -0
- package/Libraries/WebPerformance/PerformanceEventTiming.js +38 -0
- package/Libraries/WebPerformance/PerformanceObserver.js +196 -101
- package/Libraries/WebPerformance/RawPerformanceEntry.js +87 -0
- package/Libraries/WebPerformance/ReactNativeStartupTiming.js +65 -0
- package/Libraries/WebPerformance/__mocks__/NativePerformance.js +65 -0
- package/Libraries/WebPerformance/__mocks__/NativePerformanceObserver.js +101 -0
- package/Libraries/YellowBox/YellowBoxDeprecated.js +1 -1
- package/Libraries/vendor/core/ErrorUtils.js +1 -1
- package/Libraries/vendor/emitter/EventEmitter.d.ts +2 -2
- package/Libraries/vendor/emitter/EventEmitter.js +9 -1
- package/flow/global.js +29 -4
- package/flow/jest.js +258 -164
- package/flow/use-sync-external-store.js +1 -0
- package/index.js +56 -42
- package/index.win32.js +56 -42
- package/interface.js +1 -1
- package/jest/local-setup.js +33 -0
- package/jest/mockComponent.js +4 -2
- package/jest/mockNativeComponent.js +1 -1
- package/jest/mockScrollView.js +2 -1
- package/jest/react-native-env.js +1 -3
- package/jest/setup.js +11 -8
- package/overrides.json +122 -85
- package/package.json +40 -30
- package/rn-get-polyfills.js +1 -1
- package/src/Libraries/Components/TextInput/TextInput.Types.win32.ts +68 -0
- package/src/Libraries/Components/Touchable/TouchableWin32.tsx +3 -3
- package/src/Libraries/Components/View/ViewAccessibility.win32.d.ts +5 -5
- package/src/Libraries/Components/View/ViewPropTypes.win32.d.ts +1 -1
- package/types/index.d.ts +2 -6
- package/types/modules/Codegen.d.ts +4 -4
- package/types/modules/globals.d.ts +27 -25
- package/types/public/DeprecatedPropertiesAlias.d.ts +0 -20
- package/types/public/ReactNativeRenderer.d.ts +2 -7
- package/Libraries/Animated/createAnimatedComponentInjection.js +0 -48
- package/Libraries/Animated/createAnimatedComponent_EXPERIMENTAL.js +0 -48
- package/Libraries/Components/AccessibilityInfo/AccessibilityInfo.flow.js +0 -208
- package/Libraries/Components/ActivityIndicator/ActivityIndicator.flow.js +0 -58
- package/Libraries/Components/DatePicker/DatePickerIOS.android.js +0 -47
- package/Libraries/Components/DatePicker/DatePickerIOS.d.ts +0 -92
- package/Libraries/Components/DatePicker/DatePickerIOS.flow.android.js +0 -14
- package/Libraries/Components/DatePicker/DatePickerIOS.flow.ios.js +0 -113
- package/Libraries/Components/DatePicker/DatePickerIOS.ios.js +0 -242
- package/Libraries/Components/DatePicker/DatePickerIOS.win32.js +0 -47
- package/Libraries/Components/DatePicker/RCTDatePickerNativeComponent.js +0 -60
- package/Libraries/Components/DatePickerAndroid/NativeDatePickerAndroid.js +0 -26
- package/Libraries/Components/ProgressViewIOS/ProgressViewIOS.android.js +0 -45
- package/Libraries/Components/ProgressViewIOS/ProgressViewIOS.d.ts +0 -62
- package/Libraries/Components/ProgressViewIOS/ProgressViewIOS.ios.js +0 -75
- package/Libraries/Components/ProgressViewIOS/ProgressViewIOS.win32.js +0 -45
- package/Libraries/Components/ProgressViewIOS/RCTProgressViewNativeComponent.js +0 -33
- package/Libraries/Components/SafeAreaView/SafeAreaView.flow.js +0 -19
- package/Libraries/Components/Slider/Slider.d.ts +0 -132
- package/Libraries/Components/Slider/Slider.js +0 -282
- package/Libraries/Components/Slider/SliderNativeComponent.js +0 -56
- package/Libraries/Components/TextInput/Win32TextInputNativeComponent.js +0 -23
- package/Libraries/Interaction/Batchinator.js +0 -76
- package/Libraries/Interaction/BridgeSpyStallHandler.js +0 -63
- package/Libraries/Interaction/InteractionStallDebugger.js +0 -23
- package/Libraries/Interaction/PanResponder.flow.js +0 -257
- package/Libraries/Lists/CellRenderMask.js +0 -155
- package/Libraries/Lists/ChildListCollection.js +0 -72
- package/Libraries/Lists/StateSafePureComponent.js +0 -85
- package/Libraries/Lists/VirtualizedList.d.ts +0 -347
- package/Libraries/Lists/VirtualizedListCellRenderer.js +0 -259
- package/Libraries/Lists/VirtualizedListProps.js +0 -279
- package/Libraries/Performance/PureComponentDebug.js +0 -74
- package/Libraries/Reliability/UserFlow.js +0 -158
- package/Libraries/Renderer/implementations/ReactNativeRenderer.d.ts +0 -149
- package/Libraries/Renderer/shims/ReactNativeTypes.d.ts +0 -141
- package/Libraries/Utilities/MatrixMath.js +0 -748
- package/Libraries/Utilities/buildStyleInterpolator.js +0 -209
- package/Libraries/Utilities/clamp.js +0 -23
- package/Libraries/Utilities/deprecatedPropType.js +0 -36
- package/Libraries/Utilities/groupByEveryN.js +0 -51
- package/Libraries/Utilities/mergeIntoFast.js +0 -26
- package/Libraries/Utilities/setAndForwardRef.js +0 -71
- package/Libraries/Utilities/truncate.js +0 -51
- package/flow/JSITimerInternalType.js +0 -30
|
@@ -0,0 +1,312 @@
|
|
|
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
|
+
* @format
|
|
8
|
+
* @flow strict
|
|
9
|
+
*/
|
|
10
|
+
|
|
11
|
+
// flowlint unsafe-getters-setters:off
|
|
12
|
+
|
|
13
|
+
import type {HighResTimeStamp, PerformanceEntryType} from './PerformanceEntry';
|
|
14
|
+
import type {PerformanceEntryList} from './PerformanceObserver';
|
|
15
|
+
|
|
16
|
+
import warnOnce from '../Utilities/warnOnce';
|
|
17
|
+
import EventCounts from './EventCounts';
|
|
18
|
+
import MemoryInfo from './MemoryInfo';
|
|
19
|
+
import NativePerformance from './NativePerformance';
|
|
20
|
+
import NativePerformanceObserver from './NativePerformanceObserver';
|
|
21
|
+
import {PerformanceEntry} from './PerformanceEntry';
|
|
22
|
+
import {warnNoNativePerformanceObserver} from './PerformanceObserver';
|
|
23
|
+
import {
|
|
24
|
+
performanceEntryTypeToRaw,
|
|
25
|
+
rawToPerformanceEntry,
|
|
26
|
+
} from './RawPerformanceEntry';
|
|
27
|
+
import {RawPerformanceEntryTypeValues} from './RawPerformanceEntry';
|
|
28
|
+
import ReactNativeStartupTiming from './ReactNativeStartupTiming';
|
|
29
|
+
|
|
30
|
+
type DetailType = mixed;
|
|
31
|
+
|
|
32
|
+
export type PerformanceMarkOptions = {
|
|
33
|
+
detail?: DetailType,
|
|
34
|
+
startTime?: HighResTimeStamp,
|
|
35
|
+
};
|
|
36
|
+
|
|
37
|
+
declare var global: {
|
|
38
|
+
// This value is defined directly via JSI, if available.
|
|
39
|
+
+nativePerformanceNow?: ?() => number,
|
|
40
|
+
};
|
|
41
|
+
|
|
42
|
+
const getCurrentTimeStamp: () => HighResTimeStamp = global.nativePerformanceNow
|
|
43
|
+
? global.nativePerformanceNow
|
|
44
|
+
: () => Date.now();
|
|
45
|
+
|
|
46
|
+
export class PerformanceMark extends PerformanceEntry {
|
|
47
|
+
detail: DetailType;
|
|
48
|
+
|
|
49
|
+
constructor(markName: string, markOptions?: PerformanceMarkOptions) {
|
|
50
|
+
super({
|
|
51
|
+
name: markName,
|
|
52
|
+
entryType: 'mark',
|
|
53
|
+
startTime: markOptions?.startTime ?? getCurrentTimeStamp(),
|
|
54
|
+
duration: 0,
|
|
55
|
+
});
|
|
56
|
+
|
|
57
|
+
if (markOptions) {
|
|
58
|
+
this.detail = markOptions.detail;
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
export type TimeStampOrName = HighResTimeStamp | string;
|
|
64
|
+
|
|
65
|
+
export type PerformanceMeasureOptions = {
|
|
66
|
+
detail?: DetailType,
|
|
67
|
+
start?: TimeStampOrName,
|
|
68
|
+
end?: TimeStampOrName,
|
|
69
|
+
duration?: HighResTimeStamp,
|
|
70
|
+
};
|
|
71
|
+
|
|
72
|
+
export class PerformanceMeasure extends PerformanceEntry {
|
|
73
|
+
detail: DetailType;
|
|
74
|
+
|
|
75
|
+
constructor(measureName: string, measureOptions?: PerformanceMeasureOptions) {
|
|
76
|
+
super({
|
|
77
|
+
name: measureName,
|
|
78
|
+
entryType: 'measure',
|
|
79
|
+
startTime: 0,
|
|
80
|
+
duration: measureOptions?.duration ?? 0,
|
|
81
|
+
});
|
|
82
|
+
|
|
83
|
+
if (measureOptions) {
|
|
84
|
+
this.detail = measureOptions.detail;
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
function warnNoNativePerformance() {
|
|
90
|
+
warnOnce(
|
|
91
|
+
'missing-native-performance',
|
|
92
|
+
'Missing native implementation of Performance',
|
|
93
|
+
);
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
/**
|
|
97
|
+
* Partial implementation of the Performance interface for RN,
|
|
98
|
+
* corresponding to the standard in
|
|
99
|
+
* https://www.w3.org/TR/user-timing/#extensions-performance-interface
|
|
100
|
+
*/
|
|
101
|
+
export default class Performance {
|
|
102
|
+
eventCounts: EventCounts = new EventCounts();
|
|
103
|
+
|
|
104
|
+
// Get the current JS memory information.
|
|
105
|
+
get memory(): MemoryInfo {
|
|
106
|
+
if (NativePerformance?.getSimpleMemoryInfo) {
|
|
107
|
+
// JSI API implementations may have different variants of names for the JS
|
|
108
|
+
// heap information we need here. We will parse the result based on our
|
|
109
|
+
// guess of the implementation for now.
|
|
110
|
+
const memoryInfo = NativePerformance.getSimpleMemoryInfo();
|
|
111
|
+
if (memoryInfo.hasOwnProperty('hermes_heapSize')) {
|
|
112
|
+
// We got memory information from Hermes
|
|
113
|
+
const {
|
|
114
|
+
hermes_heapSize: totalJSHeapSize,
|
|
115
|
+
hermes_allocatedBytes: usedJSHeapSize,
|
|
116
|
+
} = memoryInfo;
|
|
117
|
+
|
|
118
|
+
return new MemoryInfo({
|
|
119
|
+
jsHeapSizeLimit: null, // We don't know the heap size limit from Hermes.
|
|
120
|
+
totalJSHeapSize,
|
|
121
|
+
usedJSHeapSize,
|
|
122
|
+
});
|
|
123
|
+
} else {
|
|
124
|
+
// JSC and V8 has no native implementations for memory information in JSI::Instrumentation
|
|
125
|
+
return new MemoryInfo();
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
return new MemoryInfo();
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
// Startup metrics is not used in web, but only in React Native.
|
|
133
|
+
get reactNativeStartupTiming(): ReactNativeStartupTiming {
|
|
134
|
+
if (NativePerformance?.getReactNativeStartupTiming) {
|
|
135
|
+
return new ReactNativeStartupTiming(
|
|
136
|
+
NativePerformance.getReactNativeStartupTiming(),
|
|
137
|
+
);
|
|
138
|
+
}
|
|
139
|
+
return new ReactNativeStartupTiming();
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
mark(
|
|
143
|
+
markName: string,
|
|
144
|
+
markOptions?: PerformanceMarkOptions,
|
|
145
|
+
): PerformanceMark {
|
|
146
|
+
const mark = new PerformanceMark(markName, markOptions);
|
|
147
|
+
|
|
148
|
+
if (NativePerformance?.mark) {
|
|
149
|
+
NativePerformance.mark(markName, mark.startTime, mark.duration);
|
|
150
|
+
} else {
|
|
151
|
+
warnNoNativePerformance();
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
return mark;
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
clearMarks(markName?: string): void {
|
|
158
|
+
if (!NativePerformanceObserver?.clearEntries) {
|
|
159
|
+
warnNoNativePerformanceObserver();
|
|
160
|
+
return;
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
NativePerformanceObserver?.clearEntries(
|
|
164
|
+
RawPerformanceEntryTypeValues.MARK,
|
|
165
|
+
markName,
|
|
166
|
+
);
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
measure(
|
|
170
|
+
measureName: string,
|
|
171
|
+
startMarkOrOptions?: string | PerformanceMeasureOptions,
|
|
172
|
+
endMark?: string,
|
|
173
|
+
): PerformanceMeasure {
|
|
174
|
+
let options;
|
|
175
|
+
let startMarkName,
|
|
176
|
+
endMarkName = endMark,
|
|
177
|
+
duration,
|
|
178
|
+
startTime = 0,
|
|
179
|
+
endTime = 0;
|
|
180
|
+
|
|
181
|
+
if (typeof startMarkOrOptions === 'string') {
|
|
182
|
+
startMarkName = startMarkOrOptions;
|
|
183
|
+
} else if (startMarkOrOptions !== undefined) {
|
|
184
|
+
options = startMarkOrOptions;
|
|
185
|
+
if (endMark !== undefined) {
|
|
186
|
+
throw new TypeError(
|
|
187
|
+
"Performance.measure: Can't have both options and endMark",
|
|
188
|
+
);
|
|
189
|
+
}
|
|
190
|
+
if (options.start === undefined && options.end === undefined) {
|
|
191
|
+
throw new TypeError(
|
|
192
|
+
'Performance.measure: Must have at least one of start/end specified in options',
|
|
193
|
+
);
|
|
194
|
+
}
|
|
195
|
+
if (
|
|
196
|
+
options.start !== undefined &&
|
|
197
|
+
options.end !== undefined &&
|
|
198
|
+
options.duration !== undefined
|
|
199
|
+
) {
|
|
200
|
+
throw new TypeError(
|
|
201
|
+
"Performance.measure: Can't have both start/end and duration explicitly in options",
|
|
202
|
+
);
|
|
203
|
+
}
|
|
204
|
+
|
|
205
|
+
if (typeof options.start === 'number') {
|
|
206
|
+
startTime = options.start;
|
|
207
|
+
} else {
|
|
208
|
+
startMarkName = options.start;
|
|
209
|
+
}
|
|
210
|
+
|
|
211
|
+
if (typeof options.end === 'number') {
|
|
212
|
+
endTime = options.end;
|
|
213
|
+
} else {
|
|
214
|
+
endMarkName = options.end;
|
|
215
|
+
}
|
|
216
|
+
|
|
217
|
+
duration = options.duration ?? duration;
|
|
218
|
+
}
|
|
219
|
+
|
|
220
|
+
const measure = new PerformanceMeasure(measureName, options);
|
|
221
|
+
|
|
222
|
+
if (NativePerformance?.measure) {
|
|
223
|
+
NativePerformance.measure(
|
|
224
|
+
measureName,
|
|
225
|
+
startTime,
|
|
226
|
+
endTime,
|
|
227
|
+
duration,
|
|
228
|
+
startMarkName,
|
|
229
|
+
endMarkName,
|
|
230
|
+
);
|
|
231
|
+
} else {
|
|
232
|
+
warnNoNativePerformance();
|
|
233
|
+
}
|
|
234
|
+
|
|
235
|
+
return measure;
|
|
236
|
+
}
|
|
237
|
+
|
|
238
|
+
clearMeasures(measureName?: string): void {
|
|
239
|
+
if (!NativePerformanceObserver?.clearEntries) {
|
|
240
|
+
warnNoNativePerformanceObserver();
|
|
241
|
+
return;
|
|
242
|
+
}
|
|
243
|
+
|
|
244
|
+
NativePerformanceObserver?.clearEntries(
|
|
245
|
+
RawPerformanceEntryTypeValues.MEASURE,
|
|
246
|
+
measureName,
|
|
247
|
+
);
|
|
248
|
+
}
|
|
249
|
+
|
|
250
|
+
/**
|
|
251
|
+
* Returns a double, measured in milliseconds.
|
|
252
|
+
* https://developer.mozilla.org/en-US/docs/Web/API/Performance/now
|
|
253
|
+
*/
|
|
254
|
+
now(): HighResTimeStamp {
|
|
255
|
+
return getCurrentTimeStamp();
|
|
256
|
+
}
|
|
257
|
+
|
|
258
|
+
/**
|
|
259
|
+
* An extension that allows to get back to JS all currently logged marks/measures
|
|
260
|
+
* (in our case, be it from JS or native), see
|
|
261
|
+
* https://www.w3.org/TR/performance-timeline/#extensions-to-the-performance-interface
|
|
262
|
+
*/
|
|
263
|
+
getEntries(): PerformanceEntryList {
|
|
264
|
+
if (!NativePerformanceObserver?.clearEntries) {
|
|
265
|
+
warnNoNativePerformanceObserver();
|
|
266
|
+
return [];
|
|
267
|
+
}
|
|
268
|
+
return NativePerformanceObserver.getEntries().map(rawToPerformanceEntry);
|
|
269
|
+
}
|
|
270
|
+
|
|
271
|
+
getEntriesByType(entryType: PerformanceEntryType): PerformanceEntryList {
|
|
272
|
+
if (entryType !== 'mark' && entryType !== 'measure') {
|
|
273
|
+
console.log(
|
|
274
|
+
`Performance.getEntriesByType: Only valid for 'mark' and 'measure' entry types, got ${entryType}`,
|
|
275
|
+
);
|
|
276
|
+
return [];
|
|
277
|
+
}
|
|
278
|
+
|
|
279
|
+
if (!NativePerformanceObserver?.clearEntries) {
|
|
280
|
+
warnNoNativePerformanceObserver();
|
|
281
|
+
return [];
|
|
282
|
+
}
|
|
283
|
+
return NativePerformanceObserver.getEntries(
|
|
284
|
+
performanceEntryTypeToRaw(entryType),
|
|
285
|
+
).map(rawToPerformanceEntry);
|
|
286
|
+
}
|
|
287
|
+
|
|
288
|
+
getEntriesByName(
|
|
289
|
+
entryName: string,
|
|
290
|
+
entryType?: PerformanceEntryType,
|
|
291
|
+
): PerformanceEntryList {
|
|
292
|
+
if (
|
|
293
|
+
entryType !== undefined &&
|
|
294
|
+
entryType !== 'mark' &&
|
|
295
|
+
entryType !== 'measure'
|
|
296
|
+
) {
|
|
297
|
+
console.log(
|
|
298
|
+
`Performance.getEntriesByName: Only valid for 'mark' and 'measure' entry types, got ${entryType}`,
|
|
299
|
+
);
|
|
300
|
+
return [];
|
|
301
|
+
}
|
|
302
|
+
|
|
303
|
+
if (!NativePerformanceObserver?.clearEntries) {
|
|
304
|
+
warnNoNativePerformanceObserver();
|
|
305
|
+
return [];
|
|
306
|
+
}
|
|
307
|
+
return NativePerformanceObserver.getEntries(
|
|
308
|
+
entryType != null ? performanceEntryTypeToRaw(entryType) : undefined,
|
|
309
|
+
entryName,
|
|
310
|
+
).map(rawToPerformanceEntry);
|
|
311
|
+
}
|
|
312
|
+
}
|
|
@@ -0,0 +1,45 @@
|
|
|
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
|
+
* @format
|
|
8
|
+
* @flow strict
|
|
9
|
+
*/
|
|
10
|
+
|
|
11
|
+
export type HighResTimeStamp = number;
|
|
12
|
+
export type PerformanceEntryType = 'mark' | 'measure' | 'event';
|
|
13
|
+
|
|
14
|
+
export class PerformanceEntry {
|
|
15
|
+
name: string;
|
|
16
|
+
entryType: PerformanceEntryType;
|
|
17
|
+
startTime: HighResTimeStamp;
|
|
18
|
+
duration: HighResTimeStamp;
|
|
19
|
+
|
|
20
|
+
constructor(init: {
|
|
21
|
+
name: string,
|
|
22
|
+
entryType: PerformanceEntryType,
|
|
23
|
+
startTime: HighResTimeStamp,
|
|
24
|
+
duration: HighResTimeStamp,
|
|
25
|
+
}) {
|
|
26
|
+
this.name = init.name;
|
|
27
|
+
this.entryType = init.entryType;
|
|
28
|
+
this.startTime = init.startTime;
|
|
29
|
+
this.duration = init.duration;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
toJSON(): {
|
|
33
|
+
name: string,
|
|
34
|
+
entryType: PerformanceEntryType,
|
|
35
|
+
startTime: HighResTimeStamp,
|
|
36
|
+
duration: HighResTimeStamp,
|
|
37
|
+
} {
|
|
38
|
+
return {
|
|
39
|
+
name: this.name,
|
|
40
|
+
entryType: this.entryType,
|
|
41
|
+
startTime: this.startTime,
|
|
42
|
+
duration: this.duration,
|
|
43
|
+
};
|
|
44
|
+
}
|
|
45
|
+
}
|
|
@@ -0,0 +1,38 @@
|
|
|
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
|
+
* @format
|
|
8
|
+
* @flow strict
|
|
9
|
+
*/
|
|
10
|
+
|
|
11
|
+
import type {HighResTimeStamp} from './PerformanceEntry';
|
|
12
|
+
|
|
13
|
+
import {PerformanceEntry} from './PerformanceEntry';
|
|
14
|
+
|
|
15
|
+
export class PerformanceEventTiming extends PerformanceEntry {
|
|
16
|
+
processingStart: HighResTimeStamp;
|
|
17
|
+
processingEnd: HighResTimeStamp;
|
|
18
|
+
interactionId: number;
|
|
19
|
+
|
|
20
|
+
constructor(init: {
|
|
21
|
+
name: string,
|
|
22
|
+
startTime?: HighResTimeStamp,
|
|
23
|
+
duration?: HighResTimeStamp,
|
|
24
|
+
processingStart?: HighResTimeStamp,
|
|
25
|
+
processingEnd?: HighResTimeStamp,
|
|
26
|
+
interactionId?: number,
|
|
27
|
+
}) {
|
|
28
|
+
super({
|
|
29
|
+
name: init.name,
|
|
30
|
+
entryType: 'event',
|
|
31
|
+
startTime: init.startTime ?? 0,
|
|
32
|
+
duration: init.duration ?? 0,
|
|
33
|
+
});
|
|
34
|
+
this.processingStart = init.processingStart ?? 0;
|
|
35
|
+
this.processingEnd = init.processingEnd ?? 0;
|
|
36
|
+
this.interactionId = init.interactionId ?? 0;
|
|
37
|
+
}
|
|
38
|
+
}
|