From 2dc05fe137fa13bcc160b8e4d085fca8dc408985 Mon Sep 17 00:00:00 2001 From: Andrew Clark Date: Wed, 10 Feb 2021 21:09:27 -0600 Subject: [PATCH] Remove fakeCallbackNode Don't need this, because sync tasks are never cancelled. We can do the same thing we do for microtask callbacks. --- .../react-reconciler/src/ReactFiberWorkLoop.new.js | 10 ++++------ .../react-reconciler/src/ReactFiberWorkLoop.old.js | 10 ++++------ .../src/SchedulerWithReactIntegration.new.js | 9 +++------ .../src/SchedulerWithReactIntegration.old.js | 9 +++------ 4 files changed, 14 insertions(+), 24 deletions(-) diff --git a/packages/react-reconciler/src/ReactFiberWorkLoop.new.js b/packages/react-reconciler/src/ReactFiberWorkLoop.new.js index 490a195e1b78a..715e9bd6abcba 100644 --- a/packages/react-reconciler/src/ReactFiberWorkLoop.new.js +++ b/packages/react-reconciler/src/ReactFiberWorkLoop.new.js @@ -726,7 +726,8 @@ function ensureRootIsScheduled(root: FiberRoot, currentTime: number) { // TODO: Temporary until we confirm this warning is not fired. if ( existingCallbackNode == null && - existingCallbackPriority !== InputDiscreteLanePriority + existingCallbackPriority !== InputDiscreteLanePriority && + existingCallbackPriority !== SyncLanePriority ) { console.error( 'Expected scheduled callback to exist. This error is likely caused by a bug in React. Please file an issue.', @@ -747,11 +748,8 @@ function ensureRootIsScheduled(root: FiberRoot, currentTime: number) { if (newCallbackPriority === SyncLanePriority) { // Special case: Sync React callbacks are scheduled on a special // internal queue - - // TODO: After enableDiscreteEventMicroTasks lands, we can remove the fake node. - newCallbackNode = scheduleSyncCallback( - performSyncWorkOnRoot.bind(null, root), - ); + scheduleSyncCallback(performSyncWorkOnRoot.bind(null, root)); + newCallbackNode = null; } else if (newCallbackPriority === SyncBatchedLanePriority) { newCallbackNode = scheduleCallback( ImmediateSchedulerPriority, diff --git a/packages/react-reconciler/src/ReactFiberWorkLoop.old.js b/packages/react-reconciler/src/ReactFiberWorkLoop.old.js index f7ae0f9a94019..c8eb6a08eeba3 100644 --- a/packages/react-reconciler/src/ReactFiberWorkLoop.old.js +++ b/packages/react-reconciler/src/ReactFiberWorkLoop.old.js @@ -726,7 +726,8 @@ function ensureRootIsScheduled(root: FiberRoot, currentTime: number) { // TODO: Temporary until we confirm this warning is not fired. if ( existingCallbackNode == null && - existingCallbackPriority !== InputDiscreteLanePriority + existingCallbackPriority !== InputDiscreteLanePriority && + existingCallbackPriority !== SyncLanePriority ) { console.error( 'Expected scheduled callback to exist. This error is likely caused by a bug in React. Please file an issue.', @@ -747,11 +748,8 @@ function ensureRootIsScheduled(root: FiberRoot, currentTime: number) { if (newCallbackPriority === SyncLanePriority) { // Special case: Sync React callbacks are scheduled on a special // internal queue - - // TODO: After enableDiscreteEventMicroTasks lands, we can remove the fake node. - newCallbackNode = scheduleSyncCallback( - performSyncWorkOnRoot.bind(null, root), - ); + scheduleSyncCallback(performSyncWorkOnRoot.bind(null, root)); + newCallbackNode = null; } else if (newCallbackPriority === SyncBatchedLanePriority) { newCallbackNode = scheduleCallback( ImmediateSchedulerPriority, diff --git a/packages/react-reconciler/src/SchedulerWithReactIntegration.new.js b/packages/react-reconciler/src/SchedulerWithReactIntegration.new.js index 36fdf3938128e..36dbc704fc7cd 100644 --- a/packages/react-reconciler/src/SchedulerWithReactIntegration.new.js +++ b/packages/react-reconciler/src/SchedulerWithReactIntegration.new.js @@ -57,8 +57,6 @@ export type SchedulerCallback = (isSync: boolean) => SchedulerCallback | null; type SchedulerCallbackOptions = {timeout?: number, ...}; -const fakeCallbackNode = {}; - // Except for NoPriority, these correspond to Scheduler priorities. We use // ascending numbers so we can compare them like numbers. They start at 90 to // avoid clashing with Scheduler's priorities. @@ -147,6 +145,8 @@ export function scheduleSyncCallback(callback: SchedulerCallback) { if (syncQueue === null) { syncQueue = [callback]; // Flush the queue in the next tick, at the earliest. + // TODO: Figure out how to remove this It's only here as a last resort if we + // forget to explicitly flush. immediateQueueCallbackNode = Scheduler_scheduleCallback( Scheduler_ImmediatePriority, flushSyncCallbackQueueImpl, @@ -156,13 +156,10 @@ export function scheduleSyncCallback(callback: SchedulerCallback) { // we already scheduled one when we created the queue. syncQueue.push(callback); } - return fakeCallbackNode; } export function cancelCallback(callbackNode: mixed) { - if (callbackNode !== fakeCallbackNode) { - Scheduler_cancelCallback(callbackNode); - } + Scheduler_cancelCallback(callbackNode); } export function flushSyncCallbackQueue() { diff --git a/packages/react-reconciler/src/SchedulerWithReactIntegration.old.js b/packages/react-reconciler/src/SchedulerWithReactIntegration.old.js index 4a44229ac5245..1d309df4020f1 100644 --- a/packages/react-reconciler/src/SchedulerWithReactIntegration.old.js +++ b/packages/react-reconciler/src/SchedulerWithReactIntegration.old.js @@ -57,8 +57,6 @@ export type SchedulerCallback = (isSync: boolean) => SchedulerCallback | null; type SchedulerCallbackOptions = {timeout?: number, ...}; -const fakeCallbackNode = {}; - // Except for NoPriority, these correspond to Scheduler priorities. We use // ascending numbers so we can compare them like numbers. They start at 90 to // avoid clashing with Scheduler's priorities. @@ -147,6 +145,8 @@ export function scheduleSyncCallback(callback: SchedulerCallback) { if (syncQueue === null) { syncQueue = [callback]; // Flush the queue in the next tick, at the earliest. + // TODO: Figure out how to remove this It's only here as a last resort if we + // forget to explicitly flush. immediateQueueCallbackNode = Scheduler_scheduleCallback( Scheduler_ImmediatePriority, flushSyncCallbackQueueImpl, @@ -156,13 +156,10 @@ export function scheduleSyncCallback(callback: SchedulerCallback) { // we already scheduled one when we created the queue. syncQueue.push(callback); } - return fakeCallbackNode; } export function cancelCallback(callbackNode: mixed) { - if (callbackNode !== fakeCallbackNode) { - Scheduler_cancelCallback(callbackNode); - } + Scheduler_cancelCallback(callbackNode); } export function flushSyncCallbackQueue() {