2 #ifndef GPU_IPC_SERVICE_DIRECT_CANVAS_COMMAND_BUFFER_STUB_H_
3 #define GPU_IPC_SERVICE_DIRECT_CANVAS_COMMAND_BUFFER_STUB_H_
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"
12 struct GpuCommandBufferMsg_CreateImage_Params;
21 class DirectCanvasGpuChannel;
23 class InProcessCommandBuffer;
27 class DirectCanvasCommandBufferStub
29 public base::SupportsWeakPtr<DirectCanvasCommandBufferStub>,
30 public base::RefCountedThreadSafe<DirectCanvasCommandBufferStub> {
32 DirectCanvasCommandBufferStub(
33 DirectCanvasGpuChannel* channel,
35 std::unique_ptr<InProcessCommandBuffer> command_buffer,
36 std::unique_ptr<base::SharedMemory> shared_state_shm,
37 gpu::Capabilities* capabilities);
39 // IPC::Sender implementation:
40 bool Send(IPC::Message* msg) override;
42 void HandleMessage(const IPC::Message& message);
44 void FenceSyncRelease(uint64_t release);
46 bool SwapBuffersOnGpuThread();
48 int32_t route_id() const { return route_id_; }
51 friend class base::RefCountedThreadSafe<DirectCanvasCommandBufferStub>;
52 ~DirectCanvasCommandBufferStub() override;
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,
59 IPC::Message* reply_message);
60 void OnWaitForGetOffsetInRange(int32_t start,
62 IPC::Message* reply_message);
63 void OnAsyncFlush(int32_t put_offset,
65 const std::vector<ui::LatencyInfo>& latency_info);
66 void OnRegisterTransferBuffer(int32_t id,
67 base::SharedMemoryHandle transfer_buffer,
69 void OnDestroyTransferBuffer(int32_t id);
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);
75 void OnCreateImage(const GpuCommandBufferMsg_CreateImage_Params& params);
76 void OnDestroyImage(int32_t id);
77 void OnCreateStreamTexture(uint32_t texture_id,
81 DirectCanvasGpuChannel* const channel_;
82 std::unique_ptr<InProcessCommandBuffer> command_buffer_;
88 #endif // GPU_IPC_SERVICE_DIRECT_CANVAS_COMMAND_BUFFER_STUB_H_