Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(5)

Side by Side Diff: gpu/command_buffer/service/in_process_command_buffer.h

Issue 158133004: gpu: Use a single container for GLInProcessContext share group (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
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 <vector> 8 #include <vector>
9 9
10 #include "base/callback.h" 10 #include "base/callback.h"
(...skipping 10 matching lines...) Expand all
21 #include "ui/gfx/native_widget_types.h" 21 #include "ui/gfx/native_widget_types.h"
22 #include "ui/gl/gl_surface.h" 22 #include "ui/gl/gl_surface.h"
23 #include "ui/gl/gpu_preference.h" 23 #include "ui/gl/gpu_preference.h"
24 24
25 namespace base { 25 namespace base {
26 class SequenceChecker; 26 class SequenceChecker;
27 } 27 }
28 28
29 namespace gfx { 29 namespace gfx {
30 class GLContext; 30 class GLContext;
31 class GLShareGroup;
31 class GLSurface; 32 class GLSurface;
32 class Size; 33 class Size;
33 } 34 }
34 35
35 #if defined(OS_ANDROID) 36 #if defined(OS_ANDROID)
36 namespace gfx { 37 namespace gfx {
37 class SurfaceTexture; 38 class SurfaceTexture;
38 } 39 }
39 namespace gpu { 40 namespace gpu {
40 class StreamTextureManagerInProcess; 41 class StreamTextureManagerInProcess;
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
73 static void ProcessGpuWorkOnCurrentThread(); 74 static void ProcessGpuWorkOnCurrentThread();
74 75
75 static void EnableVirtualizedContext(); 76 static void EnableVirtualizedContext();
76 static void SetGpuMemoryBufferFactory(GpuMemoryBufferFactory* factory); 77 static void SetGpuMemoryBufferFactory(GpuMemoryBufferFactory* factory);
77 78
78 // If |surface| is not NULL, use it directly; in this case, the command 79 // If |surface| is not NULL, use it directly; in this case, the command
79 // buffer gpu thread must be the same as the client thread. Otherwise create 80 // buffer gpu thread must be the same as the client thread. Otherwise create
80 // a new GLSurface. 81 // a new GLSurface.
81 bool Initialize(scoped_refptr<gfx::GLSurface> surface, 82 bool Initialize(scoped_refptr<gfx::GLSurface> surface,
82 bool is_offscreen, 83 bool is_offscreen,
83 bool share_resources,
84 gfx::AcceleratedWidget window, 84 gfx::AcceleratedWidget window,
85 const gfx::Size& size, 85 const gfx::Size& size,
86 const std::vector<int32>& attribs, 86 const std::vector<int32>& attribs,
87 gfx::GpuPreference gpu_preference, 87 gfx::GpuPreference gpu_preference,
88 const base::Closure& context_lost_callback, 88 const base::Closure& context_lost_callback,
89 unsigned int share_group_id); 89 InProcessCommandBuffer* share_group);
90 void Destroy(); 90 void Destroy();
91 91
92 // CommandBuffer implementation: 92 // CommandBuffer implementation:
93 virtual bool Initialize() OVERRIDE; 93 virtual bool Initialize() OVERRIDE;
94 virtual State GetState() OVERRIDE; 94 virtual State GetState() OVERRIDE;
95 virtual State GetLastState() OVERRIDE; 95 virtual State GetLastState() OVERRIDE;
96 virtual int32 GetLastToken() OVERRIDE; 96 virtual int32 GetLastToken() OVERRIDE;
97 virtual void Flush(int32 put_offset) OVERRIDE; 97 virtual void Flush(int32 put_offset) OVERRIDE;
98 virtual State FlushSync(int32 put_offset, int32 last_known_get) OVERRIDE; 98 virtual State FlushSync(int32 put_offset, int32 last_known_get) OVERRIDE;
99 virtual void SetGetBuffer(int32 shm_id) OVERRIDE; 99 virtual void SetGetBuffer(int32 shm_id) OVERRIDE;
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after
147 #endif 147 #endif
148 148
149 private: 149 private:
150 struct InitializeOnGpuThreadParams { 150 struct InitializeOnGpuThreadParams {
151 bool is_offscreen; 151 bool is_offscreen;
152 gfx::AcceleratedWidget window; 152 gfx::AcceleratedWidget window;
153 const gfx::Size& size; 153 const gfx::Size& size;
154 const std::vector<int32>& attribs; 154 const std::vector<int32>& attribs;
155 gfx::GpuPreference gpu_preference; 155 gfx::GpuPreference gpu_preference;
156 gpu::Capabilities* capabilities; // Ouptut. 156 gpu::Capabilities* capabilities; // Ouptut.
157 InProcessCommandBuffer* context_group;
157 158
158 InitializeOnGpuThreadParams(bool is_offscreen, 159 InitializeOnGpuThreadParams(bool is_offscreen,
159 gfx::AcceleratedWidget window, 160 gfx::AcceleratedWidget window,
160 const gfx::Size& size, 161 const gfx::Size& size,
161 const std::vector<int32>& attribs, 162 const std::vector<int32>& attribs,
162 gfx::GpuPreference gpu_preference, 163 gfx::GpuPreference gpu_preference,
163 gpu::Capabilities* capabilities) 164 gpu::Capabilities* capabilities,
165 InProcessCommandBuffer* share_group)
164 : is_offscreen(is_offscreen), 166 : is_offscreen(is_offscreen),
165 window(window), 167 window(window),
166 size(size), 168 size(size),
167 attribs(attribs), 169 attribs(attribs),
168 gpu_preference(gpu_preference), 170 gpu_preference(gpu_preference),
169 capabilities(capabilities) {} 171 capabilities(capabilities),
172 context_group(share_group) {}
170 }; 173 };
171 174
172 bool InitializeOnGpuThread(const InitializeOnGpuThreadParams& params); 175 bool InitializeOnGpuThread(const InitializeOnGpuThreadParams& params);
173 bool DestroyOnGpuThread(); 176 bool DestroyOnGpuThread();
174 void FlushOnGpuThread(int32 put_offset); 177 void FlushOnGpuThread(int32 put_offset);
175 uint32 CreateStreamTextureOnGpuThread(uint32 client_texture_id); 178 uint32 CreateStreamTextureOnGpuThread(uint32 client_texture_id);
176 bool MakeCurrent(); 179 bool MakeCurrent();
177 bool IsContextLost();
178 base::Closure WrapCallback(const base::Closure& callback); 180 base::Closure WrapCallback(const base::Closure& callback);
179 State GetStateFast(); 181 State GetStateFast();
180 void QueueTask(const base::Closure& task) { queue_->QueueTask(task); } 182 void QueueTask(const base::Closure& task) { queue_->QueueTask(task); }
181 void CheckSequencedThread(); 183 void CheckSequencedThread();
182 184
183 // Callbacks: 185 // Callbacks:
184 void OnContextLost(); 186 void OnContextLost();
185 void OnResizeView(gfx::Size size, float scale_factor); 187 void OnResizeView(gfx::Size size, float scale_factor);
186 bool GetBufferChanged(int32 transfer_buffer_id); 188 bool GetBufferChanged(int32 transfer_buffer_id);
187 void PumpCommands(); 189 void PumpCommands();
188 void ScheduleMoreIdleWork(); 190 void ScheduleMoreIdleWork();
189 191
190 // Members accessed on the gpu thread (possibly with the exception of 192 // Members accessed on the gpu thread (possibly with the exception of
191 // creation): 193 // creation):
192 bool context_lost_; 194 bool context_lost_;
193 bool share_resources_;
194 scoped_ptr<TransferBufferManagerInterface> transfer_buffer_manager_; 195 scoped_ptr<TransferBufferManagerInterface> transfer_buffer_manager_;
195 scoped_ptr<GpuScheduler> gpu_scheduler_; 196 scoped_ptr<GpuScheduler> gpu_scheduler_;
196 scoped_ptr<gles2::GLES2Decoder> decoder_; 197 scoped_ptr<gles2::GLES2Decoder> decoder_;
197 scoped_refptr<gfx::GLContext> context_; 198 scoped_refptr<gfx::GLContext> context_;
198 scoped_refptr<gfx::GLSurface> surface_; 199 scoped_refptr<gfx::GLSurface> surface_;
199 base::Closure context_lost_callback_; 200 base::Closure context_lost_callback_;
200 unsigned int share_group_id_;
201 201
202 // Members accessed on the client thread: 202 // Members accessed on the client thread:
203 State last_state_; 203 State last_state_;
204 int32 last_put_offset_; 204 int32 last_put_offset_;
205 gpu::Capabilities capabilities_; 205 gpu::Capabilities capabilities_;
206 206
207 // Accessed on both threads: 207 // Accessed on both threads:
208 scoped_ptr<CommandBuffer> command_buffer_; 208 scoped_ptr<CommandBuffer> command_buffer_;
209 base::Lock command_buffer_lock_; 209 base::Lock command_buffer_lock_;
210 base::WaitableEvent flush_event_; 210 base::WaitableEvent flush_event_;
211 scoped_ptr<SchedulerClient> queue_; 211 scoped_ptr<SchedulerClient> queue_;
212 State state_after_last_flush_; 212 State state_after_last_flush_;
213 base::Lock state_after_last_flush_lock_; 213 base::Lock state_after_last_flush_lock_;
214 scoped_ptr<GpuControl> gpu_control_; 214 scoped_ptr<GpuControl> gpu_control_;
215 scoped_refptr<gfx::GLShareGroup> gl_share_group_;
215 216
216 #if defined(OS_ANDROID) 217 #if defined(OS_ANDROID)
217 scoped_ptr<StreamTextureManagerInProcess> stream_texture_manager_; 218 scoped_ptr<StreamTextureManagerInProcess> stream_texture_manager_;
218 #endif 219 #endif
219 220
220 // Only used with explicit scheduling and the gpu thread is the same as 221 // Only used with explicit scheduling and the gpu thread is the same as
221 // the client thread. 222 // the client thread.
222 scoped_ptr<base::SequenceChecker> sequence_checker_; 223 scoped_ptr<base::SequenceChecker> sequence_checker_;
223 224
224 base::WeakPtr<InProcessCommandBuffer> gpu_thread_weak_ptr_; 225 base::WeakPtr<InProcessCommandBuffer> gpu_thread_weak_ptr_;
225 base::WeakPtrFactory<InProcessCommandBuffer> gpu_thread_weak_ptr_factory_; 226 base::WeakPtrFactory<InProcessCommandBuffer> gpu_thread_weak_ptr_factory_;
226 227
227 DISALLOW_COPY_AND_ASSIGN(InProcessCommandBuffer); 228 DISALLOW_COPY_AND_ASSIGN(InProcessCommandBuffer);
228 }; 229 };
229 230
230 } // namespace gpu 231 } // namespace gpu
231 232
232 #endif // GPU_COMMAND_BUFFER_SERVICE_IN_PROCESS_COMMAND_BUFFER_H_ 233 #endif // GPU_COMMAND_BUFFER_SERVICE_IN_PROCESS_COMMAND_BUFFER_H_
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698