From 4ac5a91c95aa877c457d476c80a389551a4a8b61 Mon Sep 17 00:00:00 2001 From: Daniel Imms <2193314+Tyriar@users.noreply.github.com> Date: Sat, 24 Sep 2022 11:56:46 -0700 Subject: [PATCH] Make DebouncedIdleTask helper --- src/browser/services/RenderService.ts | 9 ++++----- src/common/{IdleTaskQueue.ts => Idle.ts} | 24 ++++++++++++++++++++++-- 2 files changed, 26 insertions(+), 7 deletions(-) rename src/common/{IdleTaskQueue.ts => Idle.ts} (79%) diff --git a/src/browser/services/RenderService.ts b/src/browser/services/RenderService.ts index 880a0667..ca1321d6 100644 --- a/src/browser/services/RenderService.ts +++ b/src/browser/services/RenderService.ts @@ -12,7 +12,7 @@ import { addDisposableDomListener } from 'browser/Lifecycle'; import { IColorSet, IRenderDebouncerWithCallback } from 'browser/Types'; import { IOptionsService, IBufferService, IDecorationService } from 'common/services/Services'; import { ICharSizeService, ICoreBrowserService, IRenderService } from 'browser/services/Services'; -import { IdleTaskQueue } from 'common/IdleTaskQueue'; +import { DebouncedIdleTask } from 'common/Idle'; interface ISelectionState { start: [number, number] | undefined; @@ -106,7 +106,7 @@ export class RenderService extends Disposable implements IRenderService { } if (!this._isPaused && this._needsFullRefresh) { - this._pausedResizeQueue.flush(); + this._pausedResizeTask.flush(); this.refreshRows(0, this._rowCount - 1); this._needsFullRefresh = false; } @@ -205,11 +205,10 @@ export class RenderService extends Disposable implements IRenderService { this.refreshRows(0, this._rowCount - 1); } - private _pausedResizeQueue = new IdleTaskQueue(); + private _pausedResizeTask = new DebouncedIdleTask(); public onResize(cols: number, rows: number): void { if (this._isPaused) { - this._pausedResizeQueue.clear(); - this._pausedResizeQueue.enqueue(() => this._renderer.onResize(cols, rows)); + this._pausedResizeTask.set(() => this._renderer.onResize(cols, rows)); } else { this._renderer.onResize(cols, rows); } diff --git a/src/common/IdleTaskQueue.ts b/src/common/Idle.ts similarity index 79% rename from src/common/IdleTaskQueue.ts rename to src/common/Idle.ts index 167e79e9..529d38a4 100644 --- a/src/common/IdleTaskQueue.ts +++ b/src/common/Idle.ts @@ -9,7 +9,7 @@ * and care should be taken to ensure they're non-urgent and will not introduce race conditions. */ export class IdleTaskQueue { - private _tasks: Function[] = []; + private _tasks: (() => void)[] = []; private _idleCallback?: number; private _maxTaskDuration: number; private _i = 0; @@ -24,7 +24,7 @@ export class IdleTaskQueue { /** * Adds a task to the queue which will run in a future idle callback. */ - public enqueue(task: Function): void { + public enqueue(task: () => void): void { this._tasks.push(task); this._start(); } @@ -70,3 +70,23 @@ export class IdleTaskQueue { this.clear(); } } + +export class DebouncedIdleTask { + private _queue: IdleTaskQueue; + + /** + * @param targetFps The target frame rate. + */ + constructor(targetFps: number = 240) { + this._queue = new IdleTaskQueue(targetFps); + } + + public set(task: () => void): void { + this._queue.clear(); + this._queue.enqueue(task); + } + + public flush(): void { + this._queue.flush(); + } +}