[cc/tiles] Fix transfer cache entry deletion in GpuImageDecodeCache The renderer-side GpuImageDecodeCache is referencing GPU process side memory in the transfer cache. When memory is deleted from it, the deletion can actually happen much later, since the delete command may sit in a buffer. A previous commit (https://chromium-review.googlesource.com/c/chromium/src/+/4704673) added a "flush" call to make sure that the deletion makes its way to the GPU process even when no outside event forces it (e.g. a frame commit, or other memory reclaim action). However, it doesn't work, because it only flushes "deferred messages" (see GpuChannelHost::InternalFlush()), but transfer cache entry deletion is a regular command buffer command (see DeleteTransferCacheEntryINTERNAL()). This means that we need a shallow command buffer flush to ensure that deletion commands are actually processed. This has been a longstanding bug in (at least) GpuImageDecodeCache, impacting GpuImageDecodeCache::ClearCache() (and its callers), in particular memory pressure signals processing. Locally, loading a static page with lots of images, we observe that prior to this commit, >200MiB can be used by the transfer cache, and not go away as planned until a new frame is produced. On an ARM64 mac laptop, this is verified with IOAccelerator memory, which is backing transfer cache memory GPU-side. $ vmmap $GPU_PROCESS_PID [...] VIRTUAL RESIDENT DIRTY SWAPPED VOLATILE NONVOL EMPTY REGION REGION TYPE SIZE SIZE SIZE SIZE SIZE SIZE SIZE COUNT (non-coalesced) =========== ======= ======== ===== ======= ======== ====== ===== ======= [...] IOAccelerator 22.4M 112K 112K 6880K 0K 0K 15.4M 198 Bug: 1441409 Change-Id: Ib49eb8283ac969fb219a3524ff54ce4715897f3a Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/4859345 Reviewed-by: Vladimir Levin <vmpstr@chromium.org> Commit-Queue: Benoit Lize <lizeb@chromium.org> Cr-Commit-Position: refs/heads/main@{#1195900}
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.