How it works
Measuring refresh rate, honestly
No plugins, no uploads, no guesswork. Here's exactly how the test arrives at your number — and the limits worth knowing.
Time every animation frame
The engine registers a requestAnimationFrame loop. The browser calls it right before each repaint and hands us a high-precision timestamp from performance.now().
Measure the gaps between frames
We track the milliseconds between consecutive frames. The refresh rate is simply 1000 divided by the typical gap — a 6.94ms gap means ~144Hz.
Make it robust
We use a rolling median over a one-second window to ignore noise, flag intervals roughly double the median as dropped frames, and compute a stability score from the frame-time variance.
Snap to a verdict
A stable average is matched to the nearest common panel rate (60/120/144/165/240…) while the exact decimal stays visible, and we compare it against the rate you say you paid for.
Accuracy caveats
Browser-based measurement is accurate when conditions are right. Keep these in mind for a trustworthy reading.
The browser follows the display the window is on
On a multi-monitor setup, drag this window onto the screen you want to test. The measurement reflects whichever display is rendering the window.
VSYNC & OS compositing can cap it
Browsers render in sync with the display and the OS compositor. In rare cases this limits the reported rate below the panel's true capability.
Background tabs are throttled
Browsers throttle requestAnimationFrame to ~1Hz (or pause it) in hidden tabs. We detect this, pause measuring, and warn you — keep the tab focused.
Variable refresh rate (VRR) moves around
With G-Sync / FreeSync active, the rate can fluctuate with on-screen activity. A moving number can be expected rather than a fault.
Ready to check your display?
Run the live test and see your real refresh rate in seconds.
Run the refresh rate test