Cancel pending Linux MPV fullscreen overlay refresh bursts

- return a cancel handle from the Linux refresh burst scheduler
- clear pending refresh bursts when overlays hide or windows close
- tighten the burst test polling to wait for the async refresh
This commit is contained in:
2026-04-27 20:31:00 -07:00
parent d9a8636486
commit 833afd451e
3 changed files with 40 additions and 14 deletions

View File

@@ -32,7 +32,10 @@ test('linux mpv fullscreen overlay refresh burst schedules overlay refresh work
ensureOverlayWindowLevel: () => calls.push('ensureOverlayWindowLevel'),
});
await new Promise((resolve) => setTimeout(resolve, 10));
const deadline = Date.now() + 200;
while (!calls.includes('updateVisibleOverlayVisibility') && Date.now() < deadline) {
await new Promise((resolve) => setTimeout(resolve, 5));
}
assert.ok(calls.includes('updateVisibleOverlayVisibility'));
assert.ok(calls.includes('hide'));

View File

@@ -15,6 +15,7 @@ export type LinuxMpvFullscreenOverlayRefreshDeps = {
};
ensureOverlayWindowLevel: (window: LinuxMpvFullscreenOverlayWindow) => void;
};
export type CancelLinuxMpvFullscreenOverlayRefreshBurst = () => void;
const LINUX_MPV_FULLSCREEN_OVERLAY_REFRESH_DELAYS_MS = [0, 50, 150, 300, 600] as const;
let linuxMpvFullscreenOverlayRefreshTimeouts: Array<ReturnType<typeof setTimeout>> = [];
@@ -47,9 +48,9 @@ function refreshLinuxVisibleOverlayAfterMpvFullscreenChange(
export function scheduleLinuxVisibleOverlayFullscreenRefreshBurst(
deps: LinuxMpvFullscreenOverlayRefreshDeps,
): void {
): CancelLinuxMpvFullscreenOverlayRefreshBurst {
if (process.platform !== 'linux') {
return;
return () => {};
}
clearLinuxMpvFullscreenOverlayRefreshTimeouts();
@@ -63,6 +64,7 @@ export function scheduleLinuxVisibleOverlayFullscreenRefreshBurst(
refreshTimeout.unref?.();
linuxMpvFullscreenOverlayRefreshTimeouts.push(refreshTimeout);
}
return clearLinuxMpvFullscreenOverlayRefreshTimeouts;
}
export { clearLinuxMpvFullscreenOverlayRefreshTimeouts };