Ready for Developer Testing: Freezing on Energy Saver

136 views
Skip to first unread message

Chromestatus

unread,
Oct 7, 2024, 8:59:53 PMOct 7
to blin...@chromium.org, fdo...@chromium.org, shas...@chromium.org

Contact emails

fdo...@chromium.org, shas...@chromium.org

Explainer

None

Specification

https://wicg.github.io/page-lifecycle

Design docs


https://docs.google.com/document/d/1uTJifh_erMX4_CTKgKljlj9O4SAmGam5W61FBHeasGI/edit?usp=sharing

Summary

When Energy Saver is active, Chrome will freeze a "browsing context group" that has been hidden and silent for >5 minutes if any subgroup of same-origin frames within it exceeds a CPU usage threshold, unless it: - Provides audio- or video-conferencing functionality (detected via microphone, camera or screen/window/tab capture or an RTCPeerConnection with an 'open' RTCDataChannel or a 'live' MediaStreamTrack). - Controls an external device (detected via usage of Web USB, Web Bluetooth, Web HID or Web Serial). - Holds a Web Lock or an IndexedDB connection that blocks a version update or a transaction on a different connection. Freezing consists of pausing execution. It is formally defined in the Page Lifecycle API. The CPU usage threshold will be calibrated to freeze approximately 10% of background tabs when Energy Saver is active.



Blink component

Blink>Scheduling

TAG review

None

TAG review status

Not applicable

Risks



Interoperability and Compatibility

Interoperability: This feature does not expose new capabilities to the Web, so it has low chances of creating situations in which the same HTML/CSS/Js/... behaves differently in different browsers. That being said, we invite other browsers vendors that already shipped "tab freezing" to share and discuss their opt-out rules, which will help offer consistent behavior for web developers across browsers, avoiding situations where a site's background functionality works correctly in some browsers but not others. Compatibility: This feature may affect existing sites with background functionality. However, breaking some functionality to extend battery life is in line with user expectations when "Energy Saver" is active. We're interested in Web developer feedback to adjust our opt-outs and minimize avoidable breakages. "Energy Saver" can be disabled via the the "BatterySaverModeAvailability" enterprise policy.



Gecko: Under consideration (https://github.com/mozilla/standards-positions/issues/87)

WebKit: No signal

Web developers: No signals In the past, Web developers expressed concerns about freezing, because it made it difficult to implement background functionality that users care about in a reliable way (e.g. notification for calendar event). By freezing only pages that use a lot of CPU and only when Energy Saver is active, breakages that were reported in the past are mitigated. Additionally, we will listen to Web developers feedback on multiple channels (crbug, blink-dev, stack overflow, twitter, github) and make adjustments to heuristics if we find that background functionality that users care about is broken.

Other signals: - Chrome on Android freezes background tabs after 5 minutes https://groups.google.com/a/chromium.org/g/blink-dev/c/NKtuFxLsKgo/m/brL3bfS5CAAJ - Chrome on desktop freezes pages before putting them in the BFCache. - Edge freezes background tabs after a configurable timeout https://www.microsoft.com/en-us/edge/features/sleeping-tabs-at-work?form=MT00D8

Ergonomics

No Ergonomics Risks identified.



Activation

No action is required to support browsers that don't freeze pages.



Security

A frame can observe when it is frozen, either directly (via the “freeze” event) or indirectly (timer runs later than expected, server doesn’t receive a ping…). When the decision to freeze a frame depends on observations made on other cross-origin frames (crossing CPU usage threshold, using Web API that opt-outs from freezing) there is a risk of leaking information across origins. Multiple solutions were considered to balance security and ergonomy requirements. We finally landed on "freezing a browsing context group based on independent observations made on groups of same-origin/same-page frames in that browsing context group". Pros & cons + All frames on a page are in the same “frozen” state (does not break Web devs assumptions). + All frames that can synchronously script each other are in the same “frozen” state (does not break Web devs assumptions). + Not aggregating CPU usage across origins minimizes leaks, because an attacker can’t vary its own CPU usage to precisely measure the CPU usage of another origin. - Leaks Web API usage across cross-origin frames.



WebView application risks

Does this intent deprecate or change behavior of existing APIs, such that it has potentially high risk for Android WebView-based applications?



Goals for experimentation



Ongoing technical constraints



Debuggability

The frozen state of a tab is displayed in the "Loading state" column of about:discards. The reasons that prevent a tab from being frozen (e.g. usage of WebRTC) are displayed in the bubble that appears when clicking on a "page" at about:discards/graph (see Freezing > cannot_freeze_reasons). The #freezing-on-energy-saver and #freezing-on-energy-saver-testing features at about:flags can be used to test this intervention.



Will this feature be supported on all six Blink platforms (Windows, Mac, Linux, ChromeOS, Android, and Android WebView)?

Yes

Chrome for Android already freezes pages in the background (not tied to Energy Saver). This proposal brings freezing to desktop.



Is this feature fully tested by web-platform-tests?

No

Flag name on chrome://flags

freezing-on-energy-saver

Finch feature name

FreezingOnBatterySaver

Requires code in //chrome?

False

Tracking bug

https://crbug.com/325954772

Launch bug

https://launch.corp.google.com/launch/4282880

Estimated milestones

DevTrial on desktop 131


Link to entry on the Chrome Platform Status

https://chromestatus.com/feature/5158599457767424

Links to previous Intent discussions

Intent to Prototype: https://groups.google.com/a/chromium.org/d/msgid/blink-dev/CAG9b2qVcRLRWXUz61AkRWi%2BkaOJwgUK8bNCRBG6LOpqgOd%2BvSw%40mail.gmail.com


This intent message was generated by Chrome Platform Status.
Reply all
Reply to author
Forward
0 new messages