Skip to content

Commit f6821c1

Browse files
committed
Wire up event priority to the work loop
1 parent 4642011 commit f6821c1

File tree

2 files changed

+72
-10
lines changed

2 files changed

+72
-10
lines changed

packages/react-reconciler/src/ReactFiberWorkLoop.new.js

Lines changed: 36 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -34,8 +34,10 @@ import {
3434
disableSchedulerTimeoutInWorkLoop,
3535
enableDoubleInvokingEffects,
3636
skipUnmountedBoundaries,
37+
enableNativeEventPriorityInference,
3738
} from 'shared/ReactFeatureFlags';
3839
import ReactSharedInternals from 'shared/ReactSharedInternals';
40+
import {DefaultEvent, DiscreteEvent, ContinuousEvent} from 'shared/ReactTypes';
3941
import invariant from 'shared/invariant';
4042

4143
import {
@@ -93,6 +95,7 @@ import {
9395
afterActiveInstanceBlur,
9496
clearContainer,
9597
scheduleMicrotask,
98+
getCurrentEventPriority,
9699
} from './ReactFiberHostConfig';
97100

98101
import {
@@ -138,6 +141,7 @@ import {
138141
SyncLanePriority,
139142
SyncBatchedLanePriority,
140143
InputDiscreteLanePriority,
144+
InputContinuousLanePriority,
141145
DefaultLanePriority,
142146
NoLanes,
143147
NoLane,
@@ -465,11 +469,38 @@ export function requestUpdateLane(fiber: Fiber): Lane {
465469
const currentLanePriority = getCurrentUpdateLanePriority();
466470
lane = findUpdateLane(currentLanePriority, currentEventWipLanes);
467471
} else {
468-
const schedulerLanePriority = schedulerPriorityToLanePriority(
469-
schedulerPriority,
470-
);
471-
472-
lane = findUpdateLane(schedulerLanePriority, currentEventWipLanes);
472+
let eventPriority = DefaultEvent;
473+
if (enableNativeEventPriorityInference) {
474+
eventPriority = getCurrentEventPriority();
475+
}
476+
switch (eventPriority) {
477+
case DiscreteEvent: {
478+
lane = findUpdateLane(InputDiscreteLanePriority, currentEventWipLanes);
479+
break;
480+
}
481+
case ContinuousEvent: {
482+
lane = findUpdateLane(
483+
InputContinuousLanePriority,
484+
currentEventWipLanes,
485+
);
486+
break;
487+
}
488+
default: {
489+
if (__DEV__) {
490+
console.error(
491+
'Invalid event priority returned from getCurrentEventPriority: %s.',
492+
eventPriority,
493+
);
494+
}
495+
}
496+
// eslint-disable-next-line no-fallthrough
497+
case DefaultEvent: {
498+
const schedulerLanePriority = schedulerPriorityToLanePriority(
499+
schedulerPriority,
500+
);
501+
lane = findUpdateLane(schedulerLanePriority, currentEventWipLanes);
502+
}
503+
}
473504
}
474505

475506
return lane;

packages/react-reconciler/src/ReactFiberWorkLoop.old.js

Lines changed: 36 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -34,8 +34,10 @@ import {
3434
disableSchedulerTimeoutInWorkLoop,
3535
enableDoubleInvokingEffects,
3636
skipUnmountedBoundaries,
37+
enableNativeEventPriorityInference,
3738
} from 'shared/ReactFeatureFlags';
3839
import ReactSharedInternals from 'shared/ReactSharedInternals';
40+
import {DefaultEvent, DiscreteEvent, ContinuousEvent} from 'shared/ReactTypes';
3941
import invariant from 'shared/invariant';
4042

4143
import {
@@ -93,6 +95,7 @@ import {
9395
afterActiveInstanceBlur,
9496
clearContainer,
9597
scheduleMicrotask,
98+
getCurrentEventPriority,
9699
} from './ReactFiberHostConfig';
97100

98101
import {
@@ -138,6 +141,7 @@ import {
138141
SyncLanePriority,
139142
SyncBatchedLanePriority,
140143
InputDiscreteLanePriority,
144+
InputContinuousLanePriority,
141145
DefaultLanePriority,
142146
NoLanes,
143147
NoLane,
@@ -465,11 +469,38 @@ export function requestUpdateLane(fiber: Fiber): Lane {
465469
const currentLanePriority = getCurrentUpdateLanePriority();
466470
lane = findUpdateLane(currentLanePriority, currentEventWipLanes);
467471
} else {
468-
const schedulerLanePriority = schedulerPriorityToLanePriority(
469-
schedulerPriority,
470-
);
471-
472-
lane = findUpdateLane(schedulerLanePriority, currentEventWipLanes);
472+
let eventPriority = DefaultEvent;
473+
if (enableNativeEventPriorityInference) {
474+
eventPriority = getCurrentEventPriority();
475+
}
476+
switch (eventPriority) {
477+
case DiscreteEvent: {
478+
lane = findUpdateLane(InputDiscreteLanePriority, currentEventWipLanes);
479+
break;
480+
}
481+
case ContinuousEvent: {
482+
lane = findUpdateLane(
483+
InputContinuousLanePriority,
484+
currentEventWipLanes,
485+
);
486+
break;
487+
}
488+
default: {
489+
if (__DEV__) {
490+
console.error(
491+
'Invalid event priority returned from getCurrentEventPriority: %s.',
492+
eventPriority,
493+
);
494+
}
495+
}
496+
// eslint-disable-next-line no-fallthrough
497+
case DefaultEvent: {
498+
const schedulerLanePriority = schedulerPriorityToLanePriority(
499+
schedulerPriority,
500+
);
501+
lane = findUpdateLane(schedulerLanePriority, currentEventWipLanes);
502+
}
503+
}
473504
}
474505

475506
return lane;

0 commit comments

Comments
 (0)