MousePlotter
Click & hold or Space
Timer resolution: …
Summary
Events
0
Total X
0
Total Y
0
Settings
CSV
How to use

MousePlotter is a browser-based version of microe1's MouseTester. Both tools plot mouse report data, especially raw motion counts, against time.

Plot navigation: Double-click to reset. Middle-click and drag to pan. Left-click and drag to zoom, or scroll to zoom. Do these over an axis to reset/pan/zoom only that direction. Click on the legend to toggle traces.

Three useful workflows:

  1. Single swipe. Click and hold, swipe once, then release. This can help test that your mouse tracks correctly at high speeds, and the Δt plot shows your mouse's report interval. Patterns in the x and y counts can sometimes be related to sensor framerate, smoothing, or other aspects of the motion data pipeline. Jitter in the Δt plot indicates how stably the browser is receiving mouse data. Note: jitter might increase when the browser's "To show your cursor" dialog is fading in or out.
  2. Continuous reports. First, set your mouse to a high DPI such as 6400. Click and hold, move the mouse in medium-speed circles for as long as you like, then release. If the jitter in the Δt plot is low enough, you can detect dropped or skipped reports, which show up as jumps of 125 µs for 8 kHz mice.
  3. DPI measurement. Place a ruler or a piece of paper with a known length on your mousepad, oriented horizontally. Align a point on the mouse with the start mark. Press Space, move horizontally without rotating the mouse, then press Space again. Minimize parallax by keeping your eyes directly above the mouse. DPI equals Total X divided by the number of inches traveled. Deviations from the DPI setting are most often due to incorrect sensor height.
What does jitter or fuzziness in the Δt plot mean?

If the Δt plot looks fuzzy, like the example below, the most likely cause is timing jitter in the operating system's data pipeline.

Example of OS-level timing jitter in the Δt plot

To reduce jitter, many people report that disabling CPU C-states helps. Operating system tweaks may help as well, such as forcing maximum CPU clock speeds. The browser itself can also be a limiting factor. For best results, run MousePlotter fullscreen and begin recording only after the "To show your cursor" dialog has faded away. The standalone utilities below deliver the cleanest results.

Keep in mind mouse firmware cannot directly affect the timing of USB reports: that timing is dictated entirely by the USB host controller. Host controllers tend to behave very regularly, with negligible jitter, as long as bus activity is minimal. Therefore, jitter (except for dropped/skipped reports, which show up as jumps of 125 µs for 8 kHz mice) is caused entirely by operating system and CPU behavior.

If the CPU, operating system, and recording application are optimized sufficiently that timing jitter remains consistently less than about 50 µs, Δt plots can be used to detect mouse firmware glitches and dropped reports.

Ideally, under sufficient motion, firmware responds to every poll with a report. Here is an example of a mouse with perfectly behaving firmware on a system with low jitter.

Example of firmware that responds to every poll

Here is an example of a mouse with firmware that skips a report every 3.4 seconds roughly. Notice the blips, even in the smoothed Δt trace, around 3400, 6800, 10300 ms.

Example of firmware that skips reports
Standalone utilities

Browsers are ultimately not ideal for recording data with microsecond-level timing precision. For this reason, the GitHub repository includes minimal and optimized standalone utilities for both Linux and Windows. Use them to save a CSV for import here, or save an HTML with embedded data for instant viewing.

You can also use MouseTester itself: MousePlotter is fully compatible with MouseTester CSVs, and vice versa.

Many find that MouseTester works well in Windows PE. See BoringBoredom/WinPE for instructions.