Skip to content

Commit 30bf2f6

Browse files
committed
cleanup
1 parent 6e6d378 commit 30bf2f6

File tree

2 files changed

+39
-39
lines changed

2 files changed

+39
-39
lines changed

packages/svelte/src/internal/client/dom/task.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ export const request_idle_callback =
99

1010
// Fallback for when scheduler.yield is not available
1111
// TODO: find a proper polyfill for Safari, this doesn't work
12-
export const scheduler_yield =
12+
export const schedule_yield =
1313
// @ts-ignore
1414
typeof scheduler === 'undefined'
1515
? (/** @type {() => void} */ cb) => setTimeout(cb, 1)

packages/svelte/src/internal/client/runtime.js

Lines changed: 38 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ import {
2828
BOUNDARY_EFFECT,
2929
YIELD_EFFECT
3030
} from './constants.js';
31-
import { flush_tasks, scheduler_yield } from './dom/task.js';
31+
import { flush_tasks, schedule_yield } from './dom/task.js';
3232
import { add_owner } from './dev/ownership.js';
3333
import { internal_set, set, source } from './reactivity/sources.js';
3434
import { destroy_derived, execute_derived, update_derived } from './reactivity/deriveds.js';
@@ -40,7 +40,6 @@ import { tracing_expressions, get_stack } from './dev/tracing.js';
4040

4141
const FLUSH_MICROTASK = 0;
4242
const FLUSH_SYNC = 1;
43-
const FLUSH_YIELD = 2;
4443
// Used for DEV time error handling
4544
/** @param {WeakSet<Error>} value */
4645
const handled_errors = new WeakSet();
@@ -51,8 +50,8 @@ let scheduler_mode = FLUSH_MICROTASK;
5150
// Used for handling scheduling
5251
let is_micro_task_queued = false;
5352
let is_yield_queued = false;
54-
/** @type {Array<() => void>} */
55-
let queued_yield_tasks = [];
53+
/** @type {Effect[]} */
54+
let queued_yield_effects = [];
5655

5756
/** @type {Effect | null} */
5857
let last_scheduled_effect = null;
@@ -665,7 +664,7 @@ function flush_queued_effects(effects) {
665664
}
666665
}
667666

668-
function flush_effects(yielded_effects = false) {
667+
function flush_deferred_effects(yielded_effects = false) {
669668
is_micro_task_queued = false;
670669
if (flush_count > 1001) {
671670
return;
@@ -685,47 +684,24 @@ function flush_effects(yielded_effects = false) {
685684

686685
function flush_yield_effects() {
687686
is_yield_queued = false;
688-
var tasks = queued_yield_tasks.slice();
689-
queued_yield_tasks = [];
690-
var previous_scheduler_mode = scheduler_mode;
691-
scheduler_mode = FLUSH_YIELD;
692-
try {
693-
run_all(tasks);
694-
} finally {
695-
scheduler_mode = previous_scheduler_mode;
696-
}
697-
flush_effects(true);
698-
}
699687

700-
/**
701-
* @param {() => void} fn
702-
*/
703-
export function queue_yield(fn) {
704-
if (!is_yield_queued) {
705-
is_yield_queued = true;
706-
scheduler_yield(flush_yield_effects);
688+
for (var i = 0; i < queued_yield_effects.length; i++) {
689+
var effect = queued_yield_effects[i];
690+
if ((effect.f & (DESTROYED | INERT)) === 0) {
691+
last_scheduled_effect = effect;
692+
693+
mark_parent_effects(effect);
694+
}
707695
}
708-
queued_yield_tasks.push(fn);
696+
queued_yield_effects = [];
697+
flush_deferred_effects(true);
709698
}
710699

711700
/**
712701
* @param {Effect} signal
713702
* @returns {void}
714703
*/
715-
export function schedule_effect(signal) {
716-
if (scheduler_mode !== FLUSH_YIELD && (signal.f & YIELD_EFFECT) !== 0) {
717-
queue_yield(() => {
718-
schedule_effect(signal);
719-
});
720-
} else if (scheduler_mode !== FLUSH_SYNC) {
721-
if (!is_micro_task_queued) {
722-
is_micro_task_queued = true;
723-
queueMicrotask(flush_effects);
724-
}
725-
}
726-
727-
last_scheduled_effect = signal;
728-
704+
function mark_parent_effects(signal) {
729705
var effect = signal;
730706

731707
while (effect.parent !== null) {
@@ -741,6 +717,30 @@ export function schedule_effect(signal) {
741717
queued_root_effects.push(effect);
742718
}
743719

720+
/**
721+
* @param {Effect} signal
722+
* @returns {void}
723+
*/
724+
export function schedule_effect(signal) {
725+
if (scheduler_mode !== FLUSH_SYNC) {
726+
if ((signal.f & YIELD_EFFECT) !== 0) {
727+
if (!is_yield_queued) {
728+
is_yield_queued = true;
729+
schedule_yield(flush_yield_effects);
730+
}
731+
queued_yield_effects.push(signal);
732+
return;
733+
}
734+
if (!is_micro_task_queued) {
735+
is_micro_task_queued = true;
736+
queueMicrotask(flush_deferred_effects);
737+
}
738+
}
739+
740+
last_scheduled_effect = signal;
741+
mark_parent_effects(signal);
742+
}
743+
744744
/**
745745
*
746746
* This function both runs render effects and collects user effects in topological order

0 commit comments

Comments
 (0)