Chromium Code Reviews| 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 95e172ba5089e9a56051145ecbb756a6dc8332ff..a1d7ca45ed5261ebd78fc64c981af42c379435f3 100644 |
| --- a/gpu/command_buffer/service/in_process_command_buffer.cc |
| +++ b/gpu/command_buffer/service/in_process_command_buffer.cc |
| @@ -43,9 +43,6 @@ namespace gpu { |
| namespace { |
| -static base::LazyInstance<std::set<InProcessCommandBuffer*> > |
| - g_all_shared_contexts = LAZY_INSTANCE_INITIALIZER; |
| - |
| static bool g_use_virtualized_gl_context = false; |
| static bool g_uses_explicit_scheduling = false; |
| static GpuMemoryBufferFactory* g_gpu_memory_buffer_factory = NULL; |
| @@ -251,7 +248,6 @@ class ScopedEvent { |
| InProcessCommandBuffer::InProcessCommandBuffer() |
| : context_lost_(false), |
| - share_group_id_(0), |
| last_put_offset_(-1), |
| flush_event_(false, false), |
| queue_(CreateSchedulerClient()), |
| @@ -261,15 +257,6 @@ InProcessCommandBuffer::~InProcessCommandBuffer() { |
| Destroy(); |
| } |
| -bool InProcessCommandBuffer::IsContextLost() { |
| - CheckSequencedThread(); |
| - if (context_lost_ || !command_buffer_) { |
| - return true; |
| - } |
| - CommandBuffer::State state = GetState(); |
| - return error::IsError(state.error); |
| -} |
| - |
| void InProcessCommandBuffer::OnResizeView(gfx::Size size, float scale_factor) { |
| CheckSequencedThread(); |
| DCHECK(!surface_->IsOffscreen()); |
| @@ -308,17 +295,14 @@ bool InProcessCommandBuffer::GetBufferChanged(int32 transfer_buffer_id) { |
| bool InProcessCommandBuffer::Initialize( |
| scoped_refptr<gfx::GLSurface> surface, |
| bool is_offscreen, |
| - bool share_resources, |
| gfx::AcceleratedWidget window, |
| const gfx::Size& size, |
| const std::vector<int32>& attribs, |
| gfx::GpuPreference gpu_preference, |
| const base::Closure& context_lost_callback, |
| - unsigned int share_group_id) { |
| + InProcessCommandBuffer* share_group) { |
| - share_resources_ = share_resources; |
| context_lost_callback_ = WrapCallback(context_lost_callback); |
| - share_group_id_ = share_group_id; |
| if (surface) { |
| // GPU thread must be the same as client thread due to GLSurface not being |
| @@ -328,8 +312,13 @@ bool InProcessCommandBuffer::Initialize( |
| } |
| gpu::Capabilities capabilities; |
| - InitializeOnGpuThreadParams params( |
| - is_offscreen, window, size, attribs, gpu_preference, &capabilities); |
| + InitializeOnGpuThreadParams params(is_offscreen, |
| + window, |
| + size, |
| + attribs, |
| + gpu_preference, |
| + &capabilities, |
| + share_group); |
| base::Callback<bool(void)> init_task = |
| base::Bind(&InProcessCommandBuffer::InitializeOnGpuThread, |
| @@ -351,9 +340,6 @@ bool InProcessCommandBuffer::InitializeOnGpuThread( |
| const InitializeOnGpuThreadParams& params) { |
| CheckSequencedThread(); |
| gpu_thread_weak_ptr_ = gpu_thread_weak_ptr_factory_.GetWeakPtr(); |
| - // Use one share group for all contexts. |
| - CR_DEFINE_STATIC_LOCAL(scoped_refptr<gfx::GLShareGroup>, share_group, |
| - (new gfx::GLShareGroup)); |
| DCHECK(params.size.width() >= 0 && params.size.height() >= 0); |
| @@ -374,24 +360,9 @@ bool InProcessCommandBuffer::InitializeOnGpuThread( |
| return false; |
| } |
| - InProcessCommandBuffer* context_group = NULL; |
| - |
| - if (share_resources_ && !g_all_shared_contexts.Get().empty()) { |
| - DCHECK(share_group_id_); |
| - for (std::set<InProcessCommandBuffer*>::iterator it = |
| - g_all_shared_contexts.Get().begin(); |
| - it != g_all_shared_contexts.Get().end(); |
| - ++it) { |
| - if ((*it)->share_group_id_ == share_group_id_) { |
| - context_group = *it; |
| - DCHECK(context_group->share_resources_); |
| - context_lost_ = context_group->IsContextLost(); |
| - break; |
| - } |
| - } |
| - if (!context_group) |
| - share_group = new gfx::GLShareGroup; |
| - } |
| + gl_share_group_ = params.context_group |
| + ? params.context_group->gl_share_group_.get() |
| + : new gfx::GLShareGroup; |
| #if defined(OS_ANDROID) |
| stream_texture_manager_.reset(new StreamTextureManagerInProcess); |
| @@ -399,7 +370,7 @@ bool InProcessCommandBuffer::InitializeOnGpuThread( |
| bool bind_generates_resource = false; |
| decoder_.reset(gles2::GLES2Decoder::Create( |
| - context_group ? context_group->decoder_->GetContextGroup() |
| + params.context_group ? params.context_group->decoder_->GetContextGroup() |
| : new gles2::ContextGroup(NULL, |
| NULL, |
| NULL, |
| @@ -428,15 +399,15 @@ bool InProcessCommandBuffer::InitializeOnGpuThread( |
| } |
| if (g_use_virtualized_gl_context) { |
| - context_ = share_group->GetSharedContext(); |
| + context_ = gl_share_group_->GetSharedContext(); |
| if (!context_.get()) { |
| context_ = gfx::GLContext::CreateGLContext( |
| - share_group.get(), surface_.get(), params.gpu_preference); |
| - share_group->SetSharedContext(context_.get()); |
| + gl_share_group_.get(), surface_.get(), params.gpu_preference); |
| + gl_share_group_->SetSharedContext(context_.get()); |
| } |
| context_ = new GLContextVirtual( |
| - share_group.get(), context_.get(), decoder_->AsWeakPtr()); |
| + gl_share_group_.get(), context_.get(), decoder_->AsWeakPtr()); |
| if (context_->Initialize(surface_.get(), params.gpu_preference)) { |
| VLOG(1) << "Created virtual GL context."; |
| } else { |
| @@ -444,7 +415,7 @@ bool InProcessCommandBuffer::InitializeOnGpuThread( |
| } |
| } else { |
| context_ = gfx::GLContext::CreateGLContext( |
| - share_group.get(), surface_.get(), params.gpu_preference); |
| + gl_share_group_.get(), surface_.get(), params.gpu_preference); |
| } |
| if (!context_.get()) { |
| @@ -486,10 +457,6 @@ bool InProcessCommandBuffer::InitializeOnGpuThread( |
| &InProcessCommandBuffer::OnResizeView, gpu_thread_weak_ptr_)); |
| } |
| - if (share_resources_) { |
| - g_all_shared_contexts.Pointer()->insert(this); |
| - } |
| - |
| return true; |
| } |
| @@ -517,11 +484,11 @@ bool InProcessCommandBuffer::DestroyOnGpuThread() { |
| } |
| context_ = NULL; |
| surface_ = NULL; |
| + gl_share_group_ = NULL; |
| #if defined(OS_ANDROID) |
| stream_texture_manager_.reset(); |
| #endif |
| - g_all_shared_contexts.Pointer()->erase(this); |
| return true; |
| } |
| @@ -538,14 +505,6 @@ void InProcessCommandBuffer::OnContextLost() { |
| } |
| context_lost_ = true; |
| - if (share_resources_) { |
| - for (std::set<InProcessCommandBuffer*>::iterator it = |
| - g_all_shared_contexts.Get().begin(); |
| - it != g_all_shared_contexts.Get().end(); |
| - ++it) { |
| - (*it)->context_lost_ = true; |
|
no sievers
2014/02/12 01:24:32
glLoseContextCHROMIUM() already propagates the los
|
| - } |
| - } |
| } |
| CommandBuffer::State InProcessCommandBuffer::GetStateFast() { |