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

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

Loading…
Cancel
Save