commit | 9df586b67f3c467b33364f79d4056864bc27cda8 | [log] [tgz] |
---|---|---|
author | Benoit Lize <lizeb@chromium.org> | Wed Jan 31 10:46:34 2024 |
committer | Benoit Lize <lizeb@chromium.org> | Wed Jan 31 10:46:34 2024 |
tree | c66201bf72e7f1e9fd856a18a2d5ec2d639f724e | |
parent | 251950b828b18b26958a639c3578473ea9523cde [diff] |
[viz] Add a feature to return overlays without frame production On platforms with delegated compositing, tiles (for instance) are passed to the display compositor to handle compositing itself. However, by the time we are swapping to frame N, the tiles of frame N-1 have likely not been released by the display compositor, since it would need them to produce a frame if something else happens on screen (outside of Chromium) at the next VSync. To make sure that we release resources, we will check these overlays again when frame N+1, N+2, etc. are swapped, and then we eventually release the overlays, returning exported resources to the client. This breaks down... where there is no frame N+1. While this may sound like a corner case, it happens in practice locally with the browser UI compositor, which can spend a lot of time without producing a new frame, or a page with an animation that stops. On macOS, for a simple page with a large non-looping GIF, this wastes ~30MiB of memory, since tiles for the second to last frame are retained service-side (because we don't check). Similar cases would happen with e.g. a fade-in animation, ads with non-repeating animations, or a page with layout changes during loading (since its tiles would be entirely dirty). It may also happen with PDF scrolling, since the way we currently render creates a new set of tiles for each frame. The same test case shows ~9MiB of memory lost this way for the browser UI compositor. This CL fixes the issue by checking 1s later whether the overlays are still in use, and returning the resources to the client. Bug: 1503162 Change-Id: I8bffb20aacdbfaa3a17c044d50ca9387dcdef391 Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/5038622 Reviewed-by: ccameron chromium <ccameron@chromium.org> Reviewed-by: Zhenyao Mo <zmo@chromium.org> Cr-Commit-Position: refs/heads/main@{#1254431}
Chromium is an open-source browser project that aims to build a safer, faster, and more stable way for all users to experience the web.
The project's web site is https://www.chromium.org.
To check out the source code locally, don't use git clone
! Instead, follow the instructions on how to get the code.
Documentation in the source is rooted in docs/README.md.
Learn how to Get Around the Chromium Source Code Directory Structure.
For historical reasons, there are some small top level directories. Now the guidance is that new top level directories are for product (e.g. Chrome, Android WebView, Ash). Even if these products have multiple executables, the code should be in subdirectories of the product.
If you found a bug, please file it at https://crbug.com/new.