OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #ifndef CONTENT_COMMON_GPU_CLIENT_COMMAND_BUFFER_PROXY_IMPL_H_ | 5 #ifndef CONTENT_COMMON_GPU_CLIENT_COMMAND_BUFFER_PROXY_IMPL_H_ |
6 #define CONTENT_COMMON_GPU_CLIENT_COMMAND_BUFFER_PROXY_IMPL_H_ | 6 #define CONTENT_COMMON_GPU_CLIENT_COMMAND_BUFFER_PROXY_IMPL_H_ |
7 | 7 |
8 #if defined(ENABLE_GPU) | 8 #if defined(ENABLE_GPU) |
9 | 9 |
10 #include <map> | 10 #include <map> |
11 #include <queue> | 11 #include <queue> |
12 #include <string> | 12 #include <string> |
13 | 13 |
14 #include "gpu/ipc/command_buffer_proxy.h" | 14 #include "gpu/ipc/command_buffer_proxy.h" |
15 | 15 |
16 #include "base/callback.h" | 16 #include "base/callback.h" |
17 #include "base/compiler_specific.h" | 17 #include "base/compiler_specific.h" |
18 #include "base/hash_tables.h" | 18 #include "base/hash_tables.h" |
19 #include "base/memory/ref_counted.h" | 19 #include "base/memory/ref_counted.h" |
20 #include "base/memory/weak_ptr.h" | 20 #include "base/memory/weak_ptr.h" |
21 #include "content/common/gpu/client/gpu_video_decode_accelerator_host.h" | 21 #include "content/common/gpu/client/gpu_video_decode_accelerator_host.h" |
| 22 #include "content/common/gpu/gpu_memory_allocation.h" |
22 #include "gpu/command_buffer/common/command_buffer.h" | 23 #include "gpu/command_buffer/common/command_buffer.h" |
23 #include "gpu/command_buffer/common/command_buffer_shared.h" | 24 #include "gpu/command_buffer/common/command_buffer_shared.h" |
24 #include "ipc/ipc_listener.h" | 25 #include "ipc/ipc_listener.h" |
25 | 26 |
26 struct GPUCommandBufferConsoleMessage; | 27 struct GPUCommandBufferConsoleMessage; |
27 | 28 |
28 namespace base { | 29 namespace base { |
29 class SharedMemory; | 30 class SharedMemory; |
30 } | 31 } |
31 | 32 |
32 namespace content { | 33 namespace content { |
33 class GpuChannelHost; | 34 class GpuChannelHost; |
34 struct GpuMemoryAllocationForRenderer; | |
35 | 35 |
36 // Client side proxy that forwards messages synchronously to a | 36 // Client side proxy that forwards messages synchronously to a |
37 // CommandBufferStub. | 37 // CommandBufferStub. |
38 class CommandBufferProxyImpl | 38 class CommandBufferProxyImpl |
39 : public CommandBufferProxy, | 39 : public CommandBufferProxy, |
40 public IPC::Listener, | 40 public IPC::Listener, |
41 public base::SupportsWeakPtr<CommandBufferProxyImpl> { | 41 public base::SupportsWeakPtr<CommandBufferProxyImpl> { |
42 public: | 42 public: |
43 typedef base::Callback<void( | 43 typedef base::Callback<void( |
44 const std::string& msg, int id)> GpuConsoleMessageCallback; | 44 const std::string& msg, int id)> GpuConsoleMessageCallback; |
(...skipping 11 matching lines...) Expand all Loading... |
56 media::VideoCodecProfile profile, | 56 media::VideoCodecProfile profile, |
57 media::VideoDecodeAccelerator::Client* client); | 57 media::VideoDecodeAccelerator::Client* client); |
58 | 58 |
59 // IPC::Listener implementation: | 59 // IPC::Listener implementation: |
60 virtual bool OnMessageReceived(const IPC::Message& message) OVERRIDE; | 60 virtual bool OnMessageReceived(const IPC::Message& message) OVERRIDE; |
61 virtual void OnChannelError() OVERRIDE; | 61 virtual void OnChannelError() OVERRIDE; |
62 | 62 |
63 // CommandBufferProxy implementation: | 63 // CommandBufferProxy implementation: |
64 virtual int GetRouteID() const OVERRIDE; | 64 virtual int GetRouteID() const OVERRIDE; |
65 virtual bool Echo(const base::Closure& callback) OVERRIDE; | 65 virtual bool Echo(const base::Closure& callback) OVERRIDE; |
66 virtual bool SetSurfaceVisible(bool visible) OVERRIDE; | |
67 virtual bool DiscardBackbuffer() OVERRIDE; | |
68 virtual bool EnsureBackbuffer() OVERRIDE; | |
69 virtual uint32 InsertSyncPoint() OVERRIDE; | |
70 virtual void WaitSyncPoint(uint32 sync_point) OVERRIDE; | |
71 virtual bool SignalSyncPoint(uint32 sync_point, | |
72 const base::Closure& callback) OVERRIDE; | |
73 virtual void SetMemoryAllocationChangedCallback( | |
74 const base::Callback<void(const GpuMemoryAllocationForRenderer&)>& | |
75 callback) OVERRIDE; | |
76 virtual bool SetParent(CommandBufferProxy* parent_command_buffer, | 66 virtual bool SetParent(CommandBufferProxy* parent_command_buffer, |
77 uint32 parent_texture_id) OVERRIDE; | 67 uint32 parent_texture_id) OVERRIDE; |
78 virtual void SetChannelErrorCallback(const base::Closure& callback) OVERRIDE; | 68 virtual void SetChannelErrorCallback(const base::Closure& callback) OVERRIDE; |
79 virtual void SetNotifyRepaintTask(const base::Closure& callback) OVERRIDE; | |
80 virtual void SetOnConsoleMessageCallback( | |
81 const GpuConsoleMessageCallback& callback) OVERRIDE; | |
82 | 69 |
83 // CommandBuffer implementation: | 70 // CommandBuffer implementation: |
84 virtual bool Initialize() OVERRIDE; | 71 virtual bool Initialize() OVERRIDE; |
85 virtual State GetState() OVERRIDE; | 72 virtual State GetState() OVERRIDE; |
86 virtual State GetLastState() OVERRIDE; | 73 virtual State GetLastState() OVERRIDE; |
87 virtual void Flush(int32 put_offset) OVERRIDE; | 74 virtual void Flush(int32 put_offset) OVERRIDE; |
88 virtual State FlushSync(int32 put_offset, int32 last_known_get) OVERRIDE; | 75 virtual State FlushSync(int32 put_offset, int32 last_known_get) OVERRIDE; |
89 virtual void SetGetBuffer(int32 shm_id) OVERRIDE; | 76 virtual void SetGetBuffer(int32 shm_id) OVERRIDE; |
90 virtual void SetGetOffset(int32 get_offset) OVERRIDE; | 77 virtual void SetGetOffset(int32 get_offset) OVERRIDE; |
91 virtual int32 CreateTransferBuffer(size_t size, int32 id_request) OVERRIDE; | 78 virtual int32 CreateTransferBuffer(size_t size, int32 id_request) OVERRIDE; |
92 virtual int32 RegisterTransferBuffer(base::SharedMemory* shared_memory, | 79 virtual int32 RegisterTransferBuffer(base::SharedMemory* shared_memory, |
93 size_t size, | 80 size_t size, |
94 int32 id_request) OVERRIDE; | 81 int32 id_request) OVERRIDE; |
95 virtual void DestroyTransferBuffer(int32 id) OVERRIDE; | 82 virtual void DestroyTransferBuffer(int32 id) OVERRIDE; |
96 virtual gpu::Buffer GetTransferBuffer(int32 handle) OVERRIDE; | 83 virtual gpu::Buffer GetTransferBuffer(int32 handle) OVERRIDE; |
97 virtual void SetToken(int32 token) OVERRIDE; | 84 virtual void SetToken(int32 token) OVERRIDE; |
98 virtual void SetParseError(gpu::error::Error error) OVERRIDE; | 85 virtual void SetParseError(gpu::error::Error error) OVERRIDE; |
99 virtual void SetContextLostReason( | 86 virtual void SetContextLostReason( |
100 gpu::error::ContextLostReason reason) OVERRIDE; | 87 gpu::error::ContextLostReason reason) OVERRIDE; |
101 | 88 |
| 89 void SetMemoryAllocationChangedCallback( |
| 90 const base::Callback<void(const GpuMemoryAllocationForRenderer&)>& |
| 91 callback); |
| 92 |
| 93 bool DiscardBackbuffer(); |
| 94 bool EnsureBackbuffer(); |
| 95 |
| 96 // Inserts a sync point, returning its ID. This is handled on the IO thread of |
| 97 // the GPU process, and so should be relatively fast, but its effect is |
| 98 // ordered wrt other messages (in particular, Flush). Sync point IDs are |
| 99 // global and can be used for cross-channel synchronization. |
| 100 uint32 InsertSyncPoint(); |
| 101 |
| 102 // Makes this command buffer wait on a sync point. This command buffer will be |
| 103 // unscheduled until the command buffer that inserted that sync point reaches |
| 104 // it, or gets destroyed. |
| 105 void WaitSyncPoint(uint32); |
| 106 |
| 107 // Makes this command buffer invoke a task when a sync point is reached, or |
| 108 // the command buffer that inserted that sync point is destroyed. |
| 109 bool SignalSyncPoint(uint32 sync_point, |
| 110 const base::Closure& callback); |
| 111 |
| 112 // Set a task that will be invoked the next time the window becomes invalid |
| 113 // and needs to be repainted. Takes ownership of task. |
| 114 void SetNotifyRepaintTask(const base::Closure& callback); |
| 115 |
| 116 // Sends an IPC message with the new state of surface visibility. |
| 117 bool SetSurfaceVisible(bool visible); |
| 118 |
| 119 void SetOnConsoleMessageCallback( |
| 120 const GpuConsoleMessageCallback& callback); |
| 121 |
102 // TODO(apatrick): this is a temporary optimization while skia is calling | 122 // TODO(apatrick): this is a temporary optimization while skia is calling |
103 // ContentGLContext::MakeCurrent prior to every GL call. It saves returning 6 | 123 // ContentGLContext::MakeCurrent prior to every GL call. It saves returning 6 |
104 // ints redundantly when only the error is needed for the | 124 // ints redundantly when only the error is needed for the |
105 // CommandBufferProxyImpl implementation. | 125 // CommandBufferProxyImpl implementation. |
106 virtual gpu::error::Error GetLastError() OVERRIDE; | 126 virtual gpu::error::Error GetLastError() OVERRIDE; |
107 | 127 |
108 GpuChannelHost* channel() const { return channel_; } | 128 GpuChannelHost* channel() const { return channel_; } |
109 | 129 |
110 private: | 130 private: |
111 typedef std::map<int32, gpu::Buffer> TransferBufferMap; | 131 typedef std::map<int32, gpu::Buffer> TransferBufferMap; |
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
169 int32 state_buffer_; | 189 int32 state_buffer_; |
170 | 190 |
171 DISALLOW_COPY_AND_ASSIGN(CommandBufferProxyImpl); | 191 DISALLOW_COPY_AND_ASSIGN(CommandBufferProxyImpl); |
172 }; | 192 }; |
173 | 193 |
174 } // namespace content | 194 } // namespace content |
175 | 195 |
176 #endif // ENABLE_GPU | 196 #endif // ENABLE_GPU |
177 | 197 |
178 #endif // CONTENT_COMMON_GPU_CLIENT_COMMAND_BUFFER_PROXY_IMPL_H_ | 198 #endif // CONTENT_COMMON_GPU_CLIENT_COMMAND_BUFFER_PROXY_IMPL_H_ |
OLD | NEW |