Commit b5ceb94d authored by Jacobo Aragunde Pérez's avatar Jacobo Aragunde Pérez Committed by Commit Bot

Migrate scenic_gpu_*.mojom to new Mojo types

Highlights:
* There are some other changes to the code logic, derived from the
usage of PendingRemote in function arguments instead of InterfacePtr.
* Shorthands provided by the new Mojo types allowed to simplify some
implementations.
* Moved initialization of affected members to their declarations,
where possible, to comply with coding guidelines.

Bug: 955171
Change-Id: Iebdc315dfcfebc671e0c91c9cf4f9fdd9fdf7b24
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1847309Reviewed-by: default avatarMario Sanchez Prada <mario@igalia.com>
Reviewed-by: default avatarMichael Spang <spang@chromium.org>
Reviewed-by: default avatarDaniel Cheng <dcheng@chromium.org>
Reviewed-by: default avatarOksana Zhuravlova <oksamyt@chromium.org>
Commit-Queue: Jacobo Aragunde Pérez <jaragunde@igalia.com>
Cr-Commit-Position: refs/heads/master@{#710313}
parent 58ad823d
...@@ -135,10 +135,11 @@ class OzonePlatformScenic ...@@ -135,10 +135,11 @@ class OzonePlatformScenic
base::MessageLoopCurrent::Get()->AddDestructionObserver(this); base::MessageLoopCurrent::Get()->AddDestructionObserver(this);
scenic_gpu_host_ = std::make_unique<ScenicGpuHost>(window_manager_.get()); scenic_gpu_host_ = std::make_unique<ScenicGpuHost>(window_manager_.get());
scenic_gpu_host_ptr_ = scenic_gpu_host_->CreateHostProcessSelfBinding(); scenic_gpu_host_remote_.Bind(
scenic_gpu_host_->CreateHostProcessSelfRemote());
surface_factory_ = surface_factory_ =
std::make_unique<ScenicSurfaceFactory>(scenic_gpu_host_ptr_.get()); std::make_unique<ScenicSurfaceFactory>(scenic_gpu_host_remote_.get());
} }
void InitializeGPU(const InitParams& params) override { void InitializeGPU(const InitParams& params) override {
...@@ -153,9 +154,9 @@ class OzonePlatformScenic ...@@ -153,9 +154,9 @@ class OzonePlatformScenic
} else { } else {
DCHECK(!surface_factory_); DCHECK(!surface_factory_);
scenic_gpu_service_ = std::make_unique<ScenicGpuService>( scenic_gpu_service_ = std::make_unique<ScenicGpuService>(
mojo::MakeRequest(&scenic_gpu_host_ptr_)); scenic_gpu_host_remote_.BindNewPipeAndPassReceiver());
surface_factory_ = surface_factory_ =
std::make_unique<ScenicSurfaceFactory>(scenic_gpu_host_ptr_.get()); std::make_unique<ScenicSurfaceFactory>(scenic_gpu_host_remote_.get());
} }
} }
...@@ -175,7 +176,7 @@ class OzonePlatformScenic ...@@ -175,7 +176,7 @@ class OzonePlatformScenic
void WillDestroyCurrentMessageLoop() override { void WillDestroyCurrentMessageLoop() override {
// We must ensure to destroy any resources which rely on the MessageLoop's // We must ensure to destroy any resources which rely on the MessageLoop's
// async_dispatcher. // async_dispatcher.
scenic_gpu_host_ptr_ = nullptr; scenic_gpu_host_remote_.reset();
surface_factory_ = nullptr; surface_factory_ = nullptr;
scenic_gpu_host_ = nullptr; scenic_gpu_host_ = nullptr;
overlay_manager_ = nullptr; overlay_manager_ = nullptr;
...@@ -195,7 +196,7 @@ class OzonePlatformScenic ...@@ -195,7 +196,7 @@ class OzonePlatformScenic
std::unique_ptr<ScenicGpuService> scenic_gpu_service_; std::unique_ptr<ScenicGpuService> scenic_gpu_service_;
std::unique_ptr<ScenicSurfaceFactory> surface_factory_; std::unique_ptr<ScenicSurfaceFactory> surface_factory_;
mojom::ScenicGpuHostPtr scenic_gpu_host_ptr_; mojo::Remote<mojom::ScenicGpuHost> scenic_gpu_host_remote_;
DISALLOW_COPY_AND_ASSIGN(OzonePlatformScenic); DISALLOW_COPY_AND_ASSIGN(OzonePlatformScenic);
}; };
......
...@@ -26,9 +26,9 @@ using BinderCallback = ...@@ -26,9 +26,9 @@ using BinderCallback =
mojo::ScopedMessagePipeHandle)>; mojo::ScopedMessagePipeHandle)>;
template <typename Interface> template <typename Interface>
void BindInterface(mojo::InterfaceRequest<Interface> request, void BindInterface(mojo::PendingReceiver<Interface> receiver,
const BinderCallback& binder_callback) { const BinderCallback& binder_callback) {
binder_callback.Run(Interface::Name_, request.PassMessagePipe()); binder_callback.Run(Interface::Name_, receiver.PassPipe());
} }
} // namespace } // namespace
...@@ -37,10 +37,7 @@ namespace ui { ...@@ -37,10 +37,7 @@ namespace ui {
ScenicGpuHost::ScenicGpuHost(ScenicWindowManager* scenic_window_manager) ScenicGpuHost::ScenicGpuHost(ScenicWindowManager* scenic_window_manager)
: scenic_window_manager_(scenic_window_manager), : scenic_window_manager_(scenic_window_manager),
host_binding_(this), ui_thread_runner_(base::ThreadTaskRunnerHandle::Get()) {
gpu_binding_(this),
ui_thread_runner_(base::ThreadTaskRunnerHandle::Get()),
weak_ptr_factory_(this) {
DETACH_FROM_THREAD(io_thread_checker_); DETACH_FROM_THREAD(io_thread_checker_);
} }
...@@ -48,11 +45,10 @@ ScenicGpuHost::~ScenicGpuHost() { ...@@ -48,11 +45,10 @@ ScenicGpuHost::~ScenicGpuHost() {
DCHECK_CALLED_ON_VALID_THREAD(ui_thread_checker_); DCHECK_CALLED_ON_VALID_THREAD(ui_thread_checker_);
} }
mojom::ScenicGpuHostPtr ScenicGpuHost::CreateHostProcessSelfBinding() { mojo::PendingRemote<mojom::ScenicGpuHost>
DCHECK(!host_binding_.is_bound()); ScenicGpuHost::CreateHostProcessSelfRemote() {
mojom::ScenicGpuHostPtr gpu_host; DCHECK(!host_receiver_.is_bound());
host_binding_.Bind(mojo::MakeRequest(&gpu_host)); return host_receiver_.BindNewPipeAndPassRemote();
return gpu_host;
} }
void ScenicGpuHost::AttachSurfaceToWindow( void ScenicGpuHost::AttachSurfaceToWindow(
...@@ -86,24 +82,23 @@ void ScenicGpuHost::OnGpuServiceLaunched( ...@@ -86,24 +82,23 @@ void ScenicGpuHost::OnGpuServiceLaunched(
GpuHostTerminateCallback terminate_callback) { GpuHostTerminateCallback terminate_callback) {
DCHECK_CALLED_ON_VALID_THREAD(io_thread_checker_); DCHECK_CALLED_ON_VALID_THREAD(io_thread_checker_);
mojom::ScenicGpuServicePtr scenic_gpu_service; mojo::PendingRemote<mojom::ScenicGpuService> scenic_gpu_service;
BindInterface(mojo::MakeRequest(&scenic_gpu_service), binder); BindInterface(scenic_gpu_service.InitWithNewPipeAndPassReceiver(), binder);
ui_thread_runner_->PostTask( ui_thread_runner_->PostTask(
FROM_HERE, base::BindOnce(&ScenicGpuHost::OnGpuServiceLaunchedOnUI, FROM_HERE, base::BindOnce(&ScenicGpuHost::OnGpuServiceLaunchedOnUI,
weak_ptr_factory_.GetWeakPtr(), weak_ptr_factory_.GetWeakPtr(),
scenic_gpu_service.PassInterface())); std::move(scenic_gpu_service)));
} }
void ScenicGpuHost::OnGpuServiceLaunchedOnUI( void ScenicGpuHost::OnGpuServiceLaunchedOnUI(
mojo::InterfacePtrInfo<mojom::ScenicGpuService> gpu_service_ptr_info) { mojo::PendingRemote<mojom::ScenicGpuService> gpu_service) {
DCHECK_CALLED_ON_VALID_THREAD(ui_thread_checker_); DCHECK_CALLED_ON_VALID_THREAD(ui_thread_checker_);
mojom::ScenicGpuHostPtr gpu_host; gpu_receiver_.reset();
gpu_binding_.Close(); gpu_service_.reset();
gpu_binding_.Bind(mojo::MakeRequest(&gpu_host));
gpu_service_.Bind(std::move(gpu_service_ptr_info)); gpu_service_.Bind(std::move(gpu_service));
gpu_service_->Initialize(std::move(gpu_host)); gpu_service_->Initialize(gpu_receiver_.BindNewPipeAndPassRemote());
} }
void ScenicGpuHost::OnMessageReceived(const IPC::Message& message) { void ScenicGpuHost::OnMessageReceived(const IPC::Message& message) {
......
...@@ -12,7 +12,10 @@ ...@@ -12,7 +12,10 @@
#include "base/memory/weak_ptr.h" #include "base/memory/weak_ptr.h"
#include "base/single_thread_task_runner.h" #include "base/single_thread_task_runner.h"
#include "base/threading/thread_checker.h" #include "base/threading/thread_checker.h"
#include "mojo/public/cpp/bindings/binding.h" #include "mojo/public/cpp/bindings/pending_receiver.h"
#include "mojo/public/cpp/bindings/pending_remote.h"
#include "mojo/public/cpp/bindings/receiver.h"
#include "mojo/public/cpp/bindings/remote.h"
#include "ui/ozone/public/gpu_platform_support_host.h" #include "ui/ozone/public/gpu_platform_support_host.h"
#include "ui/ozone/public/mojom/scenic_gpu_host.mojom.h" #include "ui/ozone/public/mojom/scenic_gpu_host.mojom.h"
#include "ui/ozone/public/mojom/scenic_gpu_service.mojom.h" #include "ui/ozone/public/mojom/scenic_gpu_service.mojom.h"
...@@ -32,9 +35,9 @@ class ScenicGpuHost : public mojom::ScenicGpuHost, ...@@ -32,9 +35,9 @@ class ScenicGpuHost : public mojom::ScenicGpuHost,
ScenicGpuHost(ScenicWindowManager* scenic_window_manager); ScenicGpuHost(ScenicWindowManager* scenic_window_manager);
~ScenicGpuHost() override; ~ScenicGpuHost() override;
// Creates browser process binding. This is used to create a software output // Creates browser process remote. This is used to create a software output
// on the UI thread. // on the UI thread.
mojom::ScenicGpuHostPtr CreateHostProcessSelfBinding(); mojo::PendingRemote<mojom::ScenicGpuHost> CreateHostProcessSelfRemote();
// mojom::ScenicGpuHost: // mojom::ScenicGpuHost:
void AttachSurfaceToWindow(int32_t window_id, void AttachSurfaceToWindow(int32_t window_id,
...@@ -57,21 +60,21 @@ class ScenicGpuHost : public mojom::ScenicGpuHost, ...@@ -57,21 +60,21 @@ class ScenicGpuHost : public mojom::ScenicGpuHost,
private: private:
void OnGpuServiceLaunchedOnUI( void OnGpuServiceLaunchedOnUI(
mojo::InterfacePtrInfo<mojom::ScenicGpuService> gpu_service_ptr_info); mojo::PendingRemote<mojom::ScenicGpuService> gpu_service);
void UpdateBinding(uint32_t service_launch_count, void UpdateReceiver(uint32_t service_launch_count,
mojom::ScenicGpuHostRequest scenic_gpu_host_request); mojo::PendingReceiver<mojom::ScenicGpuHost> receiver);
ScenicWindowManager* const scenic_window_manager_; ScenicWindowManager* const scenic_window_manager_;
mojo::Binding<mojom::ScenicGpuHost> host_binding_; mojo::Receiver<mojom::ScenicGpuHost> host_receiver_{this};
mojo::Binding<mojom::ScenicGpuHost> gpu_binding_; mojo::Receiver<mojom::ScenicGpuHost> gpu_receiver_{this};
mojom::ScenicGpuServicePtr gpu_service_; mojo::Remote<mojom::ScenicGpuService> gpu_service_;
scoped_refptr<base::SingleThreadTaskRunner> ui_thread_runner_; scoped_refptr<base::SingleThreadTaskRunner> ui_thread_runner_;
THREAD_CHECKER(ui_thread_checker_); THREAD_CHECKER(ui_thread_checker_);
THREAD_CHECKER(io_thread_checker_); THREAD_CHECKER(io_thread_checker_);
base::WeakPtrFactory<ScenicGpuHost> weak_ptr_factory_; base::WeakPtrFactory<ScenicGpuHost> weak_ptr_factory_{this};
DISALLOW_COPY_AND_ASSIGN(ScenicGpuHost); DISALLOW_COPY_AND_ASSIGN(ScenicGpuHost);
}; };
......
...@@ -11,42 +11,43 @@ namespace ui { ...@@ -11,42 +11,43 @@ namespace ui {
namespace { namespace {
// Fulfills an InterfaceRequest<T> using an InterfacePtr<T>. // Fulfills a PendingReceiver<T> using a PendingRemote<T>.
// //
// Messages queued on the InterfaceRequest's message pipe are preserved and will // Messages queued on the PendingReceiver's message pipe are preserved and will
// be eventually delivered to the remote end of InterfacePtr<T>'s. // be eventually delivered to the remote end of PendingRemote<T>'s.
// //
// InterfacePtr<T> must be a brand new interface; i.e., it not have been // PendingRemote<T> must be a brand new interface; i.e., it not have been
// previously used to send a message. // previously used to send a message.
template <typename Interface> template <typename Interface>
void FulfillInterfaceRequest( void FulfillPendingReceiver(mojo::PendingReceiver<Interface> receiver,
mojo::InterfaceRequest<Interface> interface_request, mojo::PendingRemote<Interface> remote) {
mojo::InterfacePtr<Interface> interface_ptr) {
MojoResult result = MojoResult result =
mojo::FuseMessagePipes(interface_ptr.PassInterface().PassHandle(), mojo::FuseMessagePipes(remote.PassPipe(), receiver.PassPipe());
interface_request.PassMessagePipe());
DCHECK_EQ(result, MOJO_RESULT_OK); DCHECK_EQ(result, MOJO_RESULT_OK);
} }
} // namespace } // namespace
ScenicGpuService::ScenicGpuService(mojom::ScenicGpuHostRequest gpu_host_request) ScenicGpuService::ScenicGpuService(
: gpu_host_request_(std::move(gpu_host_request)), weak_ptr_factory_(this) {} mojo::PendingReceiver<mojom::ScenicGpuHost> gpu_host_receiver)
: gpu_host_receiver_(std::move(gpu_host_receiver)) {}
ScenicGpuService::~ScenicGpuService() {} ScenicGpuService::~ScenicGpuService() {}
base::RepeatingCallback<void(mojom::ScenicGpuServiceRequest)> base::RepeatingCallback<void(mojo::PendingReceiver<mojom::ScenicGpuService>)>
ScenicGpuService::GetBinderCallback() { ScenicGpuService::GetBinderCallback() {
return base::BindRepeating(&ScenicGpuService::AddBinding, return base::BindRepeating(&ScenicGpuService::AddReceiver,
weak_ptr_factory_.GetWeakPtr()); weak_ptr_factory_.GetWeakPtr());
} }
void ScenicGpuService::Initialize(mojom::ScenicGpuHostPtr gpu_host) { void ScenicGpuService::Initialize(
FulfillInterfaceRequest(std::move(gpu_host_request_), std::move(gpu_host)); mojo::PendingRemote<mojom::ScenicGpuHost> gpu_host) {
FulfillPendingReceiver(std::move(gpu_host_receiver_), std::move(gpu_host));
} }
void ScenicGpuService::AddBinding(mojom::ScenicGpuServiceRequest request) { void ScenicGpuService::AddReceiver(
binding_set_.AddBinding(this, std::move(request)); mojo::PendingReceiver<mojom::ScenicGpuService> receiver) {
receiver_set_.Add(this, std::move(receiver));
} }
} // namespace ui } // namespace ui
...@@ -8,7 +8,9 @@ ...@@ -8,7 +8,9 @@
#include "base/callback.h" #include "base/callback.h"
#include "base/macros.h" #include "base/macros.h"
#include "base/memory/weak_ptr.h" #include "base/memory/weak_ptr.h"
#include "mojo/public/cpp/bindings/binding_set.h" #include "mojo/public/cpp/bindings/pending_receiver.h"
#include "mojo/public/cpp/bindings/pending_remote.h"
#include "mojo/public/cpp/bindings/receiver_set.h"
#include "ui/ozone/public/mojom/scenic_gpu_host.mojom.h" #include "ui/ozone/public/mojom/scenic_gpu_host.mojom.h"
#include "ui/ozone/public/mojom/scenic_gpu_service.mojom.h" #include "ui/ozone/public/mojom/scenic_gpu_service.mojom.h"
...@@ -22,23 +24,24 @@ namespace ui { ...@@ -22,23 +24,24 @@ namespace ui {
// so that surfaces can present to Scenic views managed by the browser. // so that surfaces can present to Scenic views managed by the browser.
class ScenicGpuService : public mojom::ScenicGpuService { class ScenicGpuService : public mojom::ScenicGpuService {
public: public:
ScenicGpuService(mojom::ScenicGpuHostRequest gpu_host_request); ScenicGpuService(
mojo::PendingReceiver<mojom::ScenicGpuHost> gpu_host_receiver);
~ScenicGpuService() override; ~ScenicGpuService() override;
base::RepeatingCallback<void(mojom::ScenicGpuServiceRequest)> base::RepeatingCallback<void(mojo::PendingReceiver<mojom::ScenicGpuService>)>
GetBinderCallback(); GetBinderCallback();
// mojom::ScenicGpuService: // mojom::ScenicGpuService:
void Initialize(mojom::ScenicGpuHostPtr gpu_host) override; void Initialize(mojo::PendingRemote<mojom::ScenicGpuHost> gpu_host) override;
private: private:
void AddBinding(mojom::ScenicGpuServiceRequest request); void AddReceiver(mojo::PendingReceiver<mojom::ScenicGpuService> receiver);
mojom::ScenicGpuHostRequest gpu_host_request_; mojo::PendingReceiver<mojom::ScenicGpuHost> gpu_host_receiver_;
mojo::BindingSet<mojom::ScenicGpuService> binding_set_; mojo::ReceiverSet<mojom::ScenicGpuService> receiver_set_;
base::WeakPtrFactory<ScenicGpuService> weak_ptr_factory_; base::WeakPtrFactory<ScenicGpuService> weak_ptr_factory_{this};
DISALLOW_COPY_AND_ASSIGN(ScenicGpuService); DISALLOW_COPY_AND_ASSIGN(ScenicGpuService);
}; };
......
...@@ -15,5 +15,5 @@ interface ScenicGpuService { ...@@ -15,5 +15,5 @@ interface ScenicGpuService {
// //
// TODO(spang): Consider providing a way for GPU to request ScenicGpuHost from // TODO(spang): Consider providing a way for GPU to request ScenicGpuHost from
// service manager instead of returning one from a callback. // service manager instead of returning one from a callback.
Initialize(ScenicGpuHost scenic_gpu_host); Initialize(pending_remote<ScenicGpuHost> scenic_gpu_host);
}; };
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