Index: gpu/command_buffer/client/gl_in_process_context.cc |
diff --git a/gpu/command_buffer/client/gl_in_process_context.cc b/gpu/command_buffer/client/gl_in_process_context.cc |
index f10695ed10f71f097b3482b850ba48120fceab93..5d8049bceee7458b2671e143537bc40d79a91d5e 100644 |
--- a/gpu/command_buffer/client/gl_in_process_context.cc |
+++ b/gpu/command_buffer/client/gl_in_process_context.cc |
@@ -66,6 +66,7 @@ class GLInProcessContextImpl |
void SetContextLostCallback(const base::Closure& callback) override; |
gles2::GLES2Implementation* GetImplementation() override; |
size_t GetMappedMemoryLimit() override; |
+ void SetLock(base::Lock* lock) override; |
#if defined(OS_ANDROID) |
scoped_refptr<gfx::SurfaceTexture> GetSurfaceTexture( |
@@ -85,6 +86,7 @@ class GLInProcessContextImpl |
const GLInProcessContextSharedMemoryLimits mem_limits_; |
bool context_lost_; |
base::Closure context_lost_callback_; |
+ base::Lock* lock_; |
DISALLOW_COPY_AND_ASSIGN(GLInProcessContextImpl); |
}; |
@@ -96,7 +98,7 @@ base::LazyInstance<std::set<GLInProcessContextImpl*> > g_all_shared_contexts = |
GLInProcessContextImpl::GLInProcessContextImpl( |
const GLInProcessContextSharedMemoryLimits& mem_limits) |
- : mem_limits_(mem_limits), context_lost_(false) { |
+ : mem_limits_(mem_limits), context_lost_(false), lock_(nullptr) { |
} |
GLInProcessContextImpl::~GLInProcessContextImpl() { |
@@ -115,12 +117,20 @@ size_t GLInProcessContextImpl::GetMappedMemoryLimit() { |
return mem_limits_.mapped_memory_reclaim_limit; |
} |
+void GLInProcessContextImpl::SetLock(base::Lock* lock) { |
+ command_buffer_->SetLock(lock); |
+ lock_ = lock; |
+} |
+ |
void GLInProcessContextImpl::SetContextLostCallback( |
const base::Closure& callback) { |
context_lost_callback_ = callback; |
} |
void GLInProcessContextImpl::OnContextLost() { |
+ scoped_ptr<base::AutoLock> lock; |
+ if (lock_) |
+ lock.reset(new base::AutoLock(*lock_)); |
context_lost_ = true; |
if (!context_lost_callback_.is_null()) { |
context_lost_callback_.Run(); |