#1198: Incubation: CPU Performance API
Discussions
Log in to see TAG-private discussions.
Comment by @nickie Feb 24, 2026 (See Github)
Just noting that the specification for this API is ready for review.
Discussed
Mar 16, 2026 (See Github)
Jeffrey: I've left some thoughts, but we should discuss.
Marcos: This triggers the same concerns as DAS; it feels a bit self-damaging. Will review again to see if it's different from what's been proposed in the past.
Jeffrey: The approach with buckets helps, because you can always run a benchmark and get detail on the CPU's performance. They propose that the buckets be implementation-defined, and that might be a problem.
Marcos: I will do a first-pass reaction, not a position, in the brainstorming repo, and we can go from there.
Comment by @jyasskin Apr 1, 2026 (See Github)
We haven't finished discussing this, but one thing we're skeptical about is the idea of leaving the buckets implementation-defined. Can you give us a rough algorithm that might be interoperable?
Comment by @marcoscaceres Apr 1, 2026 (See Github)
@nickie, just wondering if you've fed this to Gemini for a review?... it confirmed a lot of concerns for me personally that I had with the proposal.
Here's a prompt. Hope that helps in the meantime while we do human reviews.
<details> # Gemini prompt: `navigator.cpuPerformance` self-reviewYou are a critical reviewer of web platform proposals. Your job is to find real problems, not to validate the proposal. Do not assume good design because the proposal exists. Apply the following tests rigorously.
Proposal: https://github.com/WICG/cpu-performance/ Fetch and read the full explainer and spec before answering anything.
Test 1: Use-case coverage by existing APIs
For each use case listed in the proposal, determine whether an existing W3C or WHATWG API already provides a more direct signal. Specifically:
- For video/media use cases: evaluate
MediaCapabilities.decodingInfo()andVideoDecoder.isConfigSupported()(WebCodecs). Does either API answer the question the proposal claims requires CPU tier? Quote the relevant spec text for each. - For ML/AI use cases: evaluate the WebNN API, specifically
opSupportLimits()and the UA compute-unit selection model. Does WebNN already address on-device vs. server-side inference decisions without requiring CPU tier? Quote the spec. - For each remaining use case: is there an existing API that provides a more accurate or more targeted signal than a 4-tier CPU classification?
Conclude: which use cases, if any, are genuinely unmet by existing APIs?
Test 2: The reproducibility claim vs. OS reality
The spec requires the same device to always return the same tier regardless of current system state ("reproducibility: independent of current load").
Evaluate this claim against:
- Thermal throttling behaviour on mobile SoCs (ARM big.LITTLE, Apple M-series, Qualcomm Snapdragon)
- OS power profiles (Windows Balanced/Performance/Power Saver, Android Doze, iOS Low Power Mode)
- Battery state effects on CPU boost duration
- Background process load (OS indexing, antivirus, system updates)
Is "reproducibility independent of current load" achievable in practice? If the tier reflects nominal device capability but not current operating conditions, what is the practical accuracy of the tier for the real-time adaptive use cases the spec describes?
Test 3: Privacy and fingerprinting surface
The spec says it was designed with privacy in mind. Evaluate:
- What is the information gain from
navigator.cpuPerformancewhen combined withnavigator.hardwareConcurrency,navigator.deviceMemory, and WebGL renderer strings? Does the 4-tier bucketing meaningfully reduce fingerprint entropy compared to those signals combined? - The spec requires SecureContext but defines no Permissions Policy feature. What does this mean for cross-origin iframes and third-party scripts?
- The tier is stable by design ("no reclassification"). How does a permanent, stable signal interact with cross-session fingerprinting?
- The spec explicitly lists "Select ads that are better suited for the user device" as a use case. Tier 1 devices correlate with lower-income users. Is there a consent mechanism for this use? Should there be?
Test 4: Abstraction level
Chrome internally classifies devices into performance tiers for rendering heuristics (compositor thread budgets, animation scheduling, etc.). Safari does the same.
- If UA-internal classification already exists, what is the marginal value of
exposing it to web content as a static property vs. as a dynamic media query
(e.g.
@media (performance-tier: low)) that the UA updates based on current system state? prefers-reduced-motionandprefers-color-schemeare OS-mediated signals surfaced as media queries. What are the tradeoffs between that model and thenavigator.cpuPerformancemodel for this use case?
Output format
For each test:
- State your verdict: passes / fails / partially passes
- Give the specific evidence (quoted spec text, API behavior, OS behavior) that supports the verdict
- If it fails, state what would need to change for it to pass
End with an overall assessment: does the proposal justify shipping as specified, or does it need rework? If rework, what is the minimum viable change set?
Do not hedge. If the evidence points to a problem, state the problem clearly.
</details> Comment by @domfarolino Apr 1, 2026 (See Github)
Can you share the output of your Gemini prompt? I'm surprised the prompt reduces things a "pass/fail" verdict, when all of the questions in each test are more discussion oriented, and not binary.
OpenedFeb 19, 2026
Explainer
https://github.com/WICG/cpu-performance/
The explainer
Where and by whom is the work is being done?
Feedback so far
You should also know that...
Specification URL: https://wicg.github.io/cpu-performance/
<!-- Content below this is maintained by @w3c-tag-bot -->Track conversations at https://tag-github-bot.w3.org/gh/w3ctag/design-reviews/1198