Remove LanePriority from computeExpirationTime (#21087)
I'm removing all uses of LanePriority so I can delete it.
Andrew Clark committed
Mar 25, 2021 at 11:32 UTC
77be527297402a11523cb6321bcb2a0ae2b4be6c
2 files changed
+104
-50
packages/react-reconciler/src/ReactFiberLane.new.js
+52
-25
@@ -410,31 +410,58 @@ export function getMostRecentEventTime(root: FiberRoot, lanes: Lanes): number {
410
}
411
412
function computeExpirationTime(lane: Lane, currentTime: number) {
413
- // TODO: Expiration heuristic is constant per lane, so could use a map.
414
- getHighestPriorityLanes(lane);
415
- const priority = return_highestLanePriority;
416
- if (priority >= InputContinuousLanePriority) {
417
- // User interactions should expire slightly more quickly.
418
- //
419
- // NOTE: This is set to the corresponding constant as in Scheduler.js. When
420
- // we made it larger, a product metric in www regressed, suggesting there's
421
- // a user interaction that's being starved by a series of synchronous
422
- // updates. If that theory is correct, the proper solution is to fix the
423
- // starvation. However, this scenario supports the idea that expiration
424
- // times are an important safeguard when starvation does happen.
425
- //
426
- // Also note that, in the case of user input specifically, this will soon no
427
- // longer be an issue because we plan to make user input synchronous by
428
- // default (until you enter `startTransition`, of course.)
429
- //
430
- // If weren't planning to make these updates synchronous soon anyway, I
431
- // would probably make this number a configurable parameter.
432
- return currentTime + 250;
433
- } else if (priority >= TransitionPriority) {
434
- return currentTime + 5000;
435
- } else {
436
- // Anything idle priority or lower should never expire.
437
- return NoTimestamp;
413
+ switch (lane) {
414
+ case SyncLane:
415
+ case InputContinuousHydrationLane:
416
+ case InputContinuousLane:
417
+ // User interactions should expire slightly more quickly.
418
+ //
419
+ // NOTE: This is set to the corresponding constant as in Scheduler.js.
420
+ // When we made it larger, a product metric in www regressed, suggesting
421
+ // there's a user interaction that's being starved by a series of
422
+ // synchronous updates. If that theory is correct, the proper solution is
423
+ // to fix the starvation. However, this scenario supports the idea that
424
+ // expiration times are an important safeguard when starvation
425
+ // does happen.
426
+ return currentTime + 250;
427
+ case DefaultHydrationLane:
428
+ case DefaultLane:
429
+ case TransitionHydrationLane:
430
+ case TransitionLane1:
431
+ case TransitionLane2:
432
+ case TransitionLane3:
433
+ case TransitionLane4:
434
+ case TransitionLane5:
435
+ case TransitionLane6:
436
+ case TransitionLane7:
437
+ case TransitionLane8:
438
+ case TransitionLane9:
439
+ case TransitionLane10:
440
+ case TransitionLane11:
441
+ case TransitionLane12:
442
+ case TransitionLane13:
443
+ case TransitionLane14:
444
+ case TransitionLane15:
445
+ case TransitionLane16:
446
+ case RetryLane1:
447
+ case RetryLane2:
448
+ case RetryLane3:
449
+ case RetryLane4:
450
+ case RetryLane5:
451
+ return currentTime + 5000;
452
+ case SelectiveHydrationLane:
453
+ case IdleHydrationLane:
454
+ case IdleLane:
455
+ case OffscreenLane:
456
+ // Anything idle priority or lower should never expire.
457
+ return NoTimestamp;
458
+ default:
459
+ if (__DEV__) {
460
+ console.error(
461
+ 'Should have found matching lanes. This is a bug in React.',
462
+ );
463
+ }
464
+ return NoTimestamp;
465
}
466
}
467
packages/react-reconciler/src/ReactFiberLane.old.js
+52
-25
@@ -410,31 +410,58 @@ export function getMostRecentEventTime(root: FiberRoot, lanes: Lanes): number {
410
}
411
412
function computeExpirationTime(lane: Lane, currentTime: number) {
413
- // TODO: Expiration heuristic is constant per lane, so could use a map.
414
- getHighestPriorityLanes(lane);
415
- const priority = return_highestLanePriority;
416
- if (priority >= InputContinuousLanePriority) {
417
- // User interactions should expire slightly more quickly.
418
- //
419
- // NOTE: This is set to the corresponding constant as in Scheduler.js. When
420
- // we made it larger, a product metric in www regressed, suggesting there's
421
- // a user interaction that's being starved by a series of synchronous
422
- // updates. If that theory is correct, the proper solution is to fix the
423
- // starvation. However, this scenario supports the idea that expiration
424
- // times are an important safeguard when starvation does happen.
425
- //
426
- // Also note that, in the case of user input specifically, this will soon no
427
- // longer be an issue because we plan to make user input synchronous by
428
- // default (until you enter `startTransition`, of course.)
429
- //
430
- // If weren't planning to make these updates synchronous soon anyway, I
431
- // would probably make this number a configurable parameter.
432
- return currentTime + 250;
433
- } else if (priority >= TransitionPriority) {
434
- return currentTime + 5000;
435
- } else {
436
- // Anything idle priority or lower should never expire.
437
- return NoTimestamp;
413
+ switch (lane) {
414
+ case SyncLane:
415
+ case InputContinuousHydrationLane:
416
+ case InputContinuousLane:
417
+ // User interactions should expire slightly more quickly.
418
+ //
419
+ // NOTE: This is set to the corresponding constant as in Scheduler.js.
420
+ // When we made it larger, a product metric in www regressed, suggesting
421
+ // there's a user interaction that's being starved by a series of
422
+ // synchronous updates. If that theory is correct, the proper solution is
423
+ // to fix the starvation. However, this scenario supports the idea that
424
+ // expiration times are an important safeguard when starvation
425
+ // does happen.
426
+ return currentTime + 250;
427
+ case DefaultHydrationLane:
428
+ case DefaultLane:
429
+ case TransitionHydrationLane:
430
+ case TransitionLane1:
431
+ case TransitionLane2:
432
+ case TransitionLane3:
433
+ case TransitionLane4:
434
+ case TransitionLane5:
435
+ case TransitionLane6:
436
+ case TransitionLane7:
437
+ case TransitionLane8:
438
+ case TransitionLane9:
439
+ case TransitionLane10:
440
+ case TransitionLane11:
441
+ case TransitionLane12:
442
+ case TransitionLane13:
443
+ case TransitionLane14:
444
+ case TransitionLane15:
445
+ case TransitionLane16:
446
+ case RetryLane1:
447
+ case RetryLane2:
448
+ case RetryLane3:
449
+ case RetryLane4:
450
+ case RetryLane5:
451
+ return currentTime + 5000;
452
+ case SelectiveHydrationLane:
453
+ case IdleHydrationLane:
454
+ case IdleLane:
455
+ case OffscreenLane:
456
+ // Anything idle priority or lower should never expire.
457
+ return NoTimestamp;
458
+ default:
459
+ if (__DEV__) {
460
+ console.error(
461
+ 'Should have found matching lanes. This is a bug in React.',
462
+ );
463
+ }
464
+ return NoTimestamp;
465
}
466
}
467