Something went wrong. Try again.
source dump of claude code forked from oppi.li/claude-code
Something went wrong. Try again.
1.3 kB · 47 lines
TypeScript
at main
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748export type FpsMetrics = { averageFps: number low1PctFps: number}
export class FpsTracker { private frameDurations: number[] = [] private firstRenderTime: number | undefined private lastRenderTime: number | undefined
record(durationMs: number): void { const now = performance.now() if (this.firstRenderTime === undefined) { this.firstRenderTime = now } this.lastRenderTime = now this.frameDurations.push(durationMs) }
getMetrics(): FpsMetrics | undefined { if ( this.frameDurations.length === 0 || this.firstRenderTime === undefined || this.lastRenderTime === undefined ) { return undefined }
const totalTimeMs = this.lastRenderTime - this.firstRenderTime if (totalTimeMs <= 0) { return undefined }
const totalFrames = this.frameDurations.length const averageFps = totalFrames / (totalTimeMs / 1000)
const sorted = this.frameDurations.slice().sort((a, b) => b - a) const p99Index = Math.max(0, Math.ceil(sorted.length * 0.01) - 1) const p99FrameTimeMs = sorted[p99Index]! const low1PctFps = p99FrameTimeMs > 0 ? 1000 / p99FrameTimeMs : 0
return { averageFps: Math.round(averageFps * 100) / 100, low1PctFps: Math.round(low1PctFps * 100) / 100, } }}