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 #include "gpu/command_buffer/service/in_process_command_buffer.h" | 5 #include "gpu/command_buffer/service/in_process_command_buffer.h" |
6 | 6 |
7 #include <stddef.h> | 7 #include <stddef.h> |
8 #include <stdint.h> | 8 #include <stdint.h> |
9 | 9 |
10 #include <queue> | 10 #include <queue> |
(...skipping 10 matching lines...) Expand all Loading... |
21 #include "base/numerics/safe_conversions.h" | 21 #include "base/numerics/safe_conversions.h" |
22 #include "base/sequence_checker.h" | 22 #include "base/sequence_checker.h" |
23 #include "base/single_thread_task_runner.h" | 23 #include "base/single_thread_task_runner.h" |
24 #include "base/thread_task_runner_handle.h" | 24 #include "base/thread_task_runner_handle.h" |
25 #include "gpu/command_buffer/client/gpu_memory_buffer_manager.h" | 25 #include "gpu/command_buffer/client/gpu_memory_buffer_manager.h" |
26 #include "gpu/command_buffer/common/sync_token.h" | 26 #include "gpu/command_buffer/common/sync_token.h" |
27 #include "gpu/command_buffer/common/value_state.h" | 27 #include "gpu/command_buffer/common/value_state.h" |
28 #include "gpu/command_buffer/service/command_buffer_service.h" | 28 #include "gpu/command_buffer/service/command_buffer_service.h" |
29 #include "gpu/command_buffer/service/context_group.h" | 29 #include "gpu/command_buffer/service/context_group.h" |
30 #include "gpu/command_buffer/service/gl_context_virtual.h" | 30 #include "gpu/command_buffer/service/gl_context_virtual.h" |
| 31 #include "gpu/command_buffer/service/gpu_preferences.h" |
31 #include "gpu/command_buffer/service/gpu_scheduler.h" | 32 #include "gpu/command_buffer/service/gpu_scheduler.h" |
32 #include "gpu/command_buffer/service/gpu_switches.h" | |
33 #include "gpu/command_buffer/service/image_factory.h" | 33 #include "gpu/command_buffer/service/image_factory.h" |
34 #include "gpu/command_buffer/service/image_manager.h" | 34 #include "gpu/command_buffer/service/image_manager.h" |
35 #include "gpu/command_buffer/service/mailbox_manager.h" | 35 #include "gpu/command_buffer/service/mailbox_manager.h" |
36 #include "gpu/command_buffer/service/memory_program_cache.h" | 36 #include "gpu/command_buffer/service/memory_program_cache.h" |
37 #include "gpu/command_buffer/service/memory_tracking.h" | 37 #include "gpu/command_buffer/service/memory_tracking.h" |
38 #include "gpu/command_buffer/service/query_manager.h" | 38 #include "gpu/command_buffer/service/query_manager.h" |
39 #include "gpu/command_buffer/service/sync_point_manager.h" | 39 #include "gpu/command_buffer/service/sync_point_manager.h" |
40 #include "gpu/command_buffer/service/transfer_buffer_manager.h" | 40 #include "gpu/command_buffer/service/transfer_buffer_manager.h" |
41 #include "gpu/command_buffer/service/valuebuffer_manager.h" | 41 #include "gpu/command_buffer/service/valuebuffer_manager.h" |
42 #include "ui/gfx/geometry/size.h" | 42 #include "ui/gfx/geometry/size.h" |
(...skipping 102 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
145 // ThreadTaskRunnerHandle, which will re-add a new task to the, AtExitManager, | 145 // ThreadTaskRunnerHandle, which will re-add a new task to the, AtExitManager, |
146 // which causes a deadlock because it's already locked. | 146 // which causes a deadlock because it's already locked. |
147 base::ThreadTaskRunnerHandle::IsSet(); | 147 base::ThreadTaskRunnerHandle::IsSet(); |
148 return g_default_service.Get().gpu_thread; | 148 return g_default_service.Get().gpu_thread; |
149 } | 149 } |
150 | 150 |
151 } // anonyous namespace | 151 } // anonyous namespace |
152 | 152 |
153 InProcessCommandBuffer::Service::Service() {} | 153 InProcessCommandBuffer::Service::Service() {} |
154 | 154 |
| 155 InProcessCommandBuffer::Service::Service(const GpuPreferences& gpu_preferences) |
| 156 : gpu_preferences_(gpu_preferences) {} |
| 157 |
155 InProcessCommandBuffer::Service::~Service() {} | 158 InProcessCommandBuffer::Service::~Service() {} |
156 | 159 |
| 160 const gpu::GpuPreferences& |
| 161 InProcessCommandBuffer::Service::gpu_preferences() { |
| 162 return gpu_preferences_; |
| 163 } |
| 164 |
157 scoped_refptr<gfx::GLShareGroup> | 165 scoped_refptr<gfx::GLShareGroup> |
158 InProcessCommandBuffer::Service::share_group() { | 166 InProcessCommandBuffer::Service::share_group() { |
159 if (!share_group_.get()) | 167 if (!share_group_.get()) |
160 share_group_ = new gfx::GLShareGroup; | 168 share_group_ = new gfx::GLShareGroup; |
161 return share_group_; | 169 return share_group_; |
162 } | 170 } |
163 | 171 |
164 scoped_refptr<gles2::MailboxManager> | 172 scoped_refptr<gles2::MailboxManager> |
165 InProcessCommandBuffer::Service::mailbox_manager() { | 173 InProcessCommandBuffer::Service::mailbox_manager() { |
166 if (!mailbox_manager_.get()) { | 174 if (!mailbox_manager_.get()) { |
167 mailbox_manager_ = gles2::MailboxManager::Create(); | 175 mailbox_manager_ = gles2::MailboxManager::Create(gpu_preferences()); |
168 } | 176 } |
169 return mailbox_manager_; | 177 return mailbox_manager_; |
170 } | 178 } |
171 | 179 |
172 scoped_refptr<gles2::SubscriptionRefSet> | 180 scoped_refptr<gles2::SubscriptionRefSet> |
173 InProcessCommandBuffer::Service::subscription_ref_set() { | 181 InProcessCommandBuffer::Service::subscription_ref_set() { |
174 if (!subscription_ref_set_.get()) { | 182 if (!subscription_ref_set_.get()) { |
175 subscription_ref_set_ = new gles2::SubscriptionRefSet(); | 183 subscription_ref_set_ = new gles2::SubscriptionRefSet(); |
176 } | 184 } |
177 return subscription_ref_set_; | 185 return subscription_ref_set_; |
178 } | 186 } |
179 | 187 |
180 scoped_refptr<ValueStateMap> | 188 scoped_refptr<ValueStateMap> |
181 InProcessCommandBuffer::Service::pending_valuebuffer_state() { | 189 InProcessCommandBuffer::Service::pending_valuebuffer_state() { |
182 if (!pending_valuebuffer_state_.get()) { | 190 if (!pending_valuebuffer_state_.get()) { |
183 pending_valuebuffer_state_ = new ValueStateMap(); | 191 pending_valuebuffer_state_ = new ValueStateMap(); |
184 } | 192 } |
185 return pending_valuebuffer_state_; | 193 return pending_valuebuffer_state_; |
186 } | 194 } |
187 | 195 |
188 gpu::gles2::ProgramCache* InProcessCommandBuffer::Service::program_cache() { | 196 gpu::gles2::ProgramCache* InProcessCommandBuffer::Service::program_cache() { |
189 if (!program_cache_.get() && | 197 if (!program_cache_.get() && |
190 (gfx::g_driver_gl.ext.b_GL_ARB_get_program_binary || | 198 (gfx::g_driver_gl.ext.b_GL_ARB_get_program_binary || |
191 gfx::g_driver_gl.ext.b_GL_OES_get_program_binary) && | 199 gfx::g_driver_gl.ext.b_GL_OES_get_program_binary) && |
192 !base::CommandLine::ForCurrentProcess()->HasSwitch( | 200 !gpu_preferences().disable_gpu_program_cache) { |
193 switches::kDisableGpuProgramCache)) { | 201 program_cache_.reset(new gpu::gles2::MemoryProgramCache( |
194 program_cache_.reset(new gpu::gles2::MemoryProgramCache()); | 202 gpu_preferences().gpu_program_cache_size, |
| 203 gpu_preferences().disable_gpu_shader_disk_cache)); |
195 } | 204 } |
196 return program_cache_.get(); | 205 return program_cache_.get(); |
197 } | 206 } |
198 | 207 |
199 InProcessCommandBuffer::InProcessCommandBuffer( | 208 InProcessCommandBuffer::InProcessCommandBuffer( |
200 const scoped_refptr<Service>& service) | 209 const scoped_refptr<Service>& service) |
201 : command_buffer_id_( | 210 : command_buffer_id_( |
202 CommandBufferId::FromUnsafeValue(g_next_command_buffer_id.GetNext())), | 211 CommandBufferId::FromUnsafeValue(g_next_command_buffer_id.GetNext())), |
203 context_lost_(false), | 212 context_lost_(false), |
204 delayed_work_pending_(false), | 213 delayed_work_pending_(false), |
(...skipping 124 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
329 : service_->share_group(); | 338 : service_->share_group(); |
330 | 339 |
331 #if defined(OS_ANDROID) | 340 #if defined(OS_ANDROID) |
332 stream_texture_manager_.reset(new StreamTextureManagerInProcess); | 341 stream_texture_manager_.reset(new StreamTextureManagerInProcess); |
333 #endif | 342 #endif |
334 | 343 |
335 bool bind_generates_resource = false; | 344 bool bind_generates_resource = false; |
336 decoder_.reset(gles2::GLES2Decoder::Create( | 345 decoder_.reset(gles2::GLES2Decoder::Create( |
337 params.context_group | 346 params.context_group |
338 ? params.context_group->decoder_->GetContextGroup() | 347 ? params.context_group->decoder_->GetContextGroup() |
339 : new gles2::ContextGroup(service_->mailbox_manager(), NULL, | 348 : new gles2::ContextGroup(service_->gpu_preferences(), |
| 349 service_->mailbox_manager(), NULL, |
340 service_->shader_translator_cache(), | 350 service_->shader_translator_cache(), |
341 service_->framebuffer_completeness_cache(), | 351 service_->framebuffer_completeness_cache(), |
342 NULL, service_->subscription_ref_set(), | 352 NULL, service_->subscription_ref_set(), |
343 service_->pending_valuebuffer_state(), | 353 service_->pending_valuebuffer_state(), |
344 bind_generates_resource))); | 354 bind_generates_resource))); |
345 | 355 |
346 gpu_scheduler_.reset( | 356 gpu_scheduler_.reset( |
347 new GpuScheduler(command_buffer.get(), decoder_.get(), decoder_.get())); | 357 new GpuScheduler(command_buffer.get(), decoder_.get(), decoder_.get())); |
348 command_buffer->SetGetBufferChangeCallback(base::Bind( | 358 command_buffer->SetGetBufferChangeCallback(base::Bind( |
349 &GpuScheduler::SetGetBuffer, base::Unretained(gpu_scheduler_.get()))); | 359 &GpuScheduler::SetGetBuffer, base::Unretained(gpu_scheduler_.get()))); |
(...skipping 713 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1063 task_runner()->PostDelayedTask(FROM_HERE, callback, | 1073 task_runner()->PostDelayedTask(FROM_HERE, callback, |
1064 base::TimeDelta::FromMilliseconds(2)); | 1074 base::TimeDelta::FromMilliseconds(2)); |
1065 } | 1075 } |
1066 | 1076 |
1067 bool GpuInProcessThread::UseVirtualizedGLContexts() { | 1077 bool GpuInProcessThread::UseVirtualizedGLContexts() { |
1068 return false; | 1078 return false; |
1069 } | 1079 } |
1070 | 1080 |
1071 scoped_refptr<gles2::ShaderTranslatorCache> | 1081 scoped_refptr<gles2::ShaderTranslatorCache> |
1072 GpuInProcessThread::shader_translator_cache() { | 1082 GpuInProcessThread::shader_translator_cache() { |
1073 if (!shader_translator_cache_.get()) | 1083 if (!shader_translator_cache_.get()) { |
1074 shader_translator_cache_ = new gpu::gles2::ShaderTranslatorCache; | 1084 shader_translator_cache_ = |
| 1085 new gpu::gles2::ShaderTranslatorCache(gpu_preferences()); |
| 1086 } |
1075 return shader_translator_cache_; | 1087 return shader_translator_cache_; |
1076 } | 1088 } |
1077 | 1089 |
1078 scoped_refptr<gles2::FramebufferCompletenessCache> | 1090 scoped_refptr<gles2::FramebufferCompletenessCache> |
1079 GpuInProcessThread::framebuffer_completeness_cache() { | 1091 GpuInProcessThread::framebuffer_completeness_cache() { |
1080 if (!framebuffer_completeness_cache_.get()) | 1092 if (!framebuffer_completeness_cache_.get()) |
1081 framebuffer_completeness_cache_ = | 1093 framebuffer_completeness_cache_ = |
1082 new gpu::gles2::FramebufferCompletenessCache; | 1094 new gpu::gles2::FramebufferCompletenessCache; |
1083 return framebuffer_completeness_cache_; | 1095 return framebuffer_completeness_cache_; |
1084 } | 1096 } |
1085 | 1097 |
1086 SyncPointManager* GpuInProcessThread::sync_point_manager() { | 1098 SyncPointManager* GpuInProcessThread::sync_point_manager() { |
1087 return sync_point_manager_; | 1099 return sync_point_manager_; |
1088 } | 1100 } |
1089 | 1101 |
1090 } // namespace gpu | 1102 } // namespace gpu |
OLD | NEW |