Commit 176de16d authored by Miyoung Shin's avatar Miyoung Shin Committed by Commit Bot

Convert XRCompositorHost to new Mojo types

This CL converts XRCompositorHostPtr and Binding<XRCompositorHost>
in chrome and device to the new Mojo type, and use
pending_remote<XRCompositorHost> in isolated_xr_service.mojom.

Bug: 955171
Change-Id: Ib5d6f46f104b525806ef4363b944dc0c079917e6
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1847451
Commit-Queue: Miyoung Shin <myid.shin@igalia.com>
Reviewed-by: default avatarSam McNally <sammc@chromium.org>
Reviewed-by: default avatarKlaus Weidner <klausw@chromium.org>
Reviewed-by: default avatarPiotr Bialecki <bialpio@chromium.org>
Reviewed-by: default avatarKen Rockot <rockot@google.com>
Cr-Commit-Position: refs/heads/master@{#704646}
parent 0e988b8e
...@@ -40,7 +40,7 @@ void IsolatedVRDeviceProvider::OnDeviceAdded( ...@@ -40,7 +40,7 @@ void IsolatedVRDeviceProvider::OnDeviceAdded(
device::mojom::XRRuntimePtr device, device::mojom::XRRuntimePtr device,
mojo::PendingRemote<device::mojom::IsolatedXRGamepadProviderFactory> mojo::PendingRemote<device::mojom::IsolatedXRGamepadProviderFactory>
gamepad_factory, gamepad_factory,
device::mojom::XRCompositorHostPtr compositor_host, mojo::PendingRemote<device::mojom::XRCompositorHost> compositor_host,
device::mojom::XRDeviceId device_id) { device::mojom::XRDeviceId device_id) {
add_device_callback_.Run(device_id, nullptr, std::move(device)); add_device_callback_.Run(device_id, nullptr, std::move(device));
......
...@@ -42,7 +42,7 @@ class IsolatedVRDeviceProvider ...@@ -42,7 +42,7 @@ class IsolatedVRDeviceProvider
device::mojom::XRRuntimePtr device, device::mojom::XRRuntimePtr device,
mojo::PendingRemote<device::mojom::IsolatedXRGamepadProviderFactory> mojo::PendingRemote<device::mojom::IsolatedXRGamepadProviderFactory>
gamepad_factory, gamepad_factory,
device::mojom::XRCompositorHostPtr compositor_host, mojo::PendingRemote<device::mojom::XRCompositorHost> compositor_host,
device::mojom::XRDeviceId device_id) override; device::mojom::XRDeviceId device_id) override;
void OnDeviceRemoved(device::mojom::XRDeviceId id) override; void OnDeviceRemoved(device::mojom::XRDeviceId id) override;
void OnDevicesEnumerated() override; void OnDevicesEnumerated() override;
......
...@@ -8,6 +8,7 @@ ...@@ -8,6 +8,7 @@
#include "chrome/browser/vr/vr_export.h" #include "chrome/browser/vr/vr_export.h"
#include "device/vr/public/mojom/isolated_xr_service.mojom.h" #include "device/vr/public/mojom/isolated_xr_service.mojom.h"
#include "device/vr/public/mojom/vr_service.mojom.h" #include "device/vr/public/mojom/vr_service.mojom.h"
#include "mojo/public/cpp/bindings/pending_remote.h"
namespace vr { namespace vr {
...@@ -21,9 +22,9 @@ class VR_EXPORT VRUiHost { ...@@ -21,9 +22,9 @@ class VR_EXPORT VRUiHost {
public: public:
virtual ~VRUiHost() = 0; virtual ~VRUiHost() = 0;
using Factory = using Factory = std::unique_ptr<VRUiHost>(
std::unique_ptr<VRUiHost>(device::mojom::XRDeviceId device_id, device::mojom::XRDeviceId device_id,
device::mojom::XRCompositorHostPtr compositor); mojo::PendingRemote<device::mojom::XRCompositorHost> compositor);
static void SetFactory(Factory* factory); static void SetFactory(Factory* factory);
static Factory* GetFactory(); static Factory* GetFactory();
......
...@@ -122,8 +122,9 @@ void VRUiHostImpl::CapturingStateModelTransience:: ...@@ -122,8 +122,9 @@ void VRUiHostImpl::CapturingStateModelTransience::
*active_capture_state_model_ = CapturingStateModel(); *active_capture_state_model_ = CapturingStateModel();
} }
VRUiHostImpl::VRUiHostImpl(device::mojom::XRDeviceId device_id, VRUiHostImpl::VRUiHostImpl(
device::mojom::XRCompositorHostPtr compositor) device::mojom::XRDeviceId device_id,
mojo::PendingRemote<device::mojom::XRCompositorHost> compositor)
: compositor_(std::move(compositor)), : compositor_(std::move(compositor)),
main_thread_task_runner_(base::ThreadTaskRunnerHandle::Get()), main_thread_task_runner_(base::ThreadTaskRunnerHandle::Get()),
triggered_capturing_transience_(&triggered_capturing_state_model_) { triggered_capturing_transience_(&triggered_capturing_state_model_) {
...@@ -156,7 +157,7 @@ VRUiHostImpl::~VRUiHostImpl() { ...@@ -156,7 +157,7 @@ VRUiHostImpl::~VRUiHostImpl() {
// static // static
std::unique_ptr<VRUiHost> VRUiHostImpl::Create( std::unique_ptr<VRUiHost> VRUiHostImpl::Create(
device::mojom::XRDeviceId device_id, device::mojom::XRDeviceId device_id,
device::mojom::XRCompositorHostPtr compositor) { mojo::PendingRemote<device::mojom::XRCompositorHost> compositor) {
DVLOG(1) << __func__; DVLOG(1) << __func__;
return std::make_unique<VRUiHostImpl>(device_id, std::move(compositor)); return std::make_unique<VRUiHostImpl>(device_id, std::move(compositor));
} }
......
...@@ -17,6 +17,7 @@ ...@@ -17,6 +17,7 @@
#include "chrome/browser/vr/service/vr_ui_host.h" #include "chrome/browser/vr/service/vr_ui_host.h"
#include "components/bubble/bubble_manager.h" #include "components/bubble/bubble_manager.h"
#include "content/public/browser/web_contents.h" #include "content/public/browser/web_contents.h"
#include "mojo/public/cpp/bindings/pending_remote.h"
#include "mojo/public/cpp/bindings/remote.h" #include "mojo/public/cpp/bindings/remote.h"
#include "services/device/public/mojom/geolocation_config.mojom.h" #include "services/device/public/mojom/geolocation_config.mojom.h"
...@@ -33,13 +34,13 @@ class VRUiHostImpl : public VRUiHost, ...@@ -33,13 +34,13 @@ class VRUiHostImpl : public VRUiHost,
public DesktopMediaPickerManager::DialogObserver { public DesktopMediaPickerManager::DialogObserver {
public: public:
VRUiHostImpl(device::mojom::XRDeviceId device_id, VRUiHostImpl(device::mojom::XRDeviceId device_id,
device::mojom::XRCompositorHostPtr compositor); mojo::PendingRemote<device::mojom::XRCompositorHost> compositor);
~VRUiHostImpl() override; ~VRUiHostImpl() override;
// Factory for use with VRUiHost::{Set,Get}Factory // Factory for use with VRUiHost::{Set,Get}Factory
static std::unique_ptr<VRUiHost> Create( static std::unique_ptr<VRUiHost> Create(
device::mojom::XRDeviceId device_id, device::mojom::XRDeviceId device_id,
device::mojom::XRCompositorHostPtr compositor); mojo::PendingRemote<device::mojom::XRCompositorHost> compositor);
private: private:
// This class manages the transience of each of a CapturingStateModel's flags. // This class manages the transience of each of a CapturingStateModel's flags.
...@@ -102,7 +103,7 @@ class VRUiHostImpl : public VRUiHost, ...@@ -102,7 +103,7 @@ class VRUiHostImpl : public VRUiHost,
void InitCapturingStates(); void InitCapturingStates();
void PollCapturingState(); void PollCapturingState();
device::mojom::XRCompositorHostPtr compositor_; mojo::Remote<device::mojom::XRCompositorHost> compositor_;
std::unique_ptr<VRBrowserRendererThreadWin> ui_rendering_thread_; std::unique_ptr<VRBrowserRendererThreadWin> ui_rendering_thread_;
device::mojom::VRDisplayInfoPtr info_; device::mojom::VRDisplayInfoPtr info_;
content::WebContents* web_contents_ = nullptr; content::WebContents* web_contents_ = nullptr;
......
...@@ -96,7 +96,6 @@ mojom::VRDisplayInfoPtr CreateVRDisplayInfo(mojom::XRDeviceId id, ...@@ -96,7 +96,6 @@ mojom::VRDisplayInfoPtr CreateVRDisplayInfo(mojom::XRDeviceId id,
OculusDevice::OculusDevice() OculusDevice::OculusDevice()
: VRDeviceBase(mojom::XRDeviceId::OCULUS_DEVICE_ID), : VRDeviceBase(mojom::XRDeviceId::OCULUS_DEVICE_ID),
main_thread_task_runner_(base::ThreadTaskRunnerHandle::Get()), main_thread_task_runner_(base::ThreadTaskRunnerHandle::Get()),
compositor_host_binding_(this),
weak_ptr_factory_(this) { weak_ptr_factory_(this) {
render_loop_ = std::make_unique<OculusRenderLoop>(); render_loop_ = std::make_unique<OculusRenderLoop>();
} }
...@@ -116,10 +115,9 @@ OculusDevice::BindGamepadFactory() { ...@@ -116,10 +115,9 @@ OculusDevice::BindGamepadFactory() {
return gamepad_provider_factory_receiver_.BindNewPipeAndPassRemote(); return gamepad_provider_factory_receiver_.BindNewPipeAndPassRemote();
} }
mojom::XRCompositorHostPtr OculusDevice::BindCompositorHost() { mojo::PendingRemote<mojom::XRCompositorHost>
mojom::XRCompositorHostPtr ret; OculusDevice::BindCompositorHost() {
compositor_host_binding_.Bind(mojo::MakeRequest(&ret)); return compositor_host_receiver_.BindNewPipeAndPassRemote();
return ret;
} }
OculusDevice::~OculusDevice() { OculusDevice::~OculusDevice() {
......
...@@ -11,7 +11,6 @@ ...@@ -11,7 +11,6 @@
#include "base/single_thread_task_runner.h" #include "base/single_thread_task_runner.h"
#include "device/vr/public/mojom/vr_service.mojom.h" #include "device/vr/public/mojom/vr_service.mojom.h"
#include "device/vr/vr_device_base.h" #include "device/vr/vr_device_base.h"
#include "mojo/public/cpp/bindings/binding.h"
#include "mojo/public/cpp/bindings/pending_receiver.h" #include "mojo/public/cpp/bindings/pending_receiver.h"
#include "mojo/public/cpp/bindings/pending_remote.h" #include "mojo/public/cpp/bindings/pending_remote.h"
#include "mojo/public/cpp/bindings/receiver.h" #include "mojo/public/cpp/bindings/receiver.h"
...@@ -46,7 +45,7 @@ class DEVICE_VR_EXPORT OculusDevice ...@@ -46,7 +45,7 @@ class DEVICE_VR_EXPORT OculusDevice
mojo::PendingRemote<mojom::IsolatedXRGamepadProviderFactory> mojo::PendingRemote<mojom::IsolatedXRGamepadProviderFactory>
BindGamepadFactory(); BindGamepadFactory();
mojom::XRCompositorHostPtr BindCompositorHost(); mojo::PendingRemote<mojom::XRCompositorHost> BindCompositorHost();
private: private:
// XRSessionController // XRSessionController
...@@ -80,7 +79,7 @@ class DEVICE_VR_EXPORT OculusDevice ...@@ -80,7 +79,7 @@ class DEVICE_VR_EXPORT OculusDevice
gamepad_provider_factory_receiver_{this}; gamepad_provider_factory_receiver_{this};
mojo::PendingReceiver<mojom::IsolatedXRGamepadProvider> provider_receiver_; mojo::PendingReceiver<mojom::IsolatedXRGamepadProvider> provider_receiver_;
mojo::Binding<mojom::XRCompositorHost> compositor_host_binding_; mojo::Receiver<mojom::XRCompositorHost> compositor_host_receiver_{this};
mojo::PendingReceiver<mojom::ImmersiveOverlay> overlay_receiver_; mojo::PendingReceiver<mojom::ImmersiveOverlay> overlay_receiver_;
base::WeakPtrFactory<OculusDevice> weak_ptr_factory_; base::WeakPtrFactory<OculusDevice> weak_ptr_factory_;
......
...@@ -123,8 +123,7 @@ mojom::VRDisplayInfoPtr CreateVRDisplayInfo(vr::IVRSystem* vr_system, ...@@ -123,8 +123,7 @@ mojom::VRDisplayInfoPtr CreateVRDisplayInfo(vr::IVRSystem* vr_system,
OpenVRDevice::OpenVRDevice() OpenVRDevice::OpenVRDevice()
: VRDeviceBase(device::mojom::XRDeviceId::OPENVR_DEVICE_ID), : VRDeviceBase(device::mojom::XRDeviceId::OPENVR_DEVICE_ID),
main_thread_task_runner_(base::ThreadTaskRunnerHandle::Get()), main_thread_task_runner_(base::ThreadTaskRunnerHandle::Get()) {
compositor_host_binding_(this) {
render_loop_ = std::make_unique<OpenVRRenderLoop>(); render_loop_ = std::make_unique<OpenVRRenderLoop>();
OnPollingEvents(); OnPollingEvents();
...@@ -143,10 +142,9 @@ OpenVRDevice::BindGamepadFactory() { ...@@ -143,10 +142,9 @@ OpenVRDevice::BindGamepadFactory() {
return gamepad_provider_factory_receiver_.BindNewPipeAndPassRemote(); return gamepad_provider_factory_receiver_.BindNewPipeAndPassRemote();
} }
mojom::XRCompositorHostPtr OpenVRDevice::BindCompositorHost() { mojo::PendingRemote<mojom::XRCompositorHost>
mojom::XRCompositorHostPtr ret; OpenVRDevice::BindCompositorHost() {
compositor_host_binding_.Bind(mojo::MakeRequest(&ret)); return compositor_host_receiver_.BindNewPipeAndPassRemote();
return ret;
} }
OpenVRDevice::~OpenVRDevice() { OpenVRDevice::~OpenVRDevice() {
......
...@@ -12,7 +12,6 @@ ...@@ -12,7 +12,6 @@
#include "device/vr/openvr/openvr_api_wrapper.h" #include "device/vr/openvr/openvr_api_wrapper.h"
#include "device/vr/public/mojom/vr_service.mojom.h" #include "device/vr/public/mojom/vr_service.mojom.h"
#include "device/vr/vr_device_base.h" #include "device/vr/vr_device_base.h"
#include "mojo/public/cpp/bindings/binding.h"
#include "mojo/public/cpp/bindings/pending_receiver.h" #include "mojo/public/cpp/bindings/pending_receiver.h"
#include "mojo/public/cpp/bindings/pending_remote.h" #include "mojo/public/cpp/bindings/pending_remote.h"
#include "mojo/public/cpp/bindings/receiver.h" #include "mojo/public/cpp/bindings/receiver.h"
...@@ -52,7 +51,7 @@ class DEVICE_VR_EXPORT OpenVRDevice ...@@ -52,7 +51,7 @@ class DEVICE_VR_EXPORT OpenVRDevice
mojo::PendingRemote<mojom::IsolatedXRGamepadProviderFactory> mojo::PendingRemote<mojom::IsolatedXRGamepadProviderFactory>
BindGamepadFactory(); BindGamepadFactory();
mojom::XRCompositorHostPtr BindCompositorHost(); mojo::PendingRemote<mojom::XRCompositorHost> BindCompositorHost();
private: private:
// XRSessionController // XRSessionController
...@@ -84,7 +83,7 @@ class DEVICE_VR_EXPORT OpenVRDevice ...@@ -84,7 +83,7 @@ class DEVICE_VR_EXPORT OpenVRDevice
gamepad_provider_factory_receiver_{this}; gamepad_provider_factory_receiver_{this};
mojo::PendingReceiver<mojom::IsolatedXRGamepadProvider> provider_receiver_; mojo::PendingReceiver<mojom::IsolatedXRGamepadProvider> provider_receiver_;
mojo::Binding<mojom::XRCompositorHost> compositor_host_binding_; mojo::Receiver<mojom::XRCompositorHost> compositor_host_receiver_{this};
mojo::PendingReceiver<mojom::ImmersiveOverlay> overlay_receiver_; mojo::PendingReceiver<mojom::ImmersiveOverlay> overlay_receiver_;
base::WeakPtrFactory<OpenVRDevice> weak_ptr_factory_{this}; base::WeakPtrFactory<OpenVRDevice> weak_ptr_factory_{this};
......
...@@ -86,7 +86,6 @@ bool OpenXrDevice::IsApiAvailable() { ...@@ -86,7 +86,6 @@ bool OpenXrDevice::IsApiAvailable() {
OpenXrDevice::OpenXrDevice() OpenXrDevice::OpenXrDevice()
: VRDeviceBase(device::mojom::XRDeviceId::OPENXR_DEVICE_ID), : VRDeviceBase(device::mojom::XRDeviceId::OPENXR_DEVICE_ID),
compositor_host_binding_(this),
weak_ptr_factory_(this) { weak_ptr_factory_(this) {
SetVRDisplayInfo(CreateFakeVRDisplayInfo(GetId())); SetVRDisplayInfo(CreateFakeVRDisplayInfo(GetId()));
} }
...@@ -105,10 +104,9 @@ OpenXrDevice::BindGamepadFactory() { ...@@ -105,10 +104,9 @@ OpenXrDevice::BindGamepadFactory() {
return gamepad_provider_factory_receiver_.BindNewPipeAndPassRemote(); return gamepad_provider_factory_receiver_.BindNewPipeAndPassRemote();
} }
mojom::XRCompositorHostPtr OpenXrDevice::BindCompositorHost() { mojo::PendingRemote<mojom::XRCompositorHost>
mojom::XRCompositorHostPtr ret; OpenXrDevice::BindCompositorHost() {
compositor_host_binding_.Bind(mojo::MakeRequest(&ret)); return compositor_host_receiver_.BindNewPipeAndPassRemote();
return ret;
} }
void OpenXrDevice::EnsureRenderLoop() { void OpenXrDevice::EnsureRenderLoop() {
......
...@@ -37,7 +37,7 @@ class DEVICE_VR_EXPORT OpenXrDevice ...@@ -37,7 +37,7 @@ class DEVICE_VR_EXPORT OpenXrDevice
mojo::PendingRemote<mojom::IsolatedXRGamepadProviderFactory> mojo::PendingRemote<mojom::IsolatedXRGamepadProviderFactory>
BindGamepadFactory(); BindGamepadFactory();
mojom::XRCompositorHostPtr BindCompositorHost(); mojo::PendingRemote<mojom::XRCompositorHost> BindCompositorHost();
private: private:
// XRSessionController // XRSessionController
...@@ -68,7 +68,7 @@ class DEVICE_VR_EXPORT OpenXrDevice ...@@ -68,7 +68,7 @@ class DEVICE_VR_EXPORT OpenXrDevice
gamepad_provider_factory_receiver_{this}; gamepad_provider_factory_receiver_{this};
mojo::PendingReceiver<mojom::IsolatedXRGamepadProvider> provider_receiver_; mojo::PendingReceiver<mojom::IsolatedXRGamepadProvider> provider_receiver_;
mojo::Binding<mojom::XRCompositorHost> compositor_host_binding_; mojo::Receiver<mojom::XRCompositorHost> compositor_host_receiver_{this};
mojo::PendingReceiver<mojom::ImmersiveOverlay> overlay_receiver_; mojo::PendingReceiver<mojom::ImmersiveOverlay> overlay_receiver_;
base::WeakPtrFactory<OpenXrDevice> weak_ptr_factory_; base::WeakPtrFactory<OpenXrDevice> weak_ptr_factory_;
......
...@@ -199,7 +199,7 @@ interface IsolatedXRRuntimeProviderClient { ...@@ -199,7 +199,7 @@ interface IsolatedXRRuntimeProviderClient {
// attached and become available. // attached and become available.
OnDeviceAdded(XRRuntime runtime, OnDeviceAdded(XRRuntime runtime,
pending_remote<IsolatedXRGamepadProviderFactory> gamepad_factory, pending_remote<IsolatedXRGamepadProviderFactory> gamepad_factory,
XRCompositorHost compositor_host, pending_remote<XRCompositorHost> compositor_host,
device.mojom.XRDeviceId device_id); device.mojom.XRDeviceId device_id);
// Called when runtimes become unavailable - for example if the hardware is // Called when runtimes become unavailable - for example if the hardware is
......
...@@ -62,8 +62,7 @@ mojom::VRDisplayInfoPtr CreateFakeVRDisplayInfo(device::mojom::XRDeviceId id) { ...@@ -62,8 +62,7 @@ mojom::VRDisplayInfoPtr CreateFakeVRDisplayInfo(device::mojom::XRDeviceId id) {
} // namespace } // namespace
MixedRealityDevice::MixedRealityDevice() MixedRealityDevice::MixedRealityDevice()
: VRDeviceBase(device::mojom::XRDeviceId::WINDOWS_MIXED_REALITY_ID), : VRDeviceBase(device::mojom::XRDeviceId::WINDOWS_MIXED_REALITY_ID) {
compositor_host_binding_(this) {
SetVRDisplayInfo(CreateFakeVRDisplayInfo(GetId())); SetVRDisplayInfo(CreateFakeVRDisplayInfo(GetId()));
} }
...@@ -76,10 +75,9 @@ MixedRealityDevice::BindGamepadFactory() { ...@@ -76,10 +75,9 @@ MixedRealityDevice::BindGamepadFactory() {
return gamepad_provider_factory_receiver_.BindNewPipeAndPassRemote(); return gamepad_provider_factory_receiver_.BindNewPipeAndPassRemote();
} }
mojom::XRCompositorHostPtr MixedRealityDevice::BindCompositorHost() { mojo::PendingRemote<mojom::XRCompositorHost>
mojom::XRCompositorHostPtr ret; MixedRealityDevice::BindCompositorHost() {
compositor_host_binding_.Bind(mojo::MakeRequest(&ret)); return compositor_host_receiver_.BindNewPipeAndPassRemote();
return ret;
} }
void MixedRealityDevice::RequestSession( void MixedRealityDevice::RequestSession(
......
...@@ -13,7 +13,6 @@ ...@@ -13,7 +13,6 @@
#include "device/vr/public/mojom/vr_service.mojom.h" #include "device/vr/public/mojom/vr_service.mojom.h"
#include "device/vr/vr_device_base.h" #include "device/vr/vr_device_base.h"
#include "device/vr/windows/compositor_base.h" #include "device/vr/windows/compositor_base.h"
#include "mojo/public/cpp/bindings/binding.h"
#include "mojo/public/cpp/bindings/pending_receiver.h" #include "mojo/public/cpp/bindings/pending_receiver.h"
#include "mojo/public/cpp/bindings/pending_remote.h" #include "mojo/public/cpp/bindings/pending_remote.h"
#include "mojo/public/cpp/bindings/receiver.h" #include "mojo/public/cpp/bindings/receiver.h"
...@@ -31,7 +30,7 @@ class DEVICE_VR_EXPORT MixedRealityDevice ...@@ -31,7 +30,7 @@ class DEVICE_VR_EXPORT MixedRealityDevice
mojo::PendingRemote<mojom::IsolatedXRGamepadProviderFactory> mojo::PendingRemote<mojom::IsolatedXRGamepadProviderFactory>
BindGamepadFactory(); BindGamepadFactory();
mojom::XRCompositorHostPtr BindCompositorHost(); mojo::PendingRemote<mojom::XRCompositorHost> BindCompositorHost();
private: private:
// VRDeviceBase // VRDeviceBase
...@@ -65,7 +64,7 @@ class DEVICE_VR_EXPORT MixedRealityDevice ...@@ -65,7 +64,7 @@ class DEVICE_VR_EXPORT MixedRealityDevice
gamepad_provider_factory_receiver_{this}; gamepad_provider_factory_receiver_{this};
mojo::PendingReceiver<mojom::IsolatedXRGamepadProvider> provider_receiver_; mojo::PendingReceiver<mojom::IsolatedXRGamepadProvider> provider_receiver_;
mojo::Binding<mojom::XRCompositorHost> compositor_host_binding_; mojo::Receiver<mojom::XRCompositorHost> compositor_host_receiver_{this};
mojo::PendingReceiver<mojom::ImmersiveOverlay> overlay_receiver_; mojo::PendingReceiver<mojom::ImmersiveOverlay> overlay_receiver_;
mojo::Receiver<mojom::XRSessionController> exclusive_controller_receiver_{ mojo::Receiver<mojom::XRSessionController> exclusive_controller_receiver_{
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment