Keyboard Polling Rate Test (Browser Event Cadence)

This measures how far apart keyboard events arrive in your browser — it is not a USB polling rate measurement, and no web page can perform one.

Browser event cadence meter

Measurement mode

Held key mode — what this number is Hold one key down. After a short delay your operating system starts generating repeat events, and this mode times them. The steady interval you see is your OS key-repeat setting. It is generated by system software, not by the keyboard, and it tells you nothing about the keyboard's polling rate. The keyboard repeat rate test is built around this measurement and reports the initial delay separately from the steady interval.

Not started.

Held-key results OS setting, not polling rate

Steady repeat interval (median) ms Median gap between consecutive OS-generated repeat events. This is your operating system's key-repeat period.
Initial repeat delay ms Gap from the first press to the first repeat — a separate OS setting.
Repeat events per second /s 1000 ÷ median interval. Still an OS setting.
Min interval ms
Max interval ms
Jitter (mean successive difference) ms
Repeat intervals counted 0 No key held yet.
Consistency Label and CV are always shown together.

No intervals recorded yet. The distribution of measured intervals will be described here in text as soon as data exists.

No intervals recorded yet. The order in which intervals were measured will be described here in text as soon as data exists.

No samples excluded.

Advanced data

Every recorded interval, in collection order, plus the full statistical breakdown. Nothing here is filtered out of the headline numbers.

Full statistics

Statistics for the currently selected mode, in milliseconds.
StatisticValueDefinition
No data yet.

Recorded intervals

Intervals in collection order. Held-key mode marks the initial repeat delay separately.
#KeyCodeInterval (ms)Kind
No data yet.

Excluded events

Nothing has been excluded.

Measurement environment

Timer resolution: High-resolution timing: Browser: Platform:

These conditions affect your result. A browser that rounds its clock to 1 ms cannot resolve sub-millisecond differences, so jitter will look artificially quantised. How we measure.

What this test cannot tell you

It cannot tell you your keyboard's polling rate. A web page never observes individual USB or Bluetooth transfers. It sees only the events the operating system chose to deliver, after the OS has coalesced and scheduled them, and after the browser has queued them for this page. There is no arithmetic that recovers a polling interval from that.

It also cannot isolate switch actuation, matrix scanning, keyboard firmware, wireless transmission, OS input scheduling, or your display's response time. In held-key mode the repeat stream is generated by your operating system, so the interval you see is an OS setting. In rapid-typing mode the interval is set by your fingers. Neither is a hardware measurement.

Read the full methodology and limitations

What this test actually measures

Every keyboard event your browser hands to a page carries a timestamp taken when the browser created the event. Subtract one timestamp from the previous one and you get the browser-observed event cadence: how far apart the events arrived, as seen from inside the page.

That number is real and reproducible, and several layers removed from your keyboard. Between the switch closing and the event reaching this page sit the keyboard's scan and report cycle, the USB or Bluetooth link, the OS input stack, the browser's input pipeline, and the page's main thread. What you measure is the output of that whole stack, and its coarsest stage dominates the result.

Why a browser cannot measure polling rate

Four independent reasons, any one of which would be enough on its own.

  1. The OS coalesces and schedules input. Input reports are gathered by the operating system and delivered to applications on the OS's own schedule. Several device reports can collapse into one delivered event, and delivery is timed by the input and compositor scheduling of the system, not by the device's report rate.
  2. Auto-repeat is generated by the OS, not by the keyboard. When you hold a key, the keyboard simply reports that the key remains down. The stream of repeated characters is synthesised by system software using your configured repeat delay and repeat rate. Timing that stream measures a settings value.
  3. The browser coarsens its clock on purpose. High-resolution timers are a side-channel risk, so browsers quantise them. If the clock steps in whole milliseconds, a 1 ms polling interval and a 2 ms polling interval are literally the same number to your page.
  4. A page never sees a USB transfer. There is no web API that exposes HID report boundaries, endpoint intervals, or link-layer timing for a system keyboard. The information simply is not present in the browser.

If you want the arithmetic of polling rates rather than a measurement of one, use the polling rate calculator, and read polling rate vs browser event cadence for the full comparison.

Held key and rapid typing are two different numbers

They are separated in this tool because mixing them produces a meaningless average.

Held-key mode gives two OS values: the initial repeat delay (how long you must hold before repeating starts) and the steady-state repeat interval (the gap between repeats after that). Both come from your system's keyboard settings. Because the source is a software timer, the interval is usually very stable, and that stability describes main-thread scheduling rather than your keyboard. The repeat rate test explores this in more depth.

Rapid-typing mode gives the distribution of gaps between your own presses. Even a fast typist rarely gets below roughly 40 ms between keystrokes — forty times longer than a 1000 Hz polling interval. The useful part is the spread: a long tail of unusually large gaps points at main-thread work or background load, not at the keyboard.

Polling rate reference — what each rate would imply

The table below is pure arithmetic from interval = 1000 ÷ rate. It is reference material, not a result: nothing on this page detects which row applies to your keyboard, and you should not read your measured cadence against it.

Reference only. These are the values a given polling rate would imply — none of them is a detected value.
Polling rate Polling interval Average added wait Worst-case added wait
125 Hz8 ms4 ms8 ms
250 Hz4 ms2 ms4 ms
500 Hz2 ms1 ms2 ms
1000 Hz1 ms0.5 ms1 ms
2000 Hz0.5 ms0.25 ms0.5 ms
4000 Hz0.25 ms0.125 ms0.25 ms
8000 Hz0.125 ms0.0625 ms0.125 ms

The distinction most people get wrong is average versus worst case. A key press lands at a random point inside the polling window, so on average it waits half an interval and at worst a full one. At 1000 Hz the polling interval is 1 ms, so the average added wait is about 0.5 ms and the worst case about 1 ms. Every step beyond 1000 Hz is therefore competing for less than one remaining millisecond.

Timer resolution, and why 1 ms matters here

The measurement environment panel above shows the smallest non-zero time difference this browser will actually express. Firefox clamps that to 1 ms unless the page is cross-origin isolated; Chromium-based browsers typically clamp to about 100 microseconds. Those are deliberate security mitigations, not bugs.

Put that next to the reference table. The entire difference between 500 Hz and 1000 Hz is 1 ms of polling interval, and a clock that steps in whole milliseconds cannot represent it. Even at 100 microsecond resolution, the OS scheduling noise sitting on top of every event is far larger than the quantity you would be trying to detect. That is why the honest output here is a cadence figure with its spread, plus a clear statement of what it is not.

How to read your cadence numbers

Look at the median first, then the spread. In held-key mode a median near 33 ms with small jitter means your OS repeat rate is roughly 30 events per second and the main thread is keeping up. Jitter that is a large fraction of the median means events are being delayed unevenly — usually background CPU load, a heavy extension, or a busy tab.

In rapid-typing mode, compare the fastest gap with the median. A big difference is normal; it is your hands. Worth investigating is a handful of gaps far above the rest — the same signature you would chase on the browser input latency test. If you suspect one press is producing two events, see the chatter test instead.

Related keyboard tests

Frequently asked questions

Can this test detect my keyboard's polling rate?

No. A web page never sees individual USB or Bluetooth transfers. It only sees keyboard events after the operating system has collected, coalesced and scheduled the input, and after the browser has queued the event for the page. What this tool reports is the interval between those browser events — the browser-observed event cadence. Your polling rate cannot be recovered from it.

Why does holding a key produce a steady interval like 30 ms?

Because the repeated characters are generated by your operating system, not by your keyboard. The keyboard reports the key as held; the OS then synthesises repeat events at the repeat rate configured in your system settings. Held-key mode therefore measures your OS key-repeat setting, which is typically somewhere in the region of 25 to 40 events per second on default settings. Changing your polling rate does not change this number.

What does the interval between my own key presses tell me?

It tells you how fast you typed, plus the variability the browser adds. Even very fast typing rarely goes below about 40 ms between presses, which is dozens of times longer than any polling interval. Rapid typing mode is useful for seeing the consistency and spread of event delivery, and it is genuinely useless as a polling-rate measurement.

Why does my browser report timings in whole milliseconds?

Browsers deliberately coarsen high-resolution clocks to mitigate timing side-channel attacks. Firefox clamps performance.now() to 1 ms unless the page is cross-origin isolated; Chromium typically clamps to around 100 microseconds. A clock quantised to 1 ms cannot even represent the 1 ms difference between a 500 Hz and a 1000 Hz polling interval, which is one concrete reason browser-side timing cannot resolve polling rate.

Does a higher polling rate actually reduce input lag?

It reduces one specific component by a small, bounded amount. At 1000 Hz the polling interval is 1 ms, so the average added wait is about 0.5 ms and the worst case about 1 ms. Going from 1000 Hz to 8000 Hz can only remove up to that remaining 1 ms. Whether that is worth anything depends on how large the rest of your input chain is, and this browser test cannot measure the rest of the chain for you.