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 104 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
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() {} | 155 InProcessCommandBuffer::Service::~Service() {} |
156 | 156 |
| 157 const gpu::GpuPreferences& |
| 158 InProcessCommandBuffer::Service::gpu_preferences() { |
| 159 return gpu_preferences_; |
| 160 } |
| 161 |
157 scoped_refptr<gfx::GLShareGroup> | 162 scoped_refptr<gfx::GLShareGroup> |
158 InProcessCommandBuffer::Service::share_group() { | 163 InProcessCommandBuffer::Service::share_group() { |
159 if (!share_group_.get()) | 164 if (!share_group_.get()) |
160 share_group_ = new gfx::GLShareGroup; | 165 share_group_ = new gfx::GLShareGroup; |
161 return share_group_; | 166 return share_group_; |
162 } | 167 } |
163 | 168 |
164 scoped_refptr<gles2::MailboxManager> | 169 scoped_refptr<gles2::MailboxManager> |
165 InProcessCommandBuffer::Service::mailbox_manager() { | 170 InProcessCommandBuffer::Service::mailbox_manager() { |
166 if (!mailbox_manager_.get()) { | 171 if (!mailbox_manager_.get()) { |
167 mailbox_manager_ = gles2::MailboxManager::Create(); | 172 mailbox_manager_ = gles2::MailboxManager::Create(gpu_preferences()); |
168 } | 173 } |
169 return mailbox_manager_; | 174 return mailbox_manager_; |
170 } | 175 } |
171 | 176 |
172 scoped_refptr<gles2::SubscriptionRefSet> | 177 scoped_refptr<gles2::SubscriptionRefSet> |
173 InProcessCommandBuffer::Service::subscription_ref_set() { | 178 InProcessCommandBuffer::Service::subscription_ref_set() { |
174 if (!subscription_ref_set_.get()) { | 179 if (!subscription_ref_set_.get()) { |
175 subscription_ref_set_ = new gles2::SubscriptionRefSet(); | 180 subscription_ref_set_ = new gles2::SubscriptionRefSet(); |
176 } | 181 } |
177 return subscription_ref_set_; | 182 return subscription_ref_set_; |
178 } | 183 } |
179 | 184 |
180 scoped_refptr<ValueStateMap> | 185 scoped_refptr<ValueStateMap> |
181 InProcessCommandBuffer::Service::pending_valuebuffer_state() { | 186 InProcessCommandBuffer::Service::pending_valuebuffer_state() { |
182 if (!pending_valuebuffer_state_.get()) { | 187 if (!pending_valuebuffer_state_.get()) { |
183 pending_valuebuffer_state_ = new ValueStateMap(); | 188 pending_valuebuffer_state_ = new ValueStateMap(); |
184 } | 189 } |
185 return pending_valuebuffer_state_; | 190 return pending_valuebuffer_state_; |
186 } | 191 } |
187 | 192 |
188 gpu::gles2::ProgramCache* InProcessCommandBuffer::Service::program_cache() { | 193 gpu::gles2::ProgramCache* InProcessCommandBuffer::Service::program_cache() { |
189 if (!program_cache_.get() && | 194 if (!program_cache_.get() && |
190 (gfx::g_driver_gl.ext.b_GL_ARB_get_program_binary || | 195 (gfx::g_driver_gl.ext.b_GL_ARB_get_program_binary || |
191 gfx::g_driver_gl.ext.b_GL_OES_get_program_binary) && | 196 gfx::g_driver_gl.ext.b_GL_OES_get_program_binary) && |
192 !base::CommandLine::ForCurrentProcess()->HasSwitch( | 197 !gpu_preferences().disable_gpu_program_cache) { |
193 switches::kDisableGpuProgramCache)) { | 198 program_cache_.reset(new gpu::gles2::MemoryProgramCache( |
194 program_cache_.reset(new gpu::gles2::MemoryProgramCache()); | 199 gpu_preferences().gpu_program_cache_size, |
| 200 gpu_preferences().disable_gpu_shader_disk_cache)); |
195 } | 201 } |
196 return program_cache_.get(); | 202 return program_cache_.get(); |
197 } | 203 } |
198 | 204 |
199 InProcessCommandBuffer::InProcessCommandBuffer( | 205 InProcessCommandBuffer::InProcessCommandBuffer( |
200 const scoped_refptr<Service>& service) | 206 const scoped_refptr<Service>& service) |
201 : command_buffer_id_( | 207 : command_buffer_id_( |
202 CommandBufferId::FromUnsafeValue(g_next_command_buffer_id.GetNext())), | 208 CommandBufferId::FromUnsafeValue(g_next_command_buffer_id.GetNext())), |
203 context_lost_(false), | 209 context_lost_(false), |
204 delayed_work_pending_(false), | 210 delayed_work_pending_(false), |
(...skipping 124 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
329 : service_->share_group(); | 335 : service_->share_group(); |
330 | 336 |
331 #if defined(OS_ANDROID) | 337 #if defined(OS_ANDROID) |
332 stream_texture_manager_.reset(new StreamTextureManagerInProcess); | 338 stream_texture_manager_.reset(new StreamTextureManagerInProcess); |
333 #endif | 339 #endif |
334 | 340 |
335 bool bind_generates_resource = false; | 341 bool bind_generates_resource = false; |
336 decoder_.reset(gles2::GLES2Decoder::Create( | 342 decoder_.reset(gles2::GLES2Decoder::Create( |
337 params.context_group | 343 params.context_group |
338 ? params.context_group->decoder_->GetContextGroup() | 344 ? params.context_group->decoder_->GetContextGroup() |
339 : new gles2::ContextGroup(service_->mailbox_manager(), NULL, | 345 : new gles2::ContextGroup(service_->gpu_preferences(), |
| 346 service_->mailbox_manager(), NULL, |
340 service_->shader_translator_cache(), | 347 service_->shader_translator_cache(), |
341 service_->framebuffer_completeness_cache(), | 348 service_->framebuffer_completeness_cache(), |
342 NULL, service_->subscription_ref_set(), | 349 NULL, service_->subscription_ref_set(), |
343 service_->pending_valuebuffer_state(), | 350 service_->pending_valuebuffer_state(), |
344 bind_generates_resource))); | 351 bind_generates_resource))); |
345 | 352 |
346 gpu_scheduler_.reset( | 353 gpu_scheduler_.reset( |
347 new GpuScheduler(command_buffer.get(), decoder_.get(), decoder_.get())); | 354 new GpuScheduler(command_buffer.get(), decoder_.get(), decoder_.get())); |
348 command_buffer->SetGetBufferChangeCallback(base::Bind( | 355 command_buffer->SetGetBufferChangeCallback(base::Bind( |
349 &GpuScheduler::SetGetBuffer, base::Unretained(gpu_scheduler_.get()))); | 356 &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, | 1070 task_runner()->PostDelayedTask(FROM_HERE, callback, |
1064 base::TimeDelta::FromMilliseconds(2)); | 1071 base::TimeDelta::FromMilliseconds(2)); |
1065 } | 1072 } |
1066 | 1073 |
1067 bool GpuInProcessThread::UseVirtualizedGLContexts() { | 1074 bool GpuInProcessThread::UseVirtualizedGLContexts() { |
1068 return false; | 1075 return false; |
1069 } | 1076 } |
1070 | 1077 |
1071 scoped_refptr<gles2::ShaderTranslatorCache> | 1078 scoped_refptr<gles2::ShaderTranslatorCache> |
1072 GpuInProcessThread::shader_translator_cache() { | 1079 GpuInProcessThread::shader_translator_cache() { |
1073 if (!shader_translator_cache_.get()) | 1080 if (!shader_translator_cache_.get()) { |
1074 shader_translator_cache_ = new gpu::gles2::ShaderTranslatorCache; | 1081 shader_translator_cache_ = |
| 1082 new gpu::gles2::ShaderTranslatorCache(gpu_preferences()); |
| 1083 } |
1075 return shader_translator_cache_; | 1084 return shader_translator_cache_; |
1076 } | 1085 } |
1077 | 1086 |
1078 scoped_refptr<gles2::FramebufferCompletenessCache> | 1087 scoped_refptr<gles2::FramebufferCompletenessCache> |
1079 GpuInProcessThread::framebuffer_completeness_cache() { | 1088 GpuInProcessThread::framebuffer_completeness_cache() { |
1080 if (!framebuffer_completeness_cache_.get()) | 1089 if (!framebuffer_completeness_cache_.get()) |
1081 framebuffer_completeness_cache_ = | 1090 framebuffer_completeness_cache_ = |
1082 new gpu::gles2::FramebufferCompletenessCache; | 1091 new gpu::gles2::FramebufferCompletenessCache; |
1083 return framebuffer_completeness_cache_; | 1092 return framebuffer_completeness_cache_; |
1084 } | 1093 } |
1085 | 1094 |
1086 SyncPointManager* GpuInProcessThread::sync_point_manager() { | 1095 SyncPointManager* GpuInProcessThread::sync_point_manager() { |
1087 return sync_point_manager_; | 1096 return sync_point_manager_; |
1088 } | 1097 } |
1089 | 1098 |
1090 } // namespace gpu | 1099 } // namespace gpu |
OLD | NEW |