Device diagnostics research
The Measurement Floor in Browser Input Lag Testing
Input lag measurement in a browser is bounded twice over. The device delivers input events at a protocol rate, and the page observes them at a scheduling rate. Whichever is slower sets the floor below which the measurement cannot distinguish a real value from zero. Our evidence file records both sides so a test can state its resolution honestly.
What this guide helps you decide
A page reports an input lag figure. Below what value can that figure not be trusted?
This research explains the sampling floor that bounds browser input-lag measurement, using derived protocol and scheduling constants. It does not report a measured lag value for any device and does not benchmark any product.
Try it on the anchor product: BeanNest Tools /device/.
The display-side sampling period
A test that samples through requestAnimationFrame can observe state only at rendering callbacks. The definition set records 60 Hz as a 16.67 millisecond period and 144 Hz as a 6.94 millisecond period. For that sampling method, a value smaller than one callback period is not distinguishable from zero by the callback observations alone.
The device-side delivery interval
The same definition set records 10 milliseconds for USB low-speed HID, 1 millisecond for USB full-speed HID and the 1000 Hz gaming-device entry, roughly 11.25 milliseconds for Bluetooth Classic HID, and a 7.5 millisecond floor for Bluetooth LE HID. These are delivery-side bounds, not measured end-to-end latency for a named device.
Use the coarser bound for this method
When the page samples more slowly than the device reports, the page-side sampling period is the limiting resolution. A 1000 Hz device observed only on a 60 Hz rendering callback is therefore bounded by the 16.67 millisecond callback period for this measurement method. Faster device reporting does not make that callback path resolve finer intervals.
Timestamps add a separate precision question
The definition set records timer coarsening for performance.now() and notes that Event.timeStamp can use a different origin. Those timestamp properties are separate from the display and transport intervals, so a useful report should name which clock supplied each time value instead of treating every timestamp as interchangeable.
Coalesced pointer events can hide reports
Pointermove delivery can coalesce several hardware reports into one dispatched event. The browser may expose the coalesced reports separately, but the definition set does not treat that as a universal delivery path. A test that counts only dispatched pointer events can therefore count fewer events than the device produced.
What this evidence can and cannot support
This repository has not measured end-to-end lag for a specific mouse, keyboard, display, operating system, or browser build. The supportable output is a method description: display rate, sampling path, transport interval, clock source, and the observed value stated together with the method's resolution.
First-party evidence and provenance
How we checked this
We derived the mechanism set from documented protocol limits, Web platform scheduling behaviour, and the electrical model of a keyboard matrix, then encoded each constant with its reason in a generator script in this repository. The definitions file is regenerated by running that script. For this guide we compared the display sampling period against each device polling interval to establish which side sets the observable resolution, and recorded the resulting floor.
- Method
- We derived the mechanism set from documented protocol limits, Web platform scheduling behaviour, and the electrical model of a keyboard matrix, then encoded each constant with its reason in a generator script in this repository. The definitions file is regenerated by running that script.
- Environment
- Node.js on a desktop workstation. The evidence is a definition set with recorded reasons, not a hardware measurement on a specific device.
- Captured
- Reviewed by
- BeanNest Studio
Repository evidence artifacts:
tools/research-evidence/device/definitions-2026-09-20.jsontools/research-evidence/device/README.md