| Index: gpu/command_buffer/service/in_process_command_buffer.cc
|
| diff --git a/gpu/command_buffer/service/in_process_command_buffer.cc b/gpu/command_buffer/service/in_process_command_buffer.cc
|
| index 815b197e3b178a1f8adefd9ef12ab0057bd38d36..8836904ce9d6360344238f72a63b8d3cd23b5a4a 100644
|
| --- a/gpu/command_buffer/service/in_process_command_buffer.cc
|
| +++ b/gpu/command_buffer/service/in_process_command_buffer.cc
|
| @@ -19,6 +19,7 @@
|
| #include "base/synchronization/condition_variable.h"
|
| #include "base/threading/thread.h"
|
| #include "gpu/command_buffer/client/gpu_memory_buffer_manager.h"
|
| +#include "gpu/command_buffer/common/value_state.h"
|
| #include "gpu/command_buffer/service/command_buffer_service.h"
|
| #include "gpu/command_buffer/service/context_group.h"
|
| #include "gpu/command_buffer/service/gl_context_virtual.h"
|
| @@ -105,9 +106,12 @@ GpuInProcessThread::shader_translator_cache() {
|
| return shader_translator_cache_;
|
| }
|
|
|
| -base::LazyInstance<std::set<InProcessCommandBuffer*> > default_thread_clients_ =
|
| - LAZY_INSTANCE_INITIALIZER;
|
| -base::LazyInstance<base::Lock> default_thread_clients_lock_ =
|
| +struct GpuInProcessThreadHolder {
|
| + GpuInProcessThreadHolder() : gpu_thread(new GpuInProcessThread) {}
|
| + scoped_refptr<InProcessCommandBuffer::Service> gpu_thread;
|
| +};
|
| +
|
| +base::LazyInstance<GpuInProcessThreadHolder> g_default_service =
|
| LAZY_INSTANCE_INITIALIZER;
|
|
|
| class ScopedEvent {
|
| @@ -194,18 +198,12 @@ InProcessCommandBuffer::Service::mailbox_manager() {
|
| return mailbox_manager_;
|
| }
|
|
|
| -scoped_refptr<InProcessCommandBuffer::Service>
|
| -InProcessCommandBuffer::GetDefaultService() {
|
| - base::AutoLock lock(default_thread_clients_lock_.Get());
|
| - scoped_refptr<Service> service;
|
| - if (!default_thread_clients_.Get().empty()) {
|
| - InProcessCommandBuffer* other = *default_thread_clients_.Get().begin();
|
| - service = other->service_;
|
| - DCHECK(service.get());
|
| - } else {
|
| - service = new GpuInProcessThread;
|
| +scoped_refptr<gpu::ValueStateMap>
|
| +InProcessCommandBuffer::Service::pending_valuebuffer_state() {
|
| + if (!pending_valuebuffer_state_.get()) {
|
| + pending_valuebuffer_state_ = new gpu::ValueStateMap();
|
| }
|
| - return service;
|
| + return pending_valuebuffer_state_;
|
| }
|
|
|
| InProcessCommandBuffer::InProcessCommandBuffer(
|
| @@ -216,19 +214,14 @@ InProcessCommandBuffer::InProcessCommandBuffer(
|
| last_put_offset_(-1),
|
| gpu_memory_buffer_manager_(nullptr),
|
| flush_event_(false, false),
|
| - service_(service.get() ? service : GetDefaultService()),
|
| + service_(service.get() ? service : g_default_service.Get().gpu_thread),
|
| gpu_thread_weak_ptr_factory_(this) {
|
| - if (!service.get()) {
|
| - base::AutoLock lock(default_thread_clients_lock_.Get());
|
| - default_thread_clients_.Get().insert(this);
|
| - }
|
| + DCHECK(service_.get());
|
| next_image_id_.GetNext();
|
| }
|
|
|
| InProcessCommandBuffer::~InProcessCommandBuffer() {
|
| Destroy();
|
| - base::AutoLock lock(default_thread_clients_lock_.Get());
|
| - default_thread_clients_.Get().erase(this);
|
| }
|
|
|
| void InProcessCommandBuffer::OnResizeView(gfx::Size size, float scale_factor) {
|
| @@ -358,6 +351,7 @@ bool InProcessCommandBuffer::InitializeOnGpuThread(
|
| NULL,
|
| service_->shader_translator_cache(),
|
| NULL,
|
| + service_->pending_valuebuffer_state(),
|
| bind_generates_resource)));
|
|
|
| gpu_scheduler_.reset(
|
|
|