How the diagnostic works
The test records browser-observed mouse-like events only while you interact with the test surface. Raw events remain in page memory and are cleared on refresh.
What is measured
- Complete, trusted mouse pointerdown/pointerup pairs for one button and one round.
- Down-to-down intervals, plus click and dblclick as supplementary browser evidence.
- Sample count, minimum, linear-interpolation median and P95.
Quality limits
Hidden pages, cancelled input, incomplete pairs, non-monotonic timestamps and reduced timer precision lower confidence. Touch and pen input are excluded. This tool cannot identify a device model, connection type or electrical switch condition.
Observation bands
The current bands are ≤ 50 ms (candidate) and ≤ 100 ms (review). They are versioned observational aids, not an operating-system double-click setting or a universal hardware threshold.
Basis for the bands
- Mechanical switch contacts bounce for roughly 1–6 ms in published measurements, so a same-button repeat of 50 ms or less is almost impossible to produce deliberately.
- Deliberate human double-clicks usually take 100 ms or more, so intervals up to 100 ms are marked only for review, not as confirmed faults.
- The operating-system double-click window is a separate concept: Windows uses a default of 500 ms for the maximum interval between two intentional clicks.
Double-click speed test boundaries
The double-click speed test uses different observation windows than the diagnostic tool. It measures the time between two intentional clicks and observes whether the browser dispatches dblclick. It does not diagnose hardware faults or read operating-system settings.
- First-click expiry: 5000 ms — the maximum time between the first and second click to form a pair. This is the session pairing limit, not an OS threshold.
- dblclick dispatch wait: 250 ms — the observation window after the second click for the browser to dispatch dblclick. This is not a speed recommendation or OS default.
These values are versioned separately from the diagnostic observation bands and may be adjusted after cross-browser verification.
Keyboard chatter test boundaries
The keyboard double typing test observes browser keyboard events per physical key (event.code) while the test area has focus. Only trusted keydown and keyup events enter the sample. Auto-repeat events (KeyboardEvent.repeat === true) are recorded separately as held repeats and excluded from chatter detection.
- Chatter candidate: a same-key non-repeat keydown within 30 ms of the previous keydown for that key.
- Review: a same-key non-repeat keydown between 30 ms and 80 ms.
- Long hold: holding a key for more than 1500 ms is surfaced as a long hold note, not a fault.
- Timeline: the latest 50 events are shown in memory only and cleared on refresh.
Keyboard observation uses a separate versioned config (version 0.1-preview) from the mouse diagnostic bands, because keyboard chatter and mouse switch bounce are different measurements. Different keys never form a chatter pair, and a missing keyup after page blur is marked as interrupted rather than a fault.
CPS / click speed test boundaries
The CPS test (click speed test) counts intentional mouse clicks during a timed run. It is a self-test of click pace, not a diagnostic. It does not detect double-clicking, autoclickers or hardware faults, and it cannot measure input latency, polling rate, reaction speed or your physical capability limit.
- Durations: 1, 5, 10, 15, 30, 60 seconds. The run ends at the logical start time plus the chosen duration, not at the last click.
- Final CPS: total clicks divided by the selected duration, from a finished run only.
- Best 1-second burst: the highest per-second bucket count.
- Median per-second CPS: the median of the per-second bucket counts.
Click speed uses a separate versioned config (version 0.1-preview) from the mouse diagnostic observation bands and the keyboard chatter thresholds.
Right click CPS test boundaries
The right click CPS test counts intentional right mouse-button clicks during a timed run. Left and middle buttons are ignored. It is a self-test of right-click pace, not a right-button hardware check, left-click CPS test, or double-click diagnostic.
- Durations: 1, 5, 10, 30, 60 seconds. The run ends at the logical start time plus the chosen duration, not at the last click.
- Accepted input: trusted mouse pointer events with button 2 (right) on the test target. The browser context menu is suppressed on the target.
- Final CPS: total right clicks divided by the selected duration, from a finished run only.
- Best 1-second burst: the highest per-second bucket count (same calculation shape as the regular CPS test).
- Pace labels: optional fun bands only; not an official standard and not a hardware grade.
Right-click CPS uses a separate versioned config (version 0.1-preview) from the regular CPS config, mouse diagnostic bands, and keyboard chatter thresholds.
Mouse test boundaries
The mouse test is a hardware input hub: it checks whether left, right, middle, side buttons, and scroll up/down are observed by the browser. It is not a CPS test, polling-rate test, or full double-click diagnostic.
- Channels: Left, Right, Middle, Back, Forward, Scroll Up, Scroll Down — each marked Working after at least one trusted detection.
- Double-click candidate: same-button press within 50 ms (lightweight signal only).
- Fast repeat review: same-button press between 50 ms and 100 ms.
- Timeline: latest 40 inputs stay in page memory and clear on refresh.
Mouse test uses a separate versioned config (version 0.1-preview). Deep scroll analysis and polling-rate measurement belong on dedicated pages.
Scroll wheel test boundaries
The scroll wheel test observes browser wheel events over the test pad: direction counts, a rolling 1-second speed window, an optional timed speed run, horizontal scroll channels, and reverse-event detection for skipping. It cannot read the wheel encoder, distinguish input sources (tilt wheel, Shift + wheel, and touchpad gestures all arrive as wheel events), or measure polling rate.
- Reverse event candidate: after at least 3 wheel events in one direction, an opposite-direction event within 250 ms of the previous one.
- Confirmation: the next event returns to the original direction within 250 ms. Isolated reverse events are counted; deliberate direction changes are not.
- Speed: wheel events per second over a 1000 ms window; timed runs of 5 / 10 / 30 seconds count events, not detents.
- Timeline: the latest 40 events stay in page memory and clear on refresh.
Scroll test uses a separate versioned config (version 0.1-preview). Reverse events are an observational skipping signal, not a confirmed encoder fault.
Mouse polling rate test boundaries
The mouse polling rate test estimates the effective mouse report rate (Hz) from trusted browser pointer-move events over the test pad. It is not a USB HID descriptor reader, factory certificate, or input-latency lab instrument.
- Current rate: pointer-move events counted in a rolling 1000 ms window (scaled for short partial windows).
- Average rate (free-play): (in-window event count − 1) ÷ span inside a sliding 5000 ms window. Pauses longer than 1200 ms start a new peak/min segment and clear the rate trail.
- Average rate (timed run): only moves after Start, on a run-private timestamp buffer — pre-run motion never enters peak, stability, or distribution.
- Tier mapping: averages are matched to the nearest common tier (125 / 250 / 500 / 1000 / 2000 / 4000 / 8000 Hz) only when enough samples and duration are present and the relative error stays within the configured band.
- Stability: share of sampled window rates within ±12% of the expected tier.
- Distribution: histogram of sampled rates in 50 Hz buckets (top buckets shown; remainder collapsed to Other).
- Timed runs: optional 5 / 10 second locks for average, peak, minimum, stability, and distribution. Hidden or blurred pages interrupt a run.
- Coalesced moves: when the browser exposes
getCoalescedEvents(), each coalesced move timestamp is counted separately. - Exclusions: touch and pen pointers are ignored; untrusted events are ignored.
Polling-rate estimation uses a separate versioned config (version 0.1-preview). Browser coalescing limits, OS scheduling, wireless links, and slow movement can all lower the observed rate versus the mouse software setting.
Sources: Microsoft SetDoubleClickTime; OMRON chattering FAQ; Analog Devices Switch Bounce and Other Dirty Little Secrets; Texas Instruments Debounce a Switch; EEJournal Ultimate Guide to Switch Debounce; QMK debounce configuration.