From 178b464e8df768f2ff00548f2b0a0bd2898ca734 Mon Sep 17 00:00:00 2001 From: Zeya Peng Date: Tue, 30 Jun 2026 06:44:37 -0700 Subject: [PATCH] Remove animatedShouldUseSingleOp feature flag (#57364) Summary: The single-op batching guard now lives entirely in `NativeAnimatedHelper`, where `isSingleOpBatching` is gated on `Platform.OS === 'android'`, `queueAndExecuteBatchedOperations` being available, and `!cxxNativeAnimatedEnabled()`. The `animatedShouldUseSingleOp` flag defaulted to `true` and no longer carries any of that logic, so it is fully redundant. Remove the flag from the config, drop its now-vestigial term from `isSingleOpBatching` in both `NativeAnimatedHelper.js` and the macOS variant, and regenerate `ReactNativeFeatureFlags.js`. This is behavior-preserving: with the flag at its default `true`, `isSingleOpBatching` evaluates identically to before on every platform. Changelog: [Internal] Reviewed By: javache Differential Revision: D109570192 --- .../featureflags/ReactNativeFeatureFlags.config.js | 11 ----------- .../src/private/animated/NativeAnimatedHelper.js | 1 - .../private/featureflags/ReactNativeFeatureFlags.js | 8 +------- 3 files changed, 1 insertion(+), 19 deletions(-) diff --git a/packages/react-native/scripts/featureflags/ReactNativeFeatureFlags.config.js b/packages/react-native/scripts/featureflags/ReactNativeFeatureFlags.config.js index b8e24abd1a00..02294e0278c4 100644 --- a/packages/react-native/scripts/featureflags/ReactNativeFeatureFlags.config.js +++ b/packages/react-native/scripts/featureflags/ReactNativeFeatureFlags.config.js @@ -981,17 +981,6 @@ const definitions: FeatureFlagDefinitions = { }, ossReleaseStage: 'none', }, - animatedShouldUseSingleOp: { - defaultValue: true, - metadata: { - dateAdded: '2024-02-05', - description: - '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.', - expectedReleaseValue: true, - purpose: 'experimentation', - }, - ossReleaseStage: 'none', - }, deferFlatListFocusChangeRenderUpdate: { defaultValue: false, metadata: { diff --git a/packages/react-native/src/private/animated/NativeAnimatedHelper.js b/packages/react-native/src/private/animated/NativeAnimatedHelper.js index 03d7f5c1c23b..da9fb941aebb 100644 --- a/packages/react-native/src/private/animated/NativeAnimatedHelper.js +++ b/packages/react-native/src/private/animated/NativeAnimatedHelper.js @@ -56,7 +56,6 @@ const singleOpQueue: Array = []; const isSingleOpBatching = Platform.OS === 'android' && NativeAnimatedModule?.queueAndExecuteBatchedOperations != null && - ReactNativeFeatureFlags.animatedShouldUseSingleOp() && !ReactNativeFeatureFlags.cxxNativeAnimatedEnabled(); let flushQueueImmediate = null; diff --git a/packages/react-native/src/private/featureflags/ReactNativeFeatureFlags.js b/packages/react-native/src/private/featureflags/ReactNativeFeatureFlags.js index cebd1193a628..521776f66b79 100644 --- a/packages/react-native/src/private/featureflags/ReactNativeFeatureFlags.js +++ b/packages/react-native/src/private/featureflags/ReactNativeFeatureFlags.js @@ -4,7 +4,7 @@ * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. * - * @generated SignedSource<<5e80ae1ef75d1fbf51fd94cd5495157f>> + * @generated SignedSource<<7b617acfec15f418c1d9fca60fdb3dd5>> * @flow strict * @noformat */ @@ -32,7 +32,6 @@ export type ReactNativeFeatureFlagsJsOnly = Readonly<{ animatedDeferStartOfTimingAnimations: Getter, animatedForceNativeDriver: Getter, animatedShouldSyncValueBeforeStartCallback: Getter, - animatedShouldUseSingleOp: Getter, deferFlatListFocusChangeRenderUpdate: Getter, enableImperativeEvents: Getter, enableNativeEventTargetEventDispatching: Getter, @@ -155,11 +154,6 @@ export const animatedForceNativeDriver: Getter = createJavaScriptFlagGe */ export const animatedShouldSyncValueBeforeStartCallback: Getter = createJavaScriptFlagGetter('animatedShouldSyncValueBeforeStartCallback', true); -/** - * 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. - */ -export const animatedShouldUseSingleOp: Getter = createJavaScriptFlagGetter('animatedShouldUseSingleOp', true); - /** * Use the deferred cell render update mechanism for focus change in FlatList. */