@@ -205,30 +205,35 @@ export function getNextLanes(root: FiberRoot, wipLanes: Lanes): Lanes {
205205
206206 let nextLanes = NoLanes ;
207207
208+ const expiredLanes = root . expiredLanes ;
208209 const suspendedLanes = root . suspendedLanes ;
209210 const pingedLanes = root . pingedLanes ;
210211
211212 // Do not work on any idle work until all the non-idle work has finished,
212213 // even if the work is suspended.
213- const nonIdlePendingLanes = pendingLanes & NonIdleLanes ;
214- if ( nonIdlePendingLanes !== NoLanes ) {
215- const nonIdleUnblockedLanes = nonIdlePendingLanes & ~ suspendedLanes ;
216- if ( nonIdleUnblockedLanes !== NoLanes ) {
217- nextLanes = getHighestPriorityLanes ( nonIdleUnblockedLanes ) ;
218- } else {
219- const nonIdlePingedLanes = nonIdlePendingLanes & pingedLanes ;
220- if ( nonIdlePingedLanes !== NoLanes ) {
221- nextLanes = getHighestPriorityLanes ( nonIdlePingedLanes ) ;
222- }
223- }
214+ if ( expiredLanes !== NoLanes ) {
215+ nextLanes = SyncLane | expiredLanes ;
224216 } else {
225- // The only remaining work is Idle.
226- const unblockedLanes = pendingLanes & ~ suspendedLanes ;
227- if ( unblockedLanes !== NoLanes ) {
228- nextLanes = getHighestPriorityLanes ( unblockedLanes ) ;
217+ const nonIdlePendingLanes = pendingLanes & NonIdleLanes ;
218+ if ( nonIdlePendingLanes !== NoLanes ) {
219+ const nonIdleUnblockedLanes = nonIdlePendingLanes & ~ suspendedLanes ;
220+ if ( nonIdleUnblockedLanes !== NoLanes ) {
221+ nextLanes = getHighestPriorityLanes ( nonIdleUnblockedLanes ) ;
222+ } else {
223+ const nonIdlePingedLanes = nonIdlePendingLanes & pingedLanes ;
224+ if ( nonIdlePingedLanes !== NoLanes ) {
225+ nextLanes = getHighestPriorityLanes ( nonIdlePingedLanes ) ;
226+ }
227+ }
229228 } else {
230- if ( pingedLanes !== NoLanes ) {
231- nextLanes = getHighestPriorityLanes ( pingedLanes ) ;
229+ // The only remaining work is Idle.
230+ const unblockedLanes = pendingLanes & ~ suspendedLanes ;
231+ if ( unblockedLanes !== NoLanes ) {
232+ nextLanes = getHighestPriorityLanes ( unblockedLanes ) ;
233+ } else {
234+ if ( pingedLanes !== NoLanes ) {
235+ nextLanes = getHighestPriorityLanes ( pingedLanes ) ;
236+ }
232237 }
233238 }
234239 }
@@ -396,7 +401,6 @@ export function markStarvedLanesAsExpired(
396401 // expiration time. If so, we'll assume the update is being starved and mark
397402 // it as expired to force it to finish.
398403 let lanes = pendingLanes ;
399- let expiredLanes = 0 ;
400404 while ( lanes > 0 ) {
401405 const index = pickArbitraryLaneIndex ( lanes ) ;
402406 const lane = 1 << index ;
@@ -415,15 +419,11 @@ export function markStarvedLanesAsExpired(
415419 }
416420 } else if ( expirationTime <= currentTime ) {
417421 // This lane expired
418- expiredLanes |= lane ;
422+ root . expiredLanes |= lane ;
419423 }
420424
421425 lanes &= ~ lane ;
422426 }
423-
424- if ( expiredLanes !== 0 ) {
425- markRootExpired ( root , expiredLanes ) ;
426- }
427427}
428428
429429// This returns the highest priority pending lanes regardless of whether they
@@ -596,17 +596,7 @@ export function markRootPinged(
596596}
597597
598598export function markRootExpired ( root : FiberRoot , expiredLanes : Lanes ) {
599- const entanglements = root . entanglements ;
600- const SyncLaneIndex = 0 ;
601- entanglements [ SyncLaneIndex ] |= expiredLanes ;
602- root . entangledLanes |= SyncLane ;
603- root . pendingLanes |= SyncLane ;
604- }
605-
606- export function areLanesExpired ( root : FiberRoot , lanes : Lanes ) {
607- const SyncLaneIndex = 0 ;
608- const entanglements = root . entanglements ;
609- return ( entanglements [ SyncLaneIndex ] & lanes ) !== NoLanes ;
599+ root . expiredLanes |= expiredLanes & root . pendingLanes ;
610600}
611601
612602export function markRootMutableRead ( root : FiberRoot , updateLane : Lane ) {
@@ -622,6 +612,7 @@ export function markRootFinished(root: FiberRoot, remainingLanes: Lanes) {
622612 root . suspendedLanes = 0 ;
623613 root . pingedLanes = 0 ;
624614
615+ root . expiredLanes &= remainingLanes ;
625616 root . mutableReadLanes &= remainingLanes ;
626617
627618 root . entangledLanes &= remainingLanes ;
0 commit comments