← Chrome 152 reference

v152 · performance · device

CPU Performance API

A new navigator.cpuPerformance attribute 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 (Mozilla standards position #1364)
Standards position (Safari)Oppose (WebKit standards position #622)
ChromeStatus5189864286978048 — CPU Performance API (API record)
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?"

Historical shape note: this page's earlier draft recorded a nested floating-point shape (navigator.cpu.normalizedPerformance, 0.0–1.0). That shape is unverified against any surviving public source — neither the WICG specification nor the explainer (both fetched 2026-10-07) contains it. As verified against the normative WICG specification and explainer on 2026-10-07, the standardized shipped API surface is the navigator.cpuPerformance integer attribute.

Source: chromestatus feature summary; WICG spec; WICG explainer

Syntax

Web IDL definition from the WICG CPU Performance specification extending Navigator:

[
    SecureContext,
    Exposed=Window
] partial interface Navigator {
    readonly attribute unsigned short cpuPerformance;
};
Source: WICG CPU Performance specification §idl

shape of the API

PropertyTypeDescription
navigator.cpuPerformanceunsigned short (0–4)Coarsened performance tier where 1 represents entry-level hardware and 4 represents high-end hardware; 0 indicates an undetermined tier

The exact tier mapping is defined by the user agent based on platform heuristics. Higher integer values represent higher performance tiers, and forward-compatible applications should anticipate additional tiers (such as tier 5) in the future.

Source: WICG CPU Performance explainer

Inputs and parameters

The cpuPerformance attribute is a read-only property with no parameter inputs. It cannot be mutated by script. System administrators can override the reported tier enterprise-wide via the CpuPerformanceTierOverride enterprise policy, which supersedes the user setting.

Source: chromestatus.com/feature/5189864286978048; Chrome Enterprise policy

Outputs and return values

Returns an unsigned short integer. Values 1 through 4 map to coarse device capability tiers: 1 denotes severely constrained devices, 2 denotes low-tier devices, 3 denotes typical desktop and mobile devices capable of multi-tasking, and 4 denotes high-performance workstations and gaming rigs. The value 0 indicates that the browser is unable to classify the device.

Source: WICG CPU Performance explainer §Proposed Approach

Errors and exceptions

Reading navigator.cpuPerformance does not raise exceptions when accessed in a valid SecureContext Window environment. If accessed on a non-Window context or on an object that does not implement Navigator, standard Web IDL binding checks throw a TypeError: Illegal invocation.

Source: WICG CPU Performance specification

Execution context and exposure

The attribute is restricted by [SecureContext, Exposed=Window]. It is accessible only in secure origin (HTTPS or localhost) Window documents. It is explicitly not exposed to Web Workers, Service Workers, or insecure HTTP contexts, preventing silent background worker profiling.

Source: WICG CPU Performance spec; Chromium issue 449760252

Lifecycle and state transitions

The device CPU performance tier is resolved by the browser process at browser startup or profile initialization. The returned integer remains static throughout the lifetime of the document session, ensuring stable application configuration without fluctuating between frames.

Source: WICG CPU Performance explainer

Examples

// Adjust rendering quality based on CPU performance tier (1–4, 0 = unknown)
const tier = navigator.cpuPerformance;

switch (tier) {
  case 4:
    // High-end workstation: enable full fidelity effects and high frame rate
    initRenderer({ shadows: true, msaa: 4, targetFps: 60, workerCount: 8 });
    break;
  case 3:
    // Capable device: standard high-definition quality
    initRenderer({ shadows: true, msaa: 2, targetFps: 30, workerCount: 4 });
    break;
  case 2:
    // Underpowered device: lower quality to preserve interactivity
    initRenderer({ shadows: false, msaa: 0, targetFps: 30, workerCount: 2 });
    break;
  case 1:
    // Constrained device: minimal visual overhead
    initRenderer({ shadows: false, msaa: 0, targetFps: 15, workerCount: 1 });
    break;
  case 0:
  default:
    // Unknown tier or unsupported browser: apply conservative default settings
    initRenderer({ shadows: false, msaa: 0, targetFps: 30, workerCount: 2 });
    break;
}

Supplementary live example: the Chrome Platform Showcase device-tier readout lets you reread the coarse tier and run a benchmark. Both controls responded in Chrome 154 (2026-10-08); the benchmark is a comparison, not the definition of the reported tier. It is an optional companion, not a conformance test of the API.

Source: WICG CPU Performance explainer §Proposed Approach; blink-dev Intent to Ship; supplementary interactive example: Chrome Platform Showcase device-tier readout

Browser compatibility

BrowserSupportNotes
Chrome 152+Enabled by defaultAll desktop and Android platforms (Chromium issue 449760252)
FirefoxNo signalStandards position issue #1364
SafariOpposeWebKit position #622 citing fingerprinting surface
Source: chromestatus.com/feature/5189864286978048

Security and privacy considerations

The API is designed specifically to mitigate device fingerprinting by exposing only four broad integer tiers rather than fine-grained CPU frequency, cache sizes, or core architecture details. It is constrained to Secure Contexts, is not exposed to Web Workers, and offers explicit user settings and enterprise policy overrides.

Source: WICG CPU Performance explainer §Security and Privacy

see also