9d027bf96d3aa509faecc63afac2439c26a005d6
[platform/framework/web/crosswalk-tizen.git] /
1
2 #ifndef GPU_IPC_SERVICE_DIRECT_CANVAS_GPU_CHANNEL_H_
3 #define GPU_IPC_SERVICE_DIRECT_CANVAS_GPU_CHANNEL_H_
4
5 #include <memory>
6
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"
12
13 struct GPUCreateCommandBufferConfig;
14
15 namespace base {
16 class SingleThreadTaskRunner;
17 }
18
19 namespace gpu {
20
21 struct Capabilities;
22 class DirectCanvasCommandBufferStub;
23 class GpuChannel;
24
25 class DirectCanvasGpuChannel : public IPC::Listener, public IPC::Sender {
26  public:
27   DirectCanvasGpuChannel(gpu::GpuChannel* channel,
28                          const base::UnguessableToken& channel_token);
29   ~DirectCanvasGpuChannel() override;
30
31   // IPC::Sender implementation:
32   bool Send(IPC::Message* msg) override;
33
34   bool OnControlMessageReceived(const IPC::Message& msg);
35
36   bool RouteMessage(const IPC::Message& msg);
37
38   void SwapBuffers(int32_t route_id);
39
40  private:
41   // IPC::Listener implementation:
42   bool OnMessageReceived(const IPC::Message& message) override;
43
44   void OnCreateCommandBuffer(const GPUCreateCommandBufferConfig& init_params,
45                              int32_t route_id,
46                              base::SharedMemoryHandle shared_state_shm,
47                              bool* result,
48                              gpu::Capabilities* capabilities);
49
50   bool CreateCommandBuffer(const GPUCreateCommandBufferConfig& init_params,
51                            int32_t route_id,
52                            base::SharedMemoryHandle shared_state_shm,
53                            gpu::Capabilities* capabilities);
54
55   void OnDestroyCommandBuffer(int32_t route_id);
56
57   void DestroyCommandBuffer(int32_t route_id);
58
59   DirectCanvasCommandBufferStub* LookupCommandBuffer(int32_t route_id);
60
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_;
65
66   std::unordered_map<int32_t, scoped_refptr<DirectCanvasCommandBufferStub>> stubs_;
67
68   base::WeakPtrFactory<DirectCanvasGpuChannel> weak_factory_;
69   DISALLOW_COPY_AND_ASSIGN(DirectCanvasGpuChannel);
70 };
71
72 }  // namespace gpu
73
74 #endif  // GPU_IPC_SERVICE_DIRECT_CANVAS_GPU_CHANNEL_H_