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

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

Issue 1716813002: Use GpuPreferences to avoid directly accessing switches in gpu related code (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Update Created 4 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
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 #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
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 100 matching lines...) Expand 10 before | Expand all | Expand 10 after
143 // delete the ThreadTaskRunnerHandle before the GPU thread's message loop, 143 // delete the ThreadTaskRunnerHandle before the GPU thread's message loop,
144 // and when the message loop is shutdown, it will recreate 144 // and when the message loop is shutdown, it will recreate
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(const GpuPreferences& gpu_preferences)
154 : gpu_preferences_(gpu_preferences) {}
154 155
155 InProcessCommandBuffer::Service::~Service() {} 156 InProcessCommandBuffer::Service::~Service() {}
156 157
158 const gpu::GpuPreferences&
159 InProcessCommandBuffer::Service::gpu_preferences() {
160 return gpu_preferences_;
161 }
162
157 scoped_refptr<gfx::GLShareGroup> 163 scoped_refptr<gfx::GLShareGroup>
158 InProcessCommandBuffer::Service::share_group() { 164 InProcessCommandBuffer::Service::share_group() {
159 if (!share_group_.get()) 165 if (!share_group_.get())
160 share_group_ = new gfx::GLShareGroup; 166 share_group_ = new gfx::GLShareGroup;
161 return share_group_; 167 return share_group_;
162 } 168 }
163 169
164 scoped_refptr<gles2::MailboxManager> 170 scoped_refptr<gles2::MailboxManager>
165 InProcessCommandBuffer::Service::mailbox_manager() { 171 InProcessCommandBuffer::Service::mailbox_manager() {
166 if (!mailbox_manager_.get()) { 172 if (!mailbox_manager_.get()) {
167 mailbox_manager_ = gles2::MailboxManager::Create(); 173 mailbox_manager_ = gles2::MailboxManager::Create(gpu_preferences());
168 } 174 }
169 return mailbox_manager_; 175 return mailbox_manager_;
170 } 176 }
171 177
172 scoped_refptr<gles2::SubscriptionRefSet> 178 scoped_refptr<gles2::SubscriptionRefSet>
173 InProcessCommandBuffer::Service::subscription_ref_set() { 179 InProcessCommandBuffer::Service::subscription_ref_set() {
174 if (!subscription_ref_set_.get()) { 180 if (!subscription_ref_set_.get()) {
175 subscription_ref_set_ = new gles2::SubscriptionRefSet(); 181 subscription_ref_set_ = new gles2::SubscriptionRefSet();
176 } 182 }
177 return subscription_ref_set_; 183 return subscription_ref_set_;
178 } 184 }
179 185
180 scoped_refptr<ValueStateMap> 186 scoped_refptr<ValueStateMap>
181 InProcessCommandBuffer::Service::pending_valuebuffer_state() { 187 InProcessCommandBuffer::Service::pending_valuebuffer_state() {
182 if (!pending_valuebuffer_state_.get()) { 188 if (!pending_valuebuffer_state_.get()) {
183 pending_valuebuffer_state_ = new ValueStateMap(); 189 pending_valuebuffer_state_ = new ValueStateMap();
184 } 190 }
185 return pending_valuebuffer_state_; 191 return pending_valuebuffer_state_;
186 } 192 }
187 193
188 gpu::gles2::ProgramCache* InProcessCommandBuffer::Service::program_cache() { 194 gpu::gles2::ProgramCache* InProcessCommandBuffer::Service::program_cache() {
189 if (!program_cache_.get() && 195 if (!program_cache_.get() &&
190 (gfx::g_driver_gl.ext.b_GL_ARB_get_program_binary || 196 (gfx::g_driver_gl.ext.b_GL_ARB_get_program_binary ||
191 gfx::g_driver_gl.ext.b_GL_OES_get_program_binary) && 197 gfx::g_driver_gl.ext.b_GL_OES_get_program_binary) &&
192 !base::CommandLine::ForCurrentProcess()->HasSwitch( 198 !gpu_preferences().disable_gpu_program_cache) {
193 switches::kDisableGpuProgramCache)) { 199 program_cache_.reset(new gpu::gles2::MemoryProgramCache(
194 program_cache_.reset(new gpu::gles2::MemoryProgramCache()); 200 gpu_preferences().gpu_program_cache_size,
201 gpu_preferences().disable_gpu_shader_disk_cache));
195 } 202 }
196 return program_cache_.get(); 203 return program_cache_.get();
197 } 204 }
198 205
199 InProcessCommandBuffer::InProcessCommandBuffer( 206 InProcessCommandBuffer::InProcessCommandBuffer(
200 const scoped_refptr<Service>& service) 207 const scoped_refptr<Service>& service)
201 : command_buffer_id_( 208 : command_buffer_id_(
202 CommandBufferId::FromUnsafeValue(g_next_command_buffer_id.GetNext())), 209 CommandBufferId::FromUnsafeValue(g_next_command_buffer_id.GetNext())),
203 context_lost_(false), 210 context_lost_(false),
204 delayed_work_pending_(false), 211 delayed_work_pending_(false),
(...skipping 124 matching lines...) Expand 10 before | Expand all | Expand 10 after
329 : service_->share_group(); 336 : service_->share_group();
330 337
331 #if defined(OS_ANDROID) 338 #if defined(OS_ANDROID)
332 stream_texture_manager_.reset(new StreamTextureManagerInProcess); 339 stream_texture_manager_.reset(new StreamTextureManagerInProcess);
333 #endif 340 #endif
334 341
335 bool bind_generates_resource = false; 342 bool bind_generates_resource = false;
336 decoder_.reset(gles2::GLES2Decoder::Create( 343 decoder_.reset(gles2::GLES2Decoder::Create(
337 params.context_group 344 params.context_group
338 ? params.context_group->decoder_->GetContextGroup() 345 ? params.context_group->decoder_->GetContextGroup()
339 : new gles2::ContextGroup(service_->mailbox_manager(), NULL, 346 : new gles2::ContextGroup(service_->gpu_preferences(),
347 service_->mailbox_manager(), NULL,
340 service_->shader_translator_cache(), 348 service_->shader_translator_cache(),
341 service_->framebuffer_completeness_cache(), 349 service_->framebuffer_completeness_cache(),
342 NULL, service_->subscription_ref_set(), 350 NULL, service_->subscription_ref_set(),
343 service_->pending_valuebuffer_state(), 351 service_->pending_valuebuffer_state(),
344 bind_generates_resource))); 352 bind_generates_resource)));
345 353
346 gpu_scheduler_.reset( 354 gpu_scheduler_.reset(
347 new GpuScheduler(command_buffer.get(), decoder_.get(), decoder_.get())); 355 new GpuScheduler(command_buffer.get(), decoder_.get(), decoder_.get()));
348 command_buffer->SetGetBufferChangeCallback(base::Bind( 356 command_buffer->SetGetBufferChangeCallback(base::Bind(
349 &GpuScheduler::SetGetBuffer, base::Unretained(gpu_scheduler_.get()))); 357 &GpuScheduler::SetGetBuffer, base::Unretained(gpu_scheduler_.get())));
(...skipping 682 matching lines...) Expand 10 before | Expand all | Expand 10 after
1032 base::Bind(&InProcessCommandBuffer::CreateStreamTextureOnGpuThread, 1040 base::Bind(&InProcessCommandBuffer::CreateStreamTextureOnGpuThread,
1033 base::Unretained(this), texture_id); 1041 base::Unretained(this), texture_id);
1034 QueueTask( 1042 QueueTask(
1035 base::Bind(&RunTaskWithResult<uint32_t>, task, &stream_id, &completion)); 1043 base::Bind(&RunTaskWithResult<uint32_t>, task, &stream_id, &completion));
1036 completion.Wait(); 1044 completion.Wait();
1037 return stream_id; 1045 return stream_id;
1038 } 1046 }
1039 #endif 1047 #endif
1040 1048
1041 GpuInProcessThread::GpuInProcessThread(SyncPointManager* sync_point_manager) 1049 GpuInProcessThread::GpuInProcessThread(SyncPointManager* sync_point_manager)
1042 : base::Thread("GpuThread"), sync_point_manager_(sync_point_manager) { 1050 : base::Thread("GpuThread"), Service(gpu_preferences_),
1051 sync_point_manager_(sync_point_manager) {
1043 Start(); 1052 Start();
1044 } 1053 }
1045 1054
1046 GpuInProcessThread::~GpuInProcessThread() { 1055 GpuInProcessThread::~GpuInProcessThread() {
1047 Stop(); 1056 Stop();
1048 } 1057 }
1049 1058
1050 void GpuInProcessThread::AddRef() const { 1059 void GpuInProcessThread::AddRef() const {
1051 base::RefCountedThreadSafe<GpuInProcessThread>::AddRef(); 1060 base::RefCountedThreadSafe<GpuInProcessThread>::AddRef();
1052 } 1061 }
(...skipping 10 matching lines...) Expand all
1063 task_runner()->PostDelayedTask(FROM_HERE, callback, 1072 task_runner()->PostDelayedTask(FROM_HERE, callback,
1064 base::TimeDelta::FromMilliseconds(2)); 1073 base::TimeDelta::FromMilliseconds(2));
1065 } 1074 }
1066 1075
1067 bool GpuInProcessThread::UseVirtualizedGLContexts() { 1076 bool GpuInProcessThread::UseVirtualizedGLContexts() {
1068 return false; 1077 return false;
1069 } 1078 }
1070 1079
1071 scoped_refptr<gles2::ShaderTranslatorCache> 1080 scoped_refptr<gles2::ShaderTranslatorCache>
1072 GpuInProcessThread::shader_translator_cache() { 1081 GpuInProcessThread::shader_translator_cache() {
1073 if (!shader_translator_cache_.get()) 1082 if (!shader_translator_cache_.get()) {
1074 shader_translator_cache_ = new gpu::gles2::ShaderTranslatorCache; 1083 shader_translator_cache_ =
1084 new gpu::gles2::ShaderTranslatorCache(gpu_preferences());
1085 }
1075 return shader_translator_cache_; 1086 return shader_translator_cache_;
1076 } 1087 }
1077 1088
1078 scoped_refptr<gles2::FramebufferCompletenessCache> 1089 scoped_refptr<gles2::FramebufferCompletenessCache>
1079 GpuInProcessThread::framebuffer_completeness_cache() { 1090 GpuInProcessThread::framebuffer_completeness_cache() {
1080 if (!framebuffer_completeness_cache_.get()) 1091 if (!framebuffer_completeness_cache_.get())
1081 framebuffer_completeness_cache_ = 1092 framebuffer_completeness_cache_ =
1082 new gpu::gles2::FramebufferCompletenessCache; 1093 new gpu::gles2::FramebufferCompletenessCache;
1083 return framebuffer_completeness_cache_; 1094 return framebuffer_completeness_cache_;
1084 } 1095 }
1085 1096
1086 SyncPointManager* GpuInProcessThread::sync_point_manager() { 1097 SyncPointManager* GpuInProcessThread::sync_point_manager() {
1087 return sync_point_manager_; 1098 return sync_point_manager_;
1088 } 1099 }
1089 1100
1090 } // namespace gpu 1101 } // namespace gpu
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698