64 lines
1.8 KiB
TypeScript
64 lines
1.8 KiB
TypeScript
import { describe, expect, it } from 'vitest';
|
|
|
|
import { FramePerformance } from './frame-performance';
|
|
|
|
function createScenario() {
|
|
const performance = new FramePerformance();
|
|
let time = 0;
|
|
performance.update(time);
|
|
const advance = (fps: number): void => {
|
|
time += 1000 / fps;
|
|
performance.update(time);
|
|
};
|
|
return { performance, advance };
|
|
}
|
|
|
|
describe('FramePerformance refresh target', () => {
|
|
it('uses 60 FPS as the fixed adaptive budget target', () => {
|
|
const { performance, advance } = createScenario();
|
|
|
|
[123, 126, 130, 121, 60, 30].forEach(advance);
|
|
|
|
expect(performance.refreshTargetFps).toBe(60);
|
|
});
|
|
|
|
it('keeps latest and smoothed FPS separate from the fixed target', () => {
|
|
const { performance, advance } = createScenario();
|
|
|
|
advance(120);
|
|
|
|
expect(performance.latestFps).toBe(120);
|
|
expect(performance.smoothedFps).toBeGreaterThan(60);
|
|
expect(performance.refreshTargetFps).toBe(60);
|
|
});
|
|
|
|
it('reports true FPS even when the simulation delta would clamp', () => {
|
|
const { performance, advance } = createScenario();
|
|
|
|
[5, 5, 5, 5, 5].forEach(advance);
|
|
|
|
expect(performance.latestFps).toBeCloseTo(5, 5);
|
|
});
|
|
|
|
it('snaps the display refresh estimate to a stable screen frequency', () => {
|
|
const { performance, advance } = createScenario();
|
|
|
|
[123, 126, 130, 121, 124, 127, 125, 122].forEach(advance);
|
|
|
|
expect(performance.refreshTargetFps).toBe(60);
|
|
expect(performance.displayRefreshFps).toBe(120);
|
|
});
|
|
|
|
it('ignores a single startup spike before settling the display refresh estimate', () => {
|
|
const { performance, advance } = createScenario();
|
|
|
|
advance(240);
|
|
|
|
expect(performance.displayRefreshFps).toBe(60);
|
|
|
|
Array.from({ length: 8 }).forEach(() => advance(120));
|
|
|
|
expect(performance.refreshTargetFps).toBe(60);
|
|
expect(performance.displayRefreshFps).toBe(120);
|
|
});
|
|
});
|