Chromium Code Reviews| Index: services/ui/ws/gpu_host.cc |
| diff --git a/services/ui/ws/gpu_host.cc b/services/ui/ws/gpu_host.cc |
| index 515e19fdf33e3667c625533a8135b6f7506ff580..9194b5ebce431b739f281eba26829520ca0e506f 100644 |
| --- a/services/ui/ws/gpu_host.cc |
| +++ b/services/ui/ws/gpu_host.cc |
| @@ -31,73 +31,61 @@ namespace { |
| // The client Id 1 is reserved for the display compositor. |
| const int32_t kInternalGpuChannelClientId = 2; |
| -// The implementation that relays requests from clients to the real |
| -// service implementation in the GPU process over mojom.GpuService. |
| -class GpuClient : public mojom::Gpu { |
| - public: |
| - GpuClient(int client_id, |
| - gpu::GPUInfo* gpu_info, |
| - ServerGpuMemoryBufferManager* gpu_memory_buffer_manager, |
| - mojom::GpuService* gpu_service) |
| - : client_id_(client_id), |
| - gpu_info_(gpu_info), |
| - gpu_memory_buffer_manager_(gpu_memory_buffer_manager), |
| - gpu_service_(gpu_service) { |
| - DCHECK(gpu_memory_buffer_manager_); |
| - DCHECK(gpu_service_); |
| +} // namespace |
| + |
| +GpuHost::GpuClient::GpuClient( |
| + int client_id, |
| + gpu::GPUInfo* gpu_info, |
| + ServerGpuMemoryBufferManager* gpu_memory_buffer_manager, |
| + mojom::GpuService* gpu_service) |
| + : client_id_(client_id), |
| + gpu_info_(gpu_info), |
| + gpu_memory_buffer_manager_(gpu_memory_buffer_manager), |
| + gpu_service_(gpu_service) { |
| + DCHECK(gpu_memory_buffer_manager_); |
| + DCHECK(gpu_service_); |
| } |
| - ~GpuClient() override { |
| + |
| + GpuHost::GpuClient::~GpuClient() { |
| gpu_memory_buffer_manager_->DestroyAllGpuMemoryBufferForClient(client_id_); |
| } |
| - private: |
| - void OnGpuChannelEstablished(const EstablishGpuChannelCallback& callback, |
| - mojo::ScopedMessagePipeHandle channel_handle) { |
| + void GpuHost::GpuClient::OnGpuChannelEstablished( |
| + const EstablishGpuChannelCallback& callback, |
| + mojo::ScopedMessagePipeHandle channel_handle) { |
| callback.Run(client_id_, std::move(channel_handle), *gpu_info_); |
| } |
| // mojom::Gpu overrides: |
| - void EstablishGpuChannel( |
| - const EstablishGpuChannelCallback& callback) override { |
| + void GpuHost::GpuClient::EstablishGpuChannel( |
| + const EstablishGpuChannelCallback& callback) { |
| // TODO(sad): crbug.com/617415 figure out how to generate a meaningful |
| // tracing id. |
| const uint64_t client_tracing_id = 0; |
| constexpr bool is_gpu_host = false; |
| gpu_service_->EstablishGpuChannel( |
| client_id_, client_tracing_id, is_gpu_host, |
| - base::Bind(&GpuClient::OnGpuChannelEstablished, base::Unretained(this), |
| - callback)); |
| + base::Bind(&GpuClient::OnGpuChannelEstablished, AsWeakPtr(), callback)); |
| } |
| - void CreateGpuMemoryBuffer( |
| + void GpuHost::GpuClient::CreateGpuMemoryBuffer( |
| gfx::GpuMemoryBufferId id, |
| const gfx::Size& size, |
| gfx::BufferFormat format, |
| gfx::BufferUsage usage, |
| - const mojom::Gpu::CreateGpuMemoryBufferCallback& callback) override { |
| + const mojom::Gpu::CreateGpuMemoryBufferCallback& callback) { |
| auto handle = gpu_memory_buffer_manager_->CreateGpuMemoryBufferHandle( |
| id, client_id_, size, format, usage, gpu::kNullSurfaceHandle); |
| callback.Run(handle); |
| } |
| - void DestroyGpuMemoryBuffer(gfx::GpuMemoryBufferId id, |
| - const gpu::SyncToken& sync_token) override { |
| + void GpuHost::GpuClient::DestroyGpuMemoryBuffer( |
| + gfx::GpuMemoryBufferId id, |
| + const gpu::SyncToken& sync_token) { |
| gpu_memory_buffer_manager_->DestroyGpuMemoryBuffer(id, client_id_, |
| sync_token); |
| } |
| - const int client_id_; |
| - |
| - // The objects these pointers refer to are owned by the GpuHost object. |
| - const gpu::GPUInfo* gpu_info_; |
| - ServerGpuMemoryBufferManager* gpu_memory_buffer_manager_; |
| - mojom::GpuService* gpu_service_; |
| - |
| - DISALLOW_COPY_AND_ASSIGN(GpuClient); |
| -}; |
| - |
| -} // namespace |
| - |
| GpuHost::GpuHost(GpuHostDelegate* delegate) |
| : delegate_(delegate), |
| next_client_id_(kInternalGpuChannelClientId + 1), |
| @@ -121,11 +109,7 @@ GpuHost::GpuHost(GpuHostDelegate* delegate) |
| GpuHost::~GpuHost() {} |
| void GpuHost::Add(mojom::GpuRequest request) { |
| - mojo::MakeStrongBinding( |
| - base::MakeUnique<GpuClient>(next_client_id_++, &gpu_info_, |
| - gpu_memory_buffer_manager_.get(), |
| - gpu_service_.get()), |
| - std::move(request)); |
| + AddInternal(std::move(request)); |
| } |
| void GpuHost::OnAcceleratedWidgetAvailable(gfx::AcceleratedWidget widget) { |
| @@ -146,6 +130,15 @@ void GpuHost::CreateDisplayCompositor( |
| gpu_main_->CreateDisplayCompositor(std::move(request), std::move(client)); |
| } |
| +mojom::Gpu* GpuHost::AddInternal(mojom::GpuRequest request) { |
| + std::unique_ptr<GpuClient> client(base::MakeUnique<GpuClient>( |
|
sadrul
2017/03/22 16:41:13
auto client = base::MakeUnique<...
jonross
2017/03/23 00:38:29
Done.
|
| + next_client_id_++, &gpu_info_, gpu_memory_buffer_manager_.get(), |
| + gpu_service_.get())); |
| + GpuClient* client_ref = client.get(); |
| + gpu_bindings_.AddBinding(std::move(client), std::move(request)); |
| + return client_ref; |
| +} |
| + |
| void GpuHost::OnBadMessageFromGpu() { |
| // TODO(sad): Received some unexpected message from the gpu process. We |
| // should kill the process and restart it. |