OLD | NEW |
1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 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 GPU_COMMAND_BUFFER_SERVICE_IN_PROCESS_COMMAND_BUFFER_H_ | 5 #ifndef GPU_COMMAND_BUFFER_SERVICE_IN_PROCESS_COMMAND_BUFFER_H_ |
6 #define GPU_COMMAND_BUFFER_SERVICE_IN_PROCESS_COMMAND_BUFFER_H_ | 6 #define GPU_COMMAND_BUFFER_SERVICE_IN_PROCESS_COMMAND_BUFFER_H_ |
7 | 7 |
8 #include <map> | 8 #include <map> |
9 #include <vector> | 9 #include <vector> |
10 | 10 |
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
66 public: | 66 public: |
67 class Service; | 67 class Service; |
68 explicit InProcessCommandBuffer(const scoped_refptr<Service>& service); | 68 explicit InProcessCommandBuffer(const scoped_refptr<Service>& service); |
69 virtual ~InProcessCommandBuffer(); | 69 virtual ~InProcessCommandBuffer(); |
70 | 70 |
71 static void SetGpuMemoryBufferFactory(GpuMemoryBufferFactory* factory); | 71 static void SetGpuMemoryBufferFactory(GpuMemoryBufferFactory* factory); |
72 | 72 |
73 // If |surface| is not NULL, use it directly; in this case, the command | 73 // If |surface| is not NULL, use it directly; in this case, the command |
74 // buffer gpu thread must be the same as the client thread. Otherwise create | 74 // buffer gpu thread must be the same as the client thread. Otherwise create |
75 // a new GLSurface. | 75 // a new GLSurface. |
76 bool Initialize(scoped_refptr<gfx::GLSurface> surface, | 76 bool Initialize(gfx::GLSurface* surface, |
77 bool is_offscreen, | 77 bool is_offscreen, |
78 gfx::AcceleratedWidget window, | 78 gfx::AcceleratedWidget window, |
79 const gfx::Size& size, | 79 const gfx::Size& size, |
80 const std::vector<int32>& attribs, | 80 const std::vector<int32>& attribs, |
81 gfx::GpuPreference gpu_preference, | 81 gfx::GpuPreference gpu_preference, |
82 const base::Closure& context_lost_callback, | 82 const base::Closure& context_lost_callback, |
83 InProcessCommandBuffer* share_group); | 83 InProcessCommandBuffer* share_group); |
84 void Destroy(); | 84 void Destroy(); |
85 | 85 |
86 // CommandBuffer implementation: | 86 // CommandBuffer implementation: |
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
136 shader_translator_cache() = 0; | 136 shader_translator_cache() = 0; |
137 }; | 137 }; |
138 | 138 |
139 #if defined(OS_ANDROID) | 139 #if defined(OS_ANDROID) |
140 scoped_refptr<gfx::SurfaceTexture> GetSurfaceTexture( | 140 scoped_refptr<gfx::SurfaceTexture> GetSurfaceTexture( |
141 uint32 stream_id); | 141 uint32 stream_id); |
142 #endif | 142 #endif |
143 | 143 |
144 private: | 144 private: |
145 struct InitializeOnGpuThreadParams { | 145 struct InitializeOnGpuThreadParams { |
| 146 gfx::GLSurface* surface; |
146 bool is_offscreen; | 147 bool is_offscreen; |
147 gfx::AcceleratedWidget window; | 148 gfx::AcceleratedWidget window; |
148 const gfx::Size& size; | 149 const gfx::Size& size; |
149 const std::vector<int32>& attribs; | 150 const std::vector<int32>& attribs; |
150 gfx::GpuPreference gpu_preference; | 151 gfx::GpuPreference gpu_preference; |
151 gpu::Capabilities* capabilities; // Ouptut. | 152 gpu::Capabilities* capabilities; // Ouptut. |
152 InProcessCommandBuffer* context_group; | 153 InProcessCommandBuffer* context_group; |
153 | 154 |
154 InitializeOnGpuThreadParams(bool is_offscreen, | 155 InitializeOnGpuThreadParams(gfx::GLSurface* surface, |
| 156 bool is_offscreen, |
155 gfx::AcceleratedWidget window, | 157 gfx::AcceleratedWidget window, |
156 const gfx::Size& size, | 158 const gfx::Size& size, |
157 const std::vector<int32>& attribs, | 159 const std::vector<int32>& attribs, |
158 gfx::GpuPreference gpu_preference, | 160 gfx::GpuPreference gpu_preference, |
159 gpu::Capabilities* capabilities, | 161 gpu::Capabilities* capabilities, |
160 InProcessCommandBuffer* share_group) | 162 InProcessCommandBuffer* share_group) |
161 : is_offscreen(is_offscreen), | 163 : surface(surface), |
| 164 is_offscreen(is_offscreen), |
162 window(window), | 165 window(window), |
163 size(size), | 166 size(size), |
164 attribs(attribs), | 167 attribs(attribs), |
165 gpu_preference(gpu_preference), | 168 gpu_preference(gpu_preference), |
166 capabilities(capabilities), | 169 capabilities(capabilities), |
167 context_group(share_group) {} | 170 context_group(share_group) {} |
168 }; | 171 }; |
169 | 172 |
170 bool InitializeOnGpuThread(const InitializeOnGpuThreadParams& params); | 173 bool InitializeOnGpuThread(const InitializeOnGpuThreadParams& params); |
171 bool DestroyOnGpuThread(); | 174 bool DestroyOnGpuThread(); |
172 void FlushOnGpuThread(int32 put_offset); | 175 void FlushOnGpuThread(int32 put_offset); |
173 uint32 CreateStreamTextureOnGpuThread(uint32 client_texture_id); | 176 uint32 CreateStreamTextureOnGpuThread(uint32 client_texture_id); |
174 bool MakeCurrent(); | 177 bool MakeCurrent(); |
175 base::Closure WrapCallback(const base::Closure& callback); | 178 base::Closure WrapCallback(const base::Closure& callback); |
176 State GetStateFast(); | 179 State GetStateFast(); |
177 void QueueTask(const base::Closure& task) { service_->ScheduleTask(task); } | 180 void QueueTask(const base::Closure& task) { service_->ScheduleTask(task); } |
178 void CheckSequencedThread(); | |
179 void RetireSyncPointOnGpuThread(uint32 sync_point); | 181 void RetireSyncPointOnGpuThread(uint32 sync_point); |
180 void SignalSyncPointOnGpuThread(uint32 sync_point, | 182 void SignalSyncPointOnGpuThread(uint32 sync_point, |
181 const base::Closure& callback); | 183 const base::Closure& callback); |
182 void DestroyTransferBufferOnGputhread(int32 id); | 184 void DestroyTransferBufferOnGputhread(int32 id); |
183 | 185 |
184 // Callbacks: | 186 // Callbacks: |
185 void OnContextLost(); | 187 void OnContextLost(); |
186 void OnResizeView(gfx::Size size, float scale_factor); | 188 void OnResizeView(gfx::Size size, float scale_factor); |
187 bool GetBufferChanged(int32 transfer_buffer_id); | 189 bool GetBufferChanged(int32 transfer_buffer_id); |
188 void PumpCommands(); | 190 void PumpCommands(); |
(...skipping 25 matching lines...) Expand all Loading... |
214 scoped_refptr<Service> service_; | 216 scoped_refptr<Service> service_; |
215 State state_after_last_flush_; | 217 State state_after_last_flush_; |
216 base::Lock state_after_last_flush_lock_; | 218 base::Lock state_after_last_flush_lock_; |
217 scoped_ptr<GpuControlService> gpu_control_; | 219 scoped_ptr<GpuControlService> gpu_control_; |
218 scoped_refptr<gfx::GLShareGroup> gl_share_group_; | 220 scoped_refptr<gfx::GLShareGroup> gl_share_group_; |
219 | 221 |
220 #if defined(OS_ANDROID) | 222 #if defined(OS_ANDROID) |
221 scoped_ptr<StreamTextureManagerInProcess> stream_texture_manager_; | 223 scoped_ptr<StreamTextureManagerInProcess> stream_texture_manager_; |
222 #endif | 224 #endif |
223 | 225 |
224 // Only used with explicit scheduling and the gpu thread is the same as | |
225 // the client thread. | |
226 scoped_ptr<base::SequenceChecker> sequence_checker_; | |
227 | |
228 base::WeakPtr<InProcessCommandBuffer> gpu_thread_weak_ptr_; | 226 base::WeakPtr<InProcessCommandBuffer> gpu_thread_weak_ptr_; |
229 base::WeakPtrFactory<InProcessCommandBuffer> gpu_thread_weak_ptr_factory_; | 227 base::WeakPtrFactory<InProcessCommandBuffer> gpu_thread_weak_ptr_factory_; |
230 | 228 |
231 DISALLOW_COPY_AND_ASSIGN(InProcessCommandBuffer); | 229 DISALLOW_COPY_AND_ASSIGN(InProcessCommandBuffer); |
232 }; | 230 }; |
233 | 231 |
234 } // namespace gpu | 232 } // namespace gpu |
235 | 233 |
236 #endif // GPU_COMMAND_BUFFER_SERVICE_IN_PROCESS_COMMAND_BUFFER_H_ | 234 #endif // GPU_COMMAND_BUFFER_SERVICE_IN_PROCESS_COMMAND_BUFFER_H_ |
OLD | NEW |