@antv/x6
Version:
JavaScript diagramming library that uses SVG and HTML for rendering.
49 lines • 1.66 kB
JavaScript
export var Scheduler;
(function (Scheduler) {
const queue = [];
const threshold = 1000 / 60;
const unit = [];
let deadline = 0;
const getTime = () => performance.now();
const peek = (queue) => queue[0];
const schedule = (cb) => unit.push(cb) === 1 && postMessage();
const postMessage = (() => {
const cb = () => unit.splice(0, unit.length).forEach((c) => c());
if (typeof MessageChannel !== 'undefined') {
const { port1, port2 } = new MessageChannel();
port1.onmessage = cb;
return () => port2.postMessage(null);
}
return () => setTimeout(cb);
})();
const flushTask = () => {
deadline = getTime() + threshold;
let job = peek(queue);
while (job && !Scheduler.shouldYield()) {
const { callback, data } = job;
job.callback = null;
const next = callback && callback(data);
if (next) {
job.callback = next;
}
else {
queue.shift();
}
job = peek(queue);
}
job && schedule(flushTask);
};
Scheduler.scheduleTask = (callback, data) => {
const task = {
callback,
data,
};
queue.push(task);
schedule(flushTask);
};
Scheduler.shouldYield = () => {
var _a, _b;
return (((_b = (_a = navigator) === null || _a === void 0 ? void 0 : _a.scheduling) === null || _b === void 0 ? void 0 : _b.isInputPending()) || getTime() >= deadline);
};
})(Scheduler || (Scheduler = {}));
//# sourceMappingURL=index.js.map