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