@samitouri / QOS-React-1 / commits / 0aab065eb3

Add `alwaysThrottleDisappearingFallbacks` Flag (#28550)

## Summary Creates a new `alwaysThrottleDisappearingFallbacks` feature flag that gates the changes from https://github.com/facebook/react/pull/26802 (instead of being controlled by `alwaysThrottleRetries`). The values of this new flag mirror the current values of `alwaysThrottleRetries` such that there is no behavior difference. This additional feature flag allows us to incrementally validate the change (arguably bug fix) from https://github.com/facebook/react/pull/26802 independently from `alwaysThrottleRetries`. ## How did you test this change? ``` $ yarn test $ yarn flow dom-browser $ yarn flow dom-fb $ yarn flow fabric ```

Timothy Yung committed Mar 18, 2024 at 11:16 UTC 0aab065eb3250a9714a62dc05587cbb571da7f71
11 files changed +13 -2
packages/react-reconciler/src/ReactFiberCommitWork.js
+2 -2
@@ -40,6 +40,7 @@ import type {
40 } from './ReactFiberTracingMarkerComponent';
41
42 import {
43 + alwaysThrottleDisappearingFallbacks,
44 enableCreateEventHandleAPI,
45 enableProfilerTimer,
46 enableProfilerCommitHooks,
@@ -53,7 +54,6 @@ import {
54 enableUseEffectEventHook,
55 enableFloat,
56 enableLegacyHidden,
56 - alwaysThrottleRetries,
57 disableStringRefs,
58 } from 'shared/ReactFeatureFlags';
59 import {
@@ -2896,7 +2896,7 @@ function commitMutationEffectsOnFiber(
2896 current !== null &&
2897 (current.memoizedState: SuspenseState | null) !== null;
2898
2899 - if (alwaysThrottleRetries) {
2899 + if (alwaysThrottleDisappearingFallbacks) {
2900 if (isShowingFallback !== wasShowingFallback) {
2901 // A fallback is either appearing or disappearing.
2902 markCommitTimeOfFallback();
packages/shared/ReactFeatureFlags.js
+2
@@ -113,6 +113,8 @@ export const enableUseEffectEventHook = __EXPERIMENTAL__;
113 // (handled with an MutationObserver) instead of inline-scripts
114 export const enableFizzExternalRuntime = true;
115
116 +export const alwaysThrottleDisappearingFallbacks = true;
117 +
118 export const alwaysThrottleRetries = true;
119
120 export const passChildrenWhenCloningPersistedNodes = false;
packages/shared/forks/ReactFeatureFlags.native-fb-dynamic.js
+1
@@ -20,6 +20,7 @@ import typeof * as DynamicFlagsType from 'ReactNativeInternalFeatureFlags';
20 // flag here but it won't be set to `true` in any of our test runs. Need to
21 // update the test configuration.
22
23 +export const alwaysThrottleDisappearingFallbacks = __VARIANT__;
24 export const alwaysThrottleRetries = __VARIANT__;
25 export const consoleManagedByDevToolsDuringStrictMode = __VARIANT__;
26 export const enableAsyncActions = __VARIANT__;
packages/shared/forks/ReactFeatureFlags.native-fb.js
+1
@@ -18,6 +18,7 @@ import * as dynamicFlags from 'ReactNativeInternalFeatureFlags';
18 // We destructure each value before re-exporting to avoid a dynamic look-up on
19 // the exports object every time a flag is read.
20 export const {
21 + alwaysThrottleDisappearingFallbacks,
22 alwaysThrottleRetries,
23 consoleManagedByDevToolsDuringStrictMode,
24 enableAsyncActions,
packages/shared/forks/ReactFeatureFlags.native-oss.js
+1
@@ -86,6 +86,7 @@ export const enableInfiniteRenderLoopDetection = false;
86
87 export const enableAsyncActions = false;
88
89 +export const alwaysThrottleDisappearingFallbacks = false;
90 export const alwaysThrottleRetries = false;
91
92 export const passChildrenWhenCloningPersistedNodes = false;
packages/shared/forks/ReactFeatureFlags.test-renderer.js
+1
@@ -76,6 +76,7 @@ export const enableDeferRootSchedulingToMicrotask = true;
76
77 export const enableAsyncActions = true;
78
79 +export const alwaysThrottleDisappearingFallbacks = true;
80 export const alwaysThrottleRetries = true;
81
82 export const passChildrenWhenCloningPersistedNodes = false;
packages/shared/forks/ReactFeatureFlags.test-renderer.native.js
+1
@@ -77,6 +77,7 @@ export const enableDeferRootSchedulingToMicrotask = false;
77
78 export const enableAsyncActions = true;
79
80 +export const alwaysThrottleDisappearingFallbacks = true;
81 export const alwaysThrottleRetries = true;
82
83 export const passChildrenWhenCloningPersistedNodes = false;
packages/shared/forks/ReactFeatureFlags.test-renderer.www.js
+1
@@ -78,6 +78,7 @@ export const enableDeferRootSchedulingToMicrotask = true;
78
79 export const enableAsyncActions = true;
80
81 +export const alwaysThrottleDisappearingFallbacks = false;
82 export const alwaysThrottleRetries = true;
83
84 export const passChildrenWhenCloningPersistedNodes = false;
packages/shared/forks/ReactFeatureFlags.www-dynamic.js
+1
@@ -23,6 +23,7 @@ export const forceConcurrentByDefaultForTesting = __VARIANT__;
23 export const enableUnifiedSyncLane = __VARIANT__;
24 export const enableTransitionTracing = __VARIANT__;
25 export const enableDeferRootSchedulingToMicrotask = __VARIANT__;
26 +export const alwaysThrottleDisappearingFallbacks = __VARIANT__;
27 export const alwaysThrottleRetries = __VARIANT__;
28 export const enableDO_NOT_USE_disableStrictPassiveEffect = __VARIANT__;
29 export const enableUseDeferredValueInitialArg = __VARIANT__;
packages/shared/forks/ReactFeatureFlags.www.js
+1
@@ -26,6 +26,7 @@ export const {
26 enableRetryLaneExpiration,
27 enableTransitionTracing,
28 enableDeferRootSchedulingToMicrotask,
29 + alwaysThrottleDisappearingFallbacks,
30 alwaysThrottleRetries,
31 enableDO_NOT_USE_disableStrictPassiveEffect,
32 disableSchedulerTimeoutInWorkLoop,
scripts/flow/xplat.js
+1
@@ -8,6 +8,7 @@
8 */
9
10 declare module 'ReactNativeInternalFeatureFlags' {
11 + declare export var alwaysThrottleDisappearingFallbacks: boolean;
12 declare export var alwaysThrottleRetries: boolean;
13 declare export var consoleManagedByDevToolsDuringStrictMode: boolean;
14 declare export var enableAsyncActions: boolean;