Commit ca3f8ba0 authored by Miyoung Shin's avatar Miyoung Shin Committed by Commit Bot

Convert IsolatedXRGamepadProvider to new Mojo types

This CL converts IsolatedXRGamepadProvider{Ptr, Request} in device
to the new Mojo type, and use
pending_receiver<IsolatedXRGamepadProvider> in
isolated_xr_service.mojom.

Bug: 955171
Change-Id: Ib42d1a7f36c748849bbab5f058fbe7f2c0d129e1
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1847531Reviewed-by: default avatarSam McNally <sammc@chromium.org>
Reviewed-by: default avatarPiotr Bialecki <bialpio@chromium.org>
Reviewed-by: default avatarKen Rockot <rockot@google.com>
Commit-Queue: Miyoung Shin <myid.shin@igalia.com>
Cr-Commit-Position: refs/heads/master@{#704439}
parent 4636233c
...@@ -77,8 +77,9 @@ IsolatedGamepadDataFetcher::Factory::~Factory() {} ...@@ -77,8 +77,9 @@ IsolatedGamepadDataFetcher::Factory::~Factory() {}
std::unique_ptr<GamepadDataFetcher> std::unique_ptr<GamepadDataFetcher>
IsolatedGamepadDataFetcher::Factory::CreateDataFetcher() { IsolatedGamepadDataFetcher::Factory::CreateDataFetcher() {
device::mojom::IsolatedXRGamepadProviderPtr provider; mojo::PendingRemote<device::mojom::IsolatedXRGamepadProvider> provider;
factory_->GetIsolatedXRGamepadProvider(mojo::MakeRequest(&provider)); factory_->GetIsolatedXRGamepadProvider(
provider.InitWithNewPipeAndPassReceiver());
return std::make_unique<IsolatedGamepadDataFetcher>(display_id_, return std::make_unique<IsolatedGamepadDataFetcher>(display_id_,
std::move(provider)); std::move(provider));
} }
...@@ -89,11 +90,11 @@ GamepadSource IsolatedGamepadDataFetcher::Factory::source() { ...@@ -89,11 +90,11 @@ GamepadSource IsolatedGamepadDataFetcher::Factory::source() {
IsolatedGamepadDataFetcher::IsolatedGamepadDataFetcher( IsolatedGamepadDataFetcher::IsolatedGamepadDataFetcher(
device::mojom::XRDeviceId display_id, device::mojom::XRDeviceId display_id,
device::mojom::IsolatedXRGamepadProviderPtr provider) mojo::PendingRemote<device::mojom::IsolatedXRGamepadProvider> provider)
: display_id_(display_id) { : display_id_(display_id) {
// We bind provider_ on the poling thread, but we're created on the main UI // We bind provider_ on the poling thread, but we're created on the main UI
// thread. // thread.
provider_info_ = provider.PassInterface(); pending_provider_ = std::move(provider);
} }
IsolatedGamepadDataFetcher::~IsolatedGamepadDataFetcher() = default; IsolatedGamepadDataFetcher::~IsolatedGamepadDataFetcher() = default;
...@@ -162,8 +163,8 @@ GamepadPose GamepadPoseFromXRPose(device::mojom::VRPose* pose) { ...@@ -162,8 +163,8 @@ GamepadPose GamepadPoseFromXRPose(device::mojom::VRPose* pose) {
} }
void IsolatedGamepadDataFetcher::GetGamepadData(bool devices_changed_hint) { void IsolatedGamepadDataFetcher::GetGamepadData(bool devices_changed_hint) {
if (!provider_ && provider_info_) { if (!provider_ && pending_provider_) {
provider_.Bind(std::move(provider_info_)); provider_.Bind(std::move(pending_provider_));
} }
// If we don't have a provider, we can't give out data. // If we don't have a provider, we can't give out data.
......
...@@ -8,6 +8,8 @@ ...@@ -8,6 +8,8 @@
#include "device/gamepad/gamepad_data_fetcher.h" #include "device/gamepad/gamepad_data_fetcher.h"
#include "device/vr/public/mojom/isolated_xr_service.mojom.h" #include "device/vr/public/mojom/isolated_xr_service.mojom.h"
#include "device/vr/vr_device.h" #include "device/vr/vr_device.h"
#include "mojo/public/cpp/bindings/pending_remote.h"
#include "mojo/public/cpp/bindings/remote.h"
namespace device { namespace device {
...@@ -33,7 +35,7 @@ class IsolatedGamepadDataFetcher : public GamepadDataFetcher { ...@@ -33,7 +35,7 @@ class IsolatedGamepadDataFetcher : public GamepadDataFetcher {
IsolatedGamepadDataFetcher( IsolatedGamepadDataFetcher(
device::mojom::XRDeviceId display_id, device::mojom::XRDeviceId display_id,
device::mojom::IsolatedXRGamepadProviderPtr provider); mojo::PendingRemote<device::mojom::IsolatedXRGamepadProvider> provider);
~IsolatedGamepadDataFetcher() override; ~IsolatedGamepadDataFetcher() override;
GamepadSource source() override; GamepadSource source() override;
...@@ -49,10 +51,10 @@ class IsolatedGamepadDataFetcher : public GamepadDataFetcher { ...@@ -49,10 +51,10 @@ class IsolatedGamepadDataFetcher : public GamepadDataFetcher {
bool have_outstanding_request_ = false; bool have_outstanding_request_ = false;
std::set<unsigned int> active_gamepads_; std::set<unsigned int> active_gamepads_;
device::mojom::XRGamepadDataPtr data_; device::mojom::XRGamepadDataPtr data_;
device::mojom::IsolatedXRGamepadProviderPtr mojo::Remote<device::mojom::IsolatedXRGamepadProvider>
provider_; // Bound on the polling thread. provider_; // Bound on the polling thread.
device::mojom::IsolatedXRGamepadProviderPtrInfo mojo::PendingRemote<device::mojom::IsolatedXRGamepadProvider>
provider_info_; // Received on the UI thread, bound when polled. pending_provider_; // Received on the UI thread, bound when polled.
DISALLOW_COPY_AND_ASSIGN(IsolatedGamepadDataFetcher); DISALLOW_COPY_AND_ASSIGN(IsolatedGamepadDataFetcher);
}; };
......
...@@ -154,13 +154,13 @@ void OculusDevice::RequestSession( ...@@ -154,13 +154,13 @@ void OculusDevice::RequestSession(
return; return;
} }
// If we have a pending gamepad provider request when starting the render // If we have a pending gamepad provider receiver when starting the render
// loop, post the request over to the render loop to be bound. // loop, post the receiver over to the render loop to be bound.
if (provider_request_) { if (provider_receiver_) {
render_loop_->task_runner()->PostTask( render_loop_->task_runner()->PostTask(
FROM_HERE, base::BindOnce(&XRCompositorCommon::RequestGamepadProvider, FROM_HERE, base::BindOnce(&XRCompositorCommon::RequestGamepadProvider,
base::Unretained(render_loop_.get()), base::Unretained(render_loop_.get()),
std::move(provider_request_))); std::move(provider_receiver_)));
} }
if (overlay_request_) { if (overlay_request_) {
...@@ -290,18 +290,18 @@ void OculusDevice::StopOvrSession() { ...@@ -290,18 +290,18 @@ void OculusDevice::StopOvrSession() {
} }
void OculusDevice::GetIsolatedXRGamepadProvider( void OculusDevice::GetIsolatedXRGamepadProvider(
mojom::IsolatedXRGamepadProviderRequest provider_request) { mojo::PendingReceiver<mojom::IsolatedXRGamepadProvider> provider_receiver) {
// We bind the provider_request on the render loop thread, so gamepad data is // We bind the provider_receiver on the render loop thread, so gamepad data is
// updated at the rendering rate. // updated at the rendering rate.
// If we haven't started the render loop yet, postpone binding the request // If we haven't started the render loop yet, postpone binding the receiver
// until we do. // until we do.
if (render_loop_->IsRunning()) { if (render_loop_->IsRunning()) {
render_loop_->task_runner()->PostTask( render_loop_->task_runner()->PostTask(
FROM_HERE, base::BindOnce(&XRCompositorCommon::RequestGamepadProvider, FROM_HERE, base::BindOnce(&XRCompositorCommon::RequestGamepadProvider,
base::Unretained(render_loop_.get()), base::Unretained(render_loop_.get()),
std::move(provider_request))); std::move(provider_receiver)));
} else { } else {
provider_request_ = std::move(provider_request); provider_receiver_ = std::move(provider_receiver);
} }
} }
......
...@@ -12,6 +12,7 @@ ...@@ -12,6 +12,7 @@
#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/binding.h"
#include "mojo/public/cpp/bindings/pending_receiver.h"
#include "third_party/libovr/src/Include/OVR_CAPI.h" #include "third_party/libovr/src/Include/OVR_CAPI.h"
namespace device { namespace device {
...@@ -52,7 +53,8 @@ class DEVICE_VR_EXPORT OculusDevice ...@@ -52,7 +53,8 @@ class DEVICE_VR_EXPORT OculusDevice
// mojom::IsolatedXRGamepadProviderFactory // mojom::IsolatedXRGamepadProviderFactory
void GetIsolatedXRGamepadProvider( void GetIsolatedXRGamepadProvider(
mojom::IsolatedXRGamepadProviderRequest provider_request) override; mojo::PendingReceiver<mojom::IsolatedXRGamepadProvider> provider_receiver)
override;
// XRCompositorHost // XRCompositorHost
void CreateImmersiveOverlay( void CreateImmersiveOverlay(
...@@ -72,7 +74,7 @@ class DEVICE_VR_EXPORT OculusDevice ...@@ -72,7 +74,7 @@ class DEVICE_VR_EXPORT OculusDevice
mojo::Binding<mojom::XRSessionController> exclusive_controller_binding_; mojo::Binding<mojom::XRSessionController> exclusive_controller_binding_;
mojo::Binding<mojom::IsolatedXRGamepadProviderFactory> mojo::Binding<mojom::IsolatedXRGamepadProviderFactory>
gamepad_provider_factory_binding_; gamepad_provider_factory_binding_;
mojom::IsolatedXRGamepadProviderRequest provider_request_; mojo::PendingReceiver<mojom::IsolatedXRGamepadProvider> provider_receiver_;
mojo::Binding<mojom::XRCompositorHost> compositor_host_binding_; mojo::Binding<mojom::XRCompositorHost> compositor_host_binding_;
mojom::ImmersiveOverlayRequest overlay_request_; mojom::ImmersiveOverlayRequest overlay_request_;
......
...@@ -181,11 +181,11 @@ void OpenVRDevice::RequestSession( ...@@ -181,11 +181,11 @@ void OpenVRDevice::RequestSession(
return; return;
} }
if (provider_request_) { if (provider_receiver_) {
render_loop_->task_runner()->PostTask( render_loop_->task_runner()->PostTask(
FROM_HERE, base::BindOnce(&XRCompositorCommon::RequestGamepadProvider, FROM_HERE, base::BindOnce(&XRCompositorCommon::RequestGamepadProvider,
base::Unretained(render_loop_.get()), base::Unretained(render_loop_.get()),
std::move(provider_request_))); std::move(provider_receiver_)));
} }
if (overlay_request_) { if (overlay_request_) {
...@@ -280,14 +280,14 @@ bool OpenVRDevice::IsAvailable() { ...@@ -280,14 +280,14 @@ bool OpenVRDevice::IsAvailable() {
} }
void OpenVRDevice::GetIsolatedXRGamepadProvider( void OpenVRDevice::GetIsolatedXRGamepadProvider(
mojom::IsolatedXRGamepadProviderRequest provider_request) { mojo::PendingReceiver<mojom::IsolatedXRGamepadProvider> provider_receiver) {
if (render_loop_->IsRunning()) { if (render_loop_->IsRunning()) {
render_loop_->task_runner()->PostTask( render_loop_->task_runner()->PostTask(
FROM_HERE, base::BindOnce(&XRCompositorCommon::RequestGamepadProvider, FROM_HERE, base::BindOnce(&XRCompositorCommon::RequestGamepadProvider,
base::Unretained(render_loop_.get()), base::Unretained(render_loop_.get()),
std::move(provider_request))); std::move(provider_receiver)));
} else { } else {
provider_request_ = std::move(provider_request); provider_receiver_ = std::move(provider_receiver);
} }
} }
......
...@@ -13,6 +13,7 @@ ...@@ -13,6 +13,7 @@
#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/binding.h"
#include "mojo/public/cpp/bindings/pending_receiver.h"
namespace device { namespace device {
...@@ -56,7 +57,8 @@ class DEVICE_VR_EXPORT OpenVRDevice ...@@ -56,7 +57,8 @@ class DEVICE_VR_EXPORT OpenVRDevice
// mojom::IsolatedXRGamepadProviderFactory // mojom::IsolatedXRGamepadProviderFactory
void GetIsolatedXRGamepadProvider( void GetIsolatedXRGamepadProvider(
mojom::IsolatedXRGamepadProviderRequest provider_request) override; mojo::PendingReceiver<mojom::IsolatedXRGamepadProvider> provider_receiver)
override;
// XRCompositorHost // XRCompositorHost
void CreateImmersiveOverlay( void CreateImmersiveOverlay(
...@@ -76,7 +78,7 @@ class DEVICE_VR_EXPORT OpenVRDevice ...@@ -76,7 +78,7 @@ class DEVICE_VR_EXPORT OpenVRDevice
mojo::Binding<mojom::IsolatedXRGamepadProviderFactory> mojo::Binding<mojom::IsolatedXRGamepadProviderFactory>
gamepad_provider_factory_binding_; gamepad_provider_factory_binding_;
mojom::IsolatedXRGamepadProviderRequest provider_request_; mojo::PendingReceiver<mojom::IsolatedXRGamepadProvider> provider_receiver_;
mojo::Binding<mojom::XRCompositorHost> compositor_host_binding_; mojo::Binding<mojom::XRCompositorHost> compositor_host_binding_;
mojom::ImmersiveOverlayRequest overlay_request_; mojom::ImmersiveOverlayRequest overlay_request_;
......
...@@ -136,11 +136,11 @@ void OpenXrDevice::RequestSession( ...@@ -136,11 +136,11 @@ void OpenXrDevice::RequestSession(
return; return;
} }
if (provider_request_) { if (provider_receiver_) {
render_loop_->task_runner()->PostTask( render_loop_->task_runner()->PostTask(
FROM_HERE, base::BindOnce(&XRCompositorCommon::RequestGamepadProvider, FROM_HERE, base::BindOnce(&XRCompositorCommon::RequestGamepadProvider,
base::Unretained(render_loop_.get()), base::Unretained(render_loop_.get()),
std::move(provider_request_))); std::move(provider_receiver_)));
} }
if (overlay_request_) { if (overlay_request_) {
...@@ -217,15 +217,15 @@ void OpenXrDevice::SetFrameDataRestricted(bool restricted) { ...@@ -217,15 +217,15 @@ void OpenXrDevice::SetFrameDataRestricted(bool restricted) {
} }
void OpenXrDevice::GetIsolatedXRGamepadProvider( void OpenXrDevice::GetIsolatedXRGamepadProvider(
mojom::IsolatedXRGamepadProviderRequest provider_request) { mojo::PendingReceiver<mojom::IsolatedXRGamepadProvider> provider_receiver) {
EnsureRenderLoop(); EnsureRenderLoop();
if (render_loop_->IsRunning()) { if (render_loop_->IsRunning()) {
render_loop_->task_runner()->PostTask( render_loop_->task_runner()->PostTask(
FROM_HERE, base::BindOnce(&XRCompositorCommon::RequestGamepadProvider, FROM_HERE, base::BindOnce(&XRCompositorCommon::RequestGamepadProvider,
base::Unretained(render_loop_.get()), base::Unretained(render_loop_.get()),
std::move(provider_request))); std::move(provider_receiver)));
} else { } else {
provider_request_ = std::move(provider_request); provider_receiver_ = std::move(provider_receiver);
} }
} }
......
...@@ -10,6 +10,7 @@ ...@@ -10,6 +10,7 @@
#include "base/macros.h" #include "base/macros.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/pending_receiver.h"
namespace device { namespace device {
...@@ -41,7 +42,8 @@ class DEVICE_VR_EXPORT OpenXrDevice ...@@ -41,7 +42,8 @@ class DEVICE_VR_EXPORT OpenXrDevice
// mojom::IsolatedXRGamepadProviderFactory // mojom::IsolatedXRGamepadProviderFactory
void GetIsolatedXRGamepadProvider( void GetIsolatedXRGamepadProvider(
mojom::IsolatedXRGamepadProviderRequest provider_request) override; mojo::PendingReceiver<mojom::IsolatedXRGamepadProvider> provider_receiver)
override;
// XRCompositorHost // XRCompositorHost
void CreateImmersiveOverlay( void CreateImmersiveOverlay(
...@@ -60,7 +62,7 @@ class DEVICE_VR_EXPORT OpenXrDevice ...@@ -60,7 +62,7 @@ class DEVICE_VR_EXPORT OpenXrDevice
mojo::Binding<mojom::IsolatedXRGamepadProviderFactory> mojo::Binding<mojom::IsolatedXRGamepadProviderFactory>
gamepad_provider_factory_binding_; gamepad_provider_factory_binding_;
mojom::IsolatedXRGamepadProviderRequest provider_request_; mojo::PendingReceiver<mojom::IsolatedXRGamepadProvider> provider_receiver_;
mojo::Binding<mojom::XRCompositorHost> compositor_host_binding_; mojo::Binding<mojom::XRCompositorHost> compositor_host_binding_;
mojom::ImmersiveOverlayRequest overlay_request_; mojom::ImmersiveOverlayRequest overlay_request_;
......
...@@ -153,7 +153,8 @@ interface IsolatedXRGamepadProviderFactory { ...@@ -153,7 +153,8 @@ interface IsolatedXRGamepadProviderFactory {
// Get the IsolatedXRGamepadProvider for a specific XR runtime API (Oculus, or // Get the IsolatedXRGamepadProvider for a specific XR runtime API (Oculus, or
// OpenVR, which are currently the only two that are hosted outside of the // OpenVR, which are currently the only two that are hosted outside of the
// browser process). // browser process).
GetIsolatedXRGamepadProvider(IsolatedXRGamepadProvider& provider); GetIsolatedXRGamepadProvider(
pending_receiver<IsolatedXRGamepadProvider> provider);
}; };
// Represents an overlay that the browser may show on top of or instead of WebXR // Represents an overlay that the browser may show on top of or instead of WebXR
......
...@@ -45,7 +45,6 @@ XRCompositorCommon::XRCompositorCommon() ...@@ -45,7 +45,6 @@ XRCompositorCommon::XRCompositorCommon()
main_thread_task_runner_(base::ThreadTaskRunnerHandle::Get()), main_thread_task_runner_(base::ThreadTaskRunnerHandle::Get()),
webxr_js_time_(kSlidingAverageSize), webxr_js_time_(kSlidingAverageSize),
webxr_gpu_time_(kSlidingAverageSize), webxr_gpu_time_(kSlidingAverageSize),
gamepad_provider_(this),
overlay_binding_(this) { overlay_binding_(this) {
DCHECK(main_thread_task_runner_); DCHECK(main_thread_task_runner_);
} }
...@@ -138,16 +137,16 @@ void XRCompositorCommon::CleanUp() { ...@@ -138,16 +137,16 @@ void XRCompositorCommon::CleanUp() {
webxr_has_pose_ = false; webxr_has_pose_ = false;
presentation_receiver_.reset(); presentation_receiver_.reset();
frame_data_receiver_.reset(); frame_data_receiver_.reset();
gamepad_provider_.Close(); gamepad_provider_receiver_.reset();
overlay_binding_.Close(); overlay_binding_.Close();
input_event_listener_ = nullptr; input_event_listener_ = nullptr;
StopRuntime(); StopRuntime();
} }
void XRCompositorCommon::RequestGamepadProvider( void XRCompositorCommon::RequestGamepadProvider(
mojom::IsolatedXRGamepadProviderRequest request) { mojo::PendingReceiver<mojom::IsolatedXRGamepadProvider> receiver) {
gamepad_provider_.Close(); gamepad_provider_receiver_.reset();
gamepad_provider_.Bind(std::move(request)); gamepad_provider_receiver_.Bind(std::move(receiver));
} }
void XRCompositorCommon::RequestOverlay( void XRCompositorCommon::RequestOverlay(
......
...@@ -14,6 +14,7 @@ ...@@ -14,6 +14,7 @@
#include "device/vr/util/sliding_average.h" #include "device/vr/util/sliding_average.h"
#include "device/vr/vr_device.h" #include "device/vr/vr_device.h"
#include "mojo/public/cpp/bindings/binding.h" #include "mojo/public/cpp/bindings/binding.h"
#include "mojo/public/cpp/bindings/pending_receiver.h"
#include "mojo/public/cpp/bindings/receiver.h" #include "mojo/public/cpp/bindings/receiver.h"
#include "mojo/public/cpp/bindings/remote.h" #include "mojo/public/cpp/bindings/remote.h"
#include "mojo/public/cpp/system/platform_handle.h" #include "mojo/public/cpp/system/platform_handle.h"
...@@ -76,7 +77,8 @@ class XRCompositorCommon : public base::Thread, ...@@ -76,7 +77,8 @@ class XRCompositorCommon : public base::Thread,
device::mojom::XREnvironmentIntegrationProviderAssociatedRequest device::mojom::XREnvironmentIntegrationProviderAssociatedRequest
environment_provider) final; environment_provider) final;
void RequestGamepadProvider(mojom::IsolatedXRGamepadProviderRequest request); void RequestGamepadProvider(
mojo::PendingReceiver<mojom::IsolatedXRGamepadProvider> receiver);
void RequestOverlay(mojom::ImmersiveOverlayRequest request); void RequestOverlay(mojom::ImmersiveOverlayRequest request);
protected: protected:
...@@ -181,7 +183,8 @@ class XRCompositorCommon : public base::Thread, ...@@ -181,7 +183,8 @@ class XRCompositorCommon : public base::Thread,
mojom::IsolatedXRGamepadProvider::RequestUpdateCallback gamepad_callback_; mojom::IsolatedXRGamepadProvider::RequestUpdateCallback gamepad_callback_;
mojo::Receiver<mojom::XRPresentationProvider> presentation_receiver_{this}; mojo::Receiver<mojom::XRPresentationProvider> presentation_receiver_{this};
mojo::Receiver<mojom::XRFrameDataProvider> frame_data_receiver_{this}; mojo::Receiver<mojom::XRFrameDataProvider> frame_data_receiver_{this};
mojo::Binding<mojom::IsolatedXRGamepadProvider> gamepad_provider_; mojo::Receiver<mojom::IsolatedXRGamepadProvider> gamepad_provider_receiver_{
this};
mojo::Binding<mojom::ImmersiveOverlay> overlay_binding_; mojo::Binding<mojom::ImmersiveOverlay> overlay_binding_;
mojom::XRVisibilityState visibility_state_ = mojom::XRVisibilityState visibility_state_ =
mojom::XRVisibilityState::VISIBLE; mojom::XRVisibilityState::VISIBLE;
......
...@@ -108,11 +108,11 @@ void MixedRealityDevice::RequestSession( ...@@ -108,11 +108,11 @@ void MixedRealityDevice::RequestSession(
return; return;
} }
if (provider_request_) { if (provider_receiver_) {
render_loop_->task_runner()->PostTask( render_loop_->task_runner()->PostTask(
FROM_HERE, base::BindOnce(&XRCompositorCommon::RequestGamepadProvider, FROM_HERE, base::BindOnce(&XRCompositorCommon::RequestGamepadProvider,
base::Unretained(render_loop_.get()), base::Unretained(render_loop_.get()),
std::move(provider_request_))); std::move(provider_receiver_)));
} }
if (overlay_request_) { if (overlay_request_) {
...@@ -184,16 +184,16 @@ void MixedRealityDevice::OnRequestSessionResult( ...@@ -184,16 +184,16 @@ void MixedRealityDevice::OnRequestSessionResult(
} }
void MixedRealityDevice::GetIsolatedXRGamepadProvider( void MixedRealityDevice::GetIsolatedXRGamepadProvider(
mojom::IsolatedXRGamepadProviderRequest provider_request) { mojo::PendingReceiver<mojom::IsolatedXRGamepadProvider> provider_receiver) {
if (!render_loop_) if (!render_loop_)
CreateRenderLoop(); CreateRenderLoop();
if (render_loop_->IsRunning()) { if (render_loop_->IsRunning()) {
render_loop_->task_runner()->PostTask( render_loop_->task_runner()->PostTask(
FROM_HERE, base::BindOnce(&XRCompositorCommon::RequestGamepadProvider, FROM_HERE, base::BindOnce(&XRCompositorCommon::RequestGamepadProvider,
base::Unretained(render_loop_.get()), base::Unretained(render_loop_.get()),
std::move(provider_request))); std::move(provider_receiver)));
} else { } else {
provider_request_ = std::move(provider_request); provider_receiver_ = std::move(provider_receiver);
} }
} }
......
...@@ -14,6 +14,7 @@ ...@@ -14,6 +14,7 @@
#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/binding.h"
#include "mojo/public/cpp/bindings/pending_receiver.h"
namespace device { namespace device {
...@@ -40,7 +41,8 @@ class DEVICE_VR_EXPORT MixedRealityDevice ...@@ -40,7 +41,8 @@ class DEVICE_VR_EXPORT MixedRealityDevice
// mojom::IsolatedXRGamepadProviderFactory // mojom::IsolatedXRGamepadProviderFactory
void GetIsolatedXRGamepadProvider( void GetIsolatedXRGamepadProvider(
mojom::IsolatedXRGamepadProviderRequest provider_request) override; mojo::PendingReceiver<mojom::IsolatedXRGamepadProvider> provider_receiver)
override;
// XRCompositorHost // XRCompositorHost
void CreateImmersiveOverlay( void CreateImmersiveOverlay(
...@@ -58,7 +60,7 @@ class DEVICE_VR_EXPORT MixedRealityDevice ...@@ -58,7 +60,7 @@ class DEVICE_VR_EXPORT MixedRealityDevice
mojo::Binding<mojom::IsolatedXRGamepadProviderFactory> mojo::Binding<mojom::IsolatedXRGamepadProviderFactory>
gamepad_provider_factory_binding_; gamepad_provider_factory_binding_;
mojom::IsolatedXRGamepadProviderRequest provider_request_; mojo::PendingReceiver<mojom::IsolatedXRGamepadProvider> provider_receiver_;
mojo::Binding<mojom::XRCompositorHost> compositor_host_binding_; mojo::Binding<mojom::XRCompositorHost> compositor_host_binding_;
mojom::ImmersiveOverlayRequest overlay_request_; mojom::ImmersiveOverlayRequest overlay_request_;
......
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