more cleaning up
This commit is contained in:
parent
2c7d72a699
commit
560398fefb
110 changed files with 933 additions and 2647 deletions
|
|
@ -1,22 +1,12 @@
|
|||
import { appConfig } from '../config';
|
||||
|
||||
const COMMON_DISPLAY_REFRESH_RATES = [
|
||||
50, 60, 72, 75, 90, 100, 120, 144, 165, 180, 240,
|
||||
] as const;
|
||||
const DISPLAY_REFRESH_CONFIRMATION_FRAMES = 8;
|
||||
const DISPLAY_REFRESH_SNAP_TOLERANCE = 0.15;
|
||||
const INITIAL_FPS = 60;
|
||||
const FRAME_GAP_RESET_SECONDS = 1;
|
||||
|
||||
export class FramePerformance {
|
||||
public latestFps = 60;
|
||||
public smoothedFps = 60;
|
||||
public displayRefreshFps = 60;
|
||||
public readonly refreshTargetFps = 60;
|
||||
public smoothedFps = INITIAL_FPS;
|
||||
|
||||
private previousFrameTime: DOMHighResTimeStamp | null = null;
|
||||
private hasConfirmedDisplayRefreshFps = false;
|
||||
private pendingDisplayRefreshFps = 0;
|
||||
private pendingDisplayRefreshFrameCount = 0;
|
||||
|
||||
public update(time: DOMHighResTimeStamp): void {
|
||||
const previous = this.previousFrameTime;
|
||||
|
|
@ -31,67 +21,8 @@ export class FramePerformance {
|
|||
}
|
||||
|
||||
const fps = 1 / deltaSeconds;
|
||||
this.latestFps = fps;
|
||||
this.updateDisplayRefreshEstimate(fps);
|
||||
this.smoothedFps =
|
||||
this.smoothedFps * appConfig.simulation.budget.fpsSmoothingRetain +
|
||||
fps * appConfig.simulation.budget.fpsSmoothingNew;
|
||||
}
|
||||
|
||||
private updateDisplayRefreshEstimate(fps: number): void {
|
||||
const displayRefreshFps = this.snapDisplayRefreshRate(fps);
|
||||
if (displayRefreshFps === null) {
|
||||
this.resetPendingDisplayRefreshEstimate();
|
||||
return;
|
||||
}
|
||||
|
||||
if (
|
||||
this.hasConfirmedDisplayRefreshFps &&
|
||||
displayRefreshFps < this.displayRefreshFps
|
||||
) {
|
||||
this.resetPendingDisplayRefreshEstimate();
|
||||
return;
|
||||
}
|
||||
|
||||
if (displayRefreshFps !== this.pendingDisplayRefreshFps) {
|
||||
this.pendingDisplayRefreshFps = displayRefreshFps;
|
||||
this.pendingDisplayRefreshFrameCount = 1;
|
||||
} else {
|
||||
this.pendingDisplayRefreshFrameCount += 1;
|
||||
}
|
||||
|
||||
if (this.pendingDisplayRefreshFrameCount < DISPLAY_REFRESH_CONFIRMATION_FRAMES) {
|
||||
return;
|
||||
}
|
||||
|
||||
this.displayRefreshFps = displayRefreshFps;
|
||||
this.hasConfirmedDisplayRefreshFps = true;
|
||||
this.resetPendingDisplayRefreshEstimate();
|
||||
}
|
||||
|
||||
private snapDisplayRefreshRate(fps: number): number | null {
|
||||
if (!Number.isFinite(fps) || fps <= 0) {
|
||||
return null;
|
||||
}
|
||||
|
||||
let nearestRefreshRate: number = COMMON_DISPLAY_REFRESH_RATES[0];
|
||||
let nearestDifference = Math.abs(fps - nearestRefreshRate);
|
||||
|
||||
COMMON_DISPLAY_REFRESH_RATES.forEach((refreshRate) => {
|
||||
const difference = Math.abs(fps - refreshRate);
|
||||
if (difference < nearestDifference) {
|
||||
nearestRefreshRate = refreshRate;
|
||||
nearestDifference = difference;
|
||||
}
|
||||
});
|
||||
|
||||
return nearestDifference / nearestRefreshRate <= DISPLAY_REFRESH_SNAP_TOLERANCE
|
||||
? nearestRefreshRate
|
||||
: null;
|
||||
}
|
||||
|
||||
private resetPendingDisplayRefreshEstimate(): void {
|
||||
this.pendingDisplayRefreshFps = 0;
|
||||
this.pendingDisplayRefreshFrameCount = 0;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue