UNPKG

lag-monitor

Version:

A lightweight utility for monitoring JavaScript event loop lag in real-time

79 lines (78 loc) 2.3 kB
/** * Supported lag measurement types */ export type LagType = "setTimeout" | "setInterval" | "requestAnimationFrame"; /** * Lag measurement data */ export interface LagData { /** Most recent lag measurement in milliseconds */ latest?: number; /** Average lag over the sample window in milliseconds */ average?: number; /** Minimum lag in the current sample window */ min?: number; /** Maximum lag in the current sample window */ max?: number; /** Number of samples collected */ samples?: number; } /** * Callback function called on each lag measurement */ export type LagCallback = (currentLag: number, lagData: LagData) => void; /** * Configuration options for lag monitoring */ export interface LagMonitorOptions { /** Method used for scheduling measurements */ lagType?: LagType; /** Interval between measurements in milliseconds */ sampleRate?: number; /** Number of samples to keep for average calculation */ sampleCount?: number; /** Optional callback invoked on each measurement */ callback?: LagCallback; /** Whether to start monitoring immediately */ autoStart?: boolean; /** Custom metrics to include in snapshots */ metrics?: Record<string, () => number>; /** User-defined metrics to compute from lag samples */ userMetrics?: Record<string, (samples: number[]) => number>; } declare class LagMonitor { private lagSamples; private isActive; private options; private timerId; private lastTimestamp; private userMetrics; constructor(options?: LagMonitorOptions); get latest(): number; get average(): number; get min(): number; get max(): number; private scheduleNext; private tick; private clearTimer; /** * Get a metric value by name - handles both built-in and user-defined metrics */ private getMetricValue; /** * Get all available metric functions (built-in + user-defined) */ getAvailableMetrics(): string[]; /** * Compute a specific metric or all metrics */ snapshot(metric?: string): LagData | { [key: string]: number; }; start(): void; stop(): void; reset(): void; restart(): void; isRunning(): boolean; } export default LagMonitor;