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)
ar_image_transport_(std::move(ar_image_transport)),
webxr_(std::make_unique<vr::WebXrPresentationState>()),
session_controller_binding_(this),
environment_binding_(this),
presentation_binding_(this) {
environment_binding_(this) {
DVLOG(1) << __func__;
webxr_transform_ = WebXRImageTransformMatrix();
}
......@@ -181,9 +180,6 @@ void ArCoreGl::CreateSession(mojom::VRDisplayInfoPtr display_info,
session_controller_binding_.set_connection_error_handler(base::BindOnce(
&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::XRPresentationTransportOptions::New();
transport_options->wait_for_gpu_fence = true;
......@@ -198,7 +194,8 @@ void ArCoreGl::CreateSession(mojom::VRDisplayInfoPtr display_info,
auto submit_frame_sink = device::mojom::XRPresentationConnection::New();
submit_frame_sink->client_receiver =
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);
display_info_ = std::move(display_info);
......@@ -807,7 +804,7 @@ void ArCoreGl::CloseBindingsIfOpen() {
environment_binding_.Close();
frame_data_receiver_.reset();
session_controller_binding_.Close();
presentation_binding_.Close();
presentation_receiver_.reset();
}
bool ArCoreGl::IsOnGlThread() const {
......
......@@ -202,7 +202,8 @@ class ArCoreGl : public mojom::XRFrameDataProvider,
void OnBindingDisconnect();
void CloseBindingsIfOpen();
mojo::Binding<device::mojom::XRPresentationProvider> presentation_binding_;
mojo::Receiver<device::mojom::XRPresentationProvider> presentation_receiver_{
this};
mojo::Remote<device::mojom::XRPresentationClient> submit_client_;
base::OnceClosure pending_getframedata_;
......
......@@ -79,7 +79,6 @@ GvrSchedulerDelegate::GvrSchedulerDelegate(GlBrowserInterface* browser,
cardboard_gamepad_(cardboard_gamepad),
vsync_helper_(base::BindRepeating(&GvrSchedulerDelegate::OnVSync,
base::Unretained(this))),
presentation_binding_(this),
graphics_(graphics),
webvr_render_time_(sliding_time_size),
webvr_js_time_(sliding_time_size),
......@@ -168,9 +167,6 @@ void GvrSchedulerDelegate::ConnectPresentingService(
device::mojom::XRRuntimeSessionOptionsPtr options) {
ClosePresentationBindings();
device::mojom::XRPresentationProviderPtr presentation_provider;
presentation_binding_.Bind(mojo::MakeRequest(&presentation_provider));
gfx::Size webxr_size(display_info->left_eye->render_width +
display_info->right_eye->render_width,
display_info->left_eye->render_height);
......@@ -195,7 +191,8 @@ void GvrSchedulerDelegate::ConnectPresentingService(
auto submit_frame_sink = device::mojom::XRPresentationConnection::New();
submit_frame_sink->client_receiver =
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);
auto session = device::mojom::XRSession::New();
......@@ -1064,7 +1061,7 @@ void GvrSchedulerDelegate::ClosePresentationBindings() {
// the connection is closing.
std::move(get_frame_data_callback_).Run(nullptr);
}
presentation_binding_.Close();
presentation_receiver_.reset();
frame_data_receiver_.reset();
}
......
......@@ -20,7 +20,6 @@
#include "chrome/browser/vr/base_scheduler_delegate.h"
#include "device/vr/public/mojom/vr_service.mojom.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/remote.h"
#include "ui/gfx/transform.h"
......@@ -192,7 +191,8 @@ class GvrSchedulerDelegate : public BaseSchedulerDelegate,
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};
std::vector<device::mojom::XRInputSourceStatePtr> input_states_;
......
......@@ -107,7 +107,7 @@ struct XRSession {
// way connection between the renderer and a device to synchronize and submit
// frames to a sink outside of Chrome.
struct XRPresentationConnection {
XRPresentationProvider provider;
pending_remote<XRPresentationProvider> provider;
pending_receiver<XRPresentationClient> client_receiver;
XRPresentationTransportOptions transport_options;
};
......
......@@ -45,7 +45,6 @@ XRCompositorCommon::XRCompositorCommon()
main_thread_task_runner_(base::ThreadTaskRunnerHandle::Get()),
webxr_js_time_(kSlidingAverageSize),
webxr_gpu_time_(kSlidingAverageSize),
presentation_binding_(this),
gamepad_provider_(this),
overlay_binding_(this) {
DCHECK(main_thread_task_runner_);
......@@ -137,7 +136,7 @@ void XRCompositorCommon::SubmitFrameWithTextureHandle(
void XRCompositorCommon::CleanUp() {
submit_client_.reset();
webxr_has_pose_ = false;
presentation_binding_.Close();
presentation_receiver_.reset();
frame_data_receiver_.reset();
gamepad_provider_.Close();
overlay_binding_.Close();
......@@ -197,7 +196,7 @@ void XRCompositorCommon::RequestSession(
RequestSessionCallback callback) {
DCHECK(options->immersive);
webxr_has_pose_ = false;
presentation_binding_.Close();
presentation_receiver_.reset();
frame_data_receiver_.reset();
if (!StartRuntime()) {
......@@ -216,9 +215,6 @@ void XRCompositorCommon::RequestSession(
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::XRPresentationTransportOptions::New();
transport_options->transport_method =
......@@ -230,7 +226,8 @@ void XRCompositorCommon::RequestSession(
OnSessionStart();
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_client_.BindNewPipeAndPassReceiver();
submit_frame_sink->transport_options = std::move(transport_options);
......@@ -251,7 +248,7 @@ void XRCompositorCommon::ExitPresent() {
TRACE_EVENT_INSTANT0("xr", "ExitPresent", TRACE_EVENT_SCOPE_THREAD);
is_presenting_ = false;
webxr_has_pose_ = false;
presentation_binding_.Close();
presentation_receiver_.reset();
frame_data_receiver_.reset();
submit_client_.reset();
StopRuntime();
......
......@@ -179,7 +179,7 @@ class XRCompositorCommon : public base::Thread,
base::RepeatingCallback<void(mojom::XRVisibilityState)>
on_visibility_state_changed_;
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::Binding<mojom::IsolatedXRGamepadProvider> gamepad_provider_;
mojo::Binding<mojom::ImmersiveOverlay> overlay_binding_;
......
......@@ -570,7 +570,7 @@ void VRDisplay::OnRequestImmersiveSessionReturned(
WrapWeakPersistent(this)));
vr_presentation_provider_.Bind(
std::move(session->submit_frame_sink->provider));
vr_presentation_provider_.set_connection_error_handler(
vr_presentation_provider_.set_disconnect_handler(
WTF::Bind(&VRDisplay::OnPresentationProviderConnectionError,
WrapWeakPersistent(this)));
......
......@@ -273,7 +273,8 @@ class VRDisplay final : public EventTargetWithInlineData,
display_client_receiver_{this};
mojo::Remote<device::mojom::blink::XRFrameDataProvider>
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_;
};
......
......@@ -85,7 +85,7 @@ void XRFrameProvider::BeginImmersiveSession(
presentation_provider_.Bind(
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)));
frame_transport_->BindSubmitFrameClient(
......
......@@ -70,7 +70,8 @@ class XRFrameProvider final : public GarbageCollected<XRFrameProvider> {
HeapVector<Member<XRSession>> requesting_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>
immersive_data_provider_;
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