Does this intent deprecate or change behavior of existing APIs, such that it has potentially high risk for Android WebView-based applications?
None.Does the feature depend on any code or APIs outside the Chromium open source repository and its open-source dependencies to function?
None.| Shipping on desktop | 151 |
| Origin trial desktop first | 146 |
| Origin trial desktop last | 151 |
| Shipping on Android | 151 |
| Origin trial Android first | 146 |
| Origin trial Android last | 151 |
| Shipping on WebView | 151 |
| Origin trial WebView first | 146 |
| Origin trial WebView last | 151 |
Open questions about a feature may be a source of future web compat or interop issues. Please list open issues (e.g. links to known github issues in the project for the feature specification) whose resolution may introduce web compat/interop risk (e.g., changing to naming or structure of the API in a non-backward-compatible way).
No such open issues.Hi Alex,
Thank you for your comments and questions. We have discussed the API publicly since last October, when we circulated the explainer, and then followed with a presentation to the Web Performance WG at TPAC 2025. I’m not sure if somebody from Intel was present there. We have not discussed it with the authors of the Compute Pressure API proposal, in particular, although the two proposals are definitely related. I will try to explain their similarities and differences, as I see them.
The Compute Pressure API is dynamic; it “provides a way for websites to react to changes in the CPU pressure of the target device, such that websites can trade off resources for an improved user experience”. On the other hand, the CPU Performance API is static; it “exposes some information about how powerful the user device is. It targets web applications that will use this static information to provide an improved user experience”.
Both aspects of performance are useful and the two APIs are complementary, not antagonistic. I will not repeat the arguments in favour of dynamic information, as they are well known and documented in the Compute Pressure API. The argument in favour of static information is that we wanted the CPU Performance API to be a proxy for the user’s device hardware class — this means, it should be stable and unmoved by transient conditions, like what other applications are running, battery power, etc. If somebody has a powerful device where, at the moment, a lot of applications are running, we don’t want it to appear as a low-tier device to web applications. We want a new application to be able to realize that it is running on a high-tier device; if necessary, it will also have the chance to use dynamic information (the complementary API) to realize that the device is heavily used.
Obtaining dynamic information is something that a web application is generally able to do on its own, by running some JS benchmark. On the other hand, there’s no reliable way for a web application to obtain static information about the user device, that is, by overlooking what else is running. This is what the CPU Performance API is about. Partners have asked us for static information and this API solves the immediate use case; they have not asked for dynamic information, which is more-or-less covered by the Compute Pressure API. In this sense, the CPU Performance API is similar to `navigator.hardwareConcurrency`, which only exposes the possible level of concurrency regardless of how powerful each individual core may be.
The code example contained in the explainer and the proposed specification illustrates exactly this use case: a web application using the performance tier for pre-setting some features controlling user experience. Later on, such a web application may use the Compute Pressure API independently, to adjust these settings according to dynamic information.
Best regards,
Nikos.
Nikolaos Papaspyrou
Software Engineer
Google Germany GmbH
Geschäftsführer: Paul Manicle, Liana Sebastian
Registergericht und -nummer: Hamburg, HRB 86891
Sitz der Gesellschaft: Hamburg
Diese E-Mail ist vertraulich. Falls Sie diese fälschlicherweise erhalten haben sollten, leiten Sie diese bitte nicht an jemand anderes weiter, löschen Sie alle Kopien und Anhänge davon und lassen Sie mich bitte wissen, dass die E-Mail an die falsche Person gesendet wurde.
This e-mail is confidential. If you received this communication by mistake, please don't forward it to anyone else, please erase all copies and attachments, and please let me know that it has gone to the wrong person.
--
You received this message because you are subscribed to the Google Groups "blink-dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email to blink-dev+...@chromium.org.
To view this discussion visit https://groups.google.com/a/chromium.org/d/msgid/blink-dev/4aafe1d7-6404-4b47-adc4-41a556ef95f5n%40chromium.org.
I saw there were some open comments/questions on the TAG review thread https://github.com/w3ctag/design-reviews/issues/1198 -- it would be great if you could respond there so that review might reach some conclusion.
Alex,In my experience speaking with developers, the issue is that even with logic to make a dynamic judgement (by using the Compute Pressure API or other feedback such as dropped frames) the site still needs to decide what to load first. Consider a developer looking to run an ML model on-device: They may have 3 different models requiring progressively higher compute capabilities but offering similar improvements in quality. Since each model takes time to load, ideally you would load the correct one first most of the time. This API can help with that. It's still just an assumption so other dynamic signals are still necessary.Nikos, if this matches your experience can you add something like my explanation above to the explainer?
Thanks for all of this, Nikos.Look at the Explainer again, I'm not sure how this would be use in conjunction with (or in opposition to) Compute Pressure. Can you show in code there how they compose or compete? What use-cases benefit from the static judgement more than the dynamic one?
Nikolaos Papaspyrou
Software Engineer
--
You received this message because you are subscribed to the Google Groups "blink-dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email to blink-dev+...@chromium.org.

To view this discussion visit https://groups.google.com/a/chromium.org/d/msgid/blink-dev/CAFUtAY8i6a1a-fz8S7%3DCHCSfU1gB%2B9ij1eU7y9gaKOjjqj%2BNxg%40mail.gmail.com.
Look at the Explainer again, I'm not sure how this would be use in conjunction with (or in opposition to) Compute Pressure. Can you show in code there how they compose or compete? What use-cases benefit from the static judgement more than the dynamic one?
You received this message because you are subscribed to a topic in the Google Groups "blink-dev" group.
To unsubscribe from this topic, visit https://groups.google.com/a/chromium.org/d/topic/blink-dev/igPwzkxhQtk/unsubscribe.
To unsubscribe from this group and all its topics, send an email to blink-dev+...@chromium.org.
To view this discussion visit https://groups.google.com/a/chromium.org/d/msgid/blink-dev/CAFUtAY90H6SuPm0JokoOY%2BHBtVUkC3YBSzYK1bS9%3D7%2BVQk%3DtNQ%40mail.gmail.com.
Look at the Explainer again, I'm not sure how this would be use in conjunction with (or in opposition to) Compute Pressure. Can you show in code there how they compose or compete? What use-cases benefit from the static judgement more than the dynamic one?I don't have code, but I see them as related but different.IMHO the Compute Pressure API is about dealing with a system under stress and backing off non-critical work.This CPU Performance API is about setting an initial baseline of what a system should be able to handle under normal conditions (i.e. don't default assumptions that a system is under-powered and default to the bare minimum and make the user perhaps miss out on providing optional, extra enhancements, but also don't assume it's overpowered and make users turn off features to get a useable experience).Now it's true that the Compute Pressure API could be used for the same reasons as CPU Performance API. But that basically means ramping up until it hits a pressure point and then backing off. That's effectively just another form of micro-benchmarking and I think we all understand the downsides of that.I also think this CPU Performance API is a simpler, and more developer egronomic API than computer pressure, along the lines of Network Information API and Device Memory API where sites can use these signals to customize the experience upfront (for example providing a more stripped down experience for lower-powered devices). The Compute Pressure API is more about reacting to continual signals in a real-time fashion, so I'd see it as a more advanced use case for real time systems (video conferencing, video games). I don't think you want to remove features already loaded due to Compute Pressure (for example, you wouldn't switch already-loaded hi-res images to lower resolution images based on CPU pressure), just lower/pause continually processing processes like video or background calculations.Would sites use both? Maybe. But as I say, I think the Compute Pressure API is a more advanced API.
On Fri, Jun 26, 2026 at 9:16 AM Barry Pollard <barryp...@google.com> wrote:Look at the Explainer again, I'm not sure how this would be use in conjunction with (or in opposition to) Compute Pressure. Can you show in code there how they compose or compete? What use-cases benefit from the static judgement more than the dynamic one?I don't have code, but I see them as related but different.IMHO the Compute Pressure API is about dealing with a system under stress and backing off non-critical work.This CPU Performance API is about setting an initial baseline of what a system should be able to handle under normal conditions (i.e. don't default assumptions that a system is under-powered and default to the bare minimum and make the user perhaps miss out on providing optional, extra enhancements, but also don't assume it's overpowered and make users turn off features to get a useable experience).Now it's true that the Compute Pressure API could be used for the same reasons as CPU Performance API. But that basically means ramping up until it hits a pressure point and then backing off. That's effectively just another form of micro-benchmarking and I think we all understand the downsides of that.I also think this CPU Performance API is a simpler, and more developer egronomic API than computer pressure, along the lines of Network Information API and Device Memory API where sites can use these signals to customize the experience upfront (for example providing a more stripped down experience for lower-powered devices). The Compute Pressure API is more about reacting to continual signals in a real-time fashion, so I'd see it as a more advanced use case for real time systems (video conferencing, video games). I don't think you want to remove features already loaded due to Compute Pressure (for example, you wouldn't switch already-loaded hi-res images to lower resolution images based on CPU pressure), just lower/pause continually processing processes like video or background calculations.Would sites use both? Maybe. But as I say, I think the Compute Pressure API is a more advanced API.Thanks Bary, this was exactly my thinking too - depending on your use case you'd want either static (eg. UX that is jarring to change) or dynamic (more advanced, good for anything that really needs to adapt over time). I still think we COULD show an example of a dynamic system which bootstrapped itself using the static value, but I'm not personally aware of any developer who wants to do that, so it might be entirely artificial. For problems where the UX is amenable to a dynamic system, wouldn't I want to just always go for the max utilization and back off under pressure, rather than try to set some artificial ceiling?Nikos, WDYT? Can you ask any of your known OT users for this API whether they are using it in conjunction with dynamic signals, or whether they have features effectively split into those which are dynamic vs. those that are static? For example, the explainer talks about setting initial video resolution, frame rate and features for a video chat app. Features seems clearly static to me (don't want background blur turning off and on based on CPU load). But what about framerate and video resolution? Would these generally only be changed by user action (manually choosing a higher resolution), by other dynamic signals (like dropped frames), or also by CPU pressure?
On Mon, 22 Jun 2026 at 16:02, Rick Byers <rby...@chromium.org> wrote:
Thanks everyone for the input and offer of support! Note that Nikos is OOO this week so we should not expect responses from him until next week. I believe the team will likely postpone this feature to M152 to ensure there's adequate time to engage with this debate and make any necessary adjustments. But note the OT ends in 151 so IMHO we should not let this slip past M152 without a very good reason.Regarding the interoperability concern, I also built a JS reference implementation derived from the Chromium impl and proposed contributing it to the WICG, along with a little demo page, and possible spec additions. I suggest we give the standards debate a couple weeks to play out in the WICG repo + TAG thread. Then, depending on the outcome, API owners can evaluate whether to ask the team to move their implementation into an independent open source repo. IMHO if the spec ends up reasonably precisely defining the algorithm, there's no reason to request any changes in Chromium's implementation strategy.Rick
On Mon, Jun 22, 2026 at 5:48 AM Thomas Steiner <to...@google.com> wrote:
I know that the Web AI community are very interested in finding out if a given device can run an AI model. In the native world, there are tools like llmfit. I recently compared what they can obtain with what is available via Web APIs.
llmfit:
<Screenshot 2026-06-12 at 12.31.54.png>Web APIs: