2 #ifndef GPU_IPC_SERVICE_DIRECT_CANVAS_GPU_CHANNEL_H_
3 #define GPU_IPC_SERVICE_DIRECT_CANVAS_GPU_CHANNEL_H_
7 #include "base/memory/shared_memory_handle.h"
8 #include "base/memory/weak_ptr.h"
9 #include "base/unguessable_token.h"
10 #include "ipc/ipc_listener.h"
11 #include "ipc/ipc_sender.h"
13 struct GPUCreateCommandBufferConfig;
16 class SingleThreadTaskRunner;
22 class DirectCanvasCommandBufferStub;
25 class DirectCanvasGpuChannel : public IPC::Listener, public IPC::Sender {
27 DirectCanvasGpuChannel(gpu::GpuChannel* channel,
28 const base::UnguessableToken& channel_token);
29 ~DirectCanvasGpuChannel() override;
31 // IPC::Sender implementation:
32 bool Send(IPC::Message* msg) override;
34 bool OnControlMessageReceived(const IPC::Message& msg);
36 bool RouteMessage(const IPC::Message& msg);
38 void SwapBuffers(int32_t route_id);
41 // IPC::Listener implementation:
42 bool OnMessageReceived(const IPC::Message& message) override;
44 void OnCreateCommandBuffer(const GPUCreateCommandBufferConfig& init_params,
46 base::SharedMemoryHandle shared_state_shm,
48 gpu::Capabilities* capabilities);
50 bool CreateCommandBuffer(const GPUCreateCommandBufferConfig& init_params,
52 base::SharedMemoryHandle shared_state_shm,
53 gpu::Capabilities* capabilities);
55 void OnDestroyCommandBuffer(int32_t route_id);
57 void DestroyCommandBuffer(int32_t route_id);
59 DirectCanvasCommandBufferStub* LookupCommandBuffer(int32_t route_id);
61 gpu::GpuChannel* const channel_;
62 base::UnguessableToken channel_token_;
63 scoped_refptr<base::SingleThreadTaskRunner> task_runner_;
64 scoped_refptr<base::SingleThreadTaskRunner> gpu_task_runner_;
66 std::unordered_map<int32_t, scoped_refptr<DirectCanvasCommandBufferStub>> stubs_;
68 base::WeakPtrFactory<DirectCanvasGpuChannel> weak_factory_;
69 DISALLOW_COPY_AND_ASSIGN(DirectCanvasGpuChannel);
74 #endif // GPU_IPC_SERVICE_DIRECT_CANVAS_GPU_CHANNEL_H_