pull/15348/head
Rich Harris 7 months ago
parent a453226597
commit e42172add4

@ -6,25 +6,21 @@ export const request_idle_callback =
? (/** @type {() => void} */ cb) => setTimeout(cb, 1)
: requestIdleCallback;
let is_micro_task_queued = false;
let is_idle_task_queued = false;
/** @type {Array<() => void>} */
let current_queued_micro_tasks = [];
let micro_tasks = [];
/** @type {Array<() => void>} */
let current_queued_idle_tasks = [];
let idle_tasks = [];
function process_micro_tasks() {
is_micro_task_queued = false;
const tasks = current_queued_micro_tasks.slice();
current_queued_micro_tasks = [];
function run_micro_tasks() {
var tasks = micro_tasks;
micro_tasks = [];
run_all(tasks);
}
function process_idle_tasks() {
is_idle_task_queued = false;
const tasks = current_queued_idle_tasks.slice();
current_queued_idle_tasks = [];
function run_idle_tasks() {
var tasks = idle_tasks;
idle_tasks = [];
run_all(tasks);
}
@ -32,32 +28,33 @@ function process_idle_tasks() {
* @param {() => void} fn
*/
export function queue_micro_task(fn) {
if (!is_micro_task_queued) {
is_micro_task_queued = true;
queueMicrotask(process_micro_tasks);
if (micro_tasks.length === 0) {
queueMicrotask(run_micro_tasks);
}
current_queued_micro_tasks.push(fn);
micro_tasks.push(fn);
}
/**
* @param {() => void} fn
*/
export function queue_idle_task(fn) {
if (!is_idle_task_queued) {
is_idle_task_queued = true;
request_idle_callback(process_idle_tasks);
if (idle_tasks.length === 0) {
request_idle_callback(run_idle_tasks);
}
current_queued_idle_tasks.push(fn);
idle_tasks.push(fn);
}
/**
* Synchronously run any queued tasks.
*/
export function flush_tasks() {
if (is_micro_task_queued) {
process_micro_tasks();
if (micro_tasks.length > 0) {
run_micro_tasks();
}
if (is_idle_task_queued) {
process_idle_tasks();
if (idle_tasks.length > 0) {
run_idle_tasks();
}
}

@ -668,13 +668,13 @@ function flush_queued_root_effects() {
queued_root_effects = [];
for (var i = 0; i < length; i++) {
var effect = root_effects[i];
var root = root_effects[i];
if ((effect.f & CLEAN) === 0) {
effect.f ^= CLEAN;
if ((root.f & CLEAN) === 0) {
root.f ^= CLEAN;
}
var collected_effects = process_effects(effect);
var collected_effects = process_effects(root);
flush_queued_effects(collected_effects);
}
}
@ -739,9 +739,7 @@ export function schedule_effect(signal) {
queueMicrotask(flush_queued_root_effects);
}
last_scheduled_effect = signal;
var effect = signal;
var effect = (last_scheduled_effect = signal);
while (effect.parent !== null) {
effect = effect.parent;

Loading…
Cancel
Save