@samitouri / QOS-React-2 / commits / 5687864eb7

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.