@office-iss/react-native-win32 0.71.4 → 0.72.0-preview.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.flowconfig +15 -3
- package/CHANGELOG.json +310 -40
- package/CHANGELOG.md +145 -23
- 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/TouchableWithoutFeedback.d.ts +1 -1
- package/Libraries/Components/Touchable/TouchableWithoutFeedback.js +2 -2
- package/Libraries/Components/TraceUpdateOverlay/TraceUpdateOverlay.js +189 -0
- package/Libraries/Components/TraceUpdateOverlay/TraceUpdateOverlayNativeComponent.js +43 -0
- package/Libraries/Components/View/ReactNativeStyleAttributes.js +26 -0
- package/Libraries/Components/View/View.js +71 -45
- 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/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 +1 -9
- package/Libraries/Core/ReactNativeVersionCheck.win32.js +1 -9
- 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/{Utilities/NativeDevSplitBundleLoader.js → DevToolsSettings/NativeDevToolsSettingsManager.js} +7 -2
- 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 +29 -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 +11 -5
- 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 +142 -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 +38 -20
- 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.js +1 -1
- 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/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 +115 -85
- package/package.json +38 -28
- package/rn-get-polyfills.js +1 -1
- package/src/Libraries/Components/TextInput/TextInput.Types.win32.ts +68 -0
- 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
- package/flow/use-sync-external-store.js +0 -19
|
@@ -71,7 +71,7 @@ export const __INTERNAL_VIEW_CONFIG: PartialViewConfig =
|
|
|
71
71
|
internal_analyticTag: true,
|
|
72
72
|
resizeMode: true,
|
|
73
73
|
tintColor: {
|
|
74
|
-
process: require('../StyleSheet/processColor'),
|
|
74
|
+
process: require('../StyleSheet/processColor').default,
|
|
75
75
|
},
|
|
76
76
|
borderBottomLeftRadius: true,
|
|
77
77
|
borderTopLeftRadius: true,
|
|
@@ -82,10 +82,10 @@ export const __INTERNAL_VIEW_CONFIG: PartialViewConfig =
|
|
|
82
82
|
shouldNotifyLoadEvents: true,
|
|
83
83
|
defaultSrc: true,
|
|
84
84
|
overlayColor: {
|
|
85
|
-
process: require('../StyleSheet/processColor'),
|
|
85
|
+
process: require('../StyleSheet/processColor').default,
|
|
86
86
|
},
|
|
87
87
|
borderColor: {
|
|
88
|
-
process: require('../StyleSheet/processColor'),
|
|
88
|
+
process: require('../StyleSheet/processColor').default,
|
|
89
89
|
},
|
|
90
90
|
accessible: true,
|
|
91
91
|
progressiveRenderingEnabled: true,
|
|
@@ -130,7 +130,7 @@ export const __INTERNAL_VIEW_CONFIG: PartialViewConfig =
|
|
|
130
130
|
resizeMode: true,
|
|
131
131
|
source: true,
|
|
132
132
|
tintColor: {
|
|
133
|
-
process: require('../StyleSheet/processColor'),
|
|
133
|
+
process: require('../StyleSheet/processColor').default,
|
|
134
134
|
},
|
|
135
135
|
...ConditionallyIgnoredEventHandlers({
|
|
136
136
|
onLoadStart: true,
|
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
// This is a stub for flow to make it understand require('./icon.png')
|
|
14
14
|
// See metro/src/Bundler/index.js
|
|
15
15
|
|
|
16
|
-
const AssetRegistry = require('@react-native/assets/registry');
|
|
16
|
+
const AssetRegistry = require('@react-native/assets-registry/registry');
|
|
17
17
|
|
|
18
18
|
module.exports = (AssetRegistry.registerAsset({
|
|
19
19
|
__packager_asset: true,
|
|
@@ -16,7 +16,7 @@ import type {ResolvedAssetSource} from './AssetSourceResolver';
|
|
|
16
16
|
|
|
17
17
|
const AssetSourceResolver = require('./AssetSourceResolver');
|
|
18
18
|
const {pickScale} = require('./AssetUtils');
|
|
19
|
-
const AssetRegistry = require('@react-native/assets/registry');
|
|
19
|
+
const AssetRegistry = require('@react-native/assets-registry/registry');
|
|
20
20
|
|
|
21
21
|
let _customSourceTransformer, _serverURL, _scriptURL;
|
|
22
22
|
|
|
@@ -8,6 +8,7 @@
|
|
|
8
8
|
* @flow
|
|
9
9
|
*/
|
|
10
10
|
|
|
11
|
+
import type {PointerEvent} from '../Types/CoreEventTypes';
|
|
11
12
|
import type {PressEvent} from '../Types/CoreEventTypes';
|
|
12
13
|
import type {HostRef} from './getInspectorDataForViewAtPoint';
|
|
13
14
|
|
|
@@ -50,8 +51,15 @@ export default function DevtoolsOverlay({
|
|
|
50
51
|
|
|
51
52
|
function onAgentShowNativeHighlight(node: any) {
|
|
52
53
|
clearTimeout(hideTimeoutId);
|
|
53
|
-
|
|
54
|
-
|
|
54
|
+
|
|
55
|
+
// `canonical.publicInstance` => Fabric
|
|
56
|
+
// `canonical` => Legacy Fabric
|
|
57
|
+
// `node` => Legacy renderer
|
|
58
|
+
const component =
|
|
59
|
+
(node.canonical && node.canonical.publicInstance) ??
|
|
60
|
+
// TODO: remove this check when syncing the new version of the renderer from React to React Native.
|
|
61
|
+
node.canonical ??
|
|
62
|
+
node;
|
|
55
63
|
if (!component || !component.measure) {
|
|
56
64
|
return;
|
|
57
65
|
}
|
|
@@ -125,11 +133,11 @@ export default function DevtoolsOverlay({
|
|
|
125
133
|
getInspectorDataForViewAtPoint(inspectedView, x, y, viewData => {
|
|
126
134
|
const {touchedViewTag, closestInstance, frame} = viewData;
|
|
127
135
|
if (closestInstance != null || touchedViewTag != null) {
|
|
136
|
+
// We call `selectNode` for both non-fabric(viewTag) and fabric(instance),
|
|
137
|
+
// this makes sure it works for both architectures.
|
|
138
|
+
agent.selectNode(findNodeHandle(touchedViewTag));
|
|
128
139
|
if (closestInstance != null) {
|
|
129
|
-
// Fabric
|
|
130
140
|
agent.selectNode(closestInstance);
|
|
131
|
-
} else {
|
|
132
|
-
agent.selectNode(findNodeHandle(touchedViewTag));
|
|
133
141
|
}
|
|
134
142
|
setInspected({
|
|
135
143
|
frame,
|
|
@@ -153,14 +161,14 @@ export default function DevtoolsOverlay({
|
|
|
153
161
|
}, []);
|
|
154
162
|
|
|
155
163
|
const onPointerMove = useCallback(
|
|
156
|
-
e => {
|
|
164
|
+
(e: PointerEvent) => {
|
|
157
165
|
findViewForLocation(e.nativeEvent.x, e.nativeEvent.y);
|
|
158
166
|
},
|
|
159
167
|
[findViewForLocation],
|
|
160
168
|
);
|
|
161
169
|
|
|
162
170
|
const onResponderMove = useCallback(
|
|
163
|
-
e => {
|
|
171
|
+
(e: PressEvent) => {
|
|
164
172
|
findViewForLocation(
|
|
165
173
|
e.nativeEvent.touches[0].locationX,
|
|
166
174
|
e.nativeEvent.touches[0].locationY,
|
|
@@ -169,7 +177,7 @@ export default function DevtoolsOverlay({
|
|
|
169
177
|
[findViewForLocation],
|
|
170
178
|
);
|
|
171
179
|
|
|
172
|
-
const
|
|
180
|
+
const shouldSetResponder = useCallback(
|
|
173
181
|
(e: PressEvent): boolean => {
|
|
174
182
|
onResponderMove(e);
|
|
175
183
|
return true;
|
|
@@ -179,17 +187,19 @@ export default function DevtoolsOverlay({
|
|
|
179
187
|
|
|
180
188
|
let highlight = inspected ? <ElementBox frame={inspected.frame} /> : null;
|
|
181
189
|
if (isInspecting) {
|
|
182
|
-
const events =
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
190
|
+
const events =
|
|
191
|
+
// Pointer events only work on fabric
|
|
192
|
+
ReactNativeFeatureFlags.shouldEmitW3CPointerEvents()
|
|
193
|
+
? {
|
|
194
|
+
onPointerMove,
|
|
195
|
+
onPointerDown: onPointerMove,
|
|
196
|
+
onPointerUp: stopInspecting,
|
|
197
|
+
}
|
|
198
|
+
: {
|
|
199
|
+
onStartShouldSetResponder: shouldSetResponder,
|
|
200
|
+
onResponderMove: onResponderMove,
|
|
201
|
+
onResponderRelease: stopInspecting,
|
|
202
|
+
};
|
|
193
203
|
return (
|
|
194
204
|
<View
|
|
195
205
|
nativeID="devToolsInspectorOverlay"
|
|
@@ -13,13 +13,14 @@
|
|
|
13
13
|
const View = require('../Components/View/View');
|
|
14
14
|
const flattenStyle = require('../StyleSheet/flattenStyle');
|
|
15
15
|
const StyleSheet = require('../StyleSheet/StyleSheet');
|
|
16
|
-
const Dimensions = require('../Utilities/Dimensions');
|
|
16
|
+
const Dimensions = require('../Utilities/Dimensions').default;
|
|
17
17
|
const BorderBox = require('./BorderBox');
|
|
18
18
|
const resolveBoxStyle = require('./resolveBoxStyle');
|
|
19
19
|
const React = require('react');
|
|
20
20
|
|
|
21
21
|
class ElementBox extends React.Component<$FlowFixMeProps> {
|
|
22
22
|
render(): React.Node {
|
|
23
|
+
// $FlowFixMe[underconstrained-implicit-instantiation]
|
|
23
24
|
const style = flattenStyle(this.props.style) || {};
|
|
24
25
|
let margin = resolveBoxStyle('margin', style);
|
|
25
26
|
let padding = resolveBoxStyle('padding', style);
|
|
@@ -123,12 +124,14 @@ function resolveSizeInPlace(
|
|
|
123
124
|
) {
|
|
124
125
|
if (style[direction] !== null && typeof style[direction] === 'string') {
|
|
125
126
|
if (style[direction].indexOf('%') !== -1) {
|
|
127
|
+
// $FlowFixMe[prop-missing]
|
|
126
128
|
style[direction] =
|
|
127
129
|
(parseFloat(style[direction]) / 100.0) *
|
|
128
130
|
Dimensions.get('window')[dimension];
|
|
129
131
|
}
|
|
130
132
|
if (style[direction] === 'auto') {
|
|
131
133
|
// Ignore auto sizing in frame drawing due to complexity of correctly rendering this
|
|
134
|
+
// $FlowFixMe[prop-missing]
|
|
132
135
|
style[direction] = 0;
|
|
133
136
|
}
|
|
134
137
|
}
|
|
@@ -18,7 +18,7 @@ const View = require('../Components/View/View');
|
|
|
18
18
|
const PressabilityDebug = require('../Pressability/PressabilityDebug');
|
|
19
19
|
const {findNodeHandle} = require('../ReactNative/RendererProxy');
|
|
20
20
|
const StyleSheet = require('../StyleSheet/StyleSheet');
|
|
21
|
-
const Dimensions = require('../Utilities/Dimensions');
|
|
21
|
+
const Dimensions = require('../Utilities/Dimensions').default;
|
|
22
22
|
const Platform = require('../Utilities/Platform');
|
|
23
23
|
const getInspectorDataForViewAtPoint = require('./getInspectorDataForViewAtPoint');
|
|
24
24
|
const InspectorOverlay = require('./InspectorOverlay');
|
|
@@ -142,12 +142,11 @@ class Inspector extends React.Component<
|
|
|
142
142
|
// Sync the touched view with React DevTools.
|
|
143
143
|
// Note: This is Paper only. To support Fabric,
|
|
144
144
|
// DevTools needs to be updated to not rely on view tags.
|
|
145
|
-
|
|
145
|
+
const agent = this.state.devtoolsAgent;
|
|
146
|
+
if (agent) {
|
|
147
|
+
agent.selectNode(findNodeHandle(touchedViewTag));
|
|
146
148
|
if (closestInstance != null) {
|
|
147
|
-
|
|
148
|
-
this.state.devtoolsAgent.selectNode(closestInstance);
|
|
149
|
-
} else if (touchedViewTag != null) {
|
|
150
|
-
this.state.devtoolsAgent.selectNode(findNodeHandle(touchedViewTag));
|
|
149
|
+
agent.selectNode(closestInstance);
|
|
151
150
|
}
|
|
152
151
|
}
|
|
153
152
|
|
|
@@ -12,12 +12,14 @@
|
|
|
12
12
|
|
|
13
13
|
import type {TouchedViewDataAtPoint} from '../Renderer/shims/ReactNativeTypes';
|
|
14
14
|
import type {HostRef} from './getInspectorDataForViewAtPoint';
|
|
15
|
+
|
|
16
|
+
// import Dimensions from '../Utilities/Dimensions'; [win32]
|
|
17
|
+
|
|
15
18
|
const ReactNativeStyleAttributes = require('../Components/View/ReactNativeStyleAttributes');
|
|
16
19
|
const PressabilityDebug = require('../Pressability/PressabilityDebug');
|
|
17
20
|
const ReactNative = require('../Renderer/shims/ReactNative');
|
|
18
21
|
const {findNodeHandle} = require('../ReactNative/RendererProxy');
|
|
19
22
|
const StyleSheet = require('../StyleSheet/StyleSheet');
|
|
20
|
-
//const Dimensions = require('../Utilities/Dimensions');
|
|
21
23
|
const Platform = require('../Utilities/Platform');
|
|
22
24
|
const View = require('../Components/View/View');
|
|
23
25
|
const getInspectorDataForViewAtPoint = require('./getInspectorDataForViewAtPoint');
|
|
@@ -144,12 +146,11 @@ class Inspector extends React.Component<
|
|
|
144
146
|
// Sync the touched view with React DevTools.
|
|
145
147
|
// Note: This is Paper only. To support Fabric,
|
|
146
148
|
// DevTools needs to be updated to not rely on view tags.
|
|
147
|
-
|
|
149
|
+
const agent = this.state.devtoolsAgent;
|
|
150
|
+
if (agent) {
|
|
151
|
+
agent.selectNode(findNodeHandle(touchedViewTag));
|
|
148
152
|
if (closestInstance != null) {
|
|
149
|
-
|
|
150
|
-
this.state.devtoolsAgent.selectNode(closestInstance);
|
|
151
|
-
} else if (touchedViewTag != null) {
|
|
152
|
-
this.state.devtoolsAgent.selectNode(findNodeHandle(touchedViewTag));
|
|
153
|
+
agent.selectNode(closestInstance);
|
|
153
154
|
}
|
|
154
155
|
}
|
|
155
156
|
|
|
@@ -15,7 +15,7 @@ import type {PressEvent} from '../Types/CoreEventTypes';
|
|
|
15
15
|
|
|
16
16
|
const View = require('../Components/View/View');
|
|
17
17
|
const StyleSheet = require('../StyleSheet/StyleSheet');
|
|
18
|
-
const Dimensions = require('../Utilities/Dimensions');
|
|
18
|
+
const Dimensions = require('../Utilities/Dimensions').default;
|
|
19
19
|
const ElementBox = require('./ElementBox');
|
|
20
20
|
const React = require('react');
|
|
21
21
|
|
|
@@ -36,7 +36,7 @@ class InspectorOverlay extends React.Component<Props> {
|
|
|
36
36
|
this.props.onTouchPoint(locationX, locationY);
|
|
37
37
|
};
|
|
38
38
|
|
|
39
|
-
|
|
39
|
+
shouldSetResponder: (e: PressEvent) => boolean = (e: PressEvent): boolean => {
|
|
40
40
|
this.findViewForTouchEvent(e);
|
|
41
41
|
return true;
|
|
42
42
|
};
|
|
@@ -54,7 +54,7 @@ class InspectorOverlay extends React.Component<Props> {
|
|
|
54
54
|
|
|
55
55
|
return (
|
|
56
56
|
<View
|
|
57
|
-
onStartShouldSetResponder={this.
|
|
57
|
+
onStartShouldSetResponder={this.shouldSetResponder}
|
|
58
58
|
onResponderMove={this.findViewForTouchEvent}
|
|
59
59
|
nativeID="inspectorOverlay" /* TODO: T68258846. */
|
|
60
60
|
style={[styles.inspector, {height: Dimensions.get('window').height}]}>
|
|
@@ -13,9 +13,10 @@
|
|
|
13
13
|
import type {ViewStyleProp} from '../StyleSheet/StyleSheet';
|
|
14
14
|
import type {PressEvent} from '../Types/CoreEventTypes';
|
|
15
15
|
|
|
16
|
+
// import Dimensions from '../Utilities/Dimensions'; [Win32]
|
|
17
|
+
|
|
16
18
|
const View = require('../Components/View/View');
|
|
17
19
|
const StyleSheet = require('../StyleSheet/StyleSheet');
|
|
18
|
-
// const Dimensions = require('../Utilities/Dimensions'); [Win32]
|
|
19
20
|
const ElementBox = require('./ElementBox');
|
|
20
21
|
const React = require('react');
|
|
21
22
|
|
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
|
|
11
11
|
'use strict';
|
|
12
12
|
|
|
13
|
-
import type {RenderItemProps} from '
|
|
13
|
+
import type {RenderItemProps} from '@react-native/virtualized-lists';
|
|
14
14
|
|
|
15
15
|
const ScrollView = require('../Components/ScrollView/ScrollView');
|
|
16
16
|
const TouchableHighlight = require('../Components/Touchable/TouchableHighlight');
|
|
@@ -27,7 +27,7 @@ type Handler = {
|
|
|
27
27
|
* other events from being processed in a timely manner.
|
|
28
28
|
*
|
|
29
29
|
* The "stall" time is defined as the amount of time in access of the acceptable
|
|
30
|
-
* threshold, which is typically around 100-200ms. So if the
|
|
30
|
+
* threshold, which is typically around 100-200ms. So if the threshold is set to
|
|
31
31
|
* 100 and a timer fires 150 ms later than it was scheduled because the event
|
|
32
32
|
* loop was tied up, that would be considered a 50ms stall.
|
|
33
33
|
*
|
|
@@ -11,7 +11,6 @@
|
|
|
11
11
|
'use strict';
|
|
12
12
|
|
|
13
13
|
import type {PressEvent} from '../Types/CoreEventTypes';
|
|
14
|
-
import type {PanResponderType} from './PanResponder.flow.js';
|
|
15
14
|
|
|
16
15
|
const InteractionManager = require('./InteractionManager');
|
|
17
16
|
const TouchHistoryMath = require('./TouchHistoryMath');
|
|
@@ -191,7 +190,7 @@ type ActiveCallback = (
|
|
|
191
190
|
|
|
192
191
|
type PassiveCallback = (event: PressEvent, gestureState: GestureState) => mixed;
|
|
193
192
|
|
|
194
|
-
type PanHandlers = {|
|
|
193
|
+
export type PanHandlers = {|
|
|
195
194
|
onMoveShouldSetResponder: (event: PressEvent) => boolean,
|
|
196
195
|
onMoveShouldSetResponderCapture: (event: PressEvent) => boolean,
|
|
197
196
|
onResponderEnd: (event: PressEvent) => void,
|
|
@@ -227,7 +226,7 @@ type PanResponderConfig = $ReadOnly<{|
|
|
|
227
226
|
onShouldBlockNativeResponder?: ?ActiveCallback,
|
|
228
227
|
|}>;
|
|
229
228
|
|
|
230
|
-
const PanResponder
|
|
229
|
+
const PanResponder = {
|
|
231
230
|
/**
|
|
232
231
|
*
|
|
233
232
|
* A graphical explanation of the touch data flow:
|
|
@@ -399,10 +398,10 @@ const PanResponder: PanResponderType = {
|
|
|
399
398
|
* accordingly. (numberActiveTouches) may not be totally accurate unless you
|
|
400
399
|
* are the responder.
|
|
401
400
|
*/
|
|
402
|
-
create(config: PanResponderConfig):
|
|
401
|
+
create(config: PanResponderConfig): {
|
|
403
402
|
getInteractionHandle: () => ?number,
|
|
404
403
|
panHandlers: PanHandlers,
|
|
405
|
-
|
|
404
|
+
} {
|
|
406
405
|
const interactionState = {
|
|
407
406
|
handle: (null: ?number),
|
|
408
407
|
};
|
|
@@ -580,4 +579,4 @@ export type PanResponderInstance = $Call<
|
|
|
580
579
|
PanResponderConfig,
|
|
581
580
|
>;
|
|
582
581
|
|
|
583
|
-
|
|
582
|
+
export default PanResponder;
|
|
@@ -17,6 +17,7 @@ import type {
|
|
|
17
17
|
LayoutAnimationType,
|
|
18
18
|
} from '../Renderer/shims/ReactNativeTypes';
|
|
19
19
|
|
|
20
|
+
import {getFabricUIManager} from '../ReactNative/FabricUIManager';
|
|
20
21
|
import ReactNativeFeatureFlags from '../ReactNative/ReactNativeFeatureFlags';
|
|
21
22
|
import Platform from '../Utilities/Platform';
|
|
22
23
|
|
|
@@ -77,7 +78,7 @@ function configureNext(
|
|
|
77
78
|
|
|
78
79
|
// In Fabric, LayoutAnimations are unconditionally enabled for Android, and
|
|
79
80
|
// conditionally enabled on iOS (pending fully shipping; this is a temporary state).
|
|
80
|
-
const FabricUIManager
|
|
81
|
+
const FabricUIManager = getFabricUIManager();
|
|
81
82
|
if (FabricUIManager?.configureNextLayoutAnimation) {
|
|
82
83
|
global?.nativeFabricUIManager?.configureNextLayoutAnimation(
|
|
83
84
|
config,
|
|
@@ -11,7 +11,6 @@
|
|
|
11
11
|
import type {EventSubscription} from '../vendor/emitter/EventEmitter';
|
|
12
12
|
|
|
13
13
|
import NativeEventEmitter from '../EventEmitter/NativeEventEmitter';
|
|
14
|
-
import InteractionManager from '../Interaction/InteractionManager';
|
|
15
14
|
import Platform from '../Utilities/Platform';
|
|
16
15
|
import NativeIntentAndroid from './NativeIntentAndroid';
|
|
17
16
|
import NativeLinkingManager from './NativeLinkingManager';
|
|
@@ -96,9 +95,7 @@ class Linking extends NativeEventEmitter<LinkingEventDefinitions> {
|
|
|
96
95
|
*/
|
|
97
96
|
getInitialURL(): Promise<?string> {
|
|
98
97
|
return Platform.OS === 'android'
|
|
99
|
-
?
|
|
100
|
-
nullthrows(NativeIntentAndroid).getInitialURL(),
|
|
101
|
-
)
|
|
98
|
+
? nullthrows(NativeIntentAndroid).getInitialURL()
|
|
102
99
|
: nullthrows(NativeLinkingManager).getInitialURL();
|
|
103
100
|
}
|
|
104
101
|
|
|
@@ -10,244 +10,10 @@
|
|
|
10
10
|
|
|
11
11
|
'use strict';
|
|
12
12
|
|
|
13
|
-
import
|
|
13
|
+
import {typeof FillRateHelper as FillRateHelperType} from '@react-native/virtualized-lists';
|
|
14
14
|
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
class Info {
|
|
18
|
-
any_blank_count: number = 0;
|
|
19
|
-
any_blank_ms: number = 0;
|
|
20
|
-
any_blank_speed_sum: number = 0;
|
|
21
|
-
mostly_blank_count: number = 0;
|
|
22
|
-
mostly_blank_ms: number = 0;
|
|
23
|
-
pixels_blank: number = 0;
|
|
24
|
-
pixels_sampled: number = 0;
|
|
25
|
-
pixels_scrolled: number = 0;
|
|
26
|
-
total_time_spent: number = 0;
|
|
27
|
-
sample_count: number = 0;
|
|
28
|
-
}
|
|
29
|
-
|
|
30
|
-
type FrameMetrics = {
|
|
31
|
-
inLayout?: boolean,
|
|
32
|
-
length: number,
|
|
33
|
-
offset: number,
|
|
34
|
-
...
|
|
35
|
-
};
|
|
36
|
-
|
|
37
|
-
const DEBUG = false;
|
|
38
|
-
|
|
39
|
-
let _listeners: Array<(Info) => void> = [];
|
|
40
|
-
let _minSampleCount = 10;
|
|
41
|
-
let _sampleRate = DEBUG ? 1 : null;
|
|
42
|
-
|
|
43
|
-
/**
|
|
44
|
-
* A helper class for detecting when the maximem fill rate of `VirtualizedList` is exceeded.
|
|
45
|
-
* By default the sampling rate is set to zero and this will do nothing. If you want to collect
|
|
46
|
-
* samples (e.g. to log them), make sure to call `FillRateHelper.setSampleRate(0.0-1.0)`.
|
|
47
|
-
*
|
|
48
|
-
* Listeners and sample rate are global for all `VirtualizedList`s - typical usage will combine with
|
|
49
|
-
* `SceneTracker.getActiveScene` to determine the context of the events.
|
|
50
|
-
*/
|
|
51
|
-
class FillRateHelper {
|
|
52
|
-
_anyBlankStartTime: ?number = null;
|
|
53
|
-
_enabled = false;
|
|
54
|
-
_getFrameMetrics: (index: number, props: FrameMetricProps) => ?FrameMetrics;
|
|
55
|
-
_info: Info = new Info();
|
|
56
|
-
_mostlyBlankStartTime: ?number = null;
|
|
57
|
-
_samplesStartTime: ?number = null;
|
|
58
|
-
|
|
59
|
-
static addListener(callback: FillRateInfo => void): {
|
|
60
|
-
remove: () => void,
|
|
61
|
-
...
|
|
62
|
-
} {
|
|
63
|
-
if (_sampleRate === null) {
|
|
64
|
-
console.warn('Call `FillRateHelper.setSampleRate` before `addListener`.');
|
|
65
|
-
}
|
|
66
|
-
_listeners.push(callback);
|
|
67
|
-
return {
|
|
68
|
-
remove: () => {
|
|
69
|
-
_listeners = _listeners.filter(listener => callback !== listener);
|
|
70
|
-
},
|
|
71
|
-
};
|
|
72
|
-
}
|
|
73
|
-
|
|
74
|
-
static setSampleRate(sampleRate: number) {
|
|
75
|
-
_sampleRate = sampleRate;
|
|
76
|
-
}
|
|
77
|
-
|
|
78
|
-
static setMinSampleCount(minSampleCount: number) {
|
|
79
|
-
_minSampleCount = minSampleCount;
|
|
80
|
-
}
|
|
81
|
-
|
|
82
|
-
constructor(
|
|
83
|
-
getFrameMetrics: (index: number, props: FrameMetricProps) => ?FrameMetrics,
|
|
84
|
-
) {
|
|
85
|
-
this._getFrameMetrics = getFrameMetrics;
|
|
86
|
-
this._enabled = (_sampleRate || 0) > Math.random();
|
|
87
|
-
this._resetData();
|
|
88
|
-
}
|
|
89
|
-
|
|
90
|
-
activate() {
|
|
91
|
-
if (this._enabled && this._samplesStartTime == null) {
|
|
92
|
-
DEBUG && console.debug('FillRateHelper: activate');
|
|
93
|
-
this._samplesStartTime = global.performance.now();
|
|
94
|
-
}
|
|
95
|
-
}
|
|
96
|
-
|
|
97
|
-
deactivateAndFlush() {
|
|
98
|
-
if (!this._enabled) {
|
|
99
|
-
return;
|
|
100
|
-
}
|
|
101
|
-
const start = this._samplesStartTime; // const for flow
|
|
102
|
-
if (start == null) {
|
|
103
|
-
DEBUG &&
|
|
104
|
-
console.debug('FillRateHelper: bail on deactivate with no start time');
|
|
105
|
-
return;
|
|
106
|
-
}
|
|
107
|
-
if (this._info.sample_count < _minSampleCount) {
|
|
108
|
-
// Don't bother with under-sampled events.
|
|
109
|
-
this._resetData();
|
|
110
|
-
return;
|
|
111
|
-
}
|
|
112
|
-
const total_time_spent = global.performance.now() - start;
|
|
113
|
-
const info: any = {
|
|
114
|
-
...this._info,
|
|
115
|
-
total_time_spent,
|
|
116
|
-
};
|
|
117
|
-
if (DEBUG) {
|
|
118
|
-
const derived = {
|
|
119
|
-
avg_blankness: this._info.pixels_blank / this._info.pixels_sampled,
|
|
120
|
-
avg_speed: this._info.pixels_scrolled / (total_time_spent / 1000),
|
|
121
|
-
avg_speed_when_any_blank:
|
|
122
|
-
this._info.any_blank_speed_sum / this._info.any_blank_count,
|
|
123
|
-
any_blank_per_min:
|
|
124
|
-
this._info.any_blank_count / (total_time_spent / 1000 / 60),
|
|
125
|
-
any_blank_time_frac: this._info.any_blank_ms / total_time_spent,
|
|
126
|
-
mostly_blank_per_min:
|
|
127
|
-
this._info.mostly_blank_count / (total_time_spent / 1000 / 60),
|
|
128
|
-
mostly_blank_time_frac: this._info.mostly_blank_ms / total_time_spent,
|
|
129
|
-
};
|
|
130
|
-
for (const key in derived) {
|
|
131
|
-
// $FlowFixMe[prop-missing]
|
|
132
|
-
derived[key] = Math.round(1000 * derived[key]) / 1000;
|
|
133
|
-
}
|
|
134
|
-
console.debug('FillRateHelper deactivateAndFlush: ', {derived, info});
|
|
135
|
-
}
|
|
136
|
-
_listeners.forEach(listener => listener(info));
|
|
137
|
-
this._resetData();
|
|
138
|
-
}
|
|
139
|
-
|
|
140
|
-
computeBlankness(
|
|
141
|
-
props: {
|
|
142
|
-
...FrameMetricProps,
|
|
143
|
-
initialNumToRender?: ?number,
|
|
144
|
-
...
|
|
145
|
-
},
|
|
146
|
-
cellsAroundViewport: {
|
|
147
|
-
first: number,
|
|
148
|
-
last: number,
|
|
149
|
-
...
|
|
150
|
-
},
|
|
151
|
-
scrollMetrics: {
|
|
152
|
-
dOffset: number,
|
|
153
|
-
offset: number,
|
|
154
|
-
velocity: number,
|
|
155
|
-
visibleLength: number,
|
|
156
|
-
...
|
|
157
|
-
},
|
|
158
|
-
): number {
|
|
159
|
-
if (
|
|
160
|
-
!this._enabled ||
|
|
161
|
-
props.getItemCount(props.data) === 0 ||
|
|
162
|
-
cellsAroundViewport.last < cellsAroundViewport.first ||
|
|
163
|
-
this._samplesStartTime == null
|
|
164
|
-
) {
|
|
165
|
-
return 0;
|
|
166
|
-
}
|
|
167
|
-
const {dOffset, offset, velocity, visibleLength} = scrollMetrics;
|
|
168
|
-
|
|
169
|
-
// Denominator metrics that we track for all events - most of the time there is no blankness and
|
|
170
|
-
// we want to capture that.
|
|
171
|
-
this._info.sample_count++;
|
|
172
|
-
this._info.pixels_sampled += Math.round(visibleLength);
|
|
173
|
-
this._info.pixels_scrolled += Math.round(Math.abs(dOffset));
|
|
174
|
-
const scrollSpeed = Math.round(Math.abs(velocity) * 1000); // px / sec
|
|
175
|
-
|
|
176
|
-
// Whether blank now or not, record the elapsed time blank if we were blank last time.
|
|
177
|
-
const now = global.performance.now();
|
|
178
|
-
if (this._anyBlankStartTime != null) {
|
|
179
|
-
this._info.any_blank_ms += now - this._anyBlankStartTime;
|
|
180
|
-
}
|
|
181
|
-
this._anyBlankStartTime = null;
|
|
182
|
-
if (this._mostlyBlankStartTime != null) {
|
|
183
|
-
this._info.mostly_blank_ms += now - this._mostlyBlankStartTime;
|
|
184
|
-
}
|
|
185
|
-
this._mostlyBlankStartTime = null;
|
|
186
|
-
|
|
187
|
-
let blankTop = 0;
|
|
188
|
-
let first = cellsAroundViewport.first;
|
|
189
|
-
let firstFrame = this._getFrameMetrics(first, props);
|
|
190
|
-
while (
|
|
191
|
-
first <= cellsAroundViewport.last &&
|
|
192
|
-
(!firstFrame || !firstFrame.inLayout)
|
|
193
|
-
) {
|
|
194
|
-
firstFrame = this._getFrameMetrics(first, props);
|
|
195
|
-
first++;
|
|
196
|
-
}
|
|
197
|
-
// Only count blankTop if we aren't rendering the first item, otherwise we will count the header
|
|
198
|
-
// as blank.
|
|
199
|
-
if (firstFrame && first > 0) {
|
|
200
|
-
blankTop = Math.min(
|
|
201
|
-
visibleLength,
|
|
202
|
-
Math.max(0, firstFrame.offset - offset),
|
|
203
|
-
);
|
|
204
|
-
}
|
|
205
|
-
let blankBottom = 0;
|
|
206
|
-
let last = cellsAroundViewport.last;
|
|
207
|
-
let lastFrame = this._getFrameMetrics(last, props);
|
|
208
|
-
while (
|
|
209
|
-
last >= cellsAroundViewport.first &&
|
|
210
|
-
(!lastFrame || !lastFrame.inLayout)
|
|
211
|
-
) {
|
|
212
|
-
lastFrame = this._getFrameMetrics(last, props);
|
|
213
|
-
last--;
|
|
214
|
-
}
|
|
215
|
-
// Only count blankBottom if we aren't rendering the last item, otherwise we will count the
|
|
216
|
-
// footer as blank.
|
|
217
|
-
if (lastFrame && last < props.getItemCount(props.data) - 1) {
|
|
218
|
-
const bottomEdge = lastFrame.offset + lastFrame.length;
|
|
219
|
-
blankBottom = Math.min(
|
|
220
|
-
visibleLength,
|
|
221
|
-
Math.max(0, offset + visibleLength - bottomEdge),
|
|
222
|
-
);
|
|
223
|
-
}
|
|
224
|
-
const pixels_blank = Math.round(blankTop + blankBottom);
|
|
225
|
-
const blankness = pixels_blank / visibleLength;
|
|
226
|
-
if (blankness > 0) {
|
|
227
|
-
this._anyBlankStartTime = now;
|
|
228
|
-
this._info.any_blank_speed_sum += scrollSpeed;
|
|
229
|
-
this._info.any_blank_count++;
|
|
230
|
-
this._info.pixels_blank += pixels_blank;
|
|
231
|
-
if (blankness > 0.5) {
|
|
232
|
-
this._mostlyBlankStartTime = now;
|
|
233
|
-
this._info.mostly_blank_count++;
|
|
234
|
-
}
|
|
235
|
-
} else if (scrollSpeed < 0.01 || Math.abs(dOffset) < 1) {
|
|
236
|
-
this.deactivateAndFlush();
|
|
237
|
-
}
|
|
238
|
-
return blankness;
|
|
239
|
-
}
|
|
240
|
-
|
|
241
|
-
enabled(): boolean {
|
|
242
|
-
return this._enabled;
|
|
243
|
-
}
|
|
244
|
-
|
|
245
|
-
_resetData() {
|
|
246
|
-
this._anyBlankStartTime = null;
|
|
247
|
-
this._info = new Info();
|
|
248
|
-
this._mostlyBlankStartTime = null;
|
|
249
|
-
this._samplesStartTime = null;
|
|
250
|
-
}
|
|
251
|
-
}
|
|
15
|
+
const FillRateHelper: FillRateHelperType =
|
|
16
|
+
require('@react-native/virtualized-lists').FillRateHelper;
|
|
252
17
|
|
|
18
|
+
export type {FillRateInfo} from '@react-native/virtualized-lists';
|
|
253
19
|
module.exports = FillRateHelper;
|