Getting ready
npm i framebudget
- Frame rate
- 60 fps
- Late
- 0 of 0
Each bar is one frame: the page's own work, then every effect framebudget allowed. The outline is the same frame with every effect on.
Help calibrate
framebudget turns effects on when a device has time for them. The thresholds behind that come from a handful of phones. This page runs the site's own effects one at a time on your device and measures every frame, so the thresholds can come from real devices instead.
Your results
Frame times on this device, at a refresh rate of 60 Hz. A late frame took longer than one and a half refresh intervals. Each effect ran alone, on the same page, with the same scroll.
| Step | Median frame | 95th percentile | Late frames |
|---|
What the test does
- Cloudflare Turnstile checks that a browser, not a script, pressed the button. It runs only then.
- The page waits for framebudget's benchmark, then measures the screen's refresh rate for a second.
- It runs the page with no effects, then with each effect alone, then with all of them, then with none again. Each step lasts about five seconds while the page scrolls by itself, and every frame's duration is measured.
- Every effect runs on every device, whatever framebudget would choose for it. Effects that need your pointer, a press or a navigation (hover states, sounds, morphing controls, page transitions, spring presses, magnetic buttons and the cursor spotlight) are not measured.
- Each step is sent as soon as it ends, before the next one starts. If the tab is hidden during a step, that step runs again once; if it is hidden again, the test stops.
- With reduced motion on, the moving effects stay still and the test measures that. It runs, as always, only when you press the button.
What is collected
One record per test, with only these numbers and names:
| Field | What it is |
|---|---|
| Versions | The framebudget version this site runs and the calibration version its scores use. |
| Scores | The device score (100 is the reference phone) and the cold and warm benchmark scores, to one decimal. |
| Kernel rates | How much work each of the four benchmark kernels did per millisecond, to 3 significant digits. |
| Clock resolution | The precision of the page's timer, to 2 significant digits. |
| Hardware hints | The number of logical cores and the rounded memory size the browser reports. |
| Screen | The measured refresh rate in whole hertz, the pixel ratio to one decimal, and the window width rounded to 100 pixels. |
| Preferences | Whether reduced motion and Save-Data are on. |
| Steps | For each step: its name, the effects that ran, the number of frames, the duration, the median, 95th percentile and longest frame time, and how many frames were late. |
The server adds the browser engine and its major version, the operating system family, mobile or desktop, the country Cloudflare assigns to the request, and the day in UTC, then discards the request headers.
What is not collected
- No IP address and no user agent string.
- No cookies, no identifiers, no fingerprint, no time of day.
- The test's id is random. It exists only in this page's memory and in the record, never on your device, and it stops working when the test ends.
- When the test is done, this browser keeps a note with the calibration version and the day, without any id, so the button does not come back for the same calibration.
Storage and retention
Records are stored in a Cloudflare D1 database behind this site and deleted after 400 days. The server accepts a limited number of tests per day. Only aggregated numbers are ever published. The details are on the privacy page.