28 lines
752 B
TypeScript
28 lines
752 B
TypeScript
import { appConfig } from '../config';
|
|
|
|
const INITIAL_FPS = 60;
|
|
const FRAME_GAP_RESET_SECONDS = 1;
|
|
|
|
export class FramePerformance {
|
|
public smoothedFps = INITIAL_FPS;
|
|
|
|
private previousFrameTime: DOMHighResTimeStamp | null = null;
|
|
|
|
public update(time: DOMHighResTimeStamp): void {
|
|
const previous = this.previousFrameTime;
|
|
this.previousFrameTime = time;
|
|
if (previous === null) {
|
|
return;
|
|
}
|
|
|
|
const deltaSeconds = (time - previous) / 1000;
|
|
if (deltaSeconds <= 0 || deltaSeconds > FRAME_GAP_RESET_SECONDS) {
|
|
return;
|
|
}
|
|
|
|
const fps = 1 / deltaSeconds;
|
|
this.smoothedFps =
|
|
this.smoothedFps * appConfig.simulation.budget.fpsSmoothingRetain +
|
|
fps * appConfig.simulation.budget.fpsSmoothingNew;
|
|
}
|
|
}
|