Move scheduler priority check into ReactDOM (#20778)
* Move scheduler priority check into ReactDOM * TODO
Dan Abramov committed
Feb 9, 2021 at 22:54 UTC
3d10eca241be7b51cd4d74cf69eb1f429818b71a
3 files changed
+21
-9
packages/react-dom/src/events/DOMEventNames.js
+1
@@ -62,6 +62,7 @@ export type DOMEventName =
62
| 'loadeddata'
63
| 'loadedmetadata'
64
| 'lostpointercapture'
65
+ | 'message'
66
| 'mousedown'
67
| 'mouseenter'
68
| 'mouseleave'
packages/react-dom/src/events/ReactDOMEventListener.js
+19
@@ -55,6 +55,7 @@ import {
55
DefaultLanePriority as DefaultLanePriority_old,
56
getCurrentUpdateLanePriority as getCurrentUpdateLanePriority_old,
57
setCurrentUpdateLanePriority as setCurrentUpdateLanePriority_old,
58
+ schedulerPriorityToLanePriority as schedulerPriorityToLanePriority_old,
59
} from 'react-reconciler/src/ReactFiberLane.old';
60
import {
61
InputDiscreteLanePriority as InputDiscreteLanePriority_new,
@@ -62,7 +63,10 @@ import {
63
DefaultLanePriority as DefaultLanePriority_new,
64
getCurrentUpdateLanePriority as getCurrentUpdateLanePriority_new,
65
setCurrentUpdateLanePriority as setCurrentUpdateLanePriority_new,
66
+ schedulerPriorityToLanePriority as schedulerPriorityToLanePriority_new,
67
} from 'react-reconciler/src/ReactFiberLane.new';
68
+import {getCurrentPriorityLevel as getCurrentPriorityLevel_old} from 'react-reconciler/src/SchedulerWithReactIntegration.old';
69
+import {getCurrentPriorityLevel as getCurrentPriorityLevel_new} from 'react-reconciler/src/SchedulerWithReactIntegration.new';
70
71
const InputDiscreteLanePriority = enableNewReconciler
72
? InputDiscreteLanePriority_new
@@ -79,6 +83,12 @@ const getCurrentUpdateLanePriority = enableNewReconciler
83
const setCurrentUpdateLanePriority = enableNewReconciler
84
? setCurrentUpdateLanePriority_new
85
: setCurrentUpdateLanePriority_old;
86
+const schedulerPriorityToLanePriority = enableNewReconciler
87
+ ? schedulerPriorityToLanePriority_new
88
+ : schedulerPriorityToLanePriority_old;
89
+const getCurrentPriorityLevel = enableNewReconciler
90
+ ? getCurrentPriorityLevel_new
91
+ : getCurrentPriorityLevel_old;
92
93
const {
94
unstable_UserBlockingPriority: UserBlockingPriority,
@@ -428,6 +438,15 @@ export function getEventPriority(domEventName: DOMEventName): * {
438
case 'mouseenter':
439
case 'mouseleave':
440
return InputContinuousLanePriority;
441
+ case 'message': {
442
+ // We might be in the Scheduler callback.
443
+ // Eventually this mechanism will be replaced by a check
444
+ // of the current priority on the native scheduler.
445
+ const schedulerPriority = getCurrentPriorityLevel();
446
+ // TODO: Inline schedulerPriorityToLanePriority into this file
447
+ // when we delete the enableNativeEventPriorityInference flag.
448
+ return schedulerPriorityToLanePriority(schedulerPriority);
449
+ }
450
default:
451
return DefaultLanePriority;
452
}
packages/react-reconciler/src/ReactFiberWorkLoop.old.js
+1
-9
@@ -465,15 +465,7 @@ export function requestUpdateLane(fiber: Fiber): Lane {
465
} else {
466
if (enableNativeEventPriorityInference) {
467
const eventLanePriority = getCurrentEventPriority();
468
- if (eventLanePriority === DefaultLanePriority) {
469
- // TODO: move this case into the ReactDOM host config.
470
- const schedulerLanePriority = schedulerPriorityToLanePriority(
471
- schedulerPriority,
472
- );
473
- lane = findUpdateLane(schedulerLanePriority, currentEventWipLanes);
474
- } else {
475
- lane = findUpdateLane(eventLanePriority, currentEventWipLanes);
476
- }
468
+ lane = findUpdateLane(eventLanePriority, currentEventWipLanes);
469
} else {
470
const schedulerLanePriority = schedulerPriorityToLanePriority(
471
schedulerPriority,