Commit 49f88b8e authored by Miyoung Shin's avatar Miyoung Shin Committed by Commit Bot

Convert XRTestHook to new Mojo types

This CL converts XRTestHookPtr and mojo:Binding<XRTestHook> in
chrome to the new Mojo type, and use pending_remote<XRTestHook> in
browser_test_interfaces.mojom.

Bug: 955171
Change-Id: I0b89731dcd91ab1150f7b9f574c4b5eaa42471a7
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1847594
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 avatarKlaus Weidner <klausw@chromium.org>
Cr-Commit-Position: refs/heads/master@{#705400}
parent 05d8840d
...@@ -50,20 +50,16 @@ device_test::mojom::ControllerFrameDataPtr DeviceToMojoControllerFrameData( ...@@ -50,20 +50,16 @@ device_test::mojom::ControllerFrameDataPtr DeviceToMojoControllerFrameData(
} }
MockXRDeviceHookBase::MockXRDeviceHookBase() MockXRDeviceHookBase::MockXRDeviceHookBase()
: tracked_classes_{device_test::mojom::TrackedDeviceClass:: : tracked_classes_{
kTrackedDeviceInvalid}, device_test::mojom::TrackedDeviceClass::kTrackedDeviceInvalid} {
binding_(this) {
vr::GetXRDeviceService()->BindTestHook( vr::GetXRDeviceService()->BindTestHook(
service_test_hook_.BindNewPipeAndPassReceiver()); service_test_hook_.BindNewPipeAndPassReceiver());
device_test::mojom::XRTestHookPtr client;
binding_.Bind(mojo::MakeRequest(&client));
mojo::ScopedAllowSyncCallForTesting scoped_allow_sync; mojo::ScopedAllowSyncCallForTesting scoped_allow_sync;
// For now, always have the HMD connected. // For now, always have the HMD connected.
tracked_classes_[0] = tracked_classes_[0] =
device_test::mojom::TrackedDeviceClass::kTrackedDeviceHmd; device_test::mojom::TrackedDeviceClass::kTrackedDeviceHmd;
service_test_hook_->SetTestHook(std::move(client)); service_test_hook_->SetTestHook(receiver_.BindNewPipeAndPassRemote());
} }
MockXRDeviceHookBase::~MockXRDeviceHookBase() { MockXRDeviceHookBase::~MockXRDeviceHookBase() {
...@@ -71,10 +67,10 @@ MockXRDeviceHookBase::~MockXRDeviceHookBase() { ...@@ -71,10 +67,10 @@ MockXRDeviceHookBase::~MockXRDeviceHookBase() {
} }
void MockXRDeviceHookBase::StopHooking() { void MockXRDeviceHookBase::StopHooking() {
// We don't call service_test_hook_->SetTestHook(nullptr), since that // We don't call service_test_hook_->SetTestHook(mojo::NullRemote()), since
// will potentially deadlock with reentrant or crossing synchronous mojo // that will potentially deadlock with reentrant or crossing synchronous mojo
// calls. // calls.
binding_.Close(); receiver_.reset();
service_test_hook_.reset(); service_test_hook_.reset();
} }
......
...@@ -8,7 +8,7 @@ ...@@ -8,7 +8,7 @@
#include "base/containers/flat_map.h" #include "base/containers/flat_map.h"
#include "device/vr/public/mojom/browser_test_interfaces.mojom.h" #include "device/vr/public/mojom/browser_test_interfaces.mojom.h"
#include "device/vr/test/test_hook.h" #include "device/vr/test/test_hook.h"
#include "mojo/public/cpp/bindings/binding.h" #include "mojo/public/cpp/bindings/receiver.h"
#include "mojo/public/cpp/bindings/remote.h" #include "mojo/public/cpp/bindings/remote.h"
class MockXRDeviceHookBase : public device_test::mojom::XRTestHook { class MockXRDeviceHookBase : public device_test::mojom::XRTestHook {
...@@ -63,7 +63,7 @@ class MockXRDeviceHookBase : public device_test::mojom::XRTestHook { ...@@ -63,7 +63,7 @@ class MockXRDeviceHookBase : public device_test::mojom::XRTestHook {
controller_data_map_; controller_data_map_;
private: private:
mojo::Binding<device_test::mojom::XRTestHook> binding_; mojo::Receiver<device_test::mojom::XRTestHook> receiver_{this};
mojo::Remote<device_test::mojom::XRServiceTestHook> service_test_hook_; mojo::Remote<device_test::mojom::XRServiceTestHook> service_test_hook_;
}; };
......
...@@ -45,12 +45,11 @@ void UnsetTestHook(std::unique_ptr<device::XRTestHookWrapper> wrapper) { ...@@ -45,12 +45,11 @@ void UnsetTestHook(std::unique_ptr<device::XRTestHookWrapper> wrapper) {
namespace device { namespace device {
void XRServiceTestHook::SetTestHook( void XRServiceTestHook::SetTestHook(
device_test::mojom::XRTestHookPtr hook, mojo::PendingRemote<device_test::mojom::XRTestHook> hook,
device_test::mojom::XRServiceTestHook::SetTestHookCallback callback) { device_test::mojom::XRServiceTestHook::SetTestHookCallback callback) {
// Create a new wrapper (or use null) // Create a new wrapper (or use null)
std::unique_ptr<XRTestHookWrapper> wrapper = std::unique_ptr<XRTestHookWrapper> wrapper =
hook ? std::make_unique<XRTestHookWrapper>(hook.PassInterface()) hook ? std::make_unique<XRTestHookWrapper>(std::move(hook)) : nullptr;
: nullptr;
// Register the wrapper testhook with the VR runtimes // Register the wrapper testhook with the VR runtimes
#if BUILDFLAG(ENABLE_OPENVR) #if BUILDFLAG(ENABLE_OPENVR)
......
...@@ -8,6 +8,7 @@ ...@@ -8,6 +8,7 @@
#include <memory> #include <memory>
#include "device/vr/public/mojom/browser_test_interfaces.mojom.h" #include "device/vr/public/mojom/browser_test_interfaces.mojom.h"
#include "mojo/public/cpp/bindings/pending_remote.h"
namespace device { namespace device {
class XRTestHookWrapper; class XRTestHookWrapper;
...@@ -20,7 +21,7 @@ class XRServiceTestHook : public device_test::mojom::XRServiceTestHook { ...@@ -20,7 +21,7 @@ class XRServiceTestHook : public device_test::mojom::XRServiceTestHook {
using DeviceCrashCallback = device_test::mojom::XRServiceTestHook:: using DeviceCrashCallback = device_test::mojom::XRServiceTestHook::
TerminateDeviceServiceProcessForTestingCallback; TerminateDeviceServiceProcessForTestingCallback;
// device_test::mojom::XRServiceTestHook // device_test::mojom::XRServiceTestHook
void SetTestHook(device_test::mojom::XRTestHookPtr hook, void SetTestHook(mojo::PendingRemote<device_test::mojom::XRTestHook> hook,
device_test::mojom::XRServiceTestHook::SetTestHookCallback device_test::mojom::XRServiceTestHook::SetTestHookCallback
callback) override; callback) override;
void TerminateDeviceServiceProcessForTesting( void TerminateDeviceServiceProcessForTesting(
......
...@@ -35,8 +35,8 @@ PoseFrameData MojoToDevicePoseFrameData( ...@@ -35,8 +35,8 @@ PoseFrameData MojoToDevicePoseFrameData(
} }
XRTestHookWrapper::XRTestHookWrapper( XRTestHookWrapper::XRTestHookWrapper(
device_test::mojom::XRTestHookPtrInfo hook_info) mojo::PendingRemote<device_test::mojom::XRTestHook> pending_hook)
: hook_info_(std::move(hook_info)) {} : pending_hook_(std::move(pending_hook)) {}
void XRTestHookWrapper::OnFrameSubmitted(SubmittedFrameData frame_data) { void XRTestHookWrapper::OnFrameSubmitted(SubmittedFrameData frame_data) {
if (hook_) { if (hook_) {
...@@ -176,17 +176,15 @@ bool XRTestHookWrapper::WaitGetSessionStateStopping() { ...@@ -176,17 +176,15 @@ bool XRTestHookWrapper::WaitGetSessionStateStopping() {
} }
void XRTestHookWrapper::AttachCurrentThread() { void XRTestHookWrapper::AttachCurrentThread() {
if (hook_info_) { if (pending_hook_)
hook_.Bind(std::move(hook_info_)); hook_.Bind(std::move(pending_hook_));
}
current_task_runner_ = base::ThreadTaskRunnerHandle::Get(); current_task_runner_ = base::ThreadTaskRunnerHandle::Get();
} }
void XRTestHookWrapper::DetachCurrentThread() { void XRTestHookWrapper::DetachCurrentThread() {
if (hook_) { if (hook_)
hook_info_ = hook_.PassInterface(); pending_hook_ = hook_.Unbind();
}
current_task_runner_ = nullptr; current_task_runner_ = nullptr;
} }
......
...@@ -7,6 +7,8 @@ ...@@ -7,6 +7,8 @@
#include "device/vr/public/mojom/browser_test_interfaces.mojom.h" #include "device/vr/public/mojom/browser_test_interfaces.mojom.h"
#include "device/vr/test/test_hook.h" #include "device/vr/test/test_hook.h"
#include "mojo/public/cpp/bindings/pending_remote.h"
#include "mojo/public/cpp/bindings/remote.h"
namespace device { namespace device {
...@@ -14,12 +16,13 @@ namespace device { ...@@ -14,12 +16,13 @@ namespace device {
// of VR runtimes are single-threaded at a time, and we initialize/uninitialize // of VR runtimes are single-threaded at a time, and we initialize/uninitialize
// as we switch between immersive and non-immersive sessions. // as we switch between immersive and non-immersive sessions.
// The mojo pointer is thread-affine, but we can keep the same mojo connection // The mojo pointer is thread-affine, but we can keep the same mojo connection
// by getting its PtrInfo so we temporarily make the test hook mojo pointer // by getting its pending remote so we temporarily make the test hook mojo
// live on the thread that we are using the VR runtime on while the runtime is // pointer live on the thread that we are using the VR runtime on while the
// initialized. // runtime is initialized.
class XRTestHookWrapper : public VRTestHook { class XRTestHookWrapper : public VRTestHook {
public: public:
explicit XRTestHookWrapper(device_test::mojom::XRTestHookPtrInfo hook_info); explicit XRTestHookWrapper(
mojo::PendingRemote<device_test::mojom::XRTestHook> hook_info);
virtual ~XRTestHookWrapper(); virtual ~XRTestHookWrapper();
void OnFrameSubmitted(SubmittedFrameData frame_data) override; void OnFrameSubmitted(SubmittedFrameData frame_data) override;
...@@ -37,8 +40,8 @@ class XRTestHookWrapper : public VRTestHook { ...@@ -37,8 +40,8 @@ class XRTestHookWrapper : public VRTestHook {
scoped_refptr<base::SingleThreadTaskRunner> GetBoundTaskRunner(); scoped_refptr<base::SingleThreadTaskRunner> GetBoundTaskRunner();
private: private:
device_test::mojom::XRTestHookPtr hook_; mojo::Remote<device_test::mojom::XRTestHook> hook_;
device_test::mojom::XRTestHookPtrInfo hook_info_; mojo::PendingRemote<device_test::mojom::XRTestHook> pending_hook_;
scoped_refptr<base::SingleThreadTaskRunner> current_task_runner_; scoped_refptr<base::SingleThreadTaskRunner> current_task_runner_;
}; };
......
...@@ -128,7 +128,7 @@ interface XRTestHook { ...@@ -128,7 +128,7 @@ interface XRTestHook {
// It is always hosted in the XRDevice process, but only has effects while // It is always hosted in the XRDevice process, but only has effects while
// running in browser tests with mock implementations of runtimes. // running in browser tests with mock implementations of runtimes.
interface XRServiceTestHook { interface XRServiceTestHook {
[Sync] SetTestHook(XRTestHook? hook) => (); [Sync] SetTestHook(pending_remote<XRTestHook>? hook) => ();
// Called by tests to trigger a termination of the Device Service Process // Called by tests to trigger a termination of the Device Service Process
// To test that the product can properly handle the service either crashing // To test that the product can properly handle the service either crashing
......
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