@office-iss/react-native-win32 0.76.2 → 0.77.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/.eslintignore +1 -1
- package/.flowconfig +5 -1
- package/CHANGELOG.json +179 -53
- package/CHANGELOG.md +82 -28
- package/Libraries/ActionSheetIOS/ActionSheetIOS.d.ts +1 -0
- package/Libraries/ActionSheetIOS/ActionSheetIOS.js +13 -0
- package/Libraries/Animated/AnimatedEvent.js +1 -1
- package/Libraries/Animated/AnimatedImplementation.js +2 -2
- package/Libraries/Animated/NativeAnimatedAllowlist.js +20 -9
- package/Libraries/Animated/animations/Animation.js +60 -25
- package/Libraries/Animated/animations/DecayAnimation.js +26 -38
- package/Libraries/Animated/animations/SpringAnimation.js +33 -39
- package/Libraries/Animated/animations/TimingAnimation.js +34 -42
- package/Libraries/Animated/components/AnimatedFlatList.js +1 -1
- package/Libraries/Animated/components/AnimatedSectionList.js +3 -1
- package/Libraries/Animated/createAnimatedComponent.js +60 -33
- package/Libraries/Animated/nodes/AnimatedColor.js +1 -1
- package/Libraries/Animated/nodes/AnimatedInterpolation.js +1 -1
- package/Libraries/Animated/nodes/AnimatedNode.js +39 -45
- package/Libraries/Animated/nodes/AnimatedObject.js +13 -3
- package/Libraries/Animated/nodes/AnimatedProps.js +104 -46
- package/Libraries/Animated/nodes/AnimatedStyle.js +116 -39
- package/Libraries/Animated/nodes/AnimatedTransform.js +56 -23
- package/Libraries/Animated/nodes/AnimatedValue.js +1 -1
- package/Libraries/Animated/nodes/AnimatedWithChildren.js +1 -3
- package/Libraries/Animated/useAnimatedProps.js +41 -35
- package/Libraries/Components/AccessibilityInfo/AccessibilityInfo.d.ts +19 -3
- package/Libraries/Components/AccessibilityInfo/AccessibilityInfo.js +77 -5
- package/Libraries/Components/AccessibilityInfo/AccessibilityInfo.win32.js +82 -5
- package/Libraries/Components/ActivityIndicator/ActivityIndicator.js +4 -4
- package/Libraries/Components/Button.js +9 -4
- package/Libraries/Components/Button.win32.js +12 -4
- package/Libraries/Components/DrawerAndroid/DrawerLayoutAndroid.js +3 -1
- package/Libraries/Components/Keyboard/KeyboardAvoidingView.js +7 -0
- package/Libraries/Components/Pressable/Pressable.js +4 -4
- package/Libraries/Components/Pressable/Pressable.win32.js +4 -4
- package/Libraries/Components/ProgressBarAndroid/ProgressBarAndroid.android.js +13 -7
- package/Libraries/Components/RefreshControl/__mocks__/RefreshControlMock.js +3 -2
- package/Libraries/Components/SafeAreaView/SafeAreaView.js +4 -4
- package/Libraries/Components/SafeAreaView/SafeAreaView.win32.js +4 -4
- package/Libraries/Components/ScrollView/AndroidHorizontalScrollViewNativeComponent.js +0 -1
- package/Libraries/Components/ScrollView/ScrollView.js +49 -88
- package/Libraries/Components/ScrollView/ScrollViewCommands.js +1 -1
- package/Libraries/Components/ScrollView/ScrollViewContext.js +2 -0
- package/Libraries/Components/ScrollView/ScrollViewNativeComponent.js +0 -2
- package/Libraries/Components/ScrollView/ScrollViewStickyHeader.js +8 -9
- package/Libraries/Components/Switch/Switch.js +8 -6
- 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/RCTTextInputViewConfig.js +2 -1
- package/Libraries/Components/TextInput/TextInput.d.ts +27 -4
- package/Libraries/Components/TextInput/TextInput.flow.js +36 -19
- package/Libraries/Components/TextInput/TextInput.js +37 -13
- package/Libraries/Components/TextInput/TextInput.win32.js +40 -15
- package/Libraries/Components/TextInput/TextInputState.js +11 -13
- package/Libraries/Components/TextInput/TextInputState.win32.js +13 -16
- package/Libraries/Components/TextInput/Win32TextInputNativeComponent.js +3 -0
- package/Libraries/Components/Touchable/BoundingDimensions.js +11 -3
- package/Libraries/Components/Touchable/Position.js +7 -2
- package/Libraries/Components/Touchable/Touchable.js +4 -0
- package/Libraries/Components/Touchable/Touchable.win32.js +4 -0
- package/Libraries/Components/Touchable/TouchableBounce.js +6 -2
- package/Libraries/Components/Touchable/TouchableHighlight.js +5 -5
- package/Libraries/Components/Touchable/TouchableOpacity.js +6 -5
- package/Libraries/Components/Touchable/TouchableWithoutFeedback.js +1 -2
- package/Libraries/Components/View/ReactNativeStyleAttributes.js +6 -1
- package/Libraries/Components/View/View.js +4 -4
- package/Libraries/Components/View/View.win32.js +4 -4
- package/Libraries/Components/View/ViewNativeComponent.js +6 -98
- package/Libraries/Components/View/ViewPropTypes.d.ts +7 -0
- package/Libraries/Components/View/ViewPropTypes.js +0 -3
- package/Libraries/Components/View/ViewPropTypes.win32.js +0 -3
- package/Libraries/Components/View/ViewWin32.js +1 -0
- package/Libraries/Core/ExceptionsManager.js +50 -29
- package/Libraries/Core/ReactNativeVersion.js +3 -3
- package/Libraries/Core/__mocks__/NativeExceptionsManager.js +0 -1
- package/Libraries/Core/setUpBatchedBridge.js +1 -10
- package/Libraries/Core/setUpDeveloperTools.js +1 -5
- package/Libraries/Core/setUpErrorHandling.js +20 -18
- package/Libraries/Core/setUpReactDevTools.js +107 -8
- package/Libraries/Core/setUpSegmentFetcher.js +1 -0
- package/Libraries/Core/setUpTimers.js +21 -18
- package/Libraries/Debugging/DebuggingOverlay.js +4 -5
- package/Libraries/Image/AssetSourceResolver.js +12 -1
- package/Libraries/Image/Image.android.js +1 -5
- package/Libraries/Image/Image.d.ts +20 -29
- package/Libraries/Image/Image.ios.js +0 -2
- package/Libraries/Image/Image.win32.js +0 -2
- package/Libraries/Image/ImageBackground.js +2 -5
- package/Libraries/Image/ImageProps.js +7 -6
- package/Libraries/Image/ImageResizeMode.d.ts +8 -1
- package/Libraries/Image/ImageResizeMode.js +4 -1
- package/Libraries/Image/ImageSource.d.ts +0 -2
- package/Libraries/Image/ImageSource.js +0 -2
- package/Libraries/Image/ImageTypes.flow.js +11 -9
- package/Libraries/Image/ImageUtils.js +6 -3
- package/Libraries/Image/ImageViewNativeComponent.js +5 -3
- package/Libraries/Inspector/Inspector.js +1 -0
- package/Libraries/Inspector/Inspector.win32.js +2 -1
- package/Libraries/Inspector/NetworkOverlay.js +4 -0
- package/Libraries/Inspector/ReactDevToolsOverlay.js +8 -14
- package/Libraries/Inspector/getInspectorDataForViewAtPoint.js +3 -5
- package/Libraries/Interaction/InteractionManager.js +6 -1
- package/Libraries/Interaction/InteractionManagerStub.js +176 -0
- package/Libraries/Interaction/TouchHistoryMath.js +22 -19
- package/Libraries/JSInspector/NetworkAgent.js +1 -1
- package/Libraries/Lists/FlatList.d.ts +1 -2
- package/Libraries/Lists/FlatList.js +2 -2
- package/Libraries/Lists/SectionListModern.js +7 -7
- package/Libraries/Lists/__flowtests__/FlatList-flowtest.js +2 -2
- package/Libraries/Lists/__flowtests__/SectionList-flowtest.js +1 -1
- package/Libraries/LogBox/Data/LogBoxData.js +3 -3
- package/Libraries/LogBox/LogBox.js +18 -5
- package/Libraries/LogBox/LogBoxInspectorContainer.js +1 -1
- package/Libraries/LogBox/LogBoxNotificationContainer.js +2 -2
- package/Libraries/LogBox/UI/AnsiHighlight.js +26 -17
- package/Libraries/LogBox/UI/LogBoxInspectorCodeFrame.js +6 -1
- package/Libraries/LogBox/UI/LogBoxInspectorCodeFrame.win32.js +6 -1
- package/Libraries/LogBox/UI/LogBoxInspectorHeader.js +1 -1
- package/Libraries/LogBox/UI/LogBoxInspectorHeader.win32.js +1 -1
- package/Libraries/LogBox/UI/LogBoxInspectorStackFrames.js +1 -1
- package/Libraries/LogBox/UI/LogBoxMessage.js +2 -2
- package/Libraries/Modal/Modal.d.ts +12 -0
- package/Libraries/Modal/Modal.js +31 -4
- package/Libraries/NativeComponent/BaseViewConfig.android.js +72 -1
- package/Libraries/NativeComponent/BaseViewConfig.ios.js +2 -1
- package/Libraries/NativeComponent/BaseViewConfig.win32.js +3 -11
- package/Libraries/NativeComponent/NativeComponentRegistry.js +3 -3
- package/Libraries/NativeComponent/StaticViewConfigValidator.js +0 -1
- package/Libraries/Network/FormData.js +11 -3
- package/Libraries/Network/XHRInterceptor.js +63 -14
- package/Libraries/Network/XMLHttpRequest.js +26 -1
- package/Libraries/NewAppScreen/components/HermesBadge.js +1 -1
- package/Libraries/PermissionsAndroid/PermissionsAndroid.d.ts +49 -2
- package/Libraries/PermissionsAndroid/PermissionsAndroid.js +4 -4
- package/Libraries/Pressability/HoverState.js +2 -0
- package/Libraries/Pressability/HoverState.win32.js +2 -0
- package/Libraries/Pressability/Pressability.js +2 -3
- package/Libraries/Pressability/Pressability.win32.js +2 -3
- package/Libraries/Pressability/usePressability.js +4 -1
- package/Libraries/ReactNative/AppContainer.js +1 -1
- package/Libraries/ReactNative/AppRegistry.js +1 -11
- package/Libraries/ReactNative/DisplayMode.js +1 -1
- package/Libraries/ReactNative/ReactFabricPublicInstance/ReactFabricHostComponent.js +2 -3
- package/Libraries/ReactNative/RendererImplementation.js +18 -17
- package/Libraries/ReactNative/getCachedComponentWithDebugName.js +1 -3
- package/Libraries/ReactNative/renderApplication.js +9 -8
- package/Libraries/ReactNative/requireNativeComponent.js +5 -2
- package/Libraries/Renderer/shims/ReactFabric.js +3 -3
- package/Libraries/Renderer/shims/ReactFeatureFlags.js +2 -2
- package/Libraries/Renderer/shims/ReactNative.js +3 -3
- package/Libraries/Renderer/shims/ReactNativeTypes.js +22 -35
- package/Libraries/Renderer/shims/ReactNativeViewConfigRegistry.js +5 -6
- package/Libraries/Renderer/shims/createReactNativeComponentClass.js +2 -2
- package/Libraries/StyleSheet/StyleSheet.js +7 -1
- package/Libraries/StyleSheet/StyleSheet.win32.js +7 -1
- package/Libraries/StyleSheet/StyleSheetTypes.d.ts +13 -2
- package/Libraries/StyleSheet/StyleSheetTypes.js +24 -6
- package/Libraries/StyleSheet/processBackgroundImage.js +87 -110
- package/Libraries/StyleSheet/processTransform.js +3 -34
- package/Libraries/Text/Text.js +248 -249
- package/Libraries/Text/Text.win32.js +282 -295
- package/Libraries/Text/TextNativeComponent.js +0 -1
- package/Libraries/TurboModule/TurboModuleRegistry.js +5 -5
- package/Libraries/Types/CoreEventTypes.d.ts +3 -10
- package/Libraries/Types/CoreEventTypes.js +4 -6
- package/Libraries/Types/CoreEventTypes.win32.js +4 -6
- package/Libraries/Utilities/Appearance.js +3 -1
- package/Libraries/Utilities/BackHandler.android.js +6 -18
- package/Libraries/Utilities/BackHandler.d.ts +0 -4
- package/Libraries/Utilities/BackHandler.ios.js +0 -7
- package/Libraries/Utilities/BackHandler.win32.js +6 -18
- package/Libraries/Utilities/FocusManager.win32.js +1 -1
- package/Libraries/Utilities/HMRClient.js +3 -4
- package/Libraries/Utilities/Platform.flow.js +2 -2
- package/Libraries/Utilities/Platform.flow.win32.js +3 -2
- package/Libraries/Utilities/__mocks__/BackHandler.js +3 -8
- package/Libraries/Utilities/codegenNativeComponent.js +1 -1
- package/Libraries/Utilities/useMergeRefs.js +26 -7
- package/Libraries/WebSocket/WebSocketEvent.js +4 -1
- package/Libraries/WebSocket/WebSocketInterceptor.js +31 -13
- package/Libraries/__flowtests__/ReactNativeTypes-flowtest.js +6 -5
- package/Libraries/promiseRejectionTrackingOptions.js +1 -1
- package/index.js +10 -3
- package/index.win32.js +10 -3
- package/jest/setup.js +36 -1
- package/overrides.json +37 -37
- package/package.json +20 -20
- package/src/private/animated/NativeAnimatedHelper.js +18 -16
- package/src/private/animated/NativeAnimatedHelper.win32.js +18 -15
- package/src/private/animated/useAnimatedPropsMemo.js +356 -0
- package/src/private/components/HScrollViewNativeComponents.js +1 -27
- package/src/private/components/SafeAreaView_INTERNAL_DO_NOT_USE.js +11 -8
- package/src/private/components/VScrollViewNativeComponents.js +2 -25
- package/src/private/debugging/ReactDevToolsSettingsManager.android.js +20 -0
- package/src/private/debugging/ReactDevToolsSettingsManager.ios.js +30 -0
- package/src/private/debugging/ReactDevToolsSettingsManager.win32.js +20 -0
- package/src/private/{fusebox → debugging}/setUpFuseboxReactDevToolsDispatcher.js +6 -0
- package/src/private/devmenu/DevMenu.d.ts +20 -0
- package/src/private/devmenu/DevMenu.js +31 -0
- package/src/private/featureflags/ReactNativeFeatureFlags.js +95 -86
- package/src/private/featureflags/ReactNativeFeatureFlagsBase.js +8 -2
- package/src/private/featureflags/specs/NativeReactNativeFeatureFlags.js +17 -19
- package/src/private/fusebox/specs/NativeReactDevToolsRuntimeSettingsModule.js +34 -0
- package/src/private/setup/setUpDOM.js +14 -6
- package/src/private/setup/setUpMutationObserver.js +5 -0
- package/src/private/specs/components/AndroidHorizontalScrollContentViewNativeComponent.js +1 -0
- package/src/private/specs/components/RCTModalHostViewNativeComponent.js +8 -0
- package/src/private/specs/modules/NativeAccessibilityInfo.js +9 -0
- package/src/private/specs/modules/NativeAccessibilityInfoWin32.js +9 -0
- package/src/private/specs/modules/NativeAccessibilityManager.js +4 -0
- package/src/private/specs/modules/NativeActionSheetManager.js +2 -0
- package/src/private/specs/modules/NativeAppearance.js +4 -10
- package/src/private/specs/modules/NativeExceptionsManager.js +0 -12
- package/src/private/specs/modules/{NativeDevToolsSettingsManager.js → NativeReactDevToolsSettingsManager.js} +3 -5
- package/src/private/webapis/dom/geometry/DOMRect.js +2 -2
- package/src/private/webapis/dom/geometry/DOMRectReadOnly.js +2 -2
- package/src/private/webapis/dom/nodes/ReactNativeElement.js +2 -3
- package/src/private/webapis/intersectionobserver/IntersectionObserver.js +102 -11
- package/src/private/webapis/intersectionobserver/IntersectionObserverEntry.js +26 -0
- package/src/private/webapis/intersectionobserver/IntersectionObserverManager.js +1 -0
- package/src/private/webapis/intersectionobserver/specs/NativeIntersectionObserver.js +1 -0
- package/src/private/webapis/intersectionobserver/specs/__mocks__/NativeIntersectionObserver.js +9 -0
- package/src/private/webapis/performance/EventTiming.js +13 -8
- package/src/private/webapis/performance/Performance.js +66 -73
- package/src/private/webapis/performance/PerformanceEntry.js +2 -5
- package/src/private/webapis/performance/PerformanceObserver.js +65 -164
- package/src/private/webapis/performance/RawPerformanceEntry.js +1 -1
- package/src/private/webapis/performance/UserTiming.js +11 -7
- package/src/private/webapis/performance/Utilities.js +18 -0
- package/src/private/webapis/performance/specs/NativePerformance.js +71 -2
- package/src/private/webapis/performance/specs/__mocks__/NativePerformanceMock.js +267 -0
- package/src-win/Libraries/Components/AccessibilityInfo/AccessibilityInfo.d.ts +19 -3
- package/src-win/Libraries/Components/View/ViewPropTypes.d.ts +7 -0
- package/types/index.d.ts +1 -1
- package/types/public/ReactNativeTypes.d.ts +4 -8
- package/Libraries/DevToolsSettings/DevToolsSettingsManager.android.js +0 -35
- package/Libraries/DevToolsSettings/DevToolsSettingsManager.d.ts +0 -20
- package/Libraries/DevToolsSettings/DevToolsSettingsManager.ios.js +0 -49
- package/Libraries/DevToolsSettings/DevToolsSettingsManager.win32.js +0 -35
- package/Libraries/DevToolsSettings/NativeDevToolsSettingsManager.js +0 -13
- package/Libraries/ReactNative/ReactFabricInternals.js +0 -17
- package/src/private/components/useSyncOnScroll.js +0 -48
- package/src/private/webapis/performance/specs/NativePerformanceObserver.js +0 -61
- package/src/private/webapis/performance/specs/__mocks__/NativePerformance.js +0 -67
- package/src/private/webapis/performance/specs/__mocks__/NativePerformanceObserver.js +0 -127
- package/types/experimental.d.ts +0 -59
- /package/src/private/{fusebox → debugging}/FuseboxSessionObserver.js +0 -0
|
@@ -12,25 +12,21 @@
|
|
|
12
12
|
|
|
13
13
|
import type {
|
|
14
14
|
DOMHighResTimeStamp,
|
|
15
|
+
PerformanceEntryList,
|
|
15
16
|
PerformanceEntryType,
|
|
16
17
|
} from './PerformanceEntry';
|
|
17
|
-
import type {PerformanceEntryList} from './PerformanceObserver';
|
|
18
18
|
import type {DetailType, PerformanceMarkOptions} from './UserTiming';
|
|
19
19
|
|
|
20
|
-
import warnOnce from '../../../../Libraries/Utilities/warnOnce';
|
|
21
20
|
import {EventCounts} from './EventTiming';
|
|
22
21
|
import MemoryInfo from './MemoryInfo';
|
|
23
|
-
import {ALWAYS_LOGGED_ENTRY_TYPES} from './PerformanceEntry';
|
|
24
|
-
import {warnNoNativePerformanceObserver} from './PerformanceObserver';
|
|
25
22
|
import {
|
|
26
23
|
performanceEntryTypeToRaw,
|
|
27
24
|
rawToPerformanceEntry,
|
|
28
25
|
} from './RawPerformanceEntry';
|
|
29
|
-
import {RawPerformanceEntryTypeValues} from './RawPerformanceEntry';
|
|
30
26
|
import ReactNativeStartupTiming from './ReactNativeStartupTiming';
|
|
31
27
|
import NativePerformance from './specs/NativePerformance';
|
|
32
|
-
import NativePerformanceObserver from './specs/NativePerformanceObserver';
|
|
33
28
|
import {PerformanceMark, PerformanceMeasure} from './UserTiming';
|
|
29
|
+
import {warnNoNativePerformance} from './Utilities';
|
|
34
30
|
|
|
35
31
|
declare var global: {
|
|
36
32
|
// This value is defined directly via JSI, if available.
|
|
@@ -40,24 +36,6 @@ declare var global: {
|
|
|
40
36
|
const getCurrentTimeStamp: () => DOMHighResTimeStamp =
|
|
41
37
|
NativePerformance?.now ?? global.nativePerformanceNow ?? (() => Date.now());
|
|
42
38
|
|
|
43
|
-
// We want some of the performance entry types to be always logged,
|
|
44
|
-
// even if they are not currently observed - this is either to be able to
|
|
45
|
-
// retrieve them at any time via Performance.getEntries* or to refer by other entries
|
|
46
|
-
// (such as when measures may refer to marks, even if the latter are not observed)
|
|
47
|
-
if (NativePerformanceObserver?.setIsBuffered) {
|
|
48
|
-
NativePerformanceObserver?.setIsBuffered(
|
|
49
|
-
ALWAYS_LOGGED_ENTRY_TYPES.map(performanceEntryTypeToRaw),
|
|
50
|
-
true,
|
|
51
|
-
);
|
|
52
|
-
}
|
|
53
|
-
|
|
54
|
-
function warnNoNativePerformance() {
|
|
55
|
-
warnOnce(
|
|
56
|
-
'missing-native-performance',
|
|
57
|
-
'Missing native implementation of Performance',
|
|
58
|
-
);
|
|
59
|
-
}
|
|
60
|
-
|
|
61
39
|
export type PerformanceMeasureOptions = {
|
|
62
40
|
detail?: DetailType,
|
|
63
41
|
start?: DOMHighResTimeStamp,
|
|
@@ -65,6 +43,9 @@ export type PerformanceMeasureOptions = {
|
|
|
65
43
|
end?: DOMHighResTimeStamp,
|
|
66
44
|
};
|
|
67
45
|
|
|
46
|
+
const ENTRY_TYPES_AVAILABLE_FROM_TIMELINE: $ReadOnlyArray<PerformanceEntryType> =
|
|
47
|
+
['mark', 'measure'];
|
|
48
|
+
|
|
68
49
|
/**
|
|
69
50
|
* Partial implementation of the Performance interface for RN,
|
|
70
51
|
* corresponding to the standard in
|
|
@@ -128,27 +109,33 @@ export default class Performance {
|
|
|
128
109
|
markName: string,
|
|
129
110
|
markOptions?: PerformanceMarkOptions,
|
|
130
111
|
): PerformanceMark {
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
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);
|
|
135
121
|
} else {
|
|
136
122
|
warnNoNativePerformance();
|
|
123
|
+
computedStartTime = performance.now();
|
|
137
124
|
}
|
|
138
125
|
|
|
139
|
-
return
|
|
126
|
+
return new PerformanceMark(markName, {
|
|
127
|
+
startTime: computedStartTime,
|
|
128
|
+
detail: markOptions?.detail,
|
|
129
|
+
});
|
|
140
130
|
}
|
|
141
131
|
|
|
142
132
|
clearMarks(markName?: string): void {
|
|
143
|
-
if (!
|
|
144
|
-
|
|
133
|
+
if (!NativePerformance?.clearMarks) {
|
|
134
|
+
warnNoNativePerformance();
|
|
145
135
|
return;
|
|
146
136
|
}
|
|
147
137
|
|
|
148
|
-
|
|
149
|
-
RawPerformanceEntryTypeValues.MARK,
|
|
150
|
-
markName,
|
|
151
|
-
);
|
|
138
|
+
NativePerformance.clearMarks(markName);
|
|
152
139
|
}
|
|
153
140
|
|
|
154
141
|
measure(
|
|
@@ -165,6 +152,7 @@ export default class Performance {
|
|
|
165
152
|
|
|
166
153
|
if (typeof startMarkOrOptions === 'string') {
|
|
167
154
|
startMarkName = startMarkOrOptions;
|
|
155
|
+
options = {};
|
|
168
156
|
} else if (startMarkOrOptions !== undefined) {
|
|
169
157
|
options = startMarkOrOptions;
|
|
170
158
|
if (endMark !== undefined) {
|
|
@@ -202,15 +190,20 @@ export default class Performance {
|
|
|
202
190
|
duration = options.duration ?? duration;
|
|
203
191
|
}
|
|
204
192
|
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
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) {
|
|
214
207
|
NativePerformance.measure(
|
|
215
208
|
measureName,
|
|
216
209
|
startTime,
|
|
@@ -223,19 +216,22 @@ export default class Performance {
|
|
|
223
216
|
warnNoNativePerformance();
|
|
224
217
|
}
|
|
225
218
|
|
|
219
|
+
const measure = new PerformanceMeasure(measureName, {
|
|
220
|
+
startTime: computedStartTime,
|
|
221
|
+
duration: computedDuration ?? 0,
|
|
222
|
+
detail: options?.detail,
|
|
223
|
+
});
|
|
224
|
+
|
|
226
225
|
return measure;
|
|
227
226
|
}
|
|
228
227
|
|
|
229
228
|
clearMeasures(measureName?: string): void {
|
|
230
|
-
if (!
|
|
231
|
-
|
|
229
|
+
if (!NativePerformance?.clearMeasures) {
|
|
230
|
+
warnNoNativePerformance();
|
|
232
231
|
return;
|
|
233
232
|
}
|
|
234
233
|
|
|
235
|
-
|
|
236
|
-
RawPerformanceEntryTypeValues.MEASURE,
|
|
237
|
-
measureName,
|
|
238
|
-
);
|
|
234
|
+
NativePerformance?.clearMeasures(measureName);
|
|
239
235
|
}
|
|
240
236
|
|
|
241
237
|
/**
|
|
@@ -252,28 +248,28 @@ export default class Performance {
|
|
|
252
248
|
* https://www.w3.org/TR/performance-timeline/#extensions-to-the-performance-interface
|
|
253
249
|
*/
|
|
254
250
|
getEntries(): PerformanceEntryList {
|
|
255
|
-
if (!
|
|
256
|
-
|
|
251
|
+
if (!NativePerformance?.getEntries) {
|
|
252
|
+
warnNoNativePerformance();
|
|
257
253
|
return [];
|
|
258
254
|
}
|
|
259
|
-
return
|
|
255
|
+
return NativePerformance.getEntries().map(rawToPerformanceEntry);
|
|
260
256
|
}
|
|
261
257
|
|
|
262
258
|
getEntriesByType(entryType: PerformanceEntryType): PerformanceEntryList {
|
|
263
|
-
if (
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
);
|
|
259
|
+
if (
|
|
260
|
+
entryType != null &&
|
|
261
|
+
!ENTRY_TYPES_AVAILABLE_FROM_TIMELINE.includes(entryType)
|
|
262
|
+
) {
|
|
263
|
+
console.warn('Deprecated API for given entry type.');
|
|
269
264
|
return [];
|
|
270
265
|
}
|
|
271
266
|
|
|
272
|
-
if (!
|
|
273
|
-
|
|
267
|
+
if (!NativePerformance?.getEntriesByType) {
|
|
268
|
+
warnNoNativePerformance();
|
|
274
269
|
return [];
|
|
275
270
|
}
|
|
276
|
-
|
|
271
|
+
|
|
272
|
+
return NativePerformance.getEntriesByType(
|
|
277
273
|
performanceEntryTypeToRaw(entryType),
|
|
278
274
|
).map(rawToPerformanceEntry);
|
|
279
275
|
}
|
|
@@ -283,24 +279,21 @@ export default class Performance {
|
|
|
283
279
|
entryType?: PerformanceEntryType,
|
|
284
280
|
): PerformanceEntryList {
|
|
285
281
|
if (
|
|
286
|
-
entryType
|
|
287
|
-
!
|
|
282
|
+
entryType != null &&
|
|
283
|
+
!ENTRY_TYPES_AVAILABLE_FROM_TIMELINE.includes(entryType)
|
|
288
284
|
) {
|
|
289
|
-
console.warn(
|
|
290
|
-
`Performance.getEntriesByName: Only valid for ${JSON.stringify(
|
|
291
|
-
ALWAYS_LOGGED_ENTRY_TYPES,
|
|
292
|
-
)} entry types, got ${entryType}`,
|
|
293
|
-
);
|
|
285
|
+
console.warn('Deprecated API for given entry type.');
|
|
294
286
|
return [];
|
|
295
287
|
}
|
|
296
288
|
|
|
297
|
-
if (!
|
|
298
|
-
|
|
289
|
+
if (!NativePerformance?.getEntriesByName) {
|
|
290
|
+
warnNoNativePerformance();
|
|
299
291
|
return [];
|
|
300
292
|
}
|
|
301
|
-
|
|
302
|
-
|
|
293
|
+
|
|
294
|
+
return NativePerformance.getEntriesByName(
|
|
303
295
|
entryName,
|
|
296
|
+
entryType != null ? performanceEntryTypeToRaw(entryType) : undefined,
|
|
304
297
|
).map(rawToPerformanceEntry);
|
|
305
298
|
}
|
|
306
299
|
}
|
|
@@ -21,11 +21,6 @@ export type PerformanceEntryJSON = {
|
|
|
21
21
|
...
|
|
22
22
|
};
|
|
23
23
|
|
|
24
|
-
export const ALWAYS_LOGGED_ENTRY_TYPES: $ReadOnlyArray<PerformanceEntryType> = [
|
|
25
|
-
'mark',
|
|
26
|
-
'measure',
|
|
27
|
-
];
|
|
28
|
-
|
|
29
24
|
export class PerformanceEntry {
|
|
30
25
|
#name: string;
|
|
31
26
|
#entryType: PerformanceEntryType;
|
|
@@ -69,3 +64,5 @@ export class PerformanceEntry {
|
|
|
69
64
|
};
|
|
70
65
|
}
|
|
71
66
|
}
|
|
67
|
+
|
|
68
|
+
export type PerformanceEntryList = $ReadOnlyArray<PerformanceEntry>;
|
|
@@ -10,20 +10,19 @@
|
|
|
10
10
|
|
|
11
11
|
import type {
|
|
12
12
|
DOMHighResTimeStamp,
|
|
13
|
+
PerformanceEntryList,
|
|
13
14
|
PerformanceEntryType,
|
|
14
15
|
} from './PerformanceEntry';
|
|
16
|
+
import type {OpaqueNativeObserverHandle} from './specs/NativePerformance';
|
|
15
17
|
|
|
16
|
-
import warnOnce from '../../../../Libraries/Utilities/warnOnce';
|
|
17
18
|
import {PerformanceEventTiming} from './EventTiming';
|
|
18
|
-
import {PerformanceEntry} from './PerformanceEntry';
|
|
19
19
|
import {
|
|
20
20
|
performanceEntryTypeToRaw,
|
|
21
21
|
rawToPerformanceEntry,
|
|
22
22
|
rawToPerformanceEntryType,
|
|
23
23
|
} from './RawPerformanceEntry';
|
|
24
|
-
import
|
|
25
|
-
|
|
26
|
-
export type PerformanceEntryList = $ReadOnlyArray<PerformanceEntry>;
|
|
24
|
+
import NativePerformance from './specs/NativePerformance';
|
|
25
|
+
import {warnNoNativePerformance} from './Utilities';
|
|
27
26
|
|
|
28
27
|
export {PerformanceEntry} from './PerformanceEntry';
|
|
29
28
|
|
|
@@ -56,99 +55,34 @@ export class PerformanceObserverEntryList {
|
|
|
56
55
|
}
|
|
57
56
|
}
|
|
58
57
|
|
|
58
|
+
export type PerformanceObserverCallbackOptions = {
|
|
59
|
+
droppedEntriesCount: number,
|
|
60
|
+
};
|
|
61
|
+
|
|
59
62
|
export type PerformanceObserverCallback = (
|
|
60
63
|
list: PerformanceObserverEntryList,
|
|
61
64
|
observer: PerformanceObserver,
|
|
62
65
|
// The number of buffered entries which got dropped from the buffer due to the buffer being full:
|
|
63
|
-
|
|
66
|
+
options?: PerformanceObserverCallbackOptions,
|
|
64
67
|
) => void;
|
|
65
68
|
|
|
66
|
-
export type PerformanceObserverInit =
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
type: PerformanceEntryType,
|
|
72
|
-
durationThreshold?: DOMHighResTimeStamp,
|
|
73
|
-
};
|
|
74
|
-
|
|
75
|
-
type PerformanceObserverConfig = {|
|
|
76
|
-
callback: PerformanceObserverCallback,
|
|
77
|
-
entryTypes: $ReadOnlySet<PerformanceEntryType>,
|
|
78
|
-
durationThreshold: ?number,
|
|
79
|
-
|};
|
|
80
|
-
|
|
81
|
-
const observerCountPerEntryType: Map<PerformanceEntryType, number> = new Map();
|
|
82
|
-
const registeredObservers: Map<PerformanceObserver, PerformanceObserverConfig> =
|
|
83
|
-
new Map();
|
|
84
|
-
let isOnPerformanceEntryCallbackSet: boolean = false;
|
|
85
|
-
|
|
86
|
-
// This is a callback that gets scheduled and periodically called from the native side
|
|
87
|
-
const onPerformanceEntry = () => {
|
|
88
|
-
if (!NativePerformanceObserver) {
|
|
89
|
-
return;
|
|
90
|
-
}
|
|
91
|
-
const entryResult = NativePerformanceObserver.popPendingEntries();
|
|
92
|
-
const rawEntries = entryResult?.entries ?? [];
|
|
93
|
-
const droppedEntriesCount = entryResult?.droppedEntriesCount;
|
|
94
|
-
if (rawEntries.length === 0) {
|
|
95
|
-
return;
|
|
96
|
-
}
|
|
97
|
-
const entries = rawEntries.map(rawToPerformanceEntry);
|
|
98
|
-
for (const [observer, observerConfig] of registeredObservers.entries()) {
|
|
99
|
-
const entriesForObserver: PerformanceEntryList = entries.filter(entry => {
|
|
100
|
-
if (!observerConfig.entryTypes.has(entry.entryType)) {
|
|
101
|
-
return false;
|
|
102
|
-
}
|
|
103
|
-
|
|
104
|
-
if (
|
|
105
|
-
entry.entryType === 'event' &&
|
|
106
|
-
observerConfig.durationThreshold != null
|
|
107
|
-
) {
|
|
108
|
-
return entry.duration >= observerConfig.durationThreshold;
|
|
109
|
-
}
|
|
110
|
-
|
|
111
|
-
return true;
|
|
112
|
-
});
|
|
113
|
-
if (entriesForObserver.length !== 0) {
|
|
114
|
-
try {
|
|
115
|
-
observerConfig.callback(
|
|
116
|
-
new PerformanceObserverEntryList(entriesForObserver),
|
|
117
|
-
observer,
|
|
118
|
-
droppedEntriesCount,
|
|
119
|
-
);
|
|
120
|
-
} catch (error) {
|
|
121
|
-
console.error(error);
|
|
122
|
-
}
|
|
123
|
-
}
|
|
124
|
-
}
|
|
69
|
+
export type PerformanceObserverInit = {
|
|
70
|
+
entryTypes?: Array<PerformanceEntryType>,
|
|
71
|
+
type?: PerformanceEntryType,
|
|
72
|
+
buffered?: boolean,
|
|
73
|
+
durationThreshold?: DOMHighResTimeStamp,
|
|
125
74
|
};
|
|
126
75
|
|
|
127
|
-
export function warnNoNativePerformanceObserver() {
|
|
128
|
-
warnOnce(
|
|
129
|
-
'missing-native-performance-observer',
|
|
130
|
-
'Missing native implementation of PerformanceObserver',
|
|
131
|
-
);
|
|
132
|
-
}
|
|
133
|
-
|
|
134
|
-
function applyDurationThresholds() {
|
|
135
|
-
const durationThresholds = Array.from(registeredObservers.values())
|
|
136
|
-
.map(observerConfig => observerConfig.durationThreshold)
|
|
137
|
-
.filter(Boolean);
|
|
138
|
-
|
|
139
|
-
return Math.min(...durationThresholds);
|
|
140
|
-
}
|
|
141
|
-
|
|
142
76
|
function getSupportedPerformanceEntryTypes(): $ReadOnlyArray<PerformanceEntryType> {
|
|
143
|
-
if (!
|
|
77
|
+
if (!NativePerformance) {
|
|
144
78
|
return Object.freeze([]);
|
|
145
79
|
}
|
|
146
|
-
if (!
|
|
80
|
+
if (!NativePerformance.getSupportedPerformanceEntryTypes) {
|
|
147
81
|
// fallback if getSupportedPerformanceEntryTypes is not defined on native side
|
|
148
82
|
return Object.freeze(['mark', 'measure', 'event']);
|
|
149
83
|
}
|
|
150
84
|
return Object.freeze(
|
|
151
|
-
|
|
85
|
+
NativePerformance.getSupportedPerformanceEntryTypes().map(
|
|
152
86
|
rawToPerformanceEntryType,
|
|
153
87
|
),
|
|
154
88
|
);
|
|
@@ -175,111 +109,86 @@ function getSupportedPerformanceEntryTypes(): $ReadOnlyArray<PerformanceEntryTyp
|
|
|
175
109
|
* observer.observe({ type: "event" });
|
|
176
110
|
*/
|
|
177
111
|
export class PerformanceObserver {
|
|
112
|
+
#nativeObserverHandle: OpaqueNativeObserverHandle | null = null;
|
|
178
113
|
#callback: PerformanceObserverCallback;
|
|
179
114
|
#type: 'single' | 'multiple' | void;
|
|
115
|
+
#calledAtLeastOnce = false;
|
|
180
116
|
|
|
181
117
|
constructor(callback: PerformanceObserverCallback) {
|
|
182
118
|
this.#callback = callback;
|
|
183
119
|
}
|
|
184
120
|
|
|
185
121
|
observe(options: PerformanceObserverInit): void {
|
|
186
|
-
if (!
|
|
187
|
-
|
|
122
|
+
if (!NativePerformance || NativePerformance.observe == null) {
|
|
123
|
+
warnNoNativePerformance();
|
|
188
124
|
return;
|
|
189
125
|
}
|
|
190
126
|
|
|
191
127
|
this.#validateObserveOptions(options);
|
|
192
128
|
|
|
193
|
-
|
|
129
|
+
if (this.#nativeObserverHandle == null) {
|
|
130
|
+
this.#nativeObserverHandle = this.#createNativeObserver();
|
|
131
|
+
}
|
|
194
132
|
|
|
195
133
|
if (options.entryTypes) {
|
|
196
134
|
this.#type = 'multiple';
|
|
197
|
-
|
|
198
|
-
|
|
135
|
+
NativePerformance.observe?.(this.#nativeObserverHandle, {
|
|
136
|
+
entryTypes: options.entryTypes.map(performanceEntryTypeToRaw),
|
|
137
|
+
});
|
|
138
|
+
} else if (options.type) {
|
|
199
139
|
this.#type = 'single';
|
|
200
|
-
|
|
140
|
+
NativePerformance.observe?.(this.#nativeObserverHandle, {
|
|
141
|
+
type: performanceEntryTypeToRaw(options.type),
|
|
142
|
+
buffered: options.buffered,
|
|
143
|
+
durationThreshold: options.durationThreshold,
|
|
144
|
+
});
|
|
201
145
|
}
|
|
146
|
+
}
|
|
202
147
|
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
const nextEntryTypes = currentEntryTypes
|
|
207
|
-
? union(requestedEntryTypes, currentEntryTypes)
|
|
208
|
-
: requestedEntryTypes;
|
|
209
|
-
|
|
210
|
-
// This `observe` call is a no-op because there are no new things to observe.
|
|
211
|
-
if (currentEntryTypes && currentEntryTypes.size === nextEntryTypes.size) {
|
|
148
|
+
disconnect(): void {
|
|
149
|
+
if (!NativePerformance) {
|
|
150
|
+
warnNoNativePerformance();
|
|
212
151
|
return;
|
|
213
152
|
}
|
|
214
153
|
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
durationThreshold:
|
|
218
|
-
options.type === 'event' ? options.durationThreshold : undefined,
|
|
219
|
-
entryTypes: nextEntryTypes,
|
|
220
|
-
});
|
|
221
|
-
|
|
222
|
-
if (!isOnPerformanceEntryCallbackSet) {
|
|
223
|
-
NativePerformanceObserver.setOnPerformanceEntryCallback(
|
|
224
|
-
onPerformanceEntry,
|
|
225
|
-
);
|
|
226
|
-
isOnPerformanceEntryCallbackSet = true;
|
|
154
|
+
if (this.#nativeObserverHandle == null || !NativePerformance.disconnect) {
|
|
155
|
+
return;
|
|
227
156
|
}
|
|
228
157
|
|
|
229
|
-
|
|
230
|
-
// this observer.
|
|
231
|
-
const newEntryTypes = currentEntryTypes
|
|
232
|
-
? difference(
|
|
233
|
-
new Set(requestedEntryTypes.keys()),
|
|
234
|
-
new Set(currentEntryTypes.keys()),
|
|
235
|
-
)
|
|
236
|
-
: new Set(requestedEntryTypes.keys());
|
|
237
|
-
for (const type of newEntryTypes) {
|
|
238
|
-
if (!observerCountPerEntryType.has(type)) {
|
|
239
|
-
const rawType = performanceEntryTypeToRaw(type);
|
|
240
|
-
NativePerformanceObserver.startReporting(rawType);
|
|
241
|
-
}
|
|
242
|
-
observerCountPerEntryType.set(
|
|
243
|
-
type,
|
|
244
|
-
(observerCountPerEntryType.get(type) ?? 0) + 1,
|
|
245
|
-
);
|
|
246
|
-
}
|
|
247
|
-
applyDurationThresholds();
|
|
158
|
+
NativePerformance.disconnect(this.#nativeObserverHandle);
|
|
248
159
|
}
|
|
249
160
|
|
|
250
|
-
|
|
251
|
-
if (!
|
|
252
|
-
|
|
161
|
+
#createNativeObserver(): OpaqueNativeObserverHandle {
|
|
162
|
+
if (!NativePerformance || !NativePerformance.createObserver) {
|
|
163
|
+
warnNoNativePerformance();
|
|
253
164
|
return;
|
|
254
165
|
}
|
|
255
166
|
|
|
256
|
-
|
|
257
|
-
if (!observerConfig) {
|
|
258
|
-
return;
|
|
259
|
-
}
|
|
167
|
+
this.#calledAtLeastOnce = false;
|
|
260
168
|
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
performanceEntryTypeToRaw(type),
|
|
269
|
-
);
|
|
270
|
-
} else if (numberOfObserversForThisType !== 0) {
|
|
271
|
-
observerCountPerEntryType.set(type, numberOfObserversForThisType - 1);
|
|
169
|
+
return NativePerformance.createObserver(() => {
|
|
170
|
+
const rawEntries = NativePerformance.takeRecords?.(
|
|
171
|
+
this.#nativeObserverHandle,
|
|
172
|
+
true, // sort records
|
|
173
|
+
);
|
|
174
|
+
if (!rawEntries) {
|
|
175
|
+
return;
|
|
272
176
|
}
|
|
273
|
-
}
|
|
274
177
|
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
178
|
+
const entries = rawEntries.map(rawToPerformanceEntry);
|
|
179
|
+
const entryList = new PerformanceObserverEntryList(entries);
|
|
180
|
+
|
|
181
|
+
let droppedEntriesCount = 0;
|
|
182
|
+
if (!this.#calledAtLeastOnce) {
|
|
183
|
+
droppedEntriesCount =
|
|
184
|
+
NativePerformance.getDroppedEntriesCount?.(
|
|
185
|
+
this.#nativeObserverHandle,
|
|
186
|
+
) ?? 0;
|
|
187
|
+
this.#calledAtLeastOnce = true;
|
|
188
|
+
}
|
|
281
189
|
|
|
282
|
-
|
|
190
|
+
this.#callback(entryList, this, {droppedEntriesCount});
|
|
191
|
+
});
|
|
283
192
|
}
|
|
284
193
|
|
|
285
194
|
#validateObserveOptions(options: PerformanceObserverInit): void {
|
|
@@ -309,7 +218,7 @@ export class PerformanceObserver {
|
|
|
309
218
|
);
|
|
310
219
|
}
|
|
311
220
|
|
|
312
|
-
if (entryTypes && durationThreshold
|
|
221
|
+
if (entryTypes && durationThreshold != null) {
|
|
313
222
|
throw new TypeError(
|
|
314
223
|
"Failed to execute 'observe' on 'PerformanceObserver': An observe() call must not include both entryTypes and durationThreshold arguments.",
|
|
315
224
|
);
|
|
@@ -320,12 +229,4 @@ export class PerformanceObserver {
|
|
|
320
229
|
getSupportedPerformanceEntryTypes();
|
|
321
230
|
}
|
|
322
231
|
|
|
323
|
-
function union<T>(a: $ReadOnlySet<T>, b: $ReadOnlySet<T>): Set<T> {
|
|
324
|
-
return new Set([...a, ...b]);
|
|
325
|
-
}
|
|
326
|
-
|
|
327
|
-
function difference<T>(a: $ReadOnlySet<T>, b: $ReadOnlySet<T>): Set<T> {
|
|
328
|
-
return new Set([...a].filter(x => !b.has(x)));
|
|
329
|
-
}
|
|
330
|
-
|
|
331
232
|
export {PerformanceEventTiming};
|
|
@@ -12,7 +12,7 @@ import type {PerformanceEntryType} from './PerformanceEntry';
|
|
|
12
12
|
import type {
|
|
13
13
|
RawPerformanceEntry,
|
|
14
14
|
RawPerformanceEntryType,
|
|
15
|
-
} from './specs/
|
|
15
|
+
} from './specs/NativePerformance';
|
|
16
16
|
|
|
17
17
|
import {PerformanceEventTiming} from './EventTiming';
|
|
18
18
|
import {PerformanceLongTaskTiming} from './LongTasks';
|
|
@@ -25,12 +25,12 @@ 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 {
|
|
33
|
-
detail: DetailType;
|
|
33
|
+
#detail: DetailType;
|
|
34
34
|
|
|
35
35
|
constructor(markName: string, markOptions?: PerformanceMarkOptions) {
|
|
36
36
|
super({
|
|
@@ -41,20 +41,24 @@ export class PerformanceMark extends PerformanceEntry {
|
|
|
41
41
|
});
|
|
42
42
|
|
|
43
43
|
if (markOptions) {
|
|
44
|
-
this
|
|
44
|
+
this.#detail = markOptions.detail;
|
|
45
45
|
}
|
|
46
46
|
}
|
|
47
|
+
|
|
48
|
+
get detail(): DetailType {
|
|
49
|
+
return this.#detail;
|
|
50
|
+
}
|
|
47
51
|
}
|
|
48
52
|
|
|
49
53
|
export class PerformanceMeasure extends PerformanceEntry {
|
|
50
54
|
#detail: DetailType;
|
|
51
55
|
|
|
52
|
-
constructor(measureName: string, measureOptions
|
|
56
|
+
constructor(measureName: string, measureOptions: PerformanceMeasureInit) {
|
|
53
57
|
super({
|
|
54
58
|
name: measureName,
|
|
55
59
|
entryType: 'measure',
|
|
56
|
-
startTime: measureOptions
|
|
57
|
-
duration: measureOptions
|
|
60
|
+
startTime: measureOptions.startTime,
|
|
61
|
+
duration: measureOptions.duration,
|
|
58
62
|
});
|
|
59
63
|
|
|
60
64
|
if (measureOptions) {
|
|
@@ -0,0 +1,18 @@
|
|
|
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 warnOnce from '../../../../Libraries/Utilities/warnOnce';
|
|
12
|
+
|
|
13
|
+
export function warnNoNativePerformance() {
|
|
14
|
+
warnOnce(
|
|
15
|
+
'missing-native-performance',
|
|
16
|
+
'Missing native implementation of Performance',
|
|
17
|
+
);
|
|
18
|
+
}
|