/** * Per-frame render timing — Web platform. * Aligned with Android FrameRenderInfo / iOS FrameRenderInfo. */ export interface FrameRenderInfo { /** Frame start timestamp (performance.now ms). */ startTimeMs: number; /** Frame end timestamp (performance.now ms). */ endTimeMs: number; /** Sort stage time (ms). */ sortTimeMs: number; /** GPU render time (ms). */ renderTimeMs: number; /** Reorder time (ms, WebGL path only; 0 for WebGPU). */ reorderTimeMs: number; /** CPU render-submit time (ms, loadSplats + render call). */ renderSubmitTimeMs: number; /** Production frame serial (incremented on actual render). */ frameSerial: number; /** Presentation frame serial (incremented on display submit). */ presentFrameSerial: number; /** Idle time: gap between previous frame end and this frame start (ms). */ idleTimeMs: number; } /** * Frame rate monitoring info — unified public API across platforms. * Contains pre-computed high-level performance metrics. */ export interface FrameRateInfo { /** Production FPS (actual frames rendered per second). */ fps: number; /** Presentation FPS (display refresh rate including reused frames). */ presentationFps: number; /** 95th percentile frame interval (ms). */ frameIntervalP95Ms: number; /** 99th percentile frame interval (ms). */ frameIntervalP99Ms: number; /** Percentage of frames with interval > 50ms (jank ratio). */ jankRatioPercent: number; /** Average total frame time (ms). */ averageFrameTimeMs: number; /** Estimated CPU busy ratio (%). Browser approximation based on frame active time vs interval. */ cpuUsagePercent: number; /** Per-frame details within the sliding window (aligned with Android/iOS). */ frames: FrameRenderInfo[]; } export interface PlaybackStats { avgFps: number; frameCount: number; durationMs: number; /** Percentage of frame intervals > 50ms */ jankRatio: number; /** Coefficient of variation of frame intervals (stddev / mean) */ fpsCv: number; } /** * Frame rate monitor with 2-second sliding window. * Aligned with Android/iOS FrameRateMonitor. * * @example * ```ts * controller.frameRateMonitorEnabled = true * controller.onFrameRateInfo = (info) => { * console.log('FPS:', info.fps, 'Jank:', info.jankRatioPercent) * } * ``` */ export declare class FrameRateMonitor { enabled: boolean; onFrameRateInfo: ((info: FrameRateInfo) => void) | null; private lwFrameCount; private lwStartTimeMs; private lwLastEndTimeMs; private lwJankCount; private lwSumInterval; private lwSumIntervalSq; /** Reset the lightweight counter. Call at playback start. */ resetPlaybackStats(): void; /** Get lightweight playback stats. Call at playback end. */ getPlaybackStats(): PlaybackStats; private frames; private computeFrameRateInfo; private percentileInterval; private jankRatio; }