fix(editor): call throttleRAF with lastArgs and remove trailing (#10905)

Co-authored-by: Varun Chawla <varun_6april@hotmail.com>
Co-authored-by: aziamimoh <aziamimoh@users.noreply.github.com>
Co-authored-by: pgzcoa <pgzcoa@users.noreply.github.com>
Co-authored-by: TinaZhang24 <TinaZhang24@users.noreply.github.com>
This commit is contained in:
David Luzar
2026-03-06 20:40:36 +01:00
committed by GitHub
co-authored by Varun Chawla aziamimoh pgzcoa TinaZhang24
parent a0e93b6040
commit 757dfeb6ad
4 changed files with 11 additions and 21 deletions
@@ -414,7 +414,6 @@ export const debugRenderer = throttleRAF(
) => { ) => {
_debugRenderer(canvas, appState, elements, scale); _debugRenderer(canvas, appState, elements, scale);
}, },
{ trailing: true },
); );
export const loadSavedDebugState = () => { export const loadSavedDebugState = () => {
+11 -18
View File
@@ -151,24 +151,19 @@ export const debounce = <T extends any[]>(
return ret; return ret;
}; };
// throttle callback to execute once per animation frame // throttle callback to execute once per animation frame using the latest args
export const throttleRAF = <T extends any[]>( export const throttleRAF = <T extends any[]>(fn: (...args: T) => void) => {
fn: (...args: T) => void,
opts?: { trailing?: boolean },
) => {
let timerId: number | null = null; let timerId: number | null = null;
let lastArgs: T | null = null; let lastArgs: T | null = null;
let lastArgsTrailing: T | null = null;
const scheduleFunc = (args: T) => { const scheduleFunc = () => {
timerId = window.requestAnimationFrame(() => { timerId = window.requestAnimationFrame(() => {
timerId = null; timerId = null;
fn(...args); const args = lastArgs;
lastArgs = null; lastArgs = null;
if (lastArgsTrailing) {
lastArgs = lastArgsTrailing; if (args) {
lastArgsTrailing = null; fn(...args);
scheduleFunc(lastArgs);
} }
}); });
}; };
@@ -180,9 +175,7 @@ export const throttleRAF = <T extends any[]>(
} }
lastArgs = args; lastArgs = args;
if (timerId === null) { if (timerId === null) {
scheduleFunc(lastArgs); scheduleFunc();
} else if (opts?.trailing) {
lastArgsTrailing = args;
} }
}; };
ret.flush = () => { ret.flush = () => {
@@ -191,12 +184,12 @@ export const throttleRAF = <T extends any[]>(
timerId = null; timerId = null;
} }
if (lastArgs) { if (lastArgs) {
fn(...(lastArgsTrailing || lastArgs)); fn(...lastArgs);
lastArgs = lastArgsTrailing = null; lastArgs = null;
} }
}; };
ret.cancel = () => { ret.cancel = () => {
lastArgs = lastArgsTrailing = null; lastArgs = null;
if (timerId !== null) { if (timerId !== null) {
cancelAnimationFrame(timerId); cancelAnimationFrame(timerId);
timerId = null; timerId = null;
@@ -88,7 +88,6 @@ export const renderNewElementSceneThrottled = throttleRAF(
(config: NewElementSceneRenderConfig) => { (config: NewElementSceneRenderConfig) => {
_renderNewElementScene(config); _renderNewElementScene(config);
}, },
{ trailing: true },
); );
export const renderNewElementScene = ( export const renderNewElementScene = (
@@ -483,7 +483,6 @@ export const renderStaticSceneThrottled = throttleRAF(
(config: StaticSceneRenderConfig) => { (config: StaticSceneRenderConfig) => {
_renderStaticScene(config); _renderStaticScene(config);
}, },
{ trailing: true },
); );
/** /**