Commit 62e0243a authored by Miyoung Shin's avatar Miyoung Shin Committed by Commit Bot

Convert XRPresentationProvider to new Mojo types

This CL converts XRPresentationProvider{Ptr, Request} in chrome,
device and blink to the new Mojo type, and uses
pending_remote<XRPresentationProvider> in vr_service.mojom.

Bug: 955171, 978694
Change-Id: Ie24ea65e18797f6371e6ddd79618044260e646c1
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1828758
Commit-Queue: Miyoung Shin <myid.shin@igalia.com>
Reviewed-by: default avatarKen Rockot <rockot@google.com>
Reviewed-by: default avatarSam McNally <sammc@chromium.org>
Reviewed-by: default avatarPiotr Bialecki <bialpio@chromium.org>
Reviewed-by: default avatarBrandon Jones <bajones@chromium.org>
Reviewed-by: default avatarKlaus Weidner <klausw@chromium.org>
Cr-Commit-Position: refs/heads/master@{#702376}
parent 84e1cd80
...@@ -105,8 +105,7 @@ ArCoreGl::ArCoreGl(std::unique_ptr<ArImageTransport> ar_image_transport) ...@@ -105,8 +105,7 @@ ArCoreGl::ArCoreGl(std::unique_ptr<ArImageTransport> ar_image_transport)
ar_image_transport_(std::move(ar_image_transport)), ar_image_transport_(std::move(ar_image_transport)),
webxr_(std::make_unique<vr::WebXrPresentationState>()), webxr_(std::make_unique<vr::WebXrPresentationState>()),
session_controller_binding_(this), session_controller_binding_(this),
environment_binding_(this), environment_binding_(this) {
presentation_binding_(this) {
DVLOG(1) << __func__; DVLOG(1) << __func__;
webxr_transform_ = WebXRImageTransformMatrix(); webxr_transform_ = WebXRImageTransformMatrix();
} }
...@@ -181,9 +180,6 @@ void ArCoreGl::CreateSession(mojom::VRDisplayInfoPtr display_info, ...@@ -181,9 +180,6 @@ void ArCoreGl::CreateSession(mojom::VRDisplayInfoPtr display_info,
session_controller_binding_.set_connection_error_handler(base::BindOnce( session_controller_binding_.set_connection_error_handler(base::BindOnce(
&ArCoreGl::OnBindingDisconnect, weak_ptr_factory_.GetWeakPtr())); &ArCoreGl::OnBindingDisconnect, weak_ptr_factory_.GetWeakPtr()));
device::mojom::XRPresentationProviderPtr presentation_provider;
presentation_binding_.Bind(mojo::MakeRequest(&presentation_provider));
device::mojom::XRPresentationTransportOptionsPtr transport_options = device::mojom::XRPresentationTransportOptionsPtr transport_options =
device::mojom::XRPresentationTransportOptions::New(); device::mojom::XRPresentationTransportOptions::New();
transport_options->wait_for_gpu_fence = true; transport_options->wait_for_gpu_fence = true;
...@@ -198,7 +194,8 @@ void ArCoreGl::CreateSession(mojom::VRDisplayInfoPtr display_info, ...@@ -198,7 +194,8 @@ void ArCoreGl::CreateSession(mojom::VRDisplayInfoPtr display_info,
auto submit_frame_sink = device::mojom::XRPresentationConnection::New(); auto submit_frame_sink = device::mojom::XRPresentationConnection::New();
submit_frame_sink->client_receiver = submit_frame_sink->client_receiver =
submit_client_.BindNewPipeAndPassReceiver(); submit_client_.BindNewPipeAndPassReceiver();
submit_frame_sink->provider = presentation_provider.PassInterface(); submit_frame_sink->provider =
presentation_receiver_.BindNewPipeAndPassRemote();
submit_frame_sink->transport_options = std::move(transport_options); submit_frame_sink->transport_options = std::move(transport_options);
display_info_ = std::move(display_info); display_info_ = std::move(display_info);
...@@ -807,7 +804,7 @@ void ArCoreGl::CloseBindingsIfOpen() { ...@@ -807,7 +804,7 @@ void ArCoreGl::CloseBindingsIfOpen() {
environment_binding_.Close(); environment_binding_.Close();
frame_data_receiver_.reset(); frame_data_receiver_.reset();
session_controller_binding_.Close(); session_controller_binding_.Close();
presentation_binding_.Close(); presentation_receiver_.reset();
} }
bool ArCoreGl::IsOnGlThread() const { bool ArCoreGl::IsOnGlThread() const {
......
...@@ -202,7 +202,8 @@ class ArCoreGl : public mojom::XRFrameDataProvider, ...@@ -202,7 +202,8 @@ class ArCoreGl : public mojom::XRFrameDataProvider,
void OnBindingDisconnect(); void OnBindingDisconnect();
void CloseBindingsIfOpen(); void CloseBindingsIfOpen();
mojo::Binding<device::mojom::XRPresentationProvider> presentation_binding_; mojo::Receiver<device::mojom::XRPresentationProvider> presentation_receiver_{
this};
mojo::Remote<device::mojom::XRPresentationClient> submit_client_; mojo::Remote<device::mojom::XRPresentationClient> submit_client_;
base::OnceClosure pending_getframedata_; base::OnceClosure pending_getframedata_;
......
...@@ -79,7 +79,6 @@ GvrSchedulerDelegate::GvrSchedulerDelegate(GlBrowserInterface* browser, ...@@ -79,7 +79,6 @@ GvrSchedulerDelegate::GvrSchedulerDelegate(GlBrowserInterface* browser,
cardboard_gamepad_(cardboard_gamepad), cardboard_gamepad_(cardboard_gamepad),
vsync_helper_(base::BindRepeating(&GvrSchedulerDelegate::OnVSync, vsync_helper_(base::BindRepeating(&GvrSchedulerDelegate::OnVSync,
base::Unretained(this))), base::Unretained(this))),
presentation_binding_(this),
graphics_(graphics), graphics_(graphics),
webvr_render_time_(sliding_time_size), webvr_render_time_(sliding_time_size),
webvr_js_time_(sliding_time_size), webvr_js_time_(sliding_time_size),
...@@ -168,9 +167,6 @@ void GvrSchedulerDelegate::ConnectPresentingService( ...@@ -168,9 +167,6 @@ void GvrSchedulerDelegate::ConnectPresentingService(
device::mojom::XRRuntimeSessionOptionsPtr options) { device::mojom::XRRuntimeSessionOptionsPtr options) {
ClosePresentationBindings(); ClosePresentationBindings();
device::mojom::XRPresentationProviderPtr presentation_provider;
presentation_binding_.Bind(mojo::MakeRequest(&presentation_provider));
gfx::Size webxr_size(display_info->left_eye->render_width + gfx::Size webxr_size(display_info->left_eye->render_width +
display_info->right_eye->render_width, display_info->right_eye->render_width,
display_info->left_eye->render_height); display_info->left_eye->render_height);
...@@ -195,7 +191,8 @@ void GvrSchedulerDelegate::ConnectPresentingService( ...@@ -195,7 +191,8 @@ void GvrSchedulerDelegate::ConnectPresentingService(
auto submit_frame_sink = device::mojom::XRPresentationConnection::New(); auto submit_frame_sink = device::mojom::XRPresentationConnection::New();
submit_frame_sink->client_receiver = submit_frame_sink->client_receiver =
submit_client_.BindNewPipeAndPassReceiver(); submit_client_.BindNewPipeAndPassReceiver();
submit_frame_sink->provider = presentation_provider.PassInterface(); submit_frame_sink->provider =
presentation_receiver_.BindNewPipeAndPassRemote();
submit_frame_sink->transport_options = std::move(transport_options); submit_frame_sink->transport_options = std::move(transport_options);
auto session = device::mojom::XRSession::New(); auto session = device::mojom::XRSession::New();
...@@ -1064,7 +1061,7 @@ void GvrSchedulerDelegate::ClosePresentationBindings() { ...@@ -1064,7 +1061,7 @@ void GvrSchedulerDelegate::ClosePresentationBindings() {
// the connection is closing. // the connection is closing.
std::move(get_frame_data_callback_).Run(nullptr); std::move(get_frame_data_callback_).Run(nullptr);
} }
presentation_binding_.Close(); presentation_receiver_.reset();
frame_data_receiver_.reset(); frame_data_receiver_.reset();
} }
......
...@@ -20,7 +20,6 @@ ...@@ -20,7 +20,6 @@
#include "chrome/browser/vr/base_scheduler_delegate.h" #include "chrome/browser/vr/base_scheduler_delegate.h"
#include "device/vr/public/mojom/vr_service.mojom.h" #include "device/vr/public/mojom/vr_service.mojom.h"
#include "device/vr/util/sliding_average.h" #include "device/vr/util/sliding_average.h"
#include "mojo/public/cpp/bindings/binding.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 "ui/gfx/transform.h" #include "ui/gfx/transform.h"
...@@ -192,7 +191,8 @@ class GvrSchedulerDelegate : public BaseSchedulerDelegate, ...@@ -192,7 +191,8 @@ class GvrSchedulerDelegate : public BaseSchedulerDelegate,
AndroidVSyncHelper vsync_helper_; AndroidVSyncHelper vsync_helper_;
mojo::Binding<device::mojom::XRPresentationProvider> presentation_binding_; mojo::Receiver<device::mojom::XRPresentationProvider> presentation_receiver_{
this};
mojo::Receiver<device::mojom::XRFrameDataProvider> frame_data_receiver_{this}; mojo::Receiver<device::mojom::XRFrameDataProvider> frame_data_receiver_{this};
std::vector<device::mojom::XRInputSourceStatePtr> input_states_; std::vector<device::mojom::XRInputSourceStatePtr> input_states_;
......
...@@ -107,7 +107,7 @@ struct XRSession { ...@@ -107,7 +107,7 @@ struct XRSession {
// way connection between the renderer and a device to synchronize and submit // way connection between the renderer and a device to synchronize and submit
// frames to a sink outside of Chrome. // frames to a sink outside of Chrome.
struct XRPresentationConnection { struct XRPresentationConnection {
XRPresentationProvider provider; pending_remote<XRPresentationProvider> provider;
pending_receiver<XRPresentationClient> client_receiver; pending_receiver<XRPresentationClient> client_receiver;
XRPresentationTransportOptions transport_options; XRPresentationTransportOptions transport_options;
}; };
......
...@@ -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),
presentation_binding_(this),
gamepad_provider_(this), gamepad_provider_(this),
overlay_binding_(this) { overlay_binding_(this) {
DCHECK(main_thread_task_runner_); DCHECK(main_thread_task_runner_);
...@@ -137,7 +136,7 @@ void XRCompositorCommon::SubmitFrameWithTextureHandle( ...@@ -137,7 +136,7 @@ void XRCompositorCommon::SubmitFrameWithTextureHandle(
void XRCompositorCommon::CleanUp() { void XRCompositorCommon::CleanUp() {
submit_client_.reset(); submit_client_.reset();
webxr_has_pose_ = false; webxr_has_pose_ = false;
presentation_binding_.Close(); presentation_receiver_.reset();
frame_data_receiver_.reset(); frame_data_receiver_.reset();
gamepad_provider_.Close(); gamepad_provider_.Close();
overlay_binding_.Close(); overlay_binding_.Close();
...@@ -197,7 +196,7 @@ void XRCompositorCommon::RequestSession( ...@@ -197,7 +196,7 @@ void XRCompositorCommon::RequestSession(
RequestSessionCallback callback) { RequestSessionCallback callback) {
DCHECK(options->immersive); DCHECK(options->immersive);
webxr_has_pose_ = false; webxr_has_pose_ = false;
presentation_binding_.Close(); presentation_receiver_.reset();
frame_data_receiver_.reset(); frame_data_receiver_.reset();
if (!StartRuntime()) { if (!StartRuntime()) {
...@@ -216,9 +215,6 @@ void XRCompositorCommon::RequestSession( ...@@ -216,9 +215,6 @@ void XRCompositorCommon::RequestSession(
on_visibility_state_changed_ = std::move(on_visibility_state_changed); on_visibility_state_changed_ = std::move(on_visibility_state_changed);
device::mojom::XRPresentationProviderPtr presentation_provider;
presentation_binding_.Bind(mojo::MakeRequest(&presentation_provider));
device::mojom::XRPresentationTransportOptionsPtr transport_options = device::mojom::XRPresentationTransportOptionsPtr transport_options =
device::mojom::XRPresentationTransportOptions::New(); device::mojom::XRPresentationTransportOptions::New();
transport_options->transport_method = transport_options->transport_method =
...@@ -230,7 +226,8 @@ void XRCompositorCommon::RequestSession( ...@@ -230,7 +226,8 @@ void XRCompositorCommon::RequestSession(
OnSessionStart(); OnSessionStart();
auto submit_frame_sink = device::mojom::XRPresentationConnection::New(); auto submit_frame_sink = device::mojom::XRPresentationConnection::New();
submit_frame_sink->provider = presentation_provider.PassInterface(); submit_frame_sink->provider =
presentation_receiver_.BindNewPipeAndPassRemote();
submit_frame_sink->client_receiver = submit_frame_sink->client_receiver =
submit_client_.BindNewPipeAndPassReceiver(); submit_client_.BindNewPipeAndPassReceiver();
submit_frame_sink->transport_options = std::move(transport_options); submit_frame_sink->transport_options = std::move(transport_options);
...@@ -251,7 +248,7 @@ void XRCompositorCommon::ExitPresent() { ...@@ -251,7 +248,7 @@ void XRCompositorCommon::ExitPresent() {
TRACE_EVENT_INSTANT0("xr", "ExitPresent", TRACE_EVENT_SCOPE_THREAD); TRACE_EVENT_INSTANT0("xr", "ExitPresent", TRACE_EVENT_SCOPE_THREAD);
is_presenting_ = false; is_presenting_ = false;
webxr_has_pose_ = false; webxr_has_pose_ = false;
presentation_binding_.Close(); presentation_receiver_.reset();
frame_data_receiver_.reset(); frame_data_receiver_.reset();
submit_client_.reset(); submit_client_.reset();
StopRuntime(); StopRuntime();
......
...@@ -179,7 +179,7 @@ class XRCompositorCommon : public base::Thread, ...@@ -179,7 +179,7 @@ class XRCompositorCommon : public base::Thread,
base::RepeatingCallback<void(mojom::XRVisibilityState)> base::RepeatingCallback<void(mojom::XRVisibilityState)>
on_visibility_state_changed_; on_visibility_state_changed_;
mojom::IsolatedXRGamepadProvider::RequestUpdateCallback gamepad_callback_; mojom::IsolatedXRGamepadProvider::RequestUpdateCallback gamepad_callback_;
mojo::Binding<mojom::XRPresentationProvider> presentation_binding_; 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::Binding<mojom::IsolatedXRGamepadProvider> gamepad_provider_;
mojo::Binding<mojom::ImmersiveOverlay> overlay_binding_; mojo::Binding<mojom::ImmersiveOverlay> overlay_binding_;
......
...@@ -570,7 +570,7 @@ void VRDisplay::OnRequestImmersiveSessionReturned( ...@@ -570,7 +570,7 @@ void VRDisplay::OnRequestImmersiveSessionReturned(
WrapWeakPersistent(this))); WrapWeakPersistent(this)));
vr_presentation_provider_.Bind( vr_presentation_provider_.Bind(
std::move(session->submit_frame_sink->provider)); std::move(session->submit_frame_sink->provider));
vr_presentation_provider_.set_connection_error_handler( vr_presentation_provider_.set_disconnect_handler(
WTF::Bind(&VRDisplay::OnPresentationProviderConnectionError, WTF::Bind(&VRDisplay::OnPresentationProviderConnectionError,
WrapWeakPersistent(this))); WrapWeakPersistent(this)));
......
...@@ -273,7 +273,8 @@ class VRDisplay final : public EventTargetWithInlineData, ...@@ -273,7 +273,8 @@ class VRDisplay final : public EventTargetWithInlineData,
display_client_receiver_{this}; display_client_receiver_{this};
mojo::Remote<device::mojom::blink::XRFrameDataProvider> mojo::Remote<device::mojom::blink::XRFrameDataProvider>
vr_presentation_data_provider_; vr_presentation_data_provider_;
device::mojom::blink::XRPresentationProviderPtr vr_presentation_provider_; mojo::Remote<device::mojom::blink::XRPresentationProvider>
vr_presentation_provider_;
HeapDeque<Member<ScriptPromiseResolver>> pending_present_resolvers_; HeapDeque<Member<ScriptPromiseResolver>> pending_present_resolvers_;
}; };
......
...@@ -85,7 +85,7 @@ void XRFrameProvider::BeginImmersiveSession( ...@@ -85,7 +85,7 @@ void XRFrameProvider::BeginImmersiveSession(
presentation_provider_.Bind( presentation_provider_.Bind(
std::move(session_ptr->submit_frame_sink->provider)); std::move(session_ptr->submit_frame_sink->provider));
presentation_provider_.set_connection_error_handler(WTF::Bind( presentation_provider_.set_disconnect_handler(WTF::Bind(
&XRFrameProvider::OnProviderConnectionError, WrapWeakPersistent(this))); &XRFrameProvider::OnProviderConnectionError, WrapWeakPersistent(this)));
frame_transport_->BindSubmitFrameClient( frame_transport_->BindSubmitFrameClient(
......
...@@ -70,7 +70,8 @@ class XRFrameProvider final : public GarbageCollected<XRFrameProvider> { ...@@ -70,7 +70,8 @@ class XRFrameProvider final : public GarbageCollected<XRFrameProvider> {
HeapVector<Member<XRSession>> requesting_sessions_; HeapVector<Member<XRSession>> requesting_sessions_;
HeapVector<Member<XRSession>> processing_sessions_; HeapVector<Member<XRSession>> processing_sessions_;
device::mojom::blink::XRPresentationProviderPtr presentation_provider_; mojo::Remote<device::mojom::blink::XRPresentationProvider>
presentation_provider_;
mojo::Remote<device::mojom::blink::XRFrameDataProvider> mojo::Remote<device::mojom::blink::XRFrameDataProvider>
immersive_data_provider_; immersive_data_provider_;
device::mojom::blink::VRPosePtr frame_pose_; device::mojom::blink::VRPosePtr frame_pose_;
......
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