From 7ca55ec6d5737e18b1751307e8d19155579a2fa9 Mon Sep 17 00:00:00 2001 From: Dan Abramov Date: Mon, 8 Feb 2021 22:28:15 +0000 Subject: [PATCH] Wire it up to the work loop --- .../src/ReactFiberWorkLoop.new.js | 24 +++++++++++++++---- .../src/ReactFiberWorkLoop.old.js | 24 +++++++++++++++---- 2 files changed, 38 insertions(+), 10 deletions(-) diff --git a/packages/react-reconciler/src/ReactFiberWorkLoop.new.js b/packages/react-reconciler/src/ReactFiberWorkLoop.new.js index f148e2bd46b9d..54320d5afbfb3 100644 --- a/packages/react-reconciler/src/ReactFiberWorkLoop.new.js +++ b/packages/react-reconciler/src/ReactFiberWorkLoop.new.js @@ -34,6 +34,7 @@ import { disableSchedulerTimeoutInWorkLoop, enableDoubleInvokingEffects, skipUnmountedBoundaries, + enableNativeEventPriorityInference, } from 'shared/ReactFeatureFlags'; import ReactSharedInternals from 'shared/ReactSharedInternals'; import invariant from 'shared/invariant'; @@ -93,6 +94,7 @@ import { afterActiveInstanceBlur, clearContainer, scheduleMicrotask, + getCurrentEventPriority, } from './ReactFiberHostConfig'; import { @@ -460,11 +462,23 @@ export function requestUpdateLane(fiber: Fiber): Lane { const currentLanePriority = getCurrentUpdateLanePriority(); lane = findUpdateLane(currentLanePriority, currentEventWipLanes); } else { - const schedulerLanePriority = schedulerPriorityToLanePriority( - schedulerPriority, - ); - - lane = findUpdateLane(schedulerLanePriority, currentEventWipLanes); + if (enableNativeEventPriorityInference) { + const eventLanePriority = getCurrentEventPriority(); + if (eventLanePriority === DefaultLanePriority) { + // TODO: move this case into the ReactDOM host config. + const schedulerLanePriority = schedulerPriorityToLanePriority( + schedulerPriority, + ); + lane = findUpdateLane(schedulerLanePriority, currentEventWipLanes); + } else { + lane = findUpdateLane(eventLanePriority, currentEventWipLanes); + } + } else { + const schedulerLanePriority = schedulerPriorityToLanePriority( + schedulerPriority, + ); + lane = findUpdateLane(schedulerLanePriority, currentEventWipLanes); + } } return lane; diff --git a/packages/react-reconciler/src/ReactFiberWorkLoop.old.js b/packages/react-reconciler/src/ReactFiberWorkLoop.old.js index 3589bff2c6be3..b3227d84417ec 100644 --- a/packages/react-reconciler/src/ReactFiberWorkLoop.old.js +++ b/packages/react-reconciler/src/ReactFiberWorkLoop.old.js @@ -34,6 +34,7 @@ import { disableSchedulerTimeoutInWorkLoop, enableDoubleInvokingEffects, skipUnmountedBoundaries, + enableNativeEventPriorityInference, } from 'shared/ReactFeatureFlags'; import ReactSharedInternals from 'shared/ReactSharedInternals'; import invariant from 'shared/invariant'; @@ -93,6 +94,7 @@ import { afterActiveInstanceBlur, clearContainer, scheduleMicrotask, + getCurrentEventPriority, } from './ReactFiberHostConfig'; import { @@ -460,11 +462,23 @@ export function requestUpdateLane(fiber: Fiber): Lane { const currentLanePriority = getCurrentUpdateLanePriority(); lane = findUpdateLane(currentLanePriority, currentEventWipLanes); } else { - const schedulerLanePriority = schedulerPriorityToLanePriority( - schedulerPriority, - ); - - lane = findUpdateLane(schedulerLanePriority, currentEventWipLanes); + if (enableNativeEventPriorityInference) { + const eventLanePriority = getCurrentEventPriority(); + if (eventLanePriority === DefaultLanePriority) { + // TODO: move this case into the ReactDOM host config. + const schedulerLanePriority = schedulerPriorityToLanePriority( + schedulerPriority, + ); + lane = findUpdateLane(schedulerLanePriority, currentEventWipLanes); + } else { + lane = findUpdateLane(eventLanePriority, currentEventWipLanes); + } + } else { + const schedulerLanePriority = schedulerPriorityToLanePriority( + schedulerPriority, + ); + lane = findUpdateLane(schedulerLanePriority, currentEventWipLanes); + } } return lane;