Reland: OzoneImageBacking - Return early if cannot BeginRead/Write

Changes from Original CL:
DrawingBuffer::CreateColorBuffer creates a shared image passing
SHARED_IMAGE_USAGE_CONCURRENT_READ_WRITE usage if low latency is
enabled. This flag was not enabled properly by client as the support
was added recently for OzoneBacking to ChromeOS and would work earlier
with GLImageBacking. This change sets the low latency enabled flag
based on the desynchronized flag being passed.

Original CL description:
When OzoneImageBacking::BeginAccess is called, if read/write is already
in progress there's an early return from the function. In such cases,
we should return early from calling functions to avoid anything
unexpected.

Recently, there was a bug b/243039477 where
DCHECK_GT(reads_on progress_, 0u) crashes for a debug build. This
shouldn't happen unless a client was calling Begin/EndAccess out of
order or some usages were not set properly for concurrent access.
This CL fixes for the early return suspecting the cause to be
elsewhere in client.

Test: Tested on ChromeOS amd64, kevin CQ bots
Bug: 1359404, 1359118, b/243039477
Change-Id: I990c19cd9bb73a4a578008b812e791c00d1816c5
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/3876745
Reviewed-by: Vasiliy Telezhnikov <vasilyt@chromium.org>
Reviewed-by: Kenneth Russell <kbr@chromium.org>
Commit-Queue: Saifuddin Hitawala <hitawala@chromium.org>
Cr-Commit-Position: refs/heads/main@{#1046143}
7 files changed
tree: 270c327b92695b633682d0b4ae6834748aef6f5b
  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. courgette/
  16. crypto/
  17. dbus/
  18. device/
  19. docs/
  20. extensions/
  21. fuchsia_web/
  22. gin/
  23. google_apis/
  24. google_update/
  25. gpu/
  26. headless/
  27. infra/
  28. ios/
  29. ipc/
  30. media/
  31. mojo/
  32. native_client_sdk/
  33. net/
  34. pdf/
  35. ppapi/
  36. printing/
  37. remoting/
  38. rlz/
  39. sandbox/
  40. services/
  41. skia/
  42. sql/
  43. storage/
  44. styleguide/
  45. testing/
  46. third_party/
  47. tools/
  48. ui/
  49. url/
  50. weblayer/
  51. .clang-format
  52. .clang-tidy
  53. .eslintrc.js
  54. .git-blame-ignore-revs
  55. .gitattributes
  56. .gitignore
  57. .gn
  58. .mailmap
  59. .rustfmt.toml
  60. .vpython
  61. .vpython3
  62. .yapfignore
  63. AUTHORS
  64. BUILD.gn
  65. CODE_OF_CONDUCT.md
  66. codereview.settings
  67. DEPS
  68. DIR_METADATA
  69. ENG_REVIEW_OWNERS
  70. LICENSE
  71. LICENSE.chromium_os
  72. OWNERS
  73. PRESUBMIT.py
  74. PRESUBMIT_test.py
  75. PRESUBMIT_test_mocks.py
  76. README.md
  77. 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.