Commit 1b8c4fc8 authored by Miyoung Shin's avatar Miyoung Shin Committed by Commit Bot

Convert CameraModule to new Mojo types

This CL converts CameraModule{Ptr, Request} in media to the new
Mojo type, and uses pending_remote<CameraModule> and
pending_receiver<CameraModule> in cros_camera_service.mojom.

Bug: 955171
Change-Id: Ib95c14a2f25acb731fa2838c0bb1afdf78e02996
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1863018
Commit-Queue: Miyoung Shin <myid.shin@igalia.com>
Reviewed-by: default avatarSam McNally <sammc@chromium.org>
Reviewed-by: default avatarKen Rockot <rockot@google.com>
Reviewed-by: default avatarGuido Urdaneta <guidou@chromium.org>
Reviewed-by: default avatarTommi <tommi@chromium.org>
Cr-Commit-Position: refs/heads/master@{#707771}
parent cbc0a5dd
...@@ -23,6 +23,7 @@ ...@@ -23,6 +23,7 @@
#include "media/capture/video/chromeos/mock_video_capture_client.h" #include "media/capture/video/chromeos/mock_video_capture_client.h"
#include "media/capture/video/chromeos/video_capture_device_factory_chromeos.h" #include "media/capture/video/chromeos/video_capture_device_factory_chromeos.h"
#include "media/capture/video/mock_gpu_memory_buffer_manager.h" #include "media/capture/video/mock_gpu_memory_buffer_manager.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 "testing/gmock/include/gmock/gmock.h" #include "testing/gmock/include/gmock/gmock.h"
#include "testing/gtest/include/gtest/gtest.h" #include "testing/gtest/include/gtest/gtest.h"
...@@ -129,7 +130,7 @@ class CameraDeviceDelegateTest : public ::testing::Test { ...@@ -129,7 +130,7 @@ class CameraDeviceDelegateTest : public ::testing::Test {
auto get_camera_info = base::BindRepeating( auto get_camera_info = base::BindRepeating(
&CameraHalDelegate::GetCameraInfoFromDeviceId, camera_hal_delegate_); &CameraHalDelegate::GetCameraInfoFromDeviceId, camera_hal_delegate_);
camera_hal_delegate_->SetCameraModule( camera_hal_delegate_->SetCameraModule(
mock_camera_module_.GetInterfacePtrInfo()); mock_camera_module_.GetPendingRemote());
} }
void TearDown() override { void TearDown() override {
......
...@@ -37,8 +37,9 @@ class LocalCameraClientObserver : public CameraClientObserver { ...@@ -37,8 +37,9 @@ class LocalCameraClientObserver : public CameraClientObserver {
scoped_refptr<CameraHalDelegate> camera_hal_delegate) scoped_refptr<CameraHalDelegate> camera_hal_delegate)
: camera_hal_delegate_(std::move(camera_hal_delegate)) {} : camera_hal_delegate_(std::move(camera_hal_delegate)) {}
void OnChannelCreated(cros::mojom::CameraModulePtr camera_module) override { void OnChannelCreated(
camera_hal_delegate_->SetCameraModule(camera_module.PassInterface()); mojo::PendingRemote<cros::mojom::CameraModule> camera_module) override {
camera_hal_delegate_->SetCameraModule(std::move(camera_module));
} }
private: private:
...@@ -113,10 +114,10 @@ void CameraHalDelegate::RegisterCameraClient() { ...@@ -113,10 +114,10 @@ void CameraHalDelegate::RegisterCameraClient() {
} }
void CameraHalDelegate::SetCameraModule( void CameraHalDelegate::SetCameraModule(
cros::mojom::CameraModulePtrInfo camera_module_ptr_info) { mojo::PendingRemote<cros::mojom::CameraModule> camera_module) {
ipc_task_runner_->PostTask( ipc_task_runner_->PostTask(
FROM_HERE, base::BindOnce(&CameraHalDelegate::SetCameraModuleOnIpcThread, FROM_HERE, base::BindOnce(&CameraHalDelegate::SetCameraModuleOnIpcThread,
this, base::Passed(&camera_module_ptr_info))); this, std::move(camera_module)));
} }
void CameraHalDelegate::Reset() { void CameraHalDelegate::Reset() {
...@@ -348,15 +349,17 @@ int CameraHalDelegate::GetCameraIdFromDeviceId(const std::string& device_id) { ...@@ -348,15 +349,17 @@ int CameraHalDelegate::GetCameraIdFromDeviceId(const std::string& device_id) {
} }
void CameraHalDelegate::SetCameraModuleOnIpcThread( void CameraHalDelegate::SetCameraModuleOnIpcThread(
cros::mojom::CameraModulePtrInfo camera_module_ptr_info) { mojo::PendingRemote<cros::mojom::CameraModule> camera_module) {
DCHECK(ipc_task_runner_->BelongsToCurrentThread()); DCHECK(ipc_task_runner_->BelongsToCurrentThread());
if (camera_module_.is_bound()) { if (camera_module_.is_bound()) {
LOG(ERROR) << "CameraModule is already bound"; LOG(ERROR) << "CameraModule is already bound";
return; return;
} }
camera_module_ = mojo::MakeProxy(std::move(camera_module_ptr_info)); if (camera_module.is_valid()) {
camera_module_.set_connection_error_handler( camera_module_.Bind(std::move(camera_module));
base::BindOnce(&CameraHalDelegate::ResetMojoInterfaceOnIpcThread, this)); camera_module_.set_disconnect_handler(base::BindOnce(
&CameraHalDelegate::ResetMojoInterfaceOnIpcThread, this));
}
camera_module_has_been_set_.Signal(); camera_module_has_been_set_.Signal();
} }
......
...@@ -20,7 +20,9 @@ ...@@ -20,7 +20,9 @@
#include "media/capture/video/chromeos/vendor_tag_ops_delegate.h" #include "media/capture/video/chromeos/vendor_tag_ops_delegate.h"
#include "media/capture/video/video_capture_device_factory.h" #include "media/capture/video/video_capture_device_factory.h"
#include "media/capture/video_capture_types.h" #include "media/capture/video_capture_types.h"
#include "mojo/public/cpp/bindings/pending_remote.h"
#include "mojo/public/cpp/bindings/receiver.h" #include "mojo/public/cpp/bindings/receiver.h"
#include "mojo/public/cpp/bindings/remote.h"
namespace media { namespace media {
...@@ -46,7 +48,8 @@ class CAPTURE_EXPORT CameraHalDelegate final ...@@ -46,7 +48,8 @@ class CAPTURE_EXPORT CameraHalDelegate final
// Registers the camera client observer to the CameraHalDispatcher instance. // Registers the camera client observer to the CameraHalDispatcher instance.
void RegisterCameraClient(); void RegisterCameraClient();
void SetCameraModule(cros::mojom::CameraModulePtrInfo camera_module_ptr_info); void SetCameraModule(
mojo::PendingRemote<cros::mojom::CameraModule> camera_module);
// Resets various mojo bindings, WaitableEvents, and cached information. // Resets various mojo bindings, WaitableEvents, and cached information.
void Reset(); void Reset();
...@@ -86,7 +89,7 @@ class CAPTURE_EXPORT CameraHalDelegate final ...@@ -86,7 +89,7 @@ class CAPTURE_EXPORT CameraHalDelegate final
~CameraHalDelegate() final; ~CameraHalDelegate() final;
void SetCameraModuleOnIpcThread( void SetCameraModuleOnIpcThread(
cros::mojom::CameraModulePtrInfo camera_module_ptr_info); mojo::PendingRemote<cros::mojom::CameraModule> camera_module);
// Resets the Mojo interface and bindings. // Resets the Mojo interface and bindings.
void ResetMojoInterfaceOnIpcThread(); void ResetMojoInterfaceOnIpcThread();
...@@ -174,7 +177,7 @@ class CAPTURE_EXPORT CameraHalDelegate final ...@@ -174,7 +177,7 @@ class CAPTURE_EXPORT CameraHalDelegate final
// The Mojo proxy to access the camera module at the remote camera HAL. Bound // The Mojo proxy to access the camera module at the remote camera HAL. Bound
// to |ipc_task_runner_|. // to |ipc_task_runner_|.
cros::mojom::CameraModulePtr camera_module_; mojo::Remote<cros::mojom::CameraModule> camera_module_;
// The Mojo receiver serving the camera module callbacks. Bound to // The Mojo receiver serving the camera module callbacks. Bound to
// |ipc_task_runner_|. // |ipc_task_runner_|.
......
...@@ -47,7 +47,7 @@ class CameraHalDelegateTest : public ::testing::Test { ...@@ -47,7 +47,7 @@ class CameraHalDelegateTest : public ::testing::Test {
camera_hal_delegate_ = camera_hal_delegate_ =
new CameraHalDelegate(hal_delegate_thread_.task_runner()); new CameraHalDelegate(hal_delegate_thread_.task_runner());
camera_hal_delegate_->SetCameraModule( camera_hal_delegate_->SetCameraModule(
mock_camera_module_.GetInterfacePtrInfo()); mock_camera_module_.GetPendingRemote());
} }
void TearDown() override { void TearDown() override {
......
...@@ -22,6 +22,7 @@ ...@@ -22,6 +22,7 @@
#include "base/synchronization/waitable_event.h" #include "base/synchronization/waitable_event.h"
#include "base/trace_event/trace_event.h" #include "base/trace_event/trace_event.h"
#include "media/capture/video/chromeos/mojom/camera_common.mojom.h" #include "media/capture/video/chromeos/mojom/camera_common.mojom.h"
#include "mojo/public/cpp/bindings/pending_remote.h"
#include "mojo/public/cpp/platform/named_platform_channel.h" #include "mojo/public/cpp/platform/named_platform_channel.h"
#include "mojo/public/cpp/platform/platform_channel.h" #include "mojo/public/cpp/platform/platform_channel.h"
#include "mojo/public/cpp/platform/socket_utils_posix.h" #include "mojo/public/cpp/platform/socket_utils_posix.h"
...@@ -70,7 +71,8 @@ class MojoCameraClientObserver : public CameraClientObserver { ...@@ -70,7 +71,8 @@ class MojoCameraClientObserver : public CameraClientObserver {
mojo::PendingRemote<cros::mojom::CameraHalClient> client) mojo::PendingRemote<cros::mojom::CameraHalClient> client)
: client_(std::move(client)) {} : client_(std::move(client)) {}
void OnChannelCreated(cros::mojom::CameraModulePtr camera_module) override { void OnChannelCreated(
mojo::PendingRemote<cros::mojom::CameraModule> camera_module) override {
client_->SetUpChannel(std::move(camera_module)); client_->SetUpChannel(std::move(camera_module));
} }
...@@ -357,11 +359,10 @@ void CameraHalDispatcherImpl::AddClientObserverOnProxyThread( ...@@ -357,11 +359,10 @@ void CameraHalDispatcherImpl::AddClientObserverOnProxyThread(
void CameraHalDispatcherImpl::EstablishMojoChannel( void CameraHalDispatcherImpl::EstablishMojoChannel(
CameraClientObserver* client_observer) { CameraClientObserver* client_observer) {
DCHECK(proxy_task_runner_->BelongsToCurrentThread()); DCHECK(proxy_task_runner_->BelongsToCurrentThread());
cros::mojom::CameraModulePtr camera_module_ptr; mojo::PendingRemote<cros::mojom::CameraModule> camera_module;
cros::mojom::CameraModuleRequest camera_module_request = camera_hal_server_->CreateChannel(
mojo::MakeRequest(&camera_module_ptr); camera_module.InitWithNewPipeAndPassReceiver());
camera_hal_server_->CreateChannel(std::move(camera_module_request)); client_observer->OnChannelCreated(std::move(camera_module));
client_observer->OnChannelCreated(std::move(camera_module_ptr));
} }
void CameraHalDispatcherImpl::OnPeerConnected( void CameraHalDispatcherImpl::OnPeerConnected(
......
...@@ -39,7 +39,8 @@ using MojoJpegEncodeAcceleratorFactoryCB = base::RepeatingCallback<void( ...@@ -39,7 +39,8 @@ using MojoJpegEncodeAcceleratorFactoryCB = base::RepeatingCallback<void(
class CAPTURE_EXPORT CameraClientObserver { class CAPTURE_EXPORT CameraClientObserver {
public: public:
virtual ~CameraClientObserver(); virtual ~CameraClientObserver();
virtual void OnChannelCreated(cros::mojom::CameraModulePtr camera_module) = 0; virtual void OnChannelCreated(
mojo::PendingRemote<cros::mojom::CameraModule> camera_module) = 0;
}; };
// The CameraHalDispatcherImpl hosts and waits on the unix domain socket // The CameraHalDispatcherImpl hosts and waits on the unix domain socket
......
...@@ -13,6 +13,7 @@ ...@@ -13,6 +13,7 @@
#include "base/test/task_environment.h" #include "base/test/task_environment.h"
#include "media/capture/video/chromeos/mojom/camera_common.mojom.h" #include "media/capture/video/chromeos/mojom/camera_common.mojom.h"
#include "media/capture/video/chromeos/mojom/cros_camera_service.mojom.h" #include "media/capture/video/chromeos/mojom/cros_camera_service.mojom.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"
#include "testing/gmock/include/gmock/gmock.h" #include "testing/gmock/include/gmock/gmock.h"
...@@ -30,12 +31,13 @@ class MockCameraHalServer : public cros::mojom::CameraHalServer { ...@@ -30,12 +31,13 @@ class MockCameraHalServer : public cros::mojom::CameraHalServer {
~MockCameraHalServer() = default; ~MockCameraHalServer() = default;
void CreateChannel( void CreateChannel(mojo::PendingReceiver<cros::mojom::CameraModule>
cros::mojom::CameraModuleRequest camera_module_request) override { camera_module_receiver) override {
DoCreateChannel(camera_module_request); DoCreateChannel(std::move(camera_module_receiver));
} }
MOCK_METHOD1(DoCreateChannel, MOCK_METHOD1(DoCreateChannel,
void(cros::mojom::CameraModuleRequest& camera_module_request)); void(mojo::PendingReceiver<cros::mojom::CameraModule>
camera_module_receiver));
MOCK_METHOD1(SetTracingEnabled, void(bool enabled)); MOCK_METHOD1(SetTracingEnabled, void(bool enabled));
...@@ -54,11 +56,13 @@ class MockCameraHalClient : public cros::mojom::CameraHalClient { ...@@ -54,11 +56,13 @@ class MockCameraHalClient : public cros::mojom::CameraHalClient {
~MockCameraHalClient() = default; ~MockCameraHalClient() = default;
void SetUpChannel(cros::mojom::CameraModulePtr camera_module_ptr) override { void SetUpChannel(
DoSetUpChannel(camera_module_ptr); mojo::PendingRemote<cros::mojom::CameraModule> camera_module) override {
DoSetUpChannel(std::move(camera_module));
} }
MOCK_METHOD1(DoSetUpChannel, MOCK_METHOD1(
void(cros::mojom::CameraModulePtr& camera_module_ptr)); DoSetUpChannel,
void(mojo::PendingRemote<cros::mojom::CameraModule> camera_module));
mojo::PendingRemote<cros::mojom::CameraHalClient> GetPendingRemote() { mojo::PendingRemote<cros::mojom::CameraHalClient> GetPendingRemote() {
return receiver_.BindNewPipeAndPassRemote(); return receiver_.BindNewPipeAndPassRemote();
......
...@@ -12,8 +12,7 @@ ...@@ -12,8 +12,7 @@
namespace media { namespace media {
namespace unittest_internal { namespace unittest_internal {
MockCameraModule::MockCameraModule() MockCameraModule::MockCameraModule() : mock_module_thread_("MockModuleThread") {
: mock_module_thread_("MockModuleThread"), binding_(this) {
mock_module_thread_.Start(); mock_module_thread_.Start();
} }
...@@ -81,22 +80,21 @@ void MockCameraModule::NotifyCameraDeviceChangeOnThread( ...@@ -81,22 +80,21 @@ void MockCameraModule::NotifyCameraDeviceChangeOnThread(
callbacks_->CameraDeviceStatusChange(camera_id, status); callbacks_->CameraDeviceStatusChange(camera_id, status);
} }
cros::mojom::CameraModulePtrInfo MockCameraModule::GetInterfacePtrInfo() { mojo::PendingRemote<cros::mojom::CameraModule>
MockCameraModule::GetPendingRemote() {
base::WaitableEvent done(base::WaitableEvent::ResetPolicy::MANUAL, base::WaitableEvent done(base::WaitableEvent::ResetPolicy::MANUAL,
base::WaitableEvent::InitialState::NOT_SIGNALED); base::WaitableEvent::InitialState::NOT_SIGNALED);
cros::mojom::CameraModulePtrInfo ptr_info; mojo::PendingRemote<cros::mojom::CameraModule> pending_remote;
mock_module_thread_.task_runner()->PostTask( mock_module_thread_.task_runner()->PostTask(
FROM_HERE, FROM_HERE, base::BindOnce(&MockCameraModule::BindOnThread,
base::BindOnce(&MockCameraModule::BindOnThread, base::Unretained(this), base::Unretained(this), base::Unretained(&done),
base::Unretained(&done), base::Unretained(&ptr_info))); base::Unretained(&pending_remote)));
done.Wait(); done.Wait();
return ptr_info; return pending_remote;
} }
void MockCameraModule::CloseBindingOnThread() { void MockCameraModule::CloseBindingOnThread() {
if (binding_.is_bound()) { receiver_.reset();
binding_.Close();
}
if (callbacks_.is_bound()) { if (callbacks_.is_bound()) {
callbacks_.reset(); callbacks_.reset();
} }
...@@ -104,12 +102,8 @@ void MockCameraModule::CloseBindingOnThread() { ...@@ -104,12 +102,8 @@ void MockCameraModule::CloseBindingOnThread() {
void MockCameraModule::BindOnThread( void MockCameraModule::BindOnThread(
base::WaitableEvent* done, base::WaitableEvent* done,
cros::mojom::CameraModulePtrInfo* ptr_info) { mojo::PendingRemote<cros::mojom::CameraModule>* pending_remote) {
cros::mojom::CameraModulePtr camera_module_ptr; *pending_remote = receiver_.BindNewPipeAndPassRemote();
cros::mojom::CameraModuleRequest camera_module_request =
mojo::MakeRequest(&camera_module_ptr);
binding_.Bind(std::move(camera_module_request));
*ptr_info = camera_module_ptr.PassInterface();
done->Signal(); done->Signal();
} }
......
...@@ -11,9 +11,9 @@ ...@@ -11,9 +11,9 @@
#include "base/threading/thread.h" #include "base/threading/thread.h"
#include "media/capture/video/chromeos/mojom/camera3.mojom.h" #include "media/capture/video/chromeos/mojom/camera3.mojom.h"
#include "media/capture/video/chromeos/mojom/camera_common.mojom.h" #include "media/capture/video/chromeos/mojom/camera_common.mojom.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/remote.h" #include "mojo/public/cpp/bindings/remote.h"
#include "testing/gmock/include/gmock/gmock.h" #include "testing/gmock/include/gmock/gmock.h"
...@@ -73,7 +73,7 @@ class MockCameraModule : public cros::mojom::CameraModule { ...@@ -73,7 +73,7 @@ class MockCameraModule : public cros::mojom::CameraModule {
void NotifyCameraDeviceChange(int camera_id, void NotifyCameraDeviceChange(int camera_id,
cros::mojom::CameraDeviceStatus status); cros::mojom::CameraDeviceStatus status);
cros::mojom::CameraModulePtrInfo GetInterfacePtrInfo(); mojo::PendingRemote<cros::mojom::CameraModule> GetPendingRemote();
private: private:
void NotifyCameraDeviceChangeOnThread(int camera_id, void NotifyCameraDeviceChangeOnThread(int camera_id,
...@@ -81,11 +81,12 @@ class MockCameraModule : public cros::mojom::CameraModule { ...@@ -81,11 +81,12 @@ class MockCameraModule : public cros::mojom::CameraModule {
void CloseBindingOnThread(); void CloseBindingOnThread();
void BindOnThread(base::WaitableEvent* done, void BindOnThread(
cros::mojom::CameraModulePtrInfo* ptr_info); base::WaitableEvent* done,
mojo::PendingRemote<cros::mojom::CameraModule>* pending_remote);
base::Thread mock_module_thread_; base::Thread mock_module_thread_;
mojo::Binding<cros::mojom::CameraModule> binding_; mojo::Receiver<cros::mojom::CameraModule> receiver_{this};
mojo::Remote<cros::mojom::CameraModuleCallbacks> callbacks_; mojo::Remote<cros::mojom::CameraModuleCallbacks> callbacks_;
DISALLOW_COPY_AND_ASSIGN(MockCameraModule); DISALLOW_COPY_AND_ASSIGN(MockCameraModule);
......
...@@ -27,7 +27,6 @@ void MockVendorTagOps::Bind( ...@@ -27,7 +27,6 @@ void MockVendorTagOps::Bind(
mojo::PendingReceiver<cros::mojom::VendorTagOps> receiver) { mojo::PendingReceiver<cros::mojom::VendorTagOps> receiver) {
base::WaitableEvent done(base::WaitableEvent::ResetPolicy::MANUAL, base::WaitableEvent done(base::WaitableEvent::ResetPolicy::MANUAL,
base::WaitableEvent::InitialState::NOT_SIGNALED); base::WaitableEvent::InitialState::NOT_SIGNALED);
cros::mojom::CameraModulePtrInfo ptr_info;
mock_vendor_tag_ops_thread_.task_runner()->PostTask( mock_vendor_tag_ops_thread_.task_runner()->PostTask(
FROM_HERE, FROM_HERE,
base::BindOnce(&MockVendorTagOps::BindOnThread, base::Unretained(this), base::BindOnce(&MockVendorTagOps::BindOnThread, base::Unretained(this),
......
...@@ -45,7 +45,7 @@ interface CameraHalServer { ...@@ -45,7 +45,7 @@ interface CameraHalServer {
// HAL v3 adapter. Upon successfully binding of |camera_module_request|, the // HAL v3 adapter. Upon successfully binding of |camera_module_request|, the
// caller will have a established Mojo channel to the camera HAL v3 adapter // caller will have a established Mojo channel to the camera HAL v3 adapter
// process. // process.
CreateChannel@0(CameraModule& camera_module_request); CreateChannel@0(pending_receiver<CameraModule> camera_module_request);
// Enable or disable tracing. // Enable or disable tracing.
[MinVersion=3] [MinVersion=3]
...@@ -63,5 +63,5 @@ interface CameraHalClient { ...@@ -63,5 +63,5 @@ interface CameraHalClient {
// CameraHalServer which holds the original Mojo channel crashes, // CameraHalServer which holds the original Mojo channel crashes,
// CameraHalDispatcher will call SetUpChannel again once a new CameraHalServer // CameraHalDispatcher will call SetUpChannel again once a new CameraHalServer
// reconnects. // reconnects.
SetUpChannel@0(CameraModule camera_module_ptr); SetUpChannel@0(pending_remote<CameraModule> camera_module_ptr);
}; };
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