Ready
30s
Duration
sec
🖱️
Move Your Mouse
Move the cursor inside this area to start measuring
JS cursor position (lags hardware)
2-frame reference circle
Inter-event interval (blue)
rAF time offset (gray)
Last
Best
Avg
Samples
Keypress Lag Breakdown

Session Stats

ModeMouse
Last Reading
Best
Session Avg
Total Samples0

Recent History

No tests yet.

Input Lag Reference

<4ms
⚡ Near-Zero
240Hz+, 1000Hz poll
4–8ms
Excellent
144Hz display
8–16ms
Good
1 frame @ 60Hz
16–32ms
Average
1–2 frames behind
>32ms
⏱ High Lag
Bottleneck detected
🖱️

Mouse Lag Canvas

As you move your mouse, JavaScript records each position from mousemove events. The green circle trails behind your hardware cursor — that visible gap is your input lag. Faster polling rates (500Hz, 1000Hz) shrink this gap.

📊

Timing Graph

The graph at the bottom of the canvas shows inter-event intervals (blue bars) and rAF offset times (gray bars). A flat blue line near 8ms means a standard 125Hz mouse. A good system shows a consistent sawtooth pattern on the gray line.

⌨️

Keyboard Mode

Each keypress measures the gap between the OS-reported keydown.timeStamp and the next rendered animation frame. This isolates browser input processing and rendering pipeline delay from your own reaction time.

🌟

Reduce Lag

Use a 1000Hz polling mouse, 144Hz+ monitor, Game Mode display setting, wired peripherals, and keep background apps closed. Disable V-Sync or use adaptive sync (G-Sync / FreeSync) for best pipeline performance.

Frequently Asked Questions

Mouse polling rate is how many times per second the mouse reports its position to the OS. 125Hz = once every 8ms; 1000Hz = once every 1ms. Higher polling rates reduce the gap between hardware cursor position and JS-recorded position, making movement feel tighter and more responsive.
The hardware cursor is rendered directly by the OS compositor and appears on screen almost immediately. JavaScript receives mouse events through the browser's event loop, which introduces scheduling delay. The difference between where the hardware cursor is and where JS last recorded it represents the total input pipeline delay.
The blue bars show the time between consecutive mousemove events. At 125Hz this should be ~8ms; at 1000Hz it should be ~1ms. The gray bars show how much time elapsed between each mouse event and the last rAF frame start. Ideally you want a consistent sawtooth pattern on the gray bars, indicating stable vsync alignment.
No. Key repeat delay is the OS-level setting for how long before a held key starts repeating. Keyboard input lag as measured here is the pipeline delay from the moment the OS registers a keydown event to when the browser renders the next frame — typically 8–32ms depending on your display and system.
Use a high-refresh-rate monitor (144Hz+), enable Game Mode on your display, use a wired mouse and keyboard with 1000Hz polling, disable V-Sync or enable adaptive sync, close background applications, and keep GPU and chipset drivers updated. Each of these steps reduces one layer of the total input pipeline delay.
✓ Result copied to clipboard!