Index: services/ui/ws/gpu_host.h |
diff --git a/services/ui/ws/gpu_host.h b/services/ui/ws/gpu_host.h |
index b937266a5cc7136b079d451ae36d421b6797c376..5c59aeacd2d6358a291428c4591b1c7c8ecdea0b 100644 |
--- a/services/ui/ws/gpu_host.h |
+++ b/services/ui/ws/gpu_host.h |
@@ -5,6 +5,7 @@ |
#ifndef SERVICES_UI_WS_GPU_HOST_H_ |
#define SERVICES_UI_WS_GPU_HOST_H_ |
+#include "base/memory/weak_ptr.h" |
#include "base/single_thread_task_runner.h" |
#include "base/synchronization/waitable_event.h" |
#include "base/threading/thread.h" |
@@ -12,6 +13,7 @@ |
#include "gpu/ipc/client/gpu_channel_host.h" |
#include "mojo/public/cpp/bindings/binding_set.h" |
#include "mojo/public/cpp/bindings/interface_request.h" |
+#include "mojo/public/cpp/bindings/strong_binding_set.h" |
#include "services/ui/gpu/gpu_main.h" |
#include "services/ui/gpu/interfaces/gpu_host.mojom.h" |
#include "services/ui/gpu/interfaces/gpu_service.mojom.h" |
@@ -23,6 +25,10 @@ class ServerGpuMemoryBufferManager; |
namespace ws { |
+namespace test { |
+class GpuHostTest; |
+} // namespace test |
+ |
class GpuHostDelegate; |
// Sets up connection from clients to the real service implementation in the GPU |
@@ -42,6 +48,45 @@ class GpuHost : public mojom::GpuHost { |
cc::mojom::DisplayCompositorClientPtr client); |
private: |
+ friend class test::GpuHostTest; |
+ |
+ // The implementation that relays requests from clients to the real |
+ // service implementation in the GPU process over mojom.GpuService. |
+ class GpuClient : public base::SupportsWeakPtr<GpuClient>, public mojom::Gpu { |
sadrul
2017/03/22 16:41:13
Use a WeakPtrFactory<> instead
jonross
2017/03/23 00:38:29
Done.
|
+ public: |
+ GpuClient(int client_id, |
+ gpu::GPUInfo* gpu_info, |
+ ServerGpuMemoryBufferManager* gpu_memory_buffer_manager, |
+ mojom::GpuService* gpu_service); |
+ ~GpuClient() override; |
+ |
+ private: |
+ friend class test::GpuHostTest; |
+ void OnGpuChannelEstablished(const EstablishGpuChannelCallback& callback, |
+ mojo::ScopedMessagePipeHandle channel_handle); |
+ // mojom::Gpu overrides: |
+ void EstablishGpuChannel( |
+ const EstablishGpuChannelCallback& callback) override; |
+ void CreateGpuMemoryBuffer( |
+ gfx::GpuMemoryBufferId id, |
+ const gfx::Size& size, |
+ gfx::BufferFormat format, |
+ gfx::BufferUsage usage, |
+ const mojom::Gpu::CreateGpuMemoryBufferCallback& callback) override; |
+ void DestroyGpuMemoryBuffer(gfx::GpuMemoryBufferId id, |
+ const gpu::SyncToken& sync_token) override; |
+ |
+ 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); |
sadrul
2017/03/22 16:41:13
Move this into a separate file.
jonross
2017/03/23 00:38:29
Done.
|
+ }; |
+ |
+ mojom::Gpu* AddInternal(mojom::GpuRequest request); |
void OnBadMessageFromGpu(); |
// mojom::GpuHost: |
@@ -72,6 +117,8 @@ class GpuHost : public mojom::GpuHost { |
// because that will live in another process soon. |
std::unique_ptr<GpuMain> gpu_main_impl_; |
+ mojo::StrongBindingSet<mojom::Gpu> gpu_bindings_; |
+ |
DISALLOW_COPY_AND_ASSIGN(GpuHost); |
}; |