Mouse Tester

Test every mouse button, the scroll wheel and the polling rate in one pad. Catches the double-click fault of a worn switch, scroll-wheel jumps and drag drop-outs, with the timings to prove it.

Tester Utilities Updated Oct 7, 2026
How to Use
  1. Press Start test or click inside the pad. While the test runs, the pad (and only the pad) blocks the right-click menu, middle-click scrolling, page scrolling and back/forward, so every button can be pressed safely.
  2. Click each button: left, right, the wheel, and the two side buttons. Each one lights on the mouse drawing and counts its presses.
  3. For a double-click fault, choose that test and click once at a time, slowly. Two presses closer than the limit (80 ms by default) from one click are a fault.
  4. For polling rate, move the mouse quickly in circles inside the pad for 2 to 3 seconds. For the scroll wheel, roll it a notch at a time each way and watch for red reversals.
  5. Optionally press Lock pointer to count raw movement, then enter the distance you moved to get the CPI. Esc releases the pointer; Stop test gives the pad back to the page.
Test pad Example
Click, scroll and move inside this pad

Buttons working
—
Polling rate
—
Click faults
—
Wheel up / down
—
Test setup
ms between two presses

Presets
cm, for CPI

Nothing is recorded or sent: clicks and movements stay in this tab. Pointer Lock hides the cursor until you press Esc.

Live results

ButtonPressesAvg hold msFastest repeat msFaults

Double-click events from the browser: 0

Event log (newest first)

msEventWhatTimingNote

Worked Example

A left button that double-clicks. In the example shown on a plain visit, the left button went down at 3,120.0 ms, up at 3,131.5 ms and down again at 3,135.2 ms. The two presses are 3,135.2 − 3,120.0 = 15.2 ms apart, and the button was “released” for only 3,135.2 − 3,131.5 = 3.7 ms. That is under the 80 ms limit, so it is a fault: one click, sent as two because the switch bounced. The browser fired a dblclick for it.

Polling rate. While the mouse moved, three bursts of movement brought 400 samples each, 1,200 in all, over 399.0 ms per burst, 1,197.0 ms in total. Each burst has one fewer interval than samples, so the rate is (1,200 − 3) ÷ 1.197 s = 1,000 samples a second. The median gap between samples is 1.00 ms, and 1000 ÷ 1.00 = 1000 Hz agrees. The nearest standard setting is 1000 Hz.

The common mistake: counting pointermove events. Over the same movement the page received pointermove only once per 60 Hz screen frame, about 60 times a second. Reading that as the polling rate gives 60 Hz, a sixteenth of the real 1000 Hz. The other reports are still there, merged into each event, and getCoalescedEvents() brings them back.

Scroll wheel. 18 steps up and 22 down, 100 pixels each. During the down scroll, down steps at 14,915.0 ms and 14,996.0 ms surround one up step at 14,956.0 ms: three events in 81 ms. That single step the wrong way is a reversal, the “page jumps back” symptom of a dirty wheel encoder.

Show Work

Start a test to see how each result was measured.

How Each Measurement Works

Click fault
tpress 2 − tpress 1 < limit (80 ms)
Same button, from mousedown timestamps. 15.2 ms in the example.
Hold time
hold = tmouseup − tmousedown
A normal click is held for tens of milliseconds.
Polling rate
f = (samples − bursts) ÷ time moving
Samples from getCoalescedEvents(); a pause over 50 ms ends a burst.
Polling check
f = 1000 ÷ median gap (ms)
Agrees with the count unless the browser rounds timestamps.
Wheel reversal
d1 = d3 ≠ d2, within 250 ms
One step the wrong way between two the right way.
CPI (counts per inch)
CPI = counts ÷ (cm ÷ 2.54)
1,575 counts over 10 cm = 1,575 ÷ 3.937 in ≈ 400 CPI.

How a Mouse Talks to the Computer

Switches and bounce. Each button closes a small spring switch. Its contacts bounce for a moment when they meet, so the mouse’s firmware ignores changes for a few milliseconds (debounce). As the contacts wear or oxidise, the bounce grows longer than that window and one click leaks through as two: the classic “double-click by itself” fault, and the reason drags drop mid-way.

Polling. A USB mouse does not push data; the computer asks it for a report at a fixed interval. A full-speed USB device can be polled once per 1 ms frame, which is where 1000 Hz comes from; high-speed USB divides each frame into eight 125 µs microframes, which is how 8000 Hz mice work. Many office mice report at 125 Hz, every 8 ms. A mouse that has not moved has nothing to report, so polling only shows while you move it.

What a browser sees. The W3C Pointer Events and UI Events specifications number the buttons 0 (main, usually left), 1 (auxiliary, the wheel), 2 (secondary, right), 3 (X1, back) and 4 (X2, forward). Movement is delivered as pointermove, at most about once per screen frame, with the in-between reports kept in getCoalescedEvents(); Chrome and Edge also offer pointerrawupdate for each report as it arrives. Wheel events carry deltaX/deltaY in pixels, lines or pages depending on the browser and settings, which is why this tester counts steps rather than comparing sizes across browsers.

History. Douglas Engelbart’s team at the Stanford Research Institute built the first mouse, a wooden box with two wheels, in 1964 (Bill English made it), and showed it to the public in the “Mother of All Demos” on 9 December 1968. The scroll wheel went mainstream with Microsoft’s IntelliMouse in 1996.

About This Tool

This mouse tester counts all five standard buttons, flags double presses of one button closer than a limit you choose, counts native double-clicks, counts wheel steps in all four directions and spots reversals, estimates the polling rate from coalesced pointer events, marks drag drop-outs on the pad, and with Pointer Lock (raw movement where the browser allows it) counts movement for a CPI estimate. Every result is worked through in Show Work with your own timestamps.

Privacy: nothing is recorded, stored or uploaded; the events stay in this tab and are gone when you leave. The right-click menu, middle-click autoscroll, back/forward navigation and page scrolling are blocked only inside the pad and only while a test runs; Stop test, or a plain visit, leaves the page exactly as normal. Pointer Lock starts only when you press its button and Esc always releases it. Phones and tablets have no Pointer Lock, and Safari does not offer coalesced events everywhere; the tool says so when that limits a result.

Sources: W3C Pointer Events (buttons, coalesced events, pointerrawupdate), W3C UI Events (wheel and mouse events, now maintained in Pointer Events), W3C Pointer Lock 2.0 (unadjustedMovement), MDN Web Docs, the USB 2.0 specification (1 ms frames and 125 µs microframes) and Microsoft’s documentation of the double-click time.

Related tools: Keyboard Tester, Touchscreen Test, and Hardware Lab.

Frequently Asked Questions

How do I test my mouse for a double-click problem?

Choose the Double-click fault test and click once at a time, about once a second. A healthy switch gives one press per click. A worn one bounces: in the example the left button was pressed at 3,120.0 ms, let go for an instant at 3,131.5 ms and pressed again at 3,135.2 ms, so one click arrived as two presses 15.2 ms apart. No finger clicks that fast, so anything under the 80 ms limit is flagged. Windows treats two clicks within its double-click time (500 ms by default) as a double-click, which is why a bouncing switch opens files you meant to select.

How does a browser measure mouse polling rate?

The mouse sends a report every time it is polled and has moved. The browser delivers pointermove only about once per screen frame, roughly 60 times a second on a 60 Hz screen, but PointerEvent.getCoalescedEvents() hands back every report merged into that event, each with its own timestamp. The tester counts them while you move: 1,200 samples in 3 bursts lasting 1,197.0 ms in total is 1,197 intervals ÷ 1.197 s = 1000 Hz. Move fast: a mouse only reports when it moves, and browsers that round timestamps or lack getCoalescedEvents (the result then says so) cannot show rates above the frame rate.

Why did the back or forward button not register?

Browsers report the side buttons as button 3 (back) and 4 (forward). Inside the running test pad the tester stops them from navigating, so they simply count. If they still do not light up, the mouse’s own software has probably remapped them to a keystroke or a macro, so the browser receives that instead of a button press; some mice also need their driver for the side buttons at all. Test the mouse on another computer or reset its software profile to check.

What is a scroll wheel reversal?

A wheel measures rotation with a small encoder, and a dirty or worn one can misread a notch as the other direction: the page jumps back a line while you scroll. The tester looks for one step the wrong way sandwiched between two steps the right way within 250 ms. In the example, down steps at 14,915.0 ms and 14,996.0 ms surround an up step at 14,956.0 ms, three events in 81 ms, which a finger cannot do on purpose. A few in a long scroll means the encoder needs cleaning or replacing.

Can a website measure my mouse’s click latency?

Not the part people care about. The switch, the mouse’s debounce filter and the USB poll all happen before the operating system stamps the event, and a page only sees that timestamp. What the tester can show is the delivery delay: from event.timeStamp to the moment its handler ran, usually well under a few milliseconds and larger when the page is busy. Measuring true click-to-photon latency needs external hardware such as a high-speed camera or a latency analyser.

Common Use Cases

A mouse that double-clicks by itself

Ten slow single clicks with two faults at 15.2 ms and 22 ms prove the left switch bounces: enough evidence for a warranty claim, or for a switch swap.

Checking a gaming mouse’s polling rate

Set 1000 Hz in the mouse software, move in circles and look for about 1000 Hz; if it shows about 125 Hz the setting did not stick.

Scroll wheel that jumps

Scroll 40 notches down: one red reversal bar in every 10 or so steps points at a dirty encoder, not the page.

Drag and drop that lets go

Drag long lines in the Drag test: a red dot where the button released for 30 ms explains files dropped in the wrong folder.

Measuring CPI

Lock the pointer, move exactly 10 cm along a ruler and enter 10: 1,575 counts means about 400 CPI (1,575 ÷ 3.937 in).

Side buttons for games and browsers

Check that back and forward reach the computer as buttons 3 and 4 rather than being remapped by the mouse’s software.

Last updated: