@samitouri / QOS-React / commits / 13c5e2b531

Sync scheduling by default, with an async opt-in (#11771)

Removes the `useSyncScheduling` option from the HostConfig, since it's no longer needed. Instead of globally flipping between sync and async, our strategy will be to opt-in specific trees and subtrees.

Andrew Clark committed Jan 8, 2018 at 18:50 UTC 13c5e2b53112c1cd77dd52e028a4bb33dc492d1b
14 files changed +9 -37
packages/react-art/src/ReactART.js
-2
@@ -478,8 +478,6 @@ const ARTRenderer = ReactFiberReconciler({
478
479 now: ReactDOMFrameScheduling.now,
480
481 - useSyncScheduling: true,
482 -
481 mutation: {
482 appendChild(parentInstance, child) {
483 if (child.parentNode === parentInstance) {
packages/react-cs-renderer/src/ReactNativeCS.js
-2
@@ -182,8 +182,6 @@ const ReactNativeCSFiberRenderer = ReactFiberReconciler({
182 return false;
183 },
184
185 - useSyncScheduling: false,
186 -
185 now(): number {
186 // TODO: Enable expiration by implementing this method.
187 return 0;
packages/react-dom/src/client/ReactDOM.js
+1 -6
@@ -28,10 +28,7 @@ import * as EventPluginHub from 'events/EventPluginHub';
28 import * as EventPluginRegistry from 'events/EventPluginRegistry';
29 import * as EventPropagators from 'events/EventPropagators';
30 import * as ReactInstanceMap from 'shared/ReactInstanceMap';
31 -import {
32 - enableAsyncSchedulingByDefaultInReactDOM,
33 - enableCreateRoot,
34 -} from 'shared/ReactFeatureFlags';
31 +import {enableCreateRoot} from 'shared/ReactFeatureFlags';
32 import ReactVersion from 'shared/ReactVersion';
33 import * as ReactDOMFrameScheduling from 'shared/ReactDOMFrameScheduling';
34 import {ReactCurrentOwner} from 'shared/ReactGlobalSharedState';
@@ -990,8 +987,6 @@ const DOMRenderer = ReactFiberReconciler({
987
988 scheduleDeferredCallback: ReactDOMFrameScheduling.rIC,
989 cancelDeferredCallback: ReactDOMFrameScheduling.cIC,
993 -
994 - useSyncScheduling: !enableAsyncSchedulingByDefaultInReactDOM,
990 });
991
992 ReactGenericBatching.injection.injectFiberBatchedUpdates(
packages/react-native-renderer/src/ReactNativeFiberRenderer.js
-2
@@ -193,8 +193,6 @@ const NativeRenderer = ReactFiberReconciler({
193 return false;
194 },
195
196 - useSyncScheduling: true,
197 -
196 mutation: {
197 appendChild(
198 parentInstance: Instance,
packages/react-reconciler/src/ReactFiberBeginWork.js
+3 -6
@@ -58,6 +58,7 @@ import {
58 invalidateContextProvider,
59 } from './ReactFiberContext';
60 import {NoWork, Never} from './ReactFiberExpirationTime';
61 +import {AsyncUpdates} from './ReactTypeOfInternalContext';
62
63 let warnedAboutStatelessRefs;
64
@@ -72,11 +73,7 @@ export default function<T, P, I, TI, HI, PI, C, CC, CX, PL>(
73 scheduleWork: (fiber: Fiber, expirationTime: ExpirationTime) => void,
74 computeExpirationForFiber: (fiber: Fiber) => ExpirationTime,
75 ) {
75 - const {
76 - shouldSetTextContent,
77 - useSyncScheduling,
78 - shouldDeprioritizeSubtree,
79 - } = config;
76 + const {shouldSetTextContent, shouldDeprioritizeSubtree} = config;
77
78 const {pushHostContext, pushHostContainer} = hostContext;
79
@@ -414,7 +411,7 @@ export default function<T, P, I, TI, HI, PI, C, CC, CX, PL>(
411 // Check the host config to see if the children are offscreen/hidden.
412 if (
413 renderExpirationTime !== Never &&
417 - !useSyncScheduling &&
414 + workInProgress.internalContextTag & AsyncUpdates &&
415 shouldDeprioritizeSubtree(type, nextProps)
416 ) {
417 // Down-prioritize the children.
packages/react-reconciler/src/ReactFiberReconciler.js
-2
@@ -98,8 +98,6 @@ export type HostConfig<T, P, I, TI, HI, PI, C, CC, CX, PL> = {
98
99 now(): number,
100
101 - useSyncScheduling?: boolean,
102 -
101 +hydration?: HydrationHostConfig<T, P, I, TI, HI, C, CX, PL>,
102
103 +mutation?: MutableUpdatesHostConfig<T, P, I, TI, C, PL>,
packages/react-reconciler/src/ReactFiberScheduler.js
+4 -5
@@ -187,7 +187,6 @@ export default function<T, P, I, TI, HI, PI, C, CC, CX, PL>(
187 now,
188 scheduleDeferredCallback,
189 cancelDeferredCallback,
190 - useSyncScheduling,
190 prepareForCommit,
191 resetAfterCommit,
192 } = config;
@@ -1178,12 +1177,12 @@ export default function<T, P, I, TI, HI, PI, C, CC, CX, PL>(
1177 } else {
1178 // No explicit expiration context was set, and we're not currently
1179 // performing work. Calculate a new expiration time.
1181 - if (useSyncScheduling && !(fiber.internalContextTag & AsyncUpdates)) {
1182 - // This is a sync update
1183 - expirationTime = Sync;
1184 - } else {
1180 + if (fiber.internalContextTag & AsyncUpdates) {
1181 // This is an async update
1182 expirationTime = computeAsyncExpiration();
1183 + } else {
1184 + // This is a sync update
1185 + expirationTime = Sync;
1186 }
1187 }
1188 return expirationTime;
packages/react-reconciler/src/__tests__/ReactFiberHostContext-test.js
-1
@@ -46,7 +46,6 @@ describe('ReactFiberHostContext', () => {
46 now: function() {
47 return 0;
48 },
49 - useSyncScheduling: true,
49 mutation: {
50 appendChildToContainer: function() {
51 return null;
packages/react-rt-renderer/src/ReactNativeRTFiberRenderer.js
-2
@@ -153,8 +153,6 @@ const NativeRTRenderer = ReactFiberReconciler({
153 return false;
154 },
155
156 - useSyncScheduling: true,
157 -
156 now(): number {
157 // TODO: Enable expiration by implementing this method.
158 return 0;
packages/react-test-renderer/src/ReactTestRenderer.js
-2
@@ -203,8 +203,6 @@ const TestRenderer = ReactFiberReconciler({
203 clearTimeout(timeoutID);
204 },
205
206 - useSyncScheduling: true,
207 -
206 getPublicInstance,
207
208 now(): number {
packages/shared/ReactFeatureFlags.js
-1
@@ -10,7 +10,6 @@
10 import invariant from 'fbjs/lib/invariant';
11
12 export const enableAsyncSubtreeAPI = true;
13 -export const enableAsyncSchedulingByDefaultInReactDOM = false;
13 // Exports ReactDOM.createRoot
14 export const enableCreateRoot = false;
15 export const enableUserTimingAPI = __DEV__;
packages/shared/forks/ReactFeatureFlags.native-cs.js
-1
@@ -14,7 +14,6 @@ import typeof * as CSFeatureFlagsType from './ReactFeatureFlags.native-cs';
14
15 export const debugRenderPhaseSideEffects = false;
16 export const enableAsyncSubtreeAPI = true;
17 -export const enableAsyncSchedulingByDefaultInReactDOM = false;
17 export const enableCreateRoot = false;
18 export const enableUserTimingAPI = __DEV__;
19
packages/shared/forks/ReactFeatureFlags.native.js
-1
@@ -17,7 +17,6 @@ export const {debugRenderPhaseSideEffects} = require('ReactFeatureFlags');
17
18 // The rest of the flags are static for better dead code elimination.
19 export const enableAsyncSubtreeAPI = true;
20 -export const enableAsyncSchedulingByDefaultInReactDOM = false;
20 export const enableCreateRoot = false;
21 export const enableUserTimingAPI = __DEV__;
22 export const enableMutatingReconciler = true;
packages/shared/forks/ReactFeatureFlags.www.js
+1 -4
@@ -11,10 +11,7 @@ import typeof * as FeatureFlagsType from 'shared/ReactFeatureFlags';
11 import typeof * as FeatureFlagsShimType from './ReactFeatureFlags.www';
12
13 // Re-export dynamic flags from the www version.
14 -export const {
15 - debugRenderPhaseSideEffects,
16 - enableAsyncSchedulingByDefaultInReactDOM,
17 -} = require('ReactFeatureFlags');
14 +export const {debugRenderPhaseSideEffects} = require('ReactFeatureFlags');
15
16 // The rest of the flags are static for better dead code elimination.
17 export const enableAsyncSubtreeAPI = true;