mirror of
https://github.com/facebook/react-native.git
synced 2025-11-01 09:14:26 +00:00
35e2a63b8d
Summary: We introduce a few optimizations: (1) Previous diff: We defer calling any NativeAnimatedModule methods by waiting 1ms before flushing the queue, and debouncing until no flush is requested. Practically, this just means that we'll call NativeAnimatedModule methods N times at once, at the end of a render loop, instead of N times smeared throughout the render loop. (2) Additionally, instead of calling N methods, we create multi-operation argument buffer and call a single NativeAnimatedModule API, which should essentially throttle NativeAnimatedModule API calls to once-ish per frame. On the native side, this also reduces a lot of overhead associated with scheduling work on the UI thread (we schedule 1 function to run on the UI thread and perform N operations, as opposed to scheduling N functions to run on the UI thread). TODO: - implement stubs for iOS - write gating code so this can be properly tested in VR and in fb4a Changelog: [Internal] Reviewed By: genkikondo Differential Revision: D36338606 fbshipit-source-id: 29ac949b53b874683128a76525586c22def3143b
52 lines
1.6 KiB
JavaScript
52 lines
1.6 KiB
JavaScript
/**
|
|
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
*
|
|
* This source code is licensed under the MIT license found in the
|
|
* LICENSE file in the root directory of this source tree.
|
|
*
|
|
* @flow strict-local
|
|
* @format
|
|
*/
|
|
|
|
'use strict';
|
|
|
|
export type FeatureFlags = {|
|
|
/**
|
|
* Function used to enable / disabled Layout Animations in React Native.
|
|
* Default value = true.
|
|
*/
|
|
isLayoutAnimationEnabled: () => boolean,
|
|
/**
|
|
* Function used to enable / disable W3C pointer event emitting in React Native.
|
|
* If enabled you must also flip the equivalent native flags on each platform:
|
|
* iOS -> RCTSetDispatchW3CPointerEvents
|
|
* Android -> ReactFeatureFlags.dispatchPointerEvents
|
|
*/
|
|
shouldEmitW3CPointerEvents: () => boolean,
|
|
/**
|
|
* Function used to enable / disable Pressibility from using W3C Pointer Events
|
|
* for its hover callbacks
|
|
*/
|
|
shouldPressibilityUseW3CPointerEventsForHover: () => boolean,
|
|
/**
|
|
* Enables an experimental flush-queue debouncing in Animated.js.
|
|
*/
|
|
animatedShouldDebounceQueueFlush: () => boolean,
|
|
/**
|
|
* Enables an experimental mega-operation for Animated.js that replaces
|
|
* many calls to native with a single call into native, to reduce JSI/JNI
|
|
* traffic.
|
|
*/
|
|
animatedShouldUseSingleOp: () => boolean,
|
|
|};
|
|
|
|
const ReactNativeFeatureFlags: FeatureFlags = {
|
|
isLayoutAnimationEnabled: () => true,
|
|
shouldEmitW3CPointerEvents: () => false,
|
|
shouldPressibilityUseW3CPointerEventsForHover: () => false,
|
|
animatedShouldDebounceQueueFlush: () => false,
|
|
animatedShouldUseSingleOp: () => false,
|
|
};
|
|
|
|
module.exports = ReactNativeFeatureFlags;
|