more
This commit is contained in:
parent
2fe3c69963
commit
6bc125be1c
104 changed files with 3088 additions and 2414 deletions
|
|
@ -1,68 +0,0 @@
|
|||
const DEV_STATS_REFRESH_MS = 200;
|
||||
const ZERO_STAT_TEXT = '0';
|
||||
const ZERO_FRAME_TIME_TEXT = '0ms';
|
||||
const ZERO_RESOLUTION_TEXT = '0x0';
|
||||
|
||||
interface DevStatsSnapshot {
|
||||
time: DOMHighResTimeStamp;
|
||||
fps: number;
|
||||
agentCount: number;
|
||||
frameTimeMs: number;
|
||||
renderWidth: number;
|
||||
renderHeight: number;
|
||||
}
|
||||
|
||||
export class DevStatsOverlay {
|
||||
private readonly element: HTMLDivElement;
|
||||
private previousUpdateTime = Number.NEGATIVE_INFINITY;
|
||||
private previousText = '';
|
||||
|
||||
public constructor(parent: HTMLElement) {
|
||||
this.element = document.createElement('div');
|
||||
this.element.className = 'dev-stats-overlay';
|
||||
this.element.setAttribute('aria-hidden', 'true');
|
||||
parent.append(this.element);
|
||||
}
|
||||
|
||||
public update({
|
||||
time,
|
||||
fps,
|
||||
agentCount,
|
||||
frameTimeMs,
|
||||
renderWidth,
|
||||
renderHeight,
|
||||
}: DevStatsSnapshot): void {
|
||||
if (time - this.previousUpdateTime < DEV_STATS_REFRESH_MS) {
|
||||
return;
|
||||
}
|
||||
|
||||
this.previousUpdateTime = time;
|
||||
const text = `FPS ${formatFps(fps)}\nAgents ${formatAgentCount(agentCount)}\nFrame ${formatFrameTime(frameTimeMs)}\nResolution ${formatResolution(renderWidth, renderHeight)}`;
|
||||
if (text !== this.previousText) {
|
||||
this.element.textContent = text;
|
||||
this.previousText = text;
|
||||
}
|
||||
}
|
||||
|
||||
public destroy(): void {
|
||||
this.element.remove();
|
||||
}
|
||||
}
|
||||
|
||||
const formatFps = (fps: number): string =>
|
||||
Number.isFinite(fps) ? Math.max(0, Math.round(fps)).toString() : ZERO_STAT_TEXT;
|
||||
|
||||
const formatAgentCount = (agentCount: number): string =>
|
||||
Number.isFinite(agentCount)
|
||||
? Math.max(0, Math.round(agentCount)).toLocaleString('en-US')
|
||||
: ZERO_STAT_TEXT;
|
||||
|
||||
const formatFrameTime = (frameTimeMs: number): string =>
|
||||
Number.isFinite(frameTimeMs)
|
||||
? `${Math.max(0, frameTimeMs).toFixed(frameTimeMs < 10 ? 1 : 0)}ms`
|
||||
: ZERO_FRAME_TIME_TEXT;
|
||||
|
||||
const formatResolution = (width: number, height: number): string =>
|
||||
Number.isFinite(width) && Number.isFinite(height)
|
||||
? `${Math.max(0, Math.round(width))}x${Math.max(0, Math.round(height))}`
|
||||
: ZERO_RESOLUTION_TEXT;
|
||||
Loading…
Add table
Add a link
Reference in a new issue