Add back disableSchedulerTimeoutInWorkLoop flag (#20482)
* Add back enableSchedulerTimeoutInWorkLoop flag * Nvm, keep it as disableSchedulerTimeoutInWorkLoop
Ricky committed
Dec 17, 2020 at 17:17 UTC
5687864eb77f2a43eefa1681f2d097490832f002
12 files changed
+39
-2
packages/react-reconciler/src/ReactFiberWorkLoop.new.js
+14
-1
@@ -31,6 +31,7 @@ import {
31
enableDebugTracing,
32
enableSchedulingProfiler,
33
enableScopeAPI,
34
+ disableSchedulerTimeoutInWorkLoop,
35
} from 'shared/ReactFeatureFlags';
36
import ReactSharedInternals from 'shared/ReactSharedInternals';
37
import invariant from 'shared/invariant';
@@ -767,7 +768,7 @@ function ensureRootIsScheduled(root: FiberRoot, currentTime: number) {
768
769
// This is the entry point for every concurrent task, i.e. anything that
770
// goes through Scheduler.
770
-function performConcurrentWorkOnRoot(root) {
771
+function performConcurrentWorkOnRoot(root, didTimeout) {
772
if (enableProfilerTimer && enableProfilerNestedUpdatePhase) {
773
resetNestedUpdateFlag();
774
}
@@ -811,6 +812,18 @@ function performConcurrentWorkOnRoot(root) {
812
return null;
813
}
814
815
+ // TODO: We only check `didTimeout` defensively, to account for a Scheduler
816
+ // bug we're still investigating. Once the bug in Scheduler is fixed,
817
+ // we can remove this, since we track expiration ourselves.
818
+ if (!disableSchedulerTimeoutInWorkLoop && didTimeout) {
819
+ // Something expired. Flush synchronously until there's no expired
820
+ // work left.
821
+ markRootExpired(root, lanes);
822
+ // This will schedule a synchronous callback.
823
+ ensureRootIsScheduled(root, now());
824
+ return null;
825
+ }
826
+
827
let exitStatus = renderRootConcurrent(root, lanes);
828
829
if (
packages/react-reconciler/src/ReactFiberWorkLoop.old.js
+14
-1
@@ -33,6 +33,7 @@ import {
33
enableSchedulingProfiler,
34
enableScopeAPI,
35
enableDoubleInvokingEffects,
36
+ disableSchedulerTimeoutInWorkLoop,
37
} from 'shared/ReactFeatureFlags';
38
import ReactSharedInternals from 'shared/ReactSharedInternals';
39
import invariant from 'shared/invariant';
@@ -775,7 +776,7 @@ function ensureRootIsScheduled(root: FiberRoot, currentTime: number) {
776
777
// This is the entry point for every concurrent task, i.e. anything that
778
// goes through Scheduler.
778
-function performConcurrentWorkOnRoot(root) {
779
+function performConcurrentWorkOnRoot(root, didTimeout) {
780
if (enableProfilerTimer && enableProfilerNestedUpdatePhase) {
781
resetNestedUpdateFlag();
782
}
@@ -819,6 +820,18 @@ function performConcurrentWorkOnRoot(root) {
820
return null;
821
}
822
823
+ // TODO: We only check `didTimeout` defensively, to account for a Scheduler
824
+ // bug we're still investigating. Once the bug in Scheduler is fixed,
825
+ // we can remove this, since we track expiration ourselves.
826
+ if (!disableSchedulerTimeoutInWorkLoop && didTimeout) {
827
+ // Something expired. Flush synchronously until there's no expired
828
+ // work left.
829
+ markRootExpired(root, lanes);
830
+ // This will schedule a synchronous callback.
831
+ ensureRootIsScheduled(root, now());
832
+ return null;
833
+ }
834
+
835
let exitStatus = renderRootConcurrent(root, lanes);
836
837
if (
packages/shared/ReactFeatureFlags.js
+2
@@ -141,3 +141,5 @@ export const enableDoubleInvokingEffects = false;
141
export const enableUseRefAccessWarning = false;
142
143
export const enableRecursiveCommitTraversal = false;
144
+
145
+export const disableSchedulerTimeoutInWorkLoop = false;
packages/shared/forks/ReactFeatureFlags.native-fb.js
+1
@@ -56,6 +56,7 @@ export const enableDoubleInvokingEffects = false;
56
export const enableUseRefAccessWarning = false;
57
58
export const enableRecursiveCommitTraversal = false;
59
+export const disableSchedulerTimeoutInWorkLoop = false;
60
61
// Flow magic to verify the exports of this file match the original version.
62
// eslint-disable-next-line no-unused-vars
packages/shared/forks/ReactFeatureFlags.native-oss.js
+1
@@ -55,6 +55,7 @@ export const enableDoubleInvokingEffects = false;
55
export const enableUseRefAccessWarning = false;
56
57
export const enableRecursiveCommitTraversal = false;
58
+export const disableSchedulerTimeoutInWorkLoop = false;
59
60
// Flow magic to verify the exports of this file match the original version.
61
// eslint-disable-next-line no-unused-vars
packages/shared/forks/ReactFeatureFlags.test-renderer.js
+1
@@ -55,6 +55,7 @@ export const enableDoubleInvokingEffects = false;
55
export const enableUseRefAccessWarning = false;
56
57
export const enableRecursiveCommitTraversal = false;
58
+export const disableSchedulerTimeoutInWorkLoop = false;
59
60
// Flow magic to verify the exports of this file match the original version.
61
// eslint-disable-next-line no-unused-vars
packages/shared/forks/ReactFeatureFlags.test-renderer.native.js
+1
@@ -55,6 +55,7 @@ export const enableDoubleInvokingEffects = false;
55
export const enableUseRefAccessWarning = false;
56
57
export const enableRecursiveCommitTraversal = false;
58
+export const disableSchedulerTimeoutInWorkLoop = false;
59
60
// Flow magic to verify the exports of this file match the original version.
61
// eslint-disable-next-line no-unused-vars
packages/shared/forks/ReactFeatureFlags.test-renderer.www.js
+1
@@ -55,6 +55,7 @@ export const enableDoubleInvokingEffects = true;
55
export const enableUseRefAccessWarning = false;
56
57
export const enableRecursiveCommitTraversal = false;
58
+export const disableSchedulerTimeoutInWorkLoop = false;
59
60
// Flow magic to verify the exports of this file match the original version.
61
// eslint-disable-next-line no-unused-vars
packages/shared/forks/ReactFeatureFlags.testing.js
+1
@@ -55,6 +55,7 @@ export const enableDoubleInvokingEffects = false;
55
export const enableUseRefAccessWarning = false;
56
57
export const enableRecursiveCommitTraversal = false;
58
+export const disableSchedulerTimeoutInWorkLoop = false;
59
60
// Flow magic to verify the exports of this file match the original version.
61
// eslint-disable-next-line no-unused-vars
packages/shared/forks/ReactFeatureFlags.testing.www.js
+1
@@ -55,6 +55,7 @@ export const enableDoubleInvokingEffects = false;
55
export const enableUseRefAccessWarning = false;
56
57
export const enableRecursiveCommitTraversal = false;
58
+export const disableSchedulerTimeoutInWorkLoop = false;
59
60
// Flow magic to verify the exports of this file match the original version.
61
// eslint-disable-next-line no-unused-vars
packages/shared/forks/ReactFeatureFlags.www-dynamic.js
+1
@@ -53,3 +53,4 @@ export const enableDoubleInvokingEffects = false;
53
export const enableUseRefAccessWarning = __VARIANT__;
54
55
export const enableProfilerNestedUpdateScheduledHook = __VARIANT__;
56
+export const disableSchedulerTimeoutInWorkLoop = __VARIANT__;
packages/shared/forks/ReactFeatureFlags.www.js
+1
@@ -29,6 +29,7 @@ export const {
29
enableDoubleInvokingEffects,
30
enableUseRefAccessWarning,
31
disableNativeComponentFrames,
32
+ disableSchedulerTimeoutInWorkLoop,
33
} = dynamicFeatureFlags;
34
35
// On WWW, __EXPERIMENTAL__ is used for a new modern build.