Enable SharedBuffer mode rendering for Android OpenXR

Adds support for Creating and sending SharedImages on OpenXr on Android,
which then plugs into the existing infrastructure to properly send up
and later consume the needed mailbox holders, etc. to render to the
screen. Final rendering is done using the (former) ArRenderer, which
worked as-is to blit from the SharedImage texture to the texture
provided by OpenXR, so that class was renamed and moved to be easily
accessible by the OpenXrGraphicsBindingOpenGLES. This also required
specifying the appropriate required Swapchain format that matches with
the shared buffer type that we are creating. (Note that a lot of this
logic is basically the same as the logic done in XrImageTransportBase
and the corresponding subclasses, but cannot be used at present since
we use a SwapChainInfo struct and not the WebXrPresentationState and
WebXrSharedBuffer classes that that class uses. Future work will
investigate migrating onto those types).

A number of refactors were done to make the code cleaner and
hopefully easier to understand including:
*  Moving some shared logic out of
  `CompositorBase::SubmitFrameWithTextureHandle` so that the Android
  path can use that for rendering as well.
* Moved a bunch of platform-specific logic into the respective graphics
  bindings.
* Moved xr(Acquire/Release)SwapchainImages into the graphics bindings
  to ease usage-patterns when setting up or consuming shared images.
* Moved logic from a couple of methods to live on the corresponding
  class rather than being computed on top/outside of that class.
* A few minor renames (mainly SwapChainImages->SwapChainInfo in methods).

Most future intended cleanups have been tagged with bugs in the
appropriate places, but it's worth calling out that the code currently
uses SwapChain and Swapchain (and thus swap_chain and swapchain) fairly
interchangably. A future change will attempt to do a mass rename to
consolidate on Swapchain/swapchain (with no underscore), to align with
the OpenXr, `XrSwapchain` type/nomenclature.

Fixed: 1441073
Change-Id: Ie03e4a7cff900ca4a33161af79184d505cbbdfee
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/4605785
Commit-Queue: Alexander Cooper <alcooper@chromium.org>
Reviewed-by: Kyle Charbonneau <kylechar@chromium.org>
Reviewed-by: Will Harris <wfh@chromium.org>
Reviewed-by: Brandon Jones <bajones@chromium.org>
Cr-Commit-Position: refs/heads/main@{#1158385}
25 files changed
tree: e85c024cdc7e4597772bd7a0c3c7863ad70ef509
  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. .vpython3
  61. .yapfignore
  62. ATL_OWNERS
  63. AUTHORS
  64. BUILD.gn
  65. CODE_OF_CONDUCT.md
  66. codereview.settings
  67. DEPS
  68. DIR_METADATA
  69. LICENSE
  70. LICENSE.chromium_os
  71. OWNERS
  72. PRESUBMIT.py
  73. PRESUBMIT_test.py
  74. PRESUBMIT_test_mocks.py
  75. README.md
  76. 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.