This repository documents how to interpret and reproduce browser-observed mouse and keyboard input timing results from PollingRateTester.com.
Important: A browser-based test observes events after the device, USB or wireless transport, operating system, and browser have processed them. It does not directly read raw USB HID reports and must not be treated as laboratory certification of a device's advertised polling rate.
| Test | Live tool | Appropriate use |
|---|---|---|
| Mouse polling rate test | Run the mouse test | Compare browser-observed mouse event timing under controlled conditions |
| Keyboard event timing test | Run the keyboard test | Compare separate, manually generated keyboard events under controlled conditions |
- METHODOLOGY.md: controlled test procedure and reference calculations
- KNOWN_LIMITATIONS.md: what browser tests can and cannot establish
- DATA_DICTIONARY.md: definitions for every CSV field
- data/sample-mouse-results.csv: clearly labelled synthetic mouse example
- data/sample-keyboard-results.csv: clearly labelled synthetic keyboard example
- CONTRIBUTING.md: requirements for submitting reproducible results
- CITATION.cff: citation metadata for this repository
The tests record the arrival time of accepted browser input events. Consecutive timestamps produce an observed interval:
interval_ms = current_timestamp_ms - previous_timestamp_ms
interval_rate = 1000 / interval_ms
The session average should use the full accepted-event window:
average_observed_rate = (accepted_events - 1) * 1000
/ (last_timestamp_ms - first_timestamp_ms)
This describes browser-observed event delivery. It is not the same as reading the physical device's USB report descriptor or packet stream.
- Use a desktop or laptop and keep the test tab in the foreground.
- Record the device model, connection type, configured rate, operating system, browser version, and display refresh rate.
- Keep browser zoom at 100% and close high-load background applications.
- Use the same USB port, surface, connection mode, movement pattern, and duration for every comparison.
- Perform one warm-up run followed by five recorded runs.
- Report every run. Use the median of the five recorded runs for a headline comparison.
- Keep raw exports. Do not report only the highest result.
See METHODOLOGY.md for the complete procedure.
The included CSV rows are synthetic examples created to demonstrate the schema. They are not measurements of real products and must not be cited as benchmark evidence.
Real observations should use data_status=observed. Example rows use data_status=synthetic_example.
- High Resolution Time:
performance.now() - KeyboardEvent
repeat - PointerEvent
getCoalescedEvents() - W3C Pointer Events Level 3
Maintained by Umair Aalam, owner of PollingRateTester.com.