@samitouri / QOS-React-1 / commits / 36b078cc7a

unify feature flags between fb and oss for React Native renderer (#28269)

# 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 │ '❌' │ '🧪' │ └───────────────────────────────────────────────┴────────┴───────┘ ```

Samuel Susla committed Feb 9, 2024 at 09:46 UTC 36b078cc7a50ad0cd66e7f6b4b8e4a1295e47f67
5 files changed +8 -10
packages/shared/forks/ReactFeatureFlags.native-fb-dynamic.js
-1
@@ -22,7 +22,6 @@ import typeof * as DynamicFlagsType from 'ReactNativeInternalFeatureFlags';
22
23 export const alwaysThrottleRetries = __VARIANT__;
24 export const enableDeferRootSchedulingToMicrotask = __VARIANT__;
25 -export const enableUnifiedSyncLane = __VARIANT__;
25 export const enableUseRefAccessWarning = __VARIANT__;
26 export const passChildrenWhenCloningPersistedNodes = __VARIANT__;
27 export const useMicrotasksForSchedulingInFabric = __VARIANT__;
packages/shared/forks/ReactFeatureFlags.native-fb.js
+4 -4
@@ -20,7 +20,6 @@ import * as dynamicFlags from 'ReactNativeInternalFeatureFlags';
20 export const {
21 alwaysThrottleRetries,
22 enableDeferRootSchedulingToMicrotask,
23 - enableUnifiedSyncLane,
23 enableUseRefAccessWarning,
24 passChildrenWhenCloningPersistedNodes,
25 useMicrotasksForSchedulingInFabric,
@@ -44,13 +43,14 @@ export const enableFormActions = true; // Doesn't affect Native
43 export const enableBinaryFlight = true;
44 export const enableTaint = true;
45 export const enablePostpone = false;
47 -export const debugRenderPhaseSideEffectsForStrictMode = true;
46 +export const debugRenderPhaseSideEffectsForStrictMode = __DEV__;
47 export const disableJavaScriptURLs = false;
48 export const disableCommentsAsDOMContainers = true;
49 export const disableInputAttributeSyncing = false;
50 export const disableIEWorkarounds = true;
51 export const replayFailedUnitOfWorkWithInvokeGuardedCallback = __DEV__;
52 export const enableScopeAPI = false;
53 +export const enableUnifiedSyncLane = true;
54 export const enableCreateEventHandleAPI = false;
55 export const enableSuspenseCallback = false;
56 export const disableLegacyContext = false;
@@ -74,9 +74,9 @@ export const transitionLaneExpirationMs = 5000;
74
75 export const disableSchedulerTimeoutInWorkLoop = false;
76 export const enableLazyContextPropagation = false;
77 -export const enableLegacyHidden = true;
77 +export const enableLegacyHidden = false;
78 export const forceConcurrentByDefaultForTesting = false;
79 -export const allowConcurrentByDefault = true;
79 +export const allowConcurrentByDefault = false;
80 export const enableCustomElementPropertySupport = false;
81
82 export const consoleManagedByDevToolsDuringStrictMode = false;
packages/shared/forks/ReactFeatureFlags.native-oss.js
+3 -3
@@ -10,7 +10,7 @@
10 import typeof * as FeatureFlagsType from 'shared/ReactFeatureFlags';
11 import typeof * as ExportsType from './ReactFeatureFlags.native-oss';
12
13 -export const debugRenderPhaseSideEffectsForStrictMode = false;
13 +export const debugRenderPhaseSideEffectsForStrictMode = __DEV__;
14 export const enableDebugTracing = false;
15 export const enableAsyncDebugInfo = false;
16 export const enableSchedulingProfiler = false;
@@ -74,11 +74,11 @@ export const enableFloat = true;
74 export const useModernStrictMode = false;
75 export const enableDO_NOT_USE_disableStrictPassiveEffect = false;
76 export const enableFizzExternalRuntime = false;
77 -export const enableDeferRootSchedulingToMicrotask = true;
77 +export const enableDeferRootSchedulingToMicrotask = false;
78
79 export const enableAsyncActions = false;
80
81 -export const alwaysThrottleRetries = true;
81 +export const alwaysThrottleRetries = false;
82
83 export const useMicrotasksForSchedulingInFabric = false;
84 export const passChildrenWhenCloningPersistedNodes = false;
packages/shared/forks/ReactFeatureFlags.test-renderer.native.js
+1 -1
@@ -71,7 +71,7 @@ export const enableFloat = true;
71
72 export const useModernStrictMode = false;
73 export const enableDO_NOT_USE_disableStrictPassiveEffect = false;
74 -export const enableDeferRootSchedulingToMicrotask = true;
74 +export const enableDeferRootSchedulingToMicrotask = false;
75
76 export const enableAsyncActions = true;
77
scripts/flow/xplat.js
-1
@@ -10,7 +10,6 @@
10 declare module 'ReactNativeInternalFeatureFlags' {
11 declare export var alwaysThrottleRetries: boolean;
12 declare export var enableDeferRootSchedulingToMicrotask: boolean;
13 - declare export var enableUnifiedSyncLane: boolean;
13 declare export var enableUseRefAccessWarning: boolean;
14 declare export var passChildrenWhenCloningPersistedNodes: boolean;
15 declare export var useMicrotasksForSchedulingInFabric: boolean;