react-native-windows 0.76.3 → 0.77.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 +5 -1
- 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/NativeAnimatedAllowlist.windows.js +122 -0
- 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 +96 -46
- package/Libraries/Animated/nodes/AnimatedProps.windows.js +281 -0
- package/Libraries/Animated/nodes/AnimatedStyle.js +108 -39
- package/Libraries/Animated/nodes/AnimatedStyle.windows.js +251 -0
- 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.windows.js +82 -5
- package/Libraries/Components/ActivityIndicator/ActivityIndicator.js +4 -4
- package/Libraries/Components/Button.js +9 -4
- package/Libraries/Components/Button.windows.js +19 -5
- package/Libraries/Components/DrawerAndroid/DrawerLayoutAndroid.js +3 -1
- package/Libraries/Components/Glyph/Glyph.js +2 -1
- package/Libraries/Components/Keyboard/KeyboardAvoidingView.js +7 -0
- package/Libraries/Components/Popup/PopupNativeComponent.js +0 -1
- package/Libraries/Components/Pressable/Pressable.js +4 -4
- package/Libraries/Components/Pressable/Pressable.windows.js +10 -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/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/ScrollViewNativeComponent.windows.js +0 -5
- package/Libraries/Components/ScrollView/ScrollViewStickyHeader.js +8 -9
- package/Libraries/Components/Switch/Switch.js +8 -6
- package/Libraries/Components/Switch/Switch.windows.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.windows.js +47 -16
- package/Libraries/Components/TextInput/TextInputState.js +11 -13
- package/Libraries/Components/TextInput/TextInputState.windows.js +11 -13
- 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.windows.js +4 -0
- package/Libraries/Components/Touchable/TouchableBounce.js +6 -2
- package/Libraries/Components/Touchable/TouchableBounce.windows.js +227 -0
- package/Libraries/Components/Touchable/TouchableHighlight.js +5 -5
- package/Libraries/Components/Touchable/TouchableHighlight.windows.js +5 -5
- package/Libraries/Components/Touchable/TouchableNativeFeedback.windows.js +371 -0
- package/Libraries/Components/Touchable/TouchableOpacity.js +6 -5
- package/Libraries/Components/Touchable/TouchableOpacity.windows.js +11 -5
- package/Libraries/Components/Touchable/TouchableWithoutFeedback.js +1 -2
- package/Libraries/Components/Touchable/TouchableWithoutFeedback.windows.js +9 -3
- package/Libraries/Components/View/ReactNativeStyleAttributes.js +6 -1
- package/Libraries/Components/View/View.js +4 -4
- package/Libraries/Components/View/View.windows.js +12 -5
- package/Libraries/Components/View/ViewAccessibility.d.ts +10 -0
- package/Libraries/Components/View/ViewAccessibility.windows.js +2 -0
- 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.windows.js +2 -3
- 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/AssetSourceResolver.windows.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.windows.js +5 -1
- 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/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.windows.js +6 -1
- package/Libraries/LogBox/UI/LogBoxInspectorHeader.js +1 -1
- package/Libraries/LogBox/UI/LogBoxInspectorHeader.windows.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/Modal/Modal.windows.js +18 -0
- package/Libraries/NativeComponent/BaseViewConfig.android.js +72 -1
- package/Libraries/NativeComponent/BaseViewConfig.ios.js +2 -1
- package/Libraries/NativeComponent/BaseViewConfig.windows.js +3 -11
- package/Libraries/NativeComponent/NativeComponentRegistry.js +3 -3
- package/Libraries/NativeComponent/StaticViewConfigValidator.js +0 -1
- 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/Pressability.js +2 -3
- package/Libraries/Pressability/Pressability.windows.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/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.windows.js +298 -292
- package/Libraries/Text/TextNativeComponent.js +0 -1
- package/Libraries/Text/TextProps.windows.js +2 -0
- 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.windows.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.windows.js +6 -18
- package/Libraries/Utilities/HMRClient.js +3 -4
- package/Libraries/Utilities/Platform.flow.js +2 -2
- package/Libraries/Utilities/Platform.flow.windows.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/Microsoft.ReactNative/AsynchronousEventBeat.cpp +9 -8
- package/Microsoft.ReactNative/AsynchronousEventBeat.h +5 -5
- package/Microsoft.ReactNative/FBReactNativeSpec/FBReactNativeSpecJSI.h +5 -0
- package/Microsoft.ReactNative/Fabric/AbiComponentDescriptor.cpp +2 -2
- package/Microsoft.ReactNative/Fabric/Composition/CompositionDynamicAutomationProvider.cpp +197 -18
- package/Microsoft.ReactNative/Fabric/Composition/CompositionDynamicAutomationProvider.h +19 -1
- package/Microsoft.ReactNative/Fabric/Composition/CompositionViewComponentView.cpp +13 -0
- package/Microsoft.ReactNative/Fabric/Composition/ReactNativeIsland.cpp +1 -1
- package/Microsoft.ReactNative/Fabric/Composition/TextInput/WindowsTextInputComponentDescriptor.h +6 -8
- package/Microsoft.ReactNative/Fabric/Composition/TextInput/WindowsTextInputComponentView.cpp +2 -2
- package/Microsoft.ReactNative/Fabric/Composition/TextInput/WindowsTextInputShadowNode.cpp +3 -2
- package/Microsoft.ReactNative/Fabric/Composition/TooltipService.cpp +1 -1
- package/Microsoft.ReactNative/Fabric/Composition/UiaHelpers.cpp +24 -0
- package/Microsoft.ReactNative/Fabric/Composition/UiaHelpers.h +5 -0
- package/Microsoft.ReactNative/Fabric/FabricUIManagerModule.cpp +12 -12
- package/Microsoft.ReactNative/Fabric/FabricUIManagerModule.h +4 -4
- package/Microsoft.ReactNative/Fabric/ImageRequest.cpp +4 -8
- package/Microsoft.ReactNative/Fabric/platform/react/renderer/components/view/HostPlatformViewProps.cpp +16 -15
- package/Microsoft.ReactNative/Modules/AccessibilityInfoModule.cpp +15 -0
- package/Microsoft.ReactNative/Modules/AccessibilityInfoModule.h +9 -0
- package/Microsoft.ReactNative/ReactHost/ReactHost.cpp +20 -1
- package/Microsoft.ReactNative/ReactHost/ReactInstanceWin.cpp +11 -6
- package/Microsoft.ReactNative/ReactHost/ReactInstanceWin.h +1 -1
- package/Microsoft.ReactNative/SynchronousEventBeat.cpp +14 -4
- package/Microsoft.ReactNative/SynchronousEventBeat.h +4 -2
- package/Microsoft.ReactNative.Cxx/ApiLoaders/JSRuntimeApi.cpp +78 -0
- package/Microsoft.ReactNative.Cxx/ApiLoaders/JSRuntimeApi.h +51 -0
- package/Microsoft.ReactNative.Cxx/ApiLoaders/JSRuntimeApi.inc +48 -0
- package/Microsoft.ReactNative.Cxx/ApiLoaders/NodeApi.cpp +41 -0
- package/Microsoft.ReactNative.Cxx/ApiLoaders/NodeApi.h +127 -0
- package/Microsoft.ReactNative.Cxx/ApiLoaders/NodeApi.inc +125 -0
- package/Microsoft.ReactNative.Cxx/ApiLoaders/NodeApi_posix.cpp +16 -0
- package/Microsoft.ReactNative.Cxx/ApiLoaders/NodeApi_win.cpp +23 -0
- package/Microsoft.ReactNative.Cxx/JSI/decorator.h +834 -0
- package/Microsoft.ReactNative.Cxx/JSI/instrumentation.h +117 -0
- package/Microsoft.ReactNative.Cxx/JSI/jsi-inl.h +366 -0
- package/Microsoft.ReactNative.Cxx/JSI/jsi.cpp +560 -0
- package/Microsoft.ReactNative.Cxx/JSI/jsi.h +1611 -0
- package/Microsoft.ReactNative.Cxx/JSI/threadsafe.h +79 -0
- package/Microsoft.ReactNative.Cxx/Microsoft.ReactNative.Cxx.vcxitems +7 -11
- package/Microsoft.ReactNative.Cxx/Microsoft.ReactNative.Cxx.vcxitems.filters +1 -1
- package/Microsoft.ReactNative.Cxx/NodeApiJsiRuntime.cpp +2878 -0
- package/Microsoft.ReactNative.Cxx/NodeApiJsiRuntime.h +36 -0
- package/Microsoft.ReactNative.Cxx/ReactCommon/CallInvoker.h +64 -0
- package/Microsoft.ReactNative.Cxx/ReactCommon/SchedulerPriority.h +22 -0
- package/{ReactCommon/TEMP_UntilReactCommonUpdate/react/nativemodule/core → Microsoft.ReactNative.Cxx}/ReactCommon/TurboModule.cpp +63 -63
- package/Microsoft.ReactNative.Cxx/ReactCommon/TurboModule.h +165 -0
- package/Microsoft.ReactNative.Cxx/ReactCommon/TurboModuleUtils.cpp +105 -0
- package/{ReactCommon/TEMP_UntilReactCommonUpdate/react/nativemodule/core → Microsoft.ReactNative.Cxx}/ReactCommon/TurboModuleUtils.h +57 -58
- package/Microsoft.ReactNative.Cxx/ReactCommon/react/bridging/AString.h +42 -0
- package/Microsoft.ReactNative.Cxx/ReactCommon/react/bridging/Array.h +151 -0
- package/{ReactCommon/TEMP_UntilReactCommonUpdate → Microsoft.ReactNative.Cxx/ReactCommon}/react/bridging/Base.h +177 -154
- package/Microsoft.ReactNative.Cxx/ReactCommon/react/bridging/Bool.h +25 -0
- package/Microsoft.ReactNative.Cxx/ReactCommon/react/bridging/Bridging.h +21 -0
- package/Microsoft.ReactNative.Cxx/ReactCommon/react/bridging/CallbackWrapper.h +67 -0
- package/Microsoft.ReactNative.Cxx/ReactCommon/react/bridging/Class.h +90 -0
- package/{ReactCommon/TEMP_UntilReactCommonUpdate → Microsoft.ReactNative.Cxx/ReactCommon}/react/bridging/Convert.h +170 -172
- package/Microsoft.ReactNative.Cxx/ReactCommon/react/bridging/Error.h +51 -0
- package/{ReactCommon/TEMP_UntilReactCommonUpdate → Microsoft.ReactNative.Cxx/ReactCommon}/react/bridging/EventEmitter.h +134 -136
- package/{ReactCommon/TEMP_UntilReactCommonUpdate → Microsoft.ReactNative.Cxx/ReactCommon}/react/bridging/Function.h +283 -283
- package/Microsoft.ReactNative.Cxx/ReactCommon/react/bridging/LongLivedObject.cpp +63 -0
- package/Microsoft.ReactNative.Cxx/ReactCommon/react/bridging/LongLivedObject.h +61 -0
- package/Microsoft.ReactNative.Cxx/ReactCommon/react/bridging/Object.h +93 -0
- package/Microsoft.ReactNative.Cxx/ReactCommon/react/bridging/Promise.h +104 -0
- package/Microsoft.ReactNative.Cxx/ReactCommon/react/bridging/Value.h +107 -0
- package/Microsoft.ReactNative.Cxx/ReactCommon/react/debug/flags.h +22 -0
- package/Microsoft.ReactNative.Cxx/ReactCommon/react/debug/react_native_assert.h +72 -0
- package/Microsoft.ReactNative.Cxx/node-api/js_native_api.h +553 -0
- package/Microsoft.ReactNative.Cxx/node-api/js_native_api_types.h +167 -0
- package/Microsoft.ReactNative.Cxx/node-api/js_runtime_api.h +186 -0
- package/Microsoft.ReactNative.Cxx/stubs/glog/logging.h +82 -0
- package/PropertySheets/Bundle.Common.targets +1 -1
- package/PropertySheets/Bundle.props +3 -0
- package/PropertySheets/Generated/PackageVersion.g.props +4 -4
- package/PropertySheets/ManagedCodeGen/Microsoft.ReactNative.Managed.CodeGen.targets +1 -1
- package/PropertySheets/OutputMSBuildProperties.targets +3 -1
- package/ReactCommon/ReactCommon.vcxproj +5 -0
- package/ReactCommon/TEMP_UntilReactCommonUpdate/cxxreact/JSExecutor.cpp +2 -3
- package/ReactCommon/TEMP_UntilReactCommonUpdate/jsi/jsi/test/testlib.cpp +61 -0
- package/ReactCommon/TEMP_UntilReactCommonUpdate/react/nativemodule/core/ReactCommon/TurboModule.h +26 -23
- package/ReactCommon/TEMP_UntilReactCommonUpdate/react/renderer/componentregistry/ComponentDescriptorRegistry.cpp +150 -0
- package/ReactCommon/TEMP_UntilReactCommonUpdate/react/renderer/components/view/AccessibilityPrimitives.h +252 -0
- package/ReactCommon/TEMP_UntilReactCommonUpdate/react/renderer/components/view/accessibilityPropsConversions.h +795 -0
- package/ReactCommon/TEMP_UntilReactCommonUpdate/react/renderer/runtimescheduler/SchedulerPriorityUtils.h +59 -0
- package/ReactCommon/TEMP_UntilReactCommonUpdate/react/runtime/ReactInstance.cpp +188 -39
- package/Scripts/Microsoft.ReactNative.Managed.CodeGen.targets +1 -1
- package/Scripts/Tfs/Layout-MSRN-Headers.ps1 +97 -62
- package/Shared/InspectorPackagerConnection.cpp +3 -6
- package/Shared/InspectorPackagerConnection.h +2 -2
- package/Shared/InstanceManager.h +1 -1
- package/Shared/OInstance.h +1 -1
- package/Shared/Shared.vcxitems +17 -2
- package/Shared/Shared.vcxitems.filters +3 -1
- package/Shared/TurboModuleManager.cpp +29 -4
- package/codegen/NativeAccessibilityInfoSpec.g.h +27 -9
- package/codegen/NativeAccessibilityManagerSpec.g.h +19 -13
- package/codegen/NativeActionSheetManagerSpec.g.h +4 -0
- package/codegen/NativeExceptionsManagerSpec.g.h +1 -7
- package/codegen/NativeIntersectionObserverSpec.g.h +2 -0
- package/codegen/NativePerformanceSpec.g.h +127 -3
- package/codegen/NativeReactDevToolsRuntimeSettingsModuleSpec.g.h +67 -0
- package/codegen/NativeReactDevToolsSettingsManagerSpec.g.h +41 -0
- package/codegen/NativeReactNativeFeatureFlagsSpec.g.h +125 -137
- package/codegen/react/components/rnwcore/ComponentDescriptors.h +0 -1
- package/codegen/react/components/rnwcore/Props.cpp +1 -0
- package/codegen/react/components/rnwcore/Props.h +1 -0
- package/codegen/react/components/rnwcore/ShadowNodes.cpp +0 -1
- package/codegen/react/components/rnwcore/ShadowNodes.h +0 -11
- package/codegen/react/components/rnwcore/States.h +0 -12
- package/codegen/rnwcoreJSI-generated.cpp +219 -186
- package/codegen/rnwcoreJSI.h +942 -511
- package/index.js +10 -3
- package/index.windows.js +10 -3
- package/jest/setup.js +36 -1
- package/just-task.js +15 -0
- package/package.json +22 -22
- package/src/private/animated/NativeAnimatedHelper.js +18 -16
- package/src/private/animated/useAnimatedPropsMemo.js +348 -0
- package/src/private/animated/useAnimatedPropsMemo.windows.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.windows.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/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/templates/cpp-lib/template.config.js +13 -7
- package/templates/templateUtils.js +10 -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.windows.js +0 -35
- package/Libraries/DevToolsSettings/NativeDevToolsSettingsManager.js +0 -13
- package/Libraries/ReactNative/ReactFabricInternals.js +0 -17
- package/ReactCommon/TEMP_UntilReactCommonUpdate/react/bridging/CallbackWrapper.h +0 -101
- package/ReactCommon/TEMP_UntilReactCommonUpdate/react/renderer/components/scrollview/ScrollViewProps.cpp +0 -569
- package/codegen/NativeDevToolsSettingsManagerSpec.g.h +0 -53
- package/codegen/NativePerformanceObserverSpec.g.h +0 -131
- 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
package/src/private/webapis/intersectionobserver/specs/__mocks__/NativeIntersectionObserver.js
CHANGED
|
@@ -23,8 +23,10 @@ import nullthrows from 'nullthrows';
|
|
|
23
23
|
|
|
24
24
|
type ObserverState = {
|
|
25
25
|
thresholds: $ReadOnlyArray<number>,
|
|
26
|
+
rootThresholds?: ?$ReadOnlyArray<number>,
|
|
26
27
|
intersecting: boolean,
|
|
27
28
|
currentThreshold: ?number,
|
|
29
|
+
currentRootThreshold: ?number,
|
|
28
30
|
};
|
|
29
31
|
|
|
30
32
|
type Observation = {
|
|
@@ -74,8 +76,10 @@ const NativeIntersectionObserverMock = {
|
|
|
74
76
|
...options,
|
|
75
77
|
state: {
|
|
76
78
|
thresholds: options.thresholds,
|
|
79
|
+
rootThresholds: options.rootThresholds,
|
|
77
80
|
intersecting: false,
|
|
78
81
|
currentThreshold: null,
|
|
82
|
+
currentRootThreshold: null,
|
|
79
83
|
},
|
|
80
84
|
};
|
|
81
85
|
observations.push(observation);
|
|
@@ -141,9 +145,14 @@ const NativeIntersectionObserverMock = {
|
|
|
141
145
|
if (observation.state.intersecting) {
|
|
142
146
|
observation.state.intersecting = false;
|
|
143
147
|
observation.state.currentThreshold = null;
|
|
148
|
+
observation.state.currentRootThreshold = null;
|
|
144
149
|
} else {
|
|
145
150
|
observation.state.intersecting = true;
|
|
146
151
|
observation.state.currentThreshold = observation.thresholds[0];
|
|
152
|
+
observation.state.currentRootThreshold =
|
|
153
|
+
observation.rootThresholds != null
|
|
154
|
+
? observation.rootThresholds[0]
|
|
155
|
+
: null;
|
|
147
156
|
}
|
|
148
157
|
pendingRecords.push(createRecordFromObservation(observation));
|
|
149
158
|
setImmediate(notifyIntersectionObservers);
|
|
@@ -16,8 +16,8 @@ import type {
|
|
|
16
16
|
} from './PerformanceEntry';
|
|
17
17
|
|
|
18
18
|
import {PerformanceEntry} from './PerformanceEntry';
|
|
19
|
-
import
|
|
20
|
-
import
|
|
19
|
+
import NativePerformance from './specs/NativePerformance';
|
|
20
|
+
import {warnNoNativePerformance} from './Utilities';
|
|
21
21
|
|
|
22
22
|
export type PerformanceEventTimingJSON = {
|
|
23
23
|
...PerformanceEntryJSON,
|
|
@@ -85,14 +85,18 @@ function getCachedEventCounts(): Map<string, number> {
|
|
|
85
85
|
if (cachedEventCounts) {
|
|
86
86
|
return cachedEventCounts;
|
|
87
87
|
}
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
88
|
+
|
|
89
|
+
if (!NativePerformance || !NativePerformance?.getEventCounts) {
|
|
90
|
+
warnNoNativePerformance();
|
|
91
|
+
cachedEventCounts = new Map();
|
|
92
|
+
return cachedEventCounts;
|
|
91
93
|
}
|
|
92
94
|
|
|
93
|
-
|
|
94
|
-
|
|
95
|
+
const eventCounts = new Map<string, number>(
|
|
96
|
+
NativePerformance.getEventCounts?.() ?? [],
|
|
95
97
|
);
|
|
98
|
+
cachedEventCounts = eventCounts;
|
|
99
|
+
|
|
96
100
|
// $FlowFixMe[incompatible-call]
|
|
97
101
|
global.queueMicrotask(() => {
|
|
98
102
|
// To be consistent with the calls to the API from the same task,
|
|
@@ -101,7 +105,8 @@ function getCachedEventCounts(): Map<string, number> {
|
|
|
101
105
|
// after the current task is guaranteed to have finished.
|
|
102
106
|
cachedEventCounts = null;
|
|
103
107
|
});
|
|
104
|
-
|
|
108
|
+
|
|
109
|
+
return eventCounts;
|
|
105
110
|
}
|
|
106
111
|
|
|
107
112
|
/**
|
|
@@ -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';
|