5a04d61ad2416bdffedf32d8f9c0e38f0336970e
[platform/framework/web/crosswalk-tizen.git] /
1
2 #ifndef GPU_IPC_SERVICE_DIRECT_CANVAS_COMMAND_BUFFER_STUB_H_
3 #define GPU_IPC_SERVICE_DIRECT_CANVAS_COMMAND_BUFFER_STUB_H_
4
5 #include <memory>
6
7 #include "base/memory/shared_memory_handle.h"
8 #include "base/memory/weak_ptr.h"
9 #include "ipc/ipc_sender.h"
10 #include "ui/events/latency_info.h"
11
12 struct GpuCommandBufferMsg_CreateImage_Params;
13
14 namespace base {
15 class SharedMemory;
16 }
17
18 namespace gpu {
19
20 struct Capabilities;
21 class DirectCanvasGpuChannel;
22 class GpuChannel;
23 class InProcessCommandBuffer;
24 struct Mailbox;
25 struct SyncToken;
26
27 class DirectCanvasCommandBufferStub
28     : public IPC::Sender,
29       public base::SupportsWeakPtr<DirectCanvasCommandBufferStub>,
30       public base::RefCountedThreadSafe<DirectCanvasCommandBufferStub> {
31  public:
32   DirectCanvasCommandBufferStub(
33       DirectCanvasGpuChannel* channel,
34       int32_t route_id,
35       std::unique_ptr<InProcessCommandBuffer> command_buffer,
36       std::unique_ptr<base::SharedMemory> shared_state_shm,
37       gpu::Capabilities* capabilities);
38
39   // IPC::Sender implementation:
40   bool Send(IPC::Message* msg) override;
41
42   void HandleMessage(const IPC::Message& message);
43
44   void FenceSyncRelease(uint64_t release);
45
46   bool SwapBuffersOnGpuThread();
47
48   int32_t route_id() const { return route_id_; }
49
50  private:
51   friend class base::RefCountedThreadSafe<DirectCanvasCommandBufferStub>;
52   ~DirectCanvasCommandBufferStub() override;
53
54   void OnSetGetBuffer(int32_t shm_id, IPC::Message* reply_message);
55   void OnTakeFrontBuffer(const Mailbox& mailbox);
56   void OnReturnFrontBuffer(const Mailbox& mailbox, bool is_lost);
57   void OnWaitForTokenInRange(int32_t start,
58                              int32_t end,
59                              IPC::Message* reply_message);
60   void OnWaitForGetOffsetInRange(int32_t start,
61                                  int32_t end,
62                                  IPC::Message* reply_message);
63   void OnAsyncFlush(int32_t put_offset,
64                     uint32_t flush_count,
65                     const std::vector<ui::LatencyInfo>& latency_info);
66   void OnRegisterTransferBuffer(int32_t id,
67                                 base::SharedMemoryHandle transfer_buffer,
68                                 uint32_t size);
69   void OnDestroyTransferBuffer(int32_t id);
70
71   void OnWaitSyncToken(const SyncToken& sync_token);
72   void OnSignalSyncToken(const SyncToken& sync_token, uint32_t id);
73   void OnSignalQuery(uint32_t query, uint32_t id);
74
75   void OnCreateImage(const GpuCommandBufferMsg_CreateImage_Params& params);
76   void OnDestroyImage(int32_t id);
77   void OnCreateStreamTexture(uint32_t texture_id,
78                              int32_t stream_id,
79                              bool* succeeded);
80
81   DirectCanvasGpuChannel* const channel_;
82   std::unique_ptr<InProcessCommandBuffer> command_buffer_;
83   int32_t route_id_;
84 };
85
86 }  // namespace gpu
87
88 #endif  // GPU_IPC_SERVICE_DIRECT_CANVAS_COMMAND_BUFFER_STUB_H_