Mouse DPI Test
Measure your mouse's true DPI. Move it a known distance along a ruler and see whether the number on the box holds up.
DPI analyzer
Input mode: starts on first trial
Line the mouse up with 0 on your ruler, then press and hold here.
Move exactly 2 in horizontally in a straight line and let go. The cursor is hidden and locked, so the screen edge won't stop the count. Press Esc to cancel.
Before you trust the number
- Windows: turn off Enhance pointer precision and set pointer speed to the default (6 of 11).
- macOS: turn off mouse acceleration (Mouse settings, Advanced) and leave tracking speed alone.
- Disable any sensitivity scaling or "sniper" button in the mouse software for the test.
- Chrome and Edge can read raw sensor counts (unadjusted movement), which skips OS speed and acceleration. Other browsers report OS-adjusted movement, so the settings above matter more there.
- Scale correction: browsers report adjusted movement in CSS pixels. On a 100% display one CSS pixel is 1 device pixels, so Auto multiplies by devicePixelRatio to get back to device pixels (which match mouse counts at default speed). In Auto, raw counts are not scaled. Always multiply by DPR scales raw counts as well. Browser zoom also changes this ratio, so keep the page at 100%.
The result is an estimate: browser input handling and your ruler skills both add a few percent of error.
How the DPI test works
What DPI (or CPI) actually means
DPI, more correctly CPI (counts per inch), is how many movement reports the sensor sends for each inch the mouse travels. At 800 DPI, one inch of movement is 800 counts, which at default OS settings moves the cursor 800 pixels. This test hides and locks the cursor, adds up every count while you hold the button, and divides by the distance you moved.
Is your 26,000 DPI mouse really 26,000?
Often not exactly. Sensors are tuned per model and per surface, and the real figure commonly lands 5 to 10% away from the setting. A mouse set to 800 might measure 760 or 850. A result within ±5% counts as accurate here. Bigger misses are usually worth knowing about if you switch between mice and want the same feel, and a huge number on the box tells you nothing about tracking quality.
How to measure accurately
Tape a ruler or tape measure to the desk and line up one edge of the mouse with zero. Press and hold in the test area, slide slowly along the ruler to your mark, and release with the mouse fully stopped. Longer distances shrink the effect of small placement errors, so use 4 in or 10 cm if you have the room. Run at least three trials. If they disagree by more than a few percent, redo them before trusting the average.
Why eDPI matters more for gaming
In games, what you feel is effective DPI: DPI multiplied by in-game sensitivity. 400 DPI at 2.0 and 800 DPI at 1.0 both give an eDPI of 800 and turn the camera the same amount. Most pros play at 400, 800 or 1600 DPI and set low sensitivity. Higher DPI mostly helps on high resolution desktops, which you can check with the screen resolution test.
Related tools
Check how often your mouse reports with the mouse polling rate test, test every button and the scroll wheel with the mouse tester, or confirm your display's real size with the screen resolution test.
Frequently asked questions
How is DPI calculated?
DPI is counts divided by inches. Counts are the absolute total of movementX or movementY, for the axis you picked, while the left button stays down. Inches are the distance you entered: an inch value is used as typed, and centimetres are divided by 2.54. A distance of 0, a blank box, or any value that is not a positive number will not start a trial, and a release with no positive distance is discarded. A trial that still has no positive inch length contributes 0, so the page does not show Infinity or NaN. Each counted trial also needs at least 20 counts on the chosen axis. The big result is the average of the trials, rounded to the nearest whole number.
Does pointer acceleration change the count?
Yes, unless the lock is actually reporting unadjusted movement. This page asks for pointer lock with unadjusted movement, which skips OS pointer speed and acceleration. That request is treated as raw counts only when it returns a promise that resolves and the browser is Chromium (Chrome, Edge, and other Chromium browsers). The label then reads raw counts (unadjusted). If the request is refused, returns no promise, or the browser is not Chromium, the page falls back to ordinary movement and the label reads OS-adjusted movement. Adjusted counts arrive as CSS pixels, so Auto multiplies them by devicePixelRatio. Raw counts are not multiplied in Auto. Turn off Enhance pointer precision in Windows and set pointer speed to the middle notch (6 of 11), turn off mouse acceleration in macOS, and turn off any vendor sensitivity or sniper button. The result is counts per inch of the distance you entered, not a lab reading.
What does pointer lock do if the browser blocks it?
Pressing the left mouse button on the test area calls requestPointerLock, which hides the cursor so the screen edge cannot stop the count. Only a mouse pointer starts a trial. If the browser refuses the lock, pointerlockerror and a failed request both show a message and return to idle instead of failing quietly. Browsers often block a new lock right after Esc. Letting go of the button exits the lock. Esc, or anything else that drops the lock before you let go, cancels that trial. Leaving the page exits a lock this test still holds. If that request's promise resolves afterward, the lock is exited then, and a lock that lands on this test area within a second of leaving is exited as well.
How do centimetres and inches work?
The unit control converts the typed distance by 2.54 centimetres to the inch. A distance of exactly 2 while the unit is inches switches to 5 cm, and a distance of exactly 5 while the unit is centimetres switches to 2 in. Any other number is converted and rounded to two decimal places. A zero or blank distance becomes 5 cm or 2 in when you switch units, rather than a divide-by-zero. Finished trials keep the inch distance from the moment you released the button, so a later unit change does not rewrite them. The DPI figure is always counts per inch.
What does scale correction change?
Auto multiplies a trial by the current devicePixelRatio only when that trial was not marked as raw. Always multiply by DPR applies the ratio even to raw counts. Never keeps the browser numbers with no ratio. Counts are stored as reported, and the ratio is applied when the result is drawn, so changing this control recalculates the trials already on screen. Resizing the window can change the ratio too. Leave the page zoom at 100%. If an advertised DPI is set, the display scale is not 1, and the average is within 8% of being one scale step off from that advertised number, the page suggests trying the other scale choice.
How is the box comparison rounded?
Deviation compares the rounded average on screen with the rounded advertised DPI on screen: shown minus advertised, divided by advertised. An advertised value that rounds to 0 is not divided. Within ±5% is Accurate, from just over 5% through 10% is Slightly off, and past 10% is Well off. That verdict appears after every requested trial (3, 4 or 5) is in. With no advertised DPI, the page names the nearest step on its list to that same rounded average: 400, 800, 1000, 1200, 1600, 2000, 2400, 3200, 4000, 6400, 8000, 12000, 16000, 20000, 26000 and 30000. Spread is the gap between the highest and lowest trial as a percent of the average.
What is saved, and can a bad save break the page?
This browser stores unit, distance, advertised DPI, axis, trial count and scale mode. If the saved text cannot be read, the defaults are restored. If a field has the wrong type, that field alone falls back: unit to inches, distance to 2, advertised to blank, axis to horizontal, trials to 3 and scale to Auto. A string that is not a positive distance will not start a trial. None of those cases throw. Reset clears the trials and the status line, not the saved settings.