Why Browser Mouse Polling Rate Tests Read Low
A mouse configured for 8000Hz can produce a lower or uneven reading on a webpage. To interpret it, follow the movement from the device through the operating system to the browser, then check what the page actually counted.
Web platform sources · estimator version 2.1.0
A browser mouse test counts movement samples exposed to the webpage. Event coalescing, frame-aligned delivery, main-thread delays and coarse timestamps can affect the reading. A low number alone does not prove the mouse uses that hardware rate or is faulty. Check measurement status and repeat under controlled conditions.
What does a browser polling rate test measure?
This site's mouse test estimates the rate of browser-visible movement samples. It cannot read USB transactions, discover the manufacturer's active polling setting, or verify that every device report reached the page. Even a plausible-looking result needs that context.
| Layer | What happens there | What this page can establish |
|---|---|---|
| Device and connection | Sensor processing, report scheduling and transport | No direct view of USB polls or receiver behavior |
| Operating system | Input processing, scheduling and delivery to applications | Effects may be visible, but their cause is not isolated |
| Browser | Movement events may be delayed or grouped | The event stream exposed to this page |
| Page estimator | Counts available samples and examines timing quality | Observed rates and eligible descriptive metrics |
When tools disagree, identify their measurement layer first. A native application using Windows Raw Input and a browser using Pointer Events observe different interfaces. Agreement between two websites is useful for comparison, but it does not independently validate USB-level accuracy.
Can VSync or display refresh rate limit the result?
Some movement-event delivery is aligned with rendering. Chrome's explanation of aligned input events describes delaying continuous events until just before animation-frame callbacks to reduce repeated work. That is a documented delivery strategy, not a universal cap on all browser-visible movement samples.
A simple callback counter could therefore show a rate near the page's frame cadence. If each callback exposes several historical samples, an estimator can count those samples instead. Display refresh rate, callback rate and sample rate must be kept separate.
A result near 120Hz on a 120Hz screen is a clue, not proof of frame locking. A real low-rate device can be numerically close to the display cadence. Our estimator also looks at dispatch intervals and their phase relative to observed frames before marking suspected frame alignment.
Changing an in-game VSync setting does not automatically change how a separate webpage receives input. To compare browser behavior, record the browser version, display refresh rate, event path and measurement status.
How pointerrawupdate and coalesced events help
Pointer Events Level 3 says browsers should dispatch pointerrawupdate as soon as possible and as frequently as JavaScript can handle it. It also allows raw updates to be coalesced while a preceding update is waiting for dispatch. API support therefore does not guarantee a complete hardware report stream.
getCoalescedEvents() exposes the movement samples merged into an event when the browser supports that interface. A measurement should process that list when it is nonempty, and otherwise process the parent event. Adding both would count the same movement twice.
This site prefers raw updates, falls back to pointermove if needed, and counts only the selected stream. A run retries the preferred path. It expands available coalesced samples and keeps their timestamps separately from callback arrival times.
These APIs require a supporting browser and a secure context. A missing or silent raw API activates the fallback; if that fallback exposes only parent movement events, the page withholds quality metrics. Changing browser may expose a more useful stream, but cannot certify that every upstream report survived.
Why 8K can show Hz while Peak and Jitter are unavailable
The nominal 8000Hz period is 0.125ms. That makes individual interval statistics sensitive to clock precision. The High Resolution Time specification permits timestamp coarsening and jitter for privacy. Its non-isolated baseline is 100 microseconds, or a coarser implementation-defined value; cross-origin isolation permits a finer baseline but still does not guarantee it.
Several real updates can share the same exposed timestamp. Calculating 1000 / 0 would give an unusable infinite rate. Very short rounded intervals can also produce misleading peaks. Collecting a longer run adds samples, but does not improve timestamp resolution.
Our estimator counts samples over elapsed time for Average and complete arrival windows for Stability. It can therefore retain those results while hiding Peak and interval Jitter when the timestamp checks fail. A timing-limited result is an explanation of available evidence, not an automatic hardware failure.
The estimator's clock probe and browser-family floors are conservative estimates. They cannot establish the true resolution of every event timestamp or reconstruct movement samples that the browser never exposed.
How to investigate a low or unstable browser reading
- Confirm the hardware setting. Check the active profile, connection and supported receiver using the polling-rate setup guide.
- Keep the page focused. Stay in the foreground through the run. Losing focus or hiding the tab interrupts capture on this site.
- Move continuously. Use comfortable, brisk movement. At high rates, try wider movement or higher DPI and record that change. Pauses after the first movement stay in Average and Stability.
- Read the status before judging Hz. Collect at least 3 seconds and 100 samples. A browser-limited or timing-limited result needs its corresponding explanation.
- Repeat controlled comparisons. Keep DPI, motion and display settings comparable. Try another browser and record its version. Close unnecessary workloads for a separate comparison.
- Escalate to the appropriate measurement layer. A native input tool can help inspect OS-visible delivery. A USB-level claim needs a suitable USB-level reference; a game-performance claim needs game measurements.
OS scheduling and main-thread work can delay callback delivery. The webpage cannot reliably distinguish all such causes from device or connection behavior. A low reading can also reflect a setting that was not applied, limited movement, or upstream delivery changes. The controlled comparisons narrow the possibilities without assigning blame prematurely.
What this site’s measurement statuses mean
| Status | Meaning | Next step |
|---|---|---|
| More samples needed | Less than 3 seconds or fewer than 100 accepted samples | Collect more continuous movement |
| Browser limited | The exposed event path does not support quality conclusions | Compare another browser or input path |
| Samples sufficient | Enough usable evidence for eligible count-based metrics | Check interval availability separately |
| Timing limited | Individual timestamps cannot support precise interval metrics | Use the available count-based results with their limits |
| Interrupted | The page lost focus or became hidden | Repeat a foreground run |
| Invalid capture | Invalid timestamps or the capture limit was reached | Discard quality conclusions and retest |
“Samples sufficient” and interval availability are separate. Neither status certifies the mouse's hardware rate. For the formulas behind the values, continue with the Stability and Jitter guide.
Frequently asked questions
Why does my 8000Hz mouse show a much lower rate in a browser?
The page may receive a limited or batched movement stream, or the capture may include pauses and insufficient movement. Check the active device setting and measurement status, then repeat with continuous motion and another browser. A low number alone does not establish a device fault.
Are browser polling tests always capped by monitor refresh rate?
No. Some movement callbacks may be frame-aligned, but a callback can contain multiple coalesced samples. Raw updates also use a different delivery path. A refresh-like number is a clue that needs further checks.
Does pointerrawupdate expose every USB report?
No. It is a browser Pointer Events interface for timely movement updates. Raw updates can still be coalesced, and browser API support does not guarantee complete visibility into device or OS input.
Why do Peak and Jitter show an unavailable value?
Individual timestamp precision or capture quality may be insufficient for interval statistics. Average and Stability can remain available because they use sample counts and longer arrival windows.
Does a longer test make browser timestamps more precise?
No. A longer capture can provide more samples and windows, but it cannot restore timing precision removed by the browser.
Sources and methodology
- W3C Pointer Events Level 3 · pointerrawupdate
- MDN · getCoalescedEvents() and browser compatibility
- Chrome for Developers · frame-aligned input events (June 2017)
- W3C High Resolution Time · timestamp coarsening
- MousePollingRateTest · published estimator source, version 2.1.0
Browser behavior is sourced from platform documentation; the Chrome article describes a historical implementation strategy, not a current browser benchmark. Collection rules and statuses describe this site’s estimator version 2.1.0. Physical accuracy across 125Hz to 8000Hz has not been established by a published hardware comparison.
Maintained by MousePollingRateTest. Report a factual error or measurement issue.
Continue with your own setup
Run a focused capture, keep moving through the end, and read the measurement status before comparing results.
Run the mouse test