← Chrome 152 reference

v152 · performance · device

CPU Performance API

A new navigator.cpu namespace that exposes a bucketed, privacy-safe signal about the device's CPU performance tier — letting web applications adapt their rendering quality, workload parallelism, and feature set to the actual hardware without fingerprinting individual machines.

at a glance

Shipped inChrome 152 (Enabled by default)
StatusEnabled by default
FlagNone — on by default
Specwicg.github.io/cpu-performance (WICG)
Standards position (Firefox)No signal
Standards position (Safari)Oppose
ChromeStatus5189864286978048 — CPU Performance API
Source: chromestatus.com/feature/5189864286978048

why it exists

Web applications — especially WebGL/WebGPU games, video editors, and complex data-visualization dashboards — often need to tailor their workload to the device. Today, developers are forced to approximate CPU power by measuring the time taken to run synthetic microbenchmarks, which is slow, unreliable, and a fingerprinting vector in itself.

The CPU Performance API surfaces a coarsened bucket rather than precise clock speed or core counts, deliberately preventing individual device identification while still allowing the application to pick an appropriate quality preset. The API is specifically scoped to use cases like "should I enable 4× supersampling or 1×?" or "how many Web Workers should I spin up for this task?"

Source: chromestatus feature summary; WICG spec

shape of the API

PropertyTypeDescription
navigator.cpu.normalizedPerformancenumber (0.0–1.0)Bucketed performance score where 1.0 is the highest tier; values are coarsened to a small set of buckets to reduce fingerprint surface

The exact bucket boundaries and score mapping are defined in the WICG spec and may be refined before the final standard is published.

Source: wicg.github.io/cpu-performance

example

// Adjust rendering quality based on CPU tier
const perf = navigator.cpu?.normalizedPerformance ?? 0.5;

if (perf >= 0.75) {
  // High-end: enable shadows, anti-aliasing, 60fps target
  initRenderer({ shadows: true, msaa: 4, targetFPS: 60 });
} else if (perf >= 0.4) {
  // Mid-range: reduced quality
  initRenderer({ shadows: false, msaa: 2, targetFPS: 30 });
} else {
  // Low-end: minimal quality
  initRenderer({ shadows: false, msaa: 0, targetFPS: 24 });
}

// Choose parallelism for CPU-bound work
const workerCount = Math.max(1, Math.round(navigator.cpu.normalizedPerformance * 4));
const pool = createWorkerPool(workerCount);
Source: WICG CPU Performance spec

browser support

BrowserSupportNotes
Chrome 152+Enabled by defaultAll platforms
FirefoxNo signal
SafariOpposePrivacy concerns about CPU bucketing as a fingerprinting signal
Source: chromestatus.com/feature/5189864286978048

see also