| commit | 352fbdae1017811d80b9d0d10a28464e24fae395 | [log] [tgz] |
|---|---|---|
| author | Jean-Philippe Gravel <jpgravel@chromium.org> | Fri Apr 04 20:03:16 2025 |
| committer | Chromium LUCI CQ <chromium-scoped@luci-project-accounts.iam.gserviceaccount.com> | Fri Apr 04 20:03:16 2025 |
| tree | 1ab481dde5775a1970b22fb8f62fa83d332891da | |
| parent | bcb71ceef7d8202dd2a0af171496e52ac90c67f8 [diff] |
Remove cc_layer_ check in IsResourceValid This check was introduced by https://codereview.chromium.org/1372463002, back in 2015. This is when we first started tuning if and when the canvas should be GPU accelerated. Before this CL, Canvas2DLayerBridge was always accelerated and always had a valid m_layer attribute. After this CL, m_layer was created only for GPU accelerated canvases. Because Canvas2DLayerBridge could now use software mode, the logic had to be adjusted to skip anything specific to GPU acceleration. In particular, the logic where we would detect a new GPU context loss and clear the canvas had to be bypassed because software resources shouldn't be impacted by a GPU process loss. The CL did this by using m_layer as a proxy to detect whether GPU acceleration is used (see line 363 in [1]) and early abort if it isn't. The CL uses this interpretation of m_layer in other places too, for instance in isAccelerated (line 165) and getOrCreateSurface (line 179). The purpose of that CL was to postpone the decision to use GPU acceleration to when the first flush of the canvas occurs because some flush operations are better done in CPU (e.g. read backs). Thus, until the first flush, the bridge had no surface, no layer, and didn't know whether it was accelerated. For better of for worse, checkSurfaceValid returned true in this state. Fast forward to 2025, and the cc_layer_ check no longer serves its purpose. We no longer need it to skip the GPU context lost detection and canvas reset logic because it was moved out of IsResourceValid. The check could even be harmful, because now, the cc_layer_ is no longer created along with the surface. Thus, it means that if the canvas suffered from a context lost before a frame is presented to the compositor, cc_layer_ would still be nullptr and IsResourceValid would incorrectly return true. [1]: https://source.chromium.org/chromium/chromium/src/+/main:third_party/blink/renderer/platform/graphics/canvas_2d_layer_bridge.cc;dlf=third_party%2FWebKit%2FSource%2Fplatform%2Fgraphics%2FCanvas2DLayerBridge.cpp;dlc=e8cac159f27bb9a24eca106cdea07abdf421f29c;drf=third_party%2FWebKit%2FSource%2Fplatform%2Fgraphics%2FCanvas2DLayerBridge.cpp;drc=8046330d6021c156f59a49729ed2308eda912add;bpv=0;bpt=0 Bug: 346766781 Change-Id: Ie84011eaf3e22dd083350436056199faae988873 Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/6426512 Reviewed-by: Colin Blundell <blundell@chromium.org> Commit-Queue: Jean-Philippe Gravel <jpgravel@chromium.org> Cr-Commit-Position: refs/heads/main@{#1442863}
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.