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 <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 Loading... |
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 gles2::ShaderTranslatorCache* shader_translator_cache() OVERRIDE; |
76 | 77 |
77 private: | 78 private: |
78 virtual ~GpuInProcessThread(); | 79 virtual ~GpuInProcessThread(); |
79 friend class base::RefCountedThreadSafe<GpuInProcessThread>; | 80 friend class base::RefCountedThreadSafe<GpuInProcessThread>; |
80 | 81 |
| 82 scoped_refptr<gpu::gles2::ShaderTranslatorCache> shader_translator_cache_; |
81 DISALLOW_COPY_AND_ASSIGN(GpuInProcessThread); | 83 DISALLOW_COPY_AND_ASSIGN(GpuInProcessThread); |
82 }; | 84 }; |
83 | 85 |
84 GpuInProcessThread::GpuInProcessThread() : base::Thread("GpuThread") { | 86 GpuInProcessThread::GpuInProcessThread() : base::Thread("GpuThread") { |
85 Start(); | 87 Start(); |
86 } | 88 } |
87 | 89 |
88 GpuInProcessThread::~GpuInProcessThread() { | 90 GpuInProcessThread::~GpuInProcessThread() { |
89 Stop(); | 91 Stop(); |
90 } | 92 } |
91 | 93 |
92 void GpuInProcessThread::ScheduleTask(const base::Closure& task) { | 94 void GpuInProcessThread::ScheduleTask(const base::Closure& task) { |
93 message_loop()->PostTask(FROM_HERE, task); | 95 message_loop()->PostTask(FROM_HERE, task); |
94 } | 96 } |
95 | 97 |
96 void GpuInProcessThread::ScheduleIdleWork(const base::Closure& callback) { | 98 void GpuInProcessThread::ScheduleIdleWork(const base::Closure& callback) { |
97 message_loop()->PostDelayedTask( | 99 message_loop()->PostDelayedTask( |
98 FROM_HERE, callback, base::TimeDelta::FromMilliseconds(5)); | 100 FROM_HERE, callback, base::TimeDelta::FromMilliseconds(5)); |
99 } | 101 } |
100 | 102 |
| 103 gles2::ShaderTranslatorCache* GpuInProcessThread::shader_translator_cache() { |
| 104 if (!shader_translator_cache_.get()) |
| 105 shader_translator_cache_ = new gpu::gles2::ShaderTranslatorCache; |
| 106 return shader_translator_cache_.get(); |
| 107 } |
| 108 |
101 base::LazyInstance<std::set<InProcessCommandBuffer*> > default_thread_clients_ = | 109 base::LazyInstance<std::set<InProcessCommandBuffer*> > default_thread_clients_ = |
102 LAZY_INSTANCE_INITIALIZER; | 110 LAZY_INSTANCE_INITIALIZER; |
103 base::LazyInstance<base::Lock> default_thread_clients_lock_ = | 111 base::LazyInstance<base::Lock> default_thread_clients_lock_ = |
104 LAZY_INSTANCE_INITIALIZER; | 112 LAZY_INSTANCE_INITIALIZER; |
105 | 113 |
106 class ScopedEvent { | 114 class ScopedEvent { |
107 public: | 115 public: |
108 ScopedEvent(base::WaitableEvent* event) : event_(event) {} | 116 ScopedEvent(base::WaitableEvent* event) : event_(event) {} |
109 ~ScopedEvent() { event_->Signal(); } | 117 ~ScopedEvent() { event_->Signal(); } |
110 | 118 |
(...skipping 271 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
382 if (!context_->MakeCurrent(surface_.get())) { | 390 if (!context_->MakeCurrent(surface_.get())) { |
383 LOG(ERROR) << "Could not make context current."; | 391 LOG(ERROR) << "Could not make context current."; |
384 DestroyOnGpuThread(); | 392 DestroyOnGpuThread(); |
385 return false; | 393 return false; |
386 } | 394 } |
387 | 395 |
388 gles2::DisallowedFeatures disallowed_features; | 396 gles2::DisallowedFeatures disallowed_features; |
389 disallowed_features.gpu_memory_manager = true; | 397 disallowed_features.gpu_memory_manager = true; |
390 if (!decoder_->Initialize(surface_, | 398 if (!decoder_->Initialize(surface_, |
391 context_, | 399 context_, |
| 400 service_->shader_translator_cache(), |
392 params.is_offscreen, | 401 params.is_offscreen, |
393 params.size, | 402 params.size, |
394 disallowed_features, | 403 disallowed_features, |
395 params.attribs)) { | 404 params.attribs)) { |
396 LOG(ERROR) << "Could not initialize decoder."; | 405 LOG(ERROR) << "Could not initialize decoder."; |
397 DestroyOnGpuThread(); | 406 DestroyOnGpuThread(); |
398 return false; | 407 return false; |
399 } | 408 } |
400 | 409 |
401 gpu_control_.reset( | 410 gpu_control_.reset( |
(...skipping 340 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
742 } | 751 } |
743 #endif | 752 #endif |
744 | 753 |
745 // static | 754 // static |
746 void InProcessCommandBuffer::SetGpuMemoryBufferFactory( | 755 void InProcessCommandBuffer::SetGpuMemoryBufferFactory( |
747 GpuMemoryBufferFactory* factory) { | 756 GpuMemoryBufferFactory* factory) { |
748 g_gpu_memory_buffer_factory = factory; | 757 g_gpu_memory_buffer_factory = factory; |
749 } | 758 } |
750 | 759 |
751 } // namespace gpu | 760 } // namespace gpu |
OLD | NEW |