1 |
|
2 |
|
3 |
|
4 |
|
5 |
|
6 |
|
7 |
|
8 |
|
9 |
|
10 | 'use strict';
|
11 |
|
12 | if (process.env.NODE_ENV !== "production") {
|
13 | (function() {
|
14 | 'use strict';
|
15 |
|
16 |
|
17 | var ImmediatePriority = 1;
|
18 | var UserBlockingPriority = 2;
|
19 | var NormalPriority = 3;
|
20 | var LowPriority = 4;
|
21 | var IdlePriority = 5;
|
22 |
|
23 | var perf = window.performance;
|
24 | var setTimeout = window.setTimeout;
|
25 |
|
26 | var scheduler = global.scheduler;
|
27 | var getCurrentTime = perf.now.bind(perf);
|
28 | var unstable_now = getCurrentTime;
|
29 |
|
30 |
|
31 |
|
32 |
|
33 | var yieldInterval = 5;
|
34 | var deadline = 0;
|
35 | var currentPriorityLevel_DEPRECATED = NormalPriority;
|
36 |
|
37 |
|
38 | function unstable_shouldYield() {
|
39 | return getCurrentTime() >= deadline;
|
40 | }
|
41 | function unstable_requestPaint() {
|
42 | }
|
43 | function unstable_scheduleCallback(priorityLevel, callback, options) {
|
44 | var postTaskPriority;
|
45 |
|
46 | switch (priorityLevel) {
|
47 | case ImmediatePriority:
|
48 | case UserBlockingPriority:
|
49 | postTaskPriority = 'user-blocking';
|
50 | break;
|
51 |
|
52 | case LowPriority:
|
53 | case NormalPriority:
|
54 | postTaskPriority = 'user-visible';
|
55 | break;
|
56 |
|
57 | case IdlePriority:
|
58 | postTaskPriority = 'background';
|
59 | break;
|
60 |
|
61 | default:
|
62 | postTaskPriority = 'user-visible';
|
63 | break;
|
64 | }
|
65 |
|
66 | var controller = new TaskController();
|
67 | var postTaskOptions = {
|
68 | priority: postTaskPriority,
|
69 | delay: typeof options === 'object' && options !== null ? options.delay : 0,
|
70 | signal: controller.signal
|
71 | };
|
72 | var node = {
|
73 | _controller: controller
|
74 | };
|
75 | scheduler.postTask(runTask.bind(null, priorityLevel, postTaskPriority, node, callback), postTaskOptions).catch(handleAbortError);
|
76 | return node;
|
77 | }
|
78 |
|
79 | function runTask(priorityLevel, postTaskPriority, node, callback) {
|
80 | deadline = getCurrentTime() + yieldInterval;
|
81 |
|
82 | try {
|
83 | currentPriorityLevel_DEPRECATED = priorityLevel;
|
84 | var _didTimeout_DEPRECATED = false;
|
85 | var result = callback(_didTimeout_DEPRECATED);
|
86 |
|
87 | if (typeof result === 'function') {
|
88 |
|
89 | var continuation = result;
|
90 | var continuationController = new TaskController();
|
91 | var continuationOptions = {
|
92 | priority: postTaskPriority,
|
93 | signal: continuationController.signal
|
94 | };
|
95 |
|
96 |
|
97 | node._controller = continuationController;
|
98 | scheduler.postTask(runTask.bind(null, priorityLevel, postTaskPriority, node, continuation), continuationOptions).catch(handleAbortError);
|
99 | }
|
100 | } catch (error) {
|
101 |
|
102 |
|
103 |
|
104 |
|
105 |
|
106 |
|
107 | setTimeout(function () {
|
108 | throw error;
|
109 | });
|
110 | } finally {
|
111 | currentPriorityLevel_DEPRECATED = NormalPriority;
|
112 | }
|
113 | }
|
114 |
|
115 | function handleAbortError(error) {
|
116 |
|
117 |
|
118 |
|
119 | }
|
120 |
|
121 | function unstable_cancelCallback(node) {
|
122 | var controller = node._controller;
|
123 | controller.abort();
|
124 | }
|
125 | function unstable_runWithPriority(priorityLevel, callback) {
|
126 | var previousPriorityLevel = currentPriorityLevel_DEPRECATED;
|
127 | currentPriorityLevel_DEPRECATED = priorityLevel;
|
128 |
|
129 | try {
|
130 | return callback();
|
131 | } finally {
|
132 | currentPriorityLevel_DEPRECATED = previousPriorityLevel;
|
133 | }
|
134 | }
|
135 | function unstable_getCurrentPriorityLevel() {
|
136 | return currentPriorityLevel_DEPRECATED;
|
137 | }
|
138 | function unstable_next(callback) {
|
139 | var priorityLevel;
|
140 |
|
141 | switch (currentPriorityLevel_DEPRECATED) {
|
142 | case ImmediatePriority:
|
143 | case UserBlockingPriority:
|
144 | case NormalPriority:
|
145 |
|
146 | priorityLevel = NormalPriority;
|
147 | break;
|
148 |
|
149 | default:
|
150 |
|
151 | priorityLevel = currentPriorityLevel_DEPRECATED;
|
152 | break;
|
153 | }
|
154 |
|
155 | var previousPriorityLevel = currentPriorityLevel_DEPRECATED;
|
156 | currentPriorityLevel_DEPRECATED = priorityLevel;
|
157 |
|
158 | try {
|
159 | return callback();
|
160 | } finally {
|
161 | currentPriorityLevel_DEPRECATED = previousPriorityLevel;
|
162 | }
|
163 | }
|
164 | function unstable_wrapCallback(callback) {
|
165 | var parentPriorityLevel = currentPriorityLevel_DEPRECATED;
|
166 | return function () {
|
167 | var previousPriorityLevel = currentPriorityLevel_DEPRECATED;
|
168 | currentPriorityLevel_DEPRECATED = parentPriorityLevel;
|
169 |
|
170 | try {
|
171 | return callback();
|
172 | } finally {
|
173 | currentPriorityLevel_DEPRECATED = previousPriorityLevel;
|
174 | }
|
175 | };
|
176 | }
|
177 | function unstable_forceFrameRate() {}
|
178 | function unstable_pauseExecution() {}
|
179 | function unstable_continueExecution() {}
|
180 | function unstable_getFirstCallbackNode() {
|
181 | return null;
|
182 | }
|
183 |
|
184 | var unstable_Profiling = null;
|
185 |
|
186 | exports.unstable_IdlePriority = IdlePriority;
|
187 | exports.unstable_ImmediatePriority = ImmediatePriority;
|
188 | exports.unstable_LowPriority = LowPriority;
|
189 | exports.unstable_NormalPriority = NormalPriority;
|
190 | exports.unstable_Profiling = unstable_Profiling;
|
191 | exports.unstable_UserBlockingPriority = UserBlockingPriority;
|
192 | exports.unstable_cancelCallback = unstable_cancelCallback;
|
193 | exports.unstable_continueExecution = unstable_continueExecution;
|
194 | exports.unstable_forceFrameRate = unstable_forceFrameRate;
|
195 | exports.unstable_getCurrentPriorityLevel = unstable_getCurrentPriorityLevel;
|
196 | exports.unstable_getFirstCallbackNode = unstable_getFirstCallbackNode;
|
197 | exports.unstable_next = unstable_next;
|
198 | exports.unstable_now = unstable_now;
|
199 | exports.unstable_pauseExecution = unstable_pauseExecution;
|
200 | exports.unstable_requestPaint = unstable_requestPaint;
|
201 | exports.unstable_runWithPriority = unstable_runWithPriority;
|
202 | exports.unstable_scheduleCallback = unstable_scheduleCallback;
|
203 | exports.unstable_shouldYield = unstable_shouldYield;
|
204 | exports.unstable_wrapCallback = unstable_wrapCallback;
|
205 | })();
|
206 | }
|