Skip to content

Commit 48d5022

Browse files
authored
feat(GlobalScheduler): implement deferred removal of schedulers (#136)
1 parent ce27fc2 commit 48d5022

File tree

2 files changed

+11
-7
lines changed

2 files changed

+11
-7
lines changed

src/lib/Scheduler.ts

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ export enum ESchedulerPriority {
1919
export class GlobalScheduler {
2020
private schedulers: [IScheduler[], IScheduler[], IScheduler[], IScheduler[], IScheduler[]];
2121
private _cAFID: number;
22+
private toRemove: Array<[IScheduler, ESchedulerPriority]> = [];
2223

2324
constructor() {
2425
this.tick = this.tick.bind(this);
@@ -36,11 +37,7 @@ export class GlobalScheduler {
3637
}
3738

3839
public removeScheduler(scheduler: IScheduler, index = ESchedulerPriority.MEDIUM) {
39-
const i = this.schedulers[index].indexOf(scheduler);
40-
41-
if (i !== -1) {
42-
this.schedulers[index].splice(i, 1);
43-
}
40+
this.toRemove.push([scheduler, index]);
4441
}
4542

4643
public start() {
@@ -70,6 +67,15 @@ export class GlobalScheduler {
7067
schedulers[j].performUpdate(getNow() - startTime);
7168
}
7269
}
70+
71+
// Process deferred removals after all schedulers have been executed
72+
for (const [scheduler, index] of this.toRemove) {
73+
const schedulerIndex = this.schedulers[index].indexOf(scheduler);
74+
if (schedulerIndex !== -1) {
75+
this.schedulers[index].splice(schedulerIndex, 1);
76+
}
77+
}
78+
this.toRemove.length = 0;
7379
}
7480
}
7581

src/utils/utils/schedule.ts

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,6 @@ export const debounce = <T extends (...args: unknown[]) => void>(
7272
fn(...latestArgs);
7373
if (removeScheduler) {
7474
removeScheduler();
75-
removeScheduler = null;
7675
}
7776
}
7877
},
@@ -81,7 +80,6 @@ export const debounce = <T extends (...args: unknown[]) => void>(
8180
const cancel = () => {
8281
if (isScheduled && removeScheduler) {
8382
removeScheduler();
84-
removeScheduler = null;
8583
}
8684
isScheduled = false;
8785
frameCounter = 0;

0 commit comments

Comments
 (0)