@@ -32,6 +32,7 @@ const Sync = 1;
32
32
const Task = 2 ;
33
33
const Never = Infinity ;
34
34
35
+ const UNIT_SIZE = 10 ;
35
36
const MAGIC_NUMBER_OFFSET = 10 ;
36
37
37
38
exports . Done = Done ;
@@ -40,16 +41,27 @@ exports.Never = Infinity;
40
41
// 1 unit of expiration time represents 10ms.
41
42
function msToExpirationTime ( ms : number ) : ExpirationTime {
42
43
// Always add an offset so that we don't clash with the magic number for Done.
43
- return Math . round ( ms / 10 ) + MAGIC_NUMBER_OFFSET ;
44
+ return Math . round ( ms / UNIT_SIZE ) + MAGIC_NUMBER_OFFSET ;
44
45
}
45
46
exports . msToExpirationTime = msToExpirationTime ;
46
47
47
48
function expirationTimeToMs ( expirationTime : ExpirationTime ) : number {
48
- return ( expirationTime - MAGIC_NUMBER_OFFSET ) * 10 ;
49
+ return ( expirationTime - MAGIC_NUMBER_OFFSET ) * UNIT_SIZE ;
49
50
}
50
51
51
- function ceiling ( time : ExpirationTime , precision : number ) : ExpirationTime {
52
- return Math . ceil ( Math . ceil ( time * precision ) / precision ) ;
52
+ function ceiling ( num : number , precision : number ) : number {
53
+ return Math . ceil ( Math . ceil ( num * precision ) / precision ) ;
54
+ }
55
+
56
+ function bucket (
57
+ currentTime : ExpirationTime ,
58
+ expirationInMs : number ,
59
+ precisionInMs : number ,
60
+ ) : ExpirationTime {
61
+ return ceiling (
62
+ currentTime + expirationInMs / UNIT_SIZE ,
63
+ precisionInMs / UNIT_SIZE ,
64
+ ) ;
53
65
}
54
66
55
67
// Given the current clock time and a priority level, returns an expiration time
@@ -68,12 +80,14 @@ function priorityToExpirationTime(
68
80
return Sync ;
69
81
case TaskPriority :
70
82
return Task ;
71
- case HighPriority :
83
+ case HighPriority : {
72
84
// Should complete within ~100ms. 120ms max.
73
- return msToExpirationTime ( ceiling ( 100 , 20 ) ) ;
74
- case LowPriority :
85
+ return bucket ( currentTime , 100 , 20 ) ;
86
+ }
87
+ case LowPriority : {
75
88
// Should complete within ~1000ms. 1200ms max.
76
- return msToExpirationTime ( ceiling ( 1000 , 200 ) ) ;
89
+ return bucket ( currentTime , 1000 , 200 ) ;
90
+ }
77
91
case OffscreenPriority :
78
92
return Never ;
79
93
default :
0 commit comments