mirror some changes from main

pull/16197/head
Rich Harris 8 months ago
parent 6f32d21310
commit f9eb2f9f9d

@ -1,7 +1,7 @@
import { run_all } from '../../shared/utils.js'; import { run_all } from '../../shared/utils.js';
// Fallback for when requestIdleCallback is not available // Fallback for when requestIdleCallback is not available
export const request_idle_callback = const request_idle_callback =
typeof requestIdleCallback === 'undefined' typeof requestIdleCallback === 'undefined'
? (/** @type {() => void} */ cb) => setTimeout(cb, 1) ? (/** @type {() => void} */ cb) => setTimeout(cb, 1)
: requestIdleCallback; : requestIdleCallback;
@ -11,10 +11,12 @@ let is_idle_task_queued = false;
/** @type {Array<() => void>} */ /** @type {Array<() => void>} */
let queued_boundary_microtasks = []; let queued_boundary_microtasks = [];
/** @type {Array<() => void>} */ /** @type {Array<() => void>} */
let queued_post_microtasks = []; let queued_post_microtasks = [];
/** @type {Array<() => void>} */ /** @type {Array<() => void>} */
let queued_idle_tasks = []; let idle_tasks = [];
export function flush_boundary_micro_tasks() { export function flush_boundary_micro_tasks() {
const tasks = queued_boundary_microtasks.slice(); const tasks = queued_boundary_microtasks.slice();
@ -28,13 +30,10 @@ export function flush_post_micro_tasks() {
run_all(tasks); run_all(tasks);
} }
export function flush_idle_tasks() { export function run_idle_tasks() {
if (is_idle_task_queued) { var tasks = idle_tasks;
is_idle_task_queued = false; idle_tasks = [];
const tasks = queued_idle_tasks.slice(); run_all(tasks);
queued_idle_tasks = [];
run_all(tasks);
}
} }
function flush_all_micro_tasks() { function flush_all_micro_tasks() {
@ -71,9 +70,9 @@ export function queue_micro_task(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(flush_idle_tasks);
} }
queued_idle_tasks.push(fn);
idle_tasks.push(fn);
} }

@ -27,11 +27,7 @@ import {
REACTION_IS_UPDATING, REACTION_IS_UPDATING,
EFFECT_ASYNC EFFECT_ASYNC
} from './constants.js'; } from './constants.js';
import { import { flush_boundary_micro_tasks, flush_post_micro_tasks, run_idle_tasks } from './dom/task.js';
flush_idle_tasks,
flush_boundary_micro_tasks,
flush_post_micro_tasks
} from './dom/task.js';
import { internal_set } from './reactivity/sources.js'; import { internal_set } from './reactivity/sources.js';
import { import {
destroy_derived_effects, destroy_derived_effects,
@ -937,7 +933,7 @@ export function flush_sync(fn) {
flush_boundary_micro_tasks(); flush_boundary_micro_tasks();
flush_post_micro_tasks(); flush_post_micro_tasks();
flush_idle_tasks(); run_idle_tasks();
if (queued_root_effects.length > 0 || root_effects.length > 0) { if (queued_root_effects.length > 0 || root_effects.length > 0) {
flush_sync(); flush_sync();
} }

Loading…
Cancel
Save