All files / src/web/webview frameScheduling.ts

100% Statements 8/8
100% Branches 2/2
100% Functions 4/4
100% Lines 8/8

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32            5x 2x     5x               1x   1x 3x         1x 1x        
export function replacePendingAnimationFrame(
	currentId: number | null,
	requestFrame: (callback: FrameRequestCallback) => number,
	cancelFrame: (handle: number) => void,
	callback: FrameRequestCallback,
): number {
	if (currentId !== null) {
		cancelFrame(currentId);
	}
 
	return requestFrame(callback);
}
 
export function createAnimationFrameScheduler(
	requestFrame: (callback: FrameRequestCallback) => number,
	cancelFrame: (handle: number) => void,
	callback: FrameRequestCallback,
): () => void {
	let pendingId: number | null = null;
 
	return () => {
		pendingId = replacePendingAnimationFrame(
			pendingId,
			requestFrame,
			cancelFrame,
			(frameTime) => {
				pendingId = null;
				callback(frameTime);
			},
		);
	};
}