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

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

Issue 217813004: Make ShaderTranslatorCache thread safe (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: nit Created 6 years, 8 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 | Annotate | Revision Log
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 <queue> 7 #include <queue>
8 #include <set> 8 #include <set>
9 #include <utility> 9 #include <utility>
10 10
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after
66 virtual void AddRef() const OVERRIDE { 66 virtual void AddRef() const OVERRIDE {
67 base::RefCountedThreadSafe<GpuInProcessThread>::AddRef(); 67 base::RefCountedThreadSafe<GpuInProcessThread>::AddRef();
68 } 68 }
69 virtual void Release() const OVERRIDE { 69 virtual void Release() const OVERRIDE {
70 base::RefCountedThreadSafe<GpuInProcessThread>::Release(); 70 base::RefCountedThreadSafe<GpuInProcessThread>::Release();
71 } 71 }
72 72
73 virtual void ScheduleTask(const base::Closure& task) OVERRIDE; 73 virtual void ScheduleTask(const base::Closure& task) OVERRIDE;
74 virtual void ScheduleIdleWork(const base::Closure& callback) OVERRIDE; 74 virtual void ScheduleIdleWork(const base::Closure& callback) OVERRIDE;
75 virtual bool UseVirtualizedGLContexts() OVERRIDE { return false; } 75 virtual bool UseVirtualizedGLContexts() OVERRIDE { return false; }
76 virtual scoped_refptr<gles2::ShaderTranslatorCache> shader_translator_cache()
77 OVERRIDE;
76 78
77 private: 79 private:
78 virtual ~GpuInProcessThread(); 80 virtual ~GpuInProcessThread();
79 friend class base::RefCountedThreadSafe<GpuInProcessThread>; 81 friend class base::RefCountedThreadSafe<GpuInProcessThread>;
80 82
83 scoped_refptr<gpu::gles2::ShaderTranslatorCache> shader_translator_cache_;
81 DISALLOW_COPY_AND_ASSIGN(GpuInProcessThread); 84 DISALLOW_COPY_AND_ASSIGN(GpuInProcessThread);
82 }; 85 };
83 86
84 GpuInProcessThread::GpuInProcessThread() : base::Thread("GpuThread") { 87 GpuInProcessThread::GpuInProcessThread() : base::Thread("GpuThread") {
85 Start(); 88 Start();
86 } 89 }
87 90
88 GpuInProcessThread::~GpuInProcessThread() { 91 GpuInProcessThread::~GpuInProcessThread() {
89 Stop(); 92 Stop();
90 } 93 }
91 94
92 void GpuInProcessThread::ScheduleTask(const base::Closure& task) { 95 void GpuInProcessThread::ScheduleTask(const base::Closure& task) {
93 message_loop()->PostTask(FROM_HERE, task); 96 message_loop()->PostTask(FROM_HERE, task);
94 } 97 }
95 98
96 void GpuInProcessThread::ScheduleIdleWork(const base::Closure& callback) { 99 void GpuInProcessThread::ScheduleIdleWork(const base::Closure& callback) {
97 message_loop()->PostDelayedTask( 100 message_loop()->PostDelayedTask(
98 FROM_HERE, callback, base::TimeDelta::FromMilliseconds(5)); 101 FROM_HERE, callback, base::TimeDelta::FromMilliseconds(5));
99 } 102 }
100 103
104 scoped_refptr<gles2::ShaderTranslatorCache>
105 GpuInProcessThread::shader_translator_cache() {
106 if (!shader_translator_cache_.get())
107 shader_translator_cache_ = new gpu::gles2::ShaderTranslatorCache;
108 return shader_translator_cache_;
109 }
110
101 base::LazyInstance<std::set<InProcessCommandBuffer*> > default_thread_clients_ = 111 base::LazyInstance<std::set<InProcessCommandBuffer*> > default_thread_clients_ =
102 LAZY_INSTANCE_INITIALIZER; 112 LAZY_INSTANCE_INITIALIZER;
103 base::LazyInstance<base::Lock> default_thread_clients_lock_ = 113 base::LazyInstance<base::Lock> default_thread_clients_lock_ =
104 LAZY_INSTANCE_INITIALIZER; 114 LAZY_INSTANCE_INITIALIZER;
105 115
106 class ScopedEvent { 116 class ScopedEvent {
107 public: 117 public:
108 ScopedEvent(base::WaitableEvent* event) : event_(event) {} 118 ScopedEvent(base::WaitableEvent* event) : event_(event) {}
109 ~ScopedEvent() { event_->Signal(); } 119 ~ScopedEvent() { event_->Signal(); }
110 120
(...skipping 207 matching lines...) Expand 10 before | Expand all | Expand 10 after
318 gl_share_group_ = params.context_group 328 gl_share_group_ = params.context_group
319 ? params.context_group->gl_share_group_.get() 329 ? params.context_group->gl_share_group_.get()
320 : new gfx::GLShareGroup; 330 : new gfx::GLShareGroup;
321 331
322 #if defined(OS_ANDROID) 332 #if defined(OS_ANDROID)
323 stream_texture_manager_.reset(new StreamTextureManagerInProcess); 333 stream_texture_manager_.reset(new StreamTextureManagerInProcess);
324 #endif 334 #endif
325 335
326 bool bind_generates_resource = false; 336 bool bind_generates_resource = false;
327 decoder_.reset(gles2::GLES2Decoder::Create( 337 decoder_.reset(gles2::GLES2Decoder::Create(
328 params.context_group ? params.context_group->decoder_->GetContextGroup() 338 params.context_group
329 : new gles2::ContextGroup(NULL, 339 ? params.context_group->decoder_->GetContextGroup()
330 NULL, 340 : new gles2::ContextGroup(NULL,
331 NULL, 341 NULL,
332 NULL, 342 NULL,
333 bind_generates_resource))); 343 service_->shader_translator_cache(),
344 NULL,
345 bind_generates_resource)));
334 346
335 gpu_scheduler_.reset( 347 gpu_scheduler_.reset(
336 new GpuScheduler(command_buffer.get(), decoder_.get(), decoder_.get())); 348 new GpuScheduler(command_buffer.get(), decoder_.get(), decoder_.get()));
337 command_buffer->SetGetBufferChangeCallback(base::Bind( 349 command_buffer->SetGetBufferChangeCallback(base::Bind(
338 &GpuScheduler::SetGetBuffer, base::Unretained(gpu_scheduler_.get()))); 350 &GpuScheduler::SetGetBuffer, base::Unretained(gpu_scheduler_.get())));
339 command_buffer_ = command_buffer.Pass(); 351 command_buffer_ = command_buffer.Pass();
340 352
341 decoder_->set_engine(gpu_scheduler_.get()); 353 decoder_->set_engine(gpu_scheduler_.get());
342 354
343 if (!surface_) { 355 if (!surface_) {
(...skipping 398 matching lines...) Expand 10 before | Expand all | Expand 10 after
742 } 754 }
743 #endif 755 #endif
744 756
745 // static 757 // static
746 void InProcessCommandBuffer::SetGpuMemoryBufferFactory( 758 void InProcessCommandBuffer::SetGpuMemoryBufferFactory(
747 GpuMemoryBufferFactory* factory) { 759 GpuMemoryBufferFactory* factory) {
748 g_gpu_memory_buffer_factory = factory; 760 g_gpu_memory_buffer_factory = factory;
749 } 761 }
750 762
751 } // namespace gpu 763 } // namespace gpu
OLDNEW
« no previous file with comments | « gpu/command_buffer/service/in_process_command_buffer.h ('k') | gpu/command_buffer/service/shader_translator.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698