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

Convert CameraHalClient to new Mojo types

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

Bug: 955171
Change-Id: I33fc6c386f1fe8dc205a8ea76d5afc0782c7996b
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1862924
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 avatarRicky Liang <jcliang@chromium.org>
Cr-Commit-Position: refs/heads/master@{#707285}
parent 27b72502
...@@ -135,7 +135,7 @@ void ArcCameraBridge::StartCameraService(StartCameraServiceCallback callback) { ...@@ -135,7 +135,7 @@ void ArcCameraBridge::StartCameraService(StartCameraServiceCallback callback) {
} }
void ArcCameraBridge::RegisterCameraHalClient( void ArcCameraBridge::RegisterCameraHalClient(
cros::mojom::CameraHalClientPtr client) { mojo::PendingRemote<cros::mojom::CameraHalClient> client) {
media::CameraHalDispatcherImpl::GetInstance()->RegisterClient( media::CameraHalDispatcherImpl::GetInstance()->RegisterClient(
std::move(client)); std::move(client));
} }
......
...@@ -11,6 +11,7 @@ ...@@ -11,6 +11,7 @@
#include "base/macros.h" #include "base/macros.h"
#include "components/arc/mojom/camera.mojom.h" #include "components/arc/mojom/camera.mojom.h"
#include "components/keyed_service/core/keyed_service.h" #include "components/keyed_service/core/keyed_service.h"
#include "mojo/public/cpp/bindings/pending_remote.h"
namespace content { namespace content {
class BrowserContext; class BrowserContext;
...@@ -34,7 +35,8 @@ class ArcCameraBridge : public KeyedService, public mojom::CameraHost { ...@@ -34,7 +35,8 @@ class ArcCameraBridge : public KeyedService, public mojom::CameraHost {
// mojom::CameraHost overrides: // mojom::CameraHost overrides:
void StartCameraService(StartCameraServiceCallback callback) override; void StartCameraService(StartCameraServiceCallback callback) override;
void RegisterCameraHalClient(cros::mojom::CameraHalClientPtr client) override; void RegisterCameraHalClient(
mojo::PendingRemote<cros::mojom::CameraHalClient> client) override;
private: private:
class PendingStartCameraServiceResult; class PendingStartCameraServiceResult;
......
...@@ -99,7 +99,8 @@ interface CameraHost { ...@@ -99,7 +99,8 @@ interface CameraHost {
StartCameraService@0() => (CameraService service); StartCameraService@0() => (CameraService service);
// Registers the camera HAL client. Used by camera HAL v3. // Registers the camera HAL client. Used by camera HAL v3.
[MinVersion=2] RegisterCameraHalClient@1(cros.mojom.CameraHalClient client); [MinVersion=2] RegisterCameraHalClient@1(
pending_remote<cros.mojom.CameraHalClient> client);
}; };
// Next method ID: 1 // Next method ID: 1
......
...@@ -66,17 +66,18 @@ bool WaitForSocketReadable(int raw_socket_fd, int raw_cancel_fd) { ...@@ -66,17 +66,18 @@ bool WaitForSocketReadable(int raw_socket_fd, int raw_cancel_fd) {
class MojoCameraClientObserver : public CameraClientObserver { class MojoCameraClientObserver : public CameraClientObserver {
public: public:
explicit MojoCameraClientObserver(cros::mojom::CameraHalClientPtr client) explicit MojoCameraClientObserver(
mojo::PendingRemote<cros::mojom::CameraHalClient> client)
: client_(std::move(client)) {} : client_(std::move(client)) {}
void OnChannelCreated(cros::mojom::CameraModulePtr camera_module) override { void OnChannelCreated(cros::mojom::CameraModulePtr camera_module) override {
client_->SetUpChannel(std::move(camera_module)); client_->SetUpChannel(std::move(camera_module));
} }
cros::mojom::CameraHalClientPtr& client() { return client_; } mojo::Remote<cros::mojom::CameraHalClient>& client() { return client_; }
private: private:
cros::mojom::CameraHalClientPtr client_; mojo::Remote<cros::mojom::CameraHalClient> client_;
DISALLOW_IMPLICIT_CONSTRUCTORS(MojoCameraClientObserver); DISALLOW_IMPLICIT_CONSTRUCTORS(MojoCameraClientObserver);
}; };
...@@ -185,14 +186,14 @@ void CameraHalDispatcherImpl::RegisterServer( ...@@ -185,14 +186,14 @@ void CameraHalDispatcherImpl::RegisterServer(
} }
void CameraHalDispatcherImpl::RegisterClient( void CameraHalDispatcherImpl::RegisterClient(
cros::mojom::CameraHalClientPtr client) { mojo::PendingRemote<cros::mojom::CameraHalClient> client) {
// RegisterClient can be called locally by ArcCameraBridge. Unretained // RegisterClient can be called locally by ArcCameraBridge. Unretained
// reference is safe here because CameraHalDispatcherImpl owns // reference is safe here because CameraHalDispatcherImpl owns
// |proxy_thread_|. // |proxy_thread_|.
proxy_task_runner_->PostTask( proxy_task_runner_->PostTask(
FROM_HERE, FROM_HERE,
base::BindOnce(&CameraHalDispatcherImpl::RegisterClientOnProxyThread, base::BindOnce(&CameraHalDispatcherImpl::RegisterClientOnProxyThread,
base::Unretained(this), client.PassInterface())); base::Unretained(this), std::move(client)));
} }
void CameraHalDispatcherImpl::GetJpegDecodeAccelerator( void CameraHalDispatcherImpl::GetJpegDecodeAccelerator(
...@@ -333,12 +334,11 @@ void CameraHalDispatcherImpl::StartServiceLoop(base::ScopedFD socket_fd, ...@@ -333,12 +334,11 @@ void CameraHalDispatcherImpl::StartServiceLoop(base::ScopedFD socket_fd,
} }
void CameraHalDispatcherImpl::RegisterClientOnProxyThread( void CameraHalDispatcherImpl::RegisterClientOnProxyThread(
mojo::InterfacePtrInfo<cros::mojom::CameraHalClient> client_ptr_info) { mojo::PendingRemote<cros::mojom::CameraHalClient> client) {
DCHECK(proxy_task_runner_->BelongsToCurrentThread()); DCHECK(proxy_task_runner_->BelongsToCurrentThread());
cros::mojom::CameraHalClientPtr client_ptr(std::move(client_ptr_info));
auto client_observer = auto client_observer =
std::make_unique<MojoCameraClientObserver>(std::move(client_ptr)); std::make_unique<MojoCameraClientObserver>(std::move(client));
client_observer->client().set_connection_error_handler(base::BindOnce( client_observer->client().set_disconnect_handler(base::BindOnce(
&CameraHalDispatcherImpl::OnCameraHalClientConnectionError, &CameraHalDispatcherImpl::OnCameraHalClientConnectionError,
base::Unretained(this), base::Unretained(client_observer.get()))); base::Unretained(this), base::Unretained(client_observer.get())));
AddClientObserver(std::move(client_observer)); AddClientObserver(std::move(client_observer));
......
...@@ -68,7 +68,8 @@ class CAPTURE_EXPORT CameraHalDispatcherImpl final ...@@ -68,7 +68,8 @@ class CAPTURE_EXPORT CameraHalDispatcherImpl final
// CameraHalDispatcher implementations. // CameraHalDispatcher implementations.
void RegisterServer( void RegisterServer(
mojo::PendingRemote<cros::mojom::CameraHalServer> server) final; mojo::PendingRemote<cros::mojom::CameraHalServer> server) final;
void RegisterClient(cros::mojom::CameraHalClientPtr client) final; void RegisterClient(
mojo::PendingRemote<cros::mojom::CameraHalClient> client) final;
void GetJpegDecodeAccelerator( void GetJpegDecodeAccelerator(
mojo::PendingReceiver<chromeos_camera::mojom::MjpegDecodeAccelerator> mojo::PendingReceiver<chromeos_camera::mojom::MjpegDecodeAccelerator>
jda_receiver) final; jda_receiver) final;
...@@ -99,7 +100,7 @@ class CAPTURE_EXPORT CameraHalDispatcherImpl final ...@@ -99,7 +100,7 @@ class CAPTURE_EXPORT CameraHalDispatcherImpl final
void StartServiceLoop(base::ScopedFD socket_fd, base::WaitableEvent* started); void StartServiceLoop(base::ScopedFD socket_fd, base::WaitableEvent* started);
void RegisterClientOnProxyThread( void RegisterClientOnProxyThread(
mojo::InterfacePtrInfo<cros::mojom::CameraHalClient> client_ptr_info); mojo::PendingRemote<cros::mojom::CameraHalClient> client);
void AddClientObserverOnProxyThread( void AddClientObserverOnProxyThread(
std::unique_ptr<CameraClientObserver> observer); std::unique_ptr<CameraClientObserver> observer);
......
...@@ -15,7 +15,6 @@ ...@@ -15,7 +15,6 @@
#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_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 "mojo/public/cpp/bindings/strong_binding.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"
...@@ -51,7 +50,7 @@ class MockCameraHalServer : public cros::mojom::CameraHalServer { ...@@ -51,7 +50,7 @@ class MockCameraHalServer : public cros::mojom::CameraHalServer {
class MockCameraHalClient : public cros::mojom::CameraHalClient { class MockCameraHalClient : public cros::mojom::CameraHalClient {
public: public:
MockCameraHalClient() : binding_(this) {} MockCameraHalClient() = default;
~MockCameraHalClient() = default; ~MockCameraHalClient() = default;
...@@ -61,16 +60,12 @@ class MockCameraHalClient : public cros::mojom::CameraHalClient { ...@@ -61,16 +60,12 @@ class MockCameraHalClient : public cros::mojom::CameraHalClient {
MOCK_METHOD1(DoSetUpChannel, MOCK_METHOD1(DoSetUpChannel,
void(cros::mojom::CameraModulePtr& camera_module_ptr)); void(cros::mojom::CameraModulePtr& camera_module_ptr));
cros::mojom::CameraHalClientPtrInfo GetInterfacePtrInfo() { mojo::PendingRemote<cros::mojom::CameraHalClient> GetPendingRemote() {
cros::mojom::CameraHalClientPtrInfo camera_hal_client_ptr_info; return receiver_.BindNewPipeAndPassRemote();
cros::mojom::CameraHalClientRequest camera_hal_client_request =
mojo::MakeRequest(&camera_hal_client_ptr_info);
binding_.Bind(std::move(camera_hal_client_request));
return camera_hal_client_ptr_info;
} }
private: private:
mojo::Binding<cros::mojom::CameraHalClient> binding_; mojo::Receiver<cros::mojom::CameraHalClient> receiver_{this};
DISALLOW_COPY_AND_ASSIGN(MockCameraHalClient); DISALLOW_COPY_AND_ASSIGN(MockCameraHalClient);
}; };
...@@ -110,9 +105,10 @@ class CameraHalDispatcherImplTest : public ::testing::Test { ...@@ -110,9 +105,10 @@ class CameraHalDispatcherImplTest : public ::testing::Test {
dispatcher->RegisterServer(std::move(server)); dispatcher->RegisterServer(std::move(server));
} }
static void RegisterClient(CameraHalDispatcherImpl* dispatcher, static void RegisterClient(
cros::mojom::CameraHalClientPtrInfo client) { CameraHalDispatcherImpl* dispatcher,
dispatcher->RegisterClient(mojo::MakeProxy(std::move(client))); mojo::PendingRemote<cros::mojom::CameraHalClient> client) {
dispatcher->RegisterClient(std::move(client));
} }
protected: protected:
...@@ -145,11 +141,11 @@ TEST_F(CameraHalDispatcherImplTest, ServerConnectionError) { ...@@ -145,11 +141,11 @@ TEST_F(CameraHalDispatcherImplTest, ServerConnectionError) {
FROM_HERE, FROM_HERE,
base::BindOnce(&CameraHalDispatcherImplTest::RegisterServer, base::BindOnce(&CameraHalDispatcherImplTest::RegisterServer,
base::Unretained(dispatcher_), std::move(server))); base::Unretained(dispatcher_), std::move(server)));
auto client_ptr = mock_client->GetInterfacePtrInfo(); auto client = mock_client->GetPendingRemote();
GetProxyTaskRunner()->PostTask( GetProxyTaskRunner()->PostTask(
FROM_HERE, FROM_HERE,
base::BindOnce(&CameraHalDispatcherImplTest::RegisterClient, base::BindOnce(&CameraHalDispatcherImplTest::RegisterClient,
base::Unretained(dispatcher_), base::Passed(&client_ptr))); base::Unretained(dispatcher_), std::move(client)));
// Wait until the client gets the established Mojo channel. // Wait until the client gets the established Mojo channel.
DoLoop(); DoLoop();
...@@ -194,11 +190,11 @@ TEST_F(CameraHalDispatcherImplTest, ClientConnectionError) { ...@@ -194,11 +190,11 @@ TEST_F(CameraHalDispatcherImplTest, ClientConnectionError) {
FROM_HERE, FROM_HERE,
base::BindOnce(&CameraHalDispatcherImplTest::RegisterServer, base::BindOnce(&CameraHalDispatcherImplTest::RegisterServer,
base::Unretained(dispatcher_), std::move(server))); base::Unretained(dispatcher_), std::move(server)));
auto client_ptr = mock_client->GetInterfacePtrInfo(); auto client = mock_client->GetPendingRemote();
GetProxyTaskRunner()->PostTask( GetProxyTaskRunner()->PostTask(
FROM_HERE, FROM_HERE,
base::BindOnce(&CameraHalDispatcherImplTest::RegisterClient, base::BindOnce(&CameraHalDispatcherImplTest::RegisterClient,
base::Unretained(dispatcher_), base::Passed(&client_ptr))); base::Unretained(dispatcher_), std::move(client)));
// Wait until the client gets the established Mojo channel. // Wait until the client gets the established Mojo channel.
DoLoop(); DoLoop();
...@@ -214,11 +210,11 @@ TEST_F(CameraHalDispatcherImplTest, ClientConnectionError) { ...@@ -214,11 +210,11 @@ TEST_F(CameraHalDispatcherImplTest, ClientConnectionError) {
.WillOnce( .WillOnce(
InvokeWithoutArgs(this, &CameraHalDispatcherImplTest::QuitRunLoop)); InvokeWithoutArgs(this, &CameraHalDispatcherImplTest::QuitRunLoop));
client_ptr = mock_client->GetInterfacePtrInfo(); client = mock_client->GetPendingRemote();
GetProxyTaskRunner()->PostTask( GetProxyTaskRunner()->PostTask(
FROM_HERE, FROM_HERE,
base::BindOnce(&CameraHalDispatcherImplTest::RegisterClient, base::BindOnce(&CameraHalDispatcherImplTest::RegisterClient,
base::Unretained(dispatcher_), base::Passed(&client_ptr))); base::Unretained(dispatcher_), std::move(client)));
// Wait until the clients gets the newly established Mojo channel. // Wait until the clients gets the newly established Mojo channel.
DoLoop(); DoLoop();
......
...@@ -25,7 +25,7 @@ interface CameraHalDispatcher { ...@@ -25,7 +25,7 @@ interface CameraHalDispatcher {
// A CameraHalClient calls RegisterClient to register itself with the // A CameraHalClient calls RegisterClient to register itself with the
// dispatcher. // dispatcher.
RegisterClient@1(CameraHalClient client); RegisterClient@1(pending_remote<CameraHalClient> client);
// Get JpegDecodeAccelerator from dispatcher. // Get JpegDecodeAccelerator from dispatcher.
[MinVersion=1] GetJpegDecodeAccelerator@2( [MinVersion=1] GetJpegDecodeAccelerator@2(
......
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