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}
1 file changed
tree: 1ab481dde5775a1970b22fb8f62fa83d332891da
  1. android_webview/
  2. apps/
  3. ash/
  4. base/
  5. build/
  6. build_overrides/
  7. buildtools/
  8. cc/
  9. chrome/
  10. chromecast/
  11. chromeos/
  12. codelabs/
  13. components/
  14. content/
  15. crypto/
  16. dbus/
  17. device/
  18. docs/
  19. extensions/
  20. fuchsia_web/
  21. gin/
  22. google_apis/
  23. gpu/
  24. headless/
  25. infra/
  26. ios/
  27. ipc/
  28. media/
  29. mojo/
  30. native_client_sdk/
  31. net/
  32. pdf/
  33. ppapi/
  34. printing/
  35. remoting/
  36. rlz/
  37. sandbox/
  38. services/
  39. skia/
  40. sql/
  41. storage/
  42. styleguide/
  43. testing/
  44. third_party/
  45. tools/
  46. ui/
  47. url/
  48. webkit/
  49. .clang-format
  50. .clang-tidy
  51. .clangd
  52. .git-blame-ignore-revs
  53. .gitallowed
  54. .gitattributes
  55. .gitignore
  56. .gitmodules
  57. .gn
  58. .mailmap
  59. .rustfmt.toml
  60. .vpython3
  61. .yapfignore
  62. ATL_OWNERS
  63. AUTHORS
  64. BUILD.gn
  65. CODE_OF_CONDUCT.md
  66. codereview.settings
  67. CPPLINT.cfg
  68. CRYPTO_OWNERS
  69. DEPS
  70. DIR_METADATA
  71. LICENSE
  72. LICENSE.chromium_os
  73. OWNERS
  74. PRESUBMIT.py
  75. PRESUBMIT_test.py
  76. PRESUBMIT_test_mocks.py
  77. README.md
  78. WATCHLISTS
README.md

Logo Chromium

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.