From cdc8ee977af9c6314e6dacd5f8f4474e1ea6d98e Mon Sep 17 00:00:00 2001 From: Samuel Susla Date: Fri, 9 Feb 2024 09:46:42 +0000 Subject: [PATCH] unify feature flags between fb and oss for React Native renderer (#28269) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit # Affected flags: ### alwaysThrottleRetries In RN OSS changed from `true` to `false`. This is what FB build uses. This flag was a root cause for big perf regression internally. ### enableDeferRootSchedulingToMicrotask In RN OSS build changed from `true` to `false`. This is what FB build uses. ### debugRenderPhaseSideEffectsForStrictMode Changed from true to __DEV__ in FB and OSS build. The flag is only used in debug builds and was previously `false` in RN OSS builds ### enableUnifiedSyncLane Changed from `__VARIANT__` to `true` in FB build. This is what OSS build uses. This flag is shipped internally. cc @tyao1 ### enableLegacyHidden In RN FB changed from `true` to `false`. This is what OSS uses. ### allowConcurrentByDefault In RN FB changed from `true` to `false`. I ran `yarn flags --diff rn rn-fb` to get the difference between feature flags and unify them. ## Before ``` yarn run v1.22.19 $ node ./scripts/flags/flags.js --diff rn rn-fb ┌───────────────────────────────────────────────┬────────┬───────┐ │ (index) │ RN OSS │ RN FB │ ├───────────────────────────────────────────────┼────────┼───────┤ │ allowConcurrentByDefault │ '❌' │ '✅' │ │ debugRenderPhaseSideEffectsForStrictMode │ '❌' │ '✅' │ │ disableModulePatternComponents │ '❌' │ '✅' │ │ enableCPUSuspense │ '❌' │ '✅' │ │ enableCacheElement │ '❌' │ '✅' │ │ enableGetInspectorDataForInstanceInProduction │ '❌' │ '✅' │ │ enableLegacyHidden │ '❌' │ '✅' │ │ enableSchedulingProfiler │ '❌' │ '📊' │ │ enableUseDeferredValueInitialArg │ '❌' │ '✅' │ │ enableUseMemoCacheHook │ '❌' │ '✅' │ │ enableUseRefAccessWarning │ '❌' │ '🧪' │ │ passChildrenWhenCloningPersistedNodes │ '❌' │ '🧪' │ │ useMicrotasksForSchedulingInFabric │ '❌' │ '🧪' │ │ alwaysThrottleRetries │ '✅' │ '🧪' │ │ enableDeferRootSchedulingToMicrotask │ '✅' │ '🧪' │ │ enableUnifiedSyncLane │ '✅' │ '🧪' │ └───────────────────────────────────────────────┴────────┴───────┘ ``` ## After ``` yarn run v1.22.19 $ node ./scripts/flags/flags.js --diff rn rn-fb ┌───────────────────────────────────────────────┬────────┬───────┐ │ (index) │ RN OSS │ RN FB │ ├───────────────────────────────────────────────┼────────┼───────┤ │ alwaysThrottleRetries │ '❌' │ '🧪' │ │ disableModulePatternComponents │ '❌' │ '✅' │ │ enableCPUSuspense │ '❌' │ '✅' │ │ enableCacheElement │ '❌' │ '✅' │ │ enableDeferRootSchedulingToMicrotask │ '❌' │ '🧪' │ │ enableGetInspectorDataForInstanceInProduction │ '❌' │ '✅' │ │ enableSchedulingProfiler │ '❌' │ '📊' │ │ enableUseDeferredValueInitialArg │ '❌' │ '✅' │ │ enableUseMemoCacheHook │ '❌' │ '✅' │ │ enableUseRefAccessWarning │ '❌' │ '🧪' │ │ passChildrenWhenCloningPersistedNodes │ '❌' │ '🧪' │ │ useMicrotasksForSchedulingInFabric │ '❌' │ '🧪' │ └───────────────────────────────────────────────┴────────┴───────┘ ``` --- .../shared/forks/ReactFeatureFlags.native-fb-dynamic.js | 1 - packages/shared/forks/ReactFeatureFlags.native-fb.js | 8 ++++---- packages/shared/forks/ReactFeatureFlags.native-oss.js | 6 +++--- .../forks/ReactFeatureFlags.test-renderer.native.js | 2 +- scripts/flow/xplat.js | 1 - 5 files changed, 8 insertions(+), 10 deletions(-) diff --git a/packages/shared/forks/ReactFeatureFlags.native-fb-dynamic.js b/packages/shared/forks/ReactFeatureFlags.native-fb-dynamic.js index 91a518a905154..c87bda1f57c19 100644 --- a/packages/shared/forks/ReactFeatureFlags.native-fb-dynamic.js +++ b/packages/shared/forks/ReactFeatureFlags.native-fb-dynamic.js @@ -22,7 +22,6 @@ import typeof * as DynamicFlagsType from 'ReactNativeInternalFeatureFlags'; export const alwaysThrottleRetries = __VARIANT__; export const enableDeferRootSchedulingToMicrotask = __VARIANT__; -export const enableUnifiedSyncLane = __VARIANT__; export const enableUseRefAccessWarning = __VARIANT__; export const passChildrenWhenCloningPersistedNodes = __VARIANT__; export const useMicrotasksForSchedulingInFabric = __VARIANT__; diff --git a/packages/shared/forks/ReactFeatureFlags.native-fb.js b/packages/shared/forks/ReactFeatureFlags.native-fb.js index 2ff22ed4053cf..3d0c70ef5f8d6 100644 --- a/packages/shared/forks/ReactFeatureFlags.native-fb.js +++ b/packages/shared/forks/ReactFeatureFlags.native-fb.js @@ -20,7 +20,6 @@ import * as dynamicFlags from 'ReactNativeInternalFeatureFlags'; export const { alwaysThrottleRetries, enableDeferRootSchedulingToMicrotask, - enableUnifiedSyncLane, enableUseRefAccessWarning, passChildrenWhenCloningPersistedNodes, useMicrotasksForSchedulingInFabric, @@ -44,13 +43,14 @@ export const enableFormActions = true; // Doesn't affect Native export const enableBinaryFlight = true; export const enableTaint = true; export const enablePostpone = false; -export const debugRenderPhaseSideEffectsForStrictMode = true; +export const debugRenderPhaseSideEffectsForStrictMode = __DEV__; export const disableJavaScriptURLs = false; export const disableCommentsAsDOMContainers = true; export const disableInputAttributeSyncing = false; export const disableIEWorkarounds = true; export const replayFailedUnitOfWorkWithInvokeGuardedCallback = __DEV__; export const enableScopeAPI = false; +export const enableUnifiedSyncLane = true; export const enableCreateEventHandleAPI = false; export const enableSuspenseCallback = false; export const disableLegacyContext = false; @@ -74,9 +74,9 @@ export const transitionLaneExpirationMs = 5000; export const disableSchedulerTimeoutInWorkLoop = false; export const enableLazyContextPropagation = false; -export const enableLegacyHidden = true; +export const enableLegacyHidden = false; export const forceConcurrentByDefaultForTesting = false; -export const allowConcurrentByDefault = true; +export const allowConcurrentByDefault = false; export const enableCustomElementPropertySupport = false; export const consoleManagedByDevToolsDuringStrictMode = false; diff --git a/packages/shared/forks/ReactFeatureFlags.native-oss.js b/packages/shared/forks/ReactFeatureFlags.native-oss.js index 82a903537ca9f..b9705b2762a5f 100644 --- a/packages/shared/forks/ReactFeatureFlags.native-oss.js +++ b/packages/shared/forks/ReactFeatureFlags.native-oss.js @@ -10,7 +10,7 @@ import typeof * as FeatureFlagsType from 'shared/ReactFeatureFlags'; import typeof * as ExportsType from './ReactFeatureFlags.native-oss'; -export const debugRenderPhaseSideEffectsForStrictMode = false; +export const debugRenderPhaseSideEffectsForStrictMode = __DEV__; export const enableDebugTracing = false; export const enableAsyncDebugInfo = false; export const enableSchedulingProfiler = false; @@ -74,11 +74,11 @@ export const enableFloat = true; export const useModernStrictMode = false; export const enableDO_NOT_USE_disableStrictPassiveEffect = false; export const enableFizzExternalRuntime = false; -export const enableDeferRootSchedulingToMicrotask = true; +export const enableDeferRootSchedulingToMicrotask = false; export const enableAsyncActions = false; -export const alwaysThrottleRetries = true; +export const alwaysThrottleRetries = false; export const useMicrotasksForSchedulingInFabric = false; export const passChildrenWhenCloningPersistedNodes = false; diff --git a/packages/shared/forks/ReactFeatureFlags.test-renderer.native.js b/packages/shared/forks/ReactFeatureFlags.test-renderer.native.js index ac23fa99c85c4..51a47ee52f2ac 100644 --- a/packages/shared/forks/ReactFeatureFlags.test-renderer.native.js +++ b/packages/shared/forks/ReactFeatureFlags.test-renderer.native.js @@ -71,7 +71,7 @@ export const enableFloat = true; export const useModernStrictMode = false; export const enableDO_NOT_USE_disableStrictPassiveEffect = false; -export const enableDeferRootSchedulingToMicrotask = true; +export const enableDeferRootSchedulingToMicrotask = false; export const enableAsyncActions = true; diff --git a/scripts/flow/xplat.js b/scripts/flow/xplat.js index b2c4709a3b566..223a5f7d90300 100644 --- a/scripts/flow/xplat.js +++ b/scripts/flow/xplat.js @@ -10,7 +10,6 @@ declare module 'ReactNativeInternalFeatureFlags' { declare export var alwaysThrottleRetries: boolean; declare export var enableDeferRootSchedulingToMicrotask: boolean; - declare export var enableUnifiedSyncLane: boolean; declare export var enableUseRefAccessWarning: boolean; declare export var passChildrenWhenCloningPersistedNodes: boolean; declare export var useMicrotasksForSchedulingInFabric: boolean;