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) ? (/** @type {() => void} */ cb) => setTimeout(cb, 1)
: requestIdleCallback; : requestIdleCallback;
let is_micro_task_queued = false;
let is_idle_task_queued = false;
/** @type {Array<() => void>} */ /** @type {Array<() => void>} */
let current_queued_micro_tasks = []; let micro_tasks = [];
/** @type {Array<() => void>} */ /** @type {Array<() => void>} */
let current_queued_idle_tasks = []; let idle_tasks = [];
function process_micro_tasks() { function run_micro_tasks() {
is_micro_task_queued = false; var tasks = micro_tasks;
const tasks = current_queued_micro_tasks.slice(); micro_tasks = [];
current_queued_micro_tasks = [];
run_all(tasks); run_all(tasks);
} }
function process_idle_tasks() { function run_idle_tasks() {
is_idle_task_queued = false; var tasks = idle_tasks;
const tasks = current_queued_idle_tasks.slice(); idle_tasks = [];
current_queued_idle_tasks = [];
run_all(tasks); run_all(tasks);
} }
@ -32,32 +28,33 @@ function process_idle_tasks() {
* @param {() => void} fn * @param {() => void} fn
*/ */
export function queue_micro_task(fn) { export function queue_micro_task(fn) {
if (!is_micro_task_queued) { if (micro_tasks.length === 0) {
is_micro_task_queued = true; queueMicrotask(run_micro_tasks);
queueMicrotask(process_micro_tasks);
} }
current_queued_micro_tasks.push(fn);
micro_tasks.push(fn);
} }
/** /**
* @param {() => void} fn * @param {() => void} fn
*/ */
export function queue_idle_task(fn) { export function queue_idle_task(fn) {
if (!is_idle_task_queued) { if (idle_tasks.length === 0) {
is_idle_task_queued = true; request_idle_callback(run_idle_tasks);
request_idle_callback(process_idle_tasks);
} }
current_queued_idle_tasks.push(fn);
idle_tasks.push(fn);
} }
/** /**
* Synchronously run any queued tasks. * Synchronously run any queued tasks.
*/ */
export function flush_tasks() { export function flush_tasks() {
if (is_micro_task_queued) { if (micro_tasks.length > 0) {
process_micro_tasks(); 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 = []; queued_root_effects = [];
for (var i = 0; i < length; i++) { for (var i = 0; i < length; i++) {
var effect = root_effects[i]; var root = root_effects[i];
if ((effect.f & CLEAN) === 0) { if ((root.f & CLEAN) === 0) {
effect.f ^= CLEAN; root.f ^= CLEAN;
} }
var collected_effects = process_effects(effect); var collected_effects = process_effects(root);
flush_queued_effects(collected_effects); flush_queued_effects(collected_effects);
} }
} }
@ -739,9 +739,7 @@ export function schedule_effect(signal) {
queueMicrotask(flush_queued_root_effects); queueMicrotask(flush_queued_root_effects);
} }
last_scheduled_effect = signal; var effect = (last_scheduled_effect = signal);
var effect = signal;
while (effect.parent !== null) { while (effect.parent !== null) {
effect = effect.parent; effect = effect.parent;

Loading…
Cancel
Save