| 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 |