Stress / 05

Frame-time stress.

Tight rAF loop with synthetic JS load. Reports median, p99, max frame time, and dropped-frame count over 6 seconds.

Notes

The test injects a small per-frame workload. If your device is already heavily loaded, results will be worse than for an idle device — that's the point.

How it works

Each animation frame we record the time delta since the previous frame, then run 50,000 trig calls to simulate JS work. After 6 seconds we sort the inter-frame intervals to extract median, p99, and max. Frames longer than 1.5× the median count as dropped.

The headline metric is median fps (1000 / median frame time). A 60 Hz monitor with zero stress reads ~60. A 144 Hz monitor reads ~144 unless the browser is throttling rAF.

Frequently asked

What does p99 frametime mean?

The 99th percentile frame time — the value below which 99% of your frames render. If your median is 16.6 ms (60 fps) but p99 is 50 ms, then 1% of frames take three times as long, which is the dropped-frame stutter you actually feel. p99 is the metric that correlates with perceived smoothness.

Why test under JS load?

Idle frame-time is always perfect — every frame fires on its rAF schedule. Under load (heavy scrolling, ad-network scripts, ML inference) frames get delayed. This test injects a tiny synthetic JS workload each frame to simulate that pressure and surface how your device behaves.

What counts as a 'dropped frame'?

Any frame that takes more than 1.5× the median to render. At 60 Hz that's >25 ms; at 120 Hz it's >12.5 ms. Below 5% drop is excellent; 5-15% is acceptable; over 15% means the browser is struggling to keep up.

Will this hurt my battery?

It runs for 6 seconds at moderate load. Battery cost is negligible. We do NOT pin a core to 100% for minutes — that would be a different test (see /stress/cpu).

Why does Chrome say I have 60 fps when my monitor is 144?

Several reasons: laptop on battery saver caps rAF, the tab isn't focused, hardware acceleration is off, or the browser hasn't escalated the compositor priority. Try fullscreen (F11), make sure the tab is focused, and re-test.