@@ -60,71 +60,13 @@ var isPerformingWork = false;
6060var isHostCallbackScheduled = false ;
6161var isHostTimeoutScheduled = false ;
6262
63- function scheduler_flushTaskAtPriority_Immediate ( callback , didTimeout ) {
64- return callback ( didTimeout ) ;
65- }
66- function scheduler_flushTaskAtPriority_UserBlocking ( callback , didTimeout ) {
67- return callback ( didTimeout ) ;
68- }
69- function scheduler_flushTaskAtPriority_Normal ( callback , didTimeout ) {
70- return callback ( didTimeout ) ;
71- }
72- function scheduler_flushTaskAtPriority_Low ( callback , didTimeout ) {
73- return callback ( didTimeout ) ;
74- }
75- function scheduler_flushTaskAtPriority_Idle ( callback , didTimeout ) {
76- return callback ( didTimeout ) ;
77- }
78-
7963function flushTask ( task , callback , currentTime ) {
80- var previousPriorityLevel = currentPriorityLevel ;
81- var previousTask = currentTask ;
8264 currentPriorityLevel = task . priorityLevel ;
83- currentTask = task ;
84- try {
85- var didUserCallbackTimeout = task . expirationTime <= currentTime ;
86- // Add an extra function to the callstack. Profiling tools can use this
87- // to infer the priority of work that appears higher in the stack.
88- var continuationCallback ;
89- switch ( currentPriorityLevel ) {
90- case ImmediatePriority :
91- continuationCallback = scheduler_flushTaskAtPriority_Immediate (
92- callback ,
93- didUserCallbackTimeout ,
94- ) ;
95- break ;
96- case UserBlockingPriority :
97- continuationCallback = scheduler_flushTaskAtPriority_UserBlocking (
98- callback ,
99- didUserCallbackTimeout ,
100- ) ;
101- break ;
102- case NormalPriority :
103- continuationCallback = scheduler_flushTaskAtPriority_Normal (
104- callback ,
105- didUserCallbackTimeout ,
106- ) ;
107- break ;
108- case LowPriority :
109- continuationCallback = scheduler_flushTaskAtPriority_Low (
110- callback ,
111- didUserCallbackTimeout ,
112- ) ;
113- break ;
114- case IdlePriority :
115- continuationCallback = scheduler_flushTaskAtPriority_Idle (
116- callback ,
117- didUserCallbackTimeout ,
118- ) ;
119- break ;
120- }
121- return typeof continuationCallback === 'function'
122- ? continuationCallback
123- : null ;
124- } finally {
125- currentPriorityLevel = previousPriorityLevel ;
126- currentTask = previousTask ;
127- }
65+ var didUserCallbackTimeout = task . expirationTime <= currentTime ;
66+ var continuationCallback = callback ( didUserCallbackTimeout ) ;
67+ return typeof continuationCallback === 'function'
68+ ? continuationCallback
69+ : null ;
12870}
12971
13072function advanceTimers ( currentTime ) {
@@ -174,26 +116,30 @@ function flushWork(hasTimeRemaining, initialTime) {
174116 }
175117
176118 isPerformingWork = true ;
119+ const previousPriorityLevel = currentPriorityLevel ;
177120 try {
178121 let currentTime = initialTime ;
179122 advanceTimers ( currentTime ) ;
180- let task = peek ( taskQueue ) ;
181- while ( task !== null && ! ( enableSchedulerDebugging && isSchedulerPaused ) ) {
123+ currentTask = peek ( taskQueue ) ;
124+ while (
125+ currentTask !== null &&
126+ ! ( enableSchedulerDebugging && isSchedulerPaused )
127+ ) {
182128 if (
183- task . expirationTime > currentTime &&
129+ currentTask . expirationTime > currentTime &&
184130 ( ! hasTimeRemaining || shouldYieldToHost ( ) )
185131 ) {
186- // This task hasn't expired, and we've reached the deadline.
132+ // This currentTask hasn't expired, and we've reached the deadline.
187133 break ;
188134 }
189- const callback = task . callback ;
135+ const callback = currentTask . callback ;
190136 if ( callback !== null ) {
191- task . callback = null ;
192- const continuation = flushTask ( task , callback , currentTime ) ;
137+ currentTask . callback = null ;
138+ const continuation = flushTask ( currentTask , callback , currentTime ) ;
193139 if ( continuation !== null ) {
194- task . callback = continuation ;
140+ currentTask . callback = continuation ;
195141 } else {
196- if ( task === peek ( taskQueue ) ) {
142+ if ( currentTask === peek ( taskQueue ) ) {
197143 pop ( taskQueue ) ;
198144 }
199145 }
@@ -202,10 +148,10 @@ function flushWork(hasTimeRemaining, initialTime) {
202148 } else {
203149 pop ( taskQueue ) ;
204150 }
205- task = peek ( taskQueue ) ;
151+ currentTask = peek ( taskQueue ) ;
206152 }
207153 // Return whether there's additional work
208- if ( task !== null ) {
154+ if ( currentTask !== null ) {
209155 return true ;
210156 } else {
211157 let firstTimer = peek ( timerQueue ) ;
@@ -215,6 +161,8 @@ function flushWork(hasTimeRemaining, initialTime) {
215161 return false ;
216162 }
217163 } finally {
164+ currentTask = null ;
165+ currentPriorityLevel = previousPriorityLevel ;
218166 isPerformingWork = false ;
219167 }
220168}
0 commit comments