| Index: content/browser/android/in_process/synchronous_compositor_factory_impl.cc
|
| diff --git a/content/browser/android/in_process/synchronous_compositor_factory_impl.cc b/content/browser/android/in_process/synchronous_compositor_factory_impl.cc
|
| index 62aa33e256462bc2c671714f1c9649b053edfb55..ba4b894de1747dcf81356362e1495f4acc190746 100644
|
| --- a/content/browser/android/in_process/synchronous_compositor_factory_impl.cc
|
| +++ b/content/browser/android/in_process/synchronous_compositor_factory_impl.cc
|
| @@ -179,13 +179,27 @@ scoped_refptr<ContextProviderWebContext> SynchronousCompositorFactoryImpl::
|
| scoped_refptr<cc::ContextProvider> SynchronousCompositorFactoryImpl::
|
| CreateOnscreenContextProviderForCompositorThread(
|
| scoped_refptr<gfx::GLSurface> surface) {
|
| - DCHECK(surface);
|
| DCHECK(service_);
|
|
|
| - if (!share_context_.get())
|
| - share_context_ = CreateContext(NULL, service_, NULL);
|
| +
|
| + // TODO(boliu): This sucks. Find a better way.
|
| + gpu::GLInProcessContext* share_context = NULL;
|
| + {
|
| + base::AutoLock lock(num_hardware_compositor_lock_);
|
| + share_context = share_context_.get();
|
| + }
|
| + if (!share_context) {
|
| + scoped_ptr<gpu::GLInProcessContext> context = CreateContext(NULL, service_, NULL);
|
| + {
|
| + base::AutoLock lock(num_hardware_compositor_lock_);
|
| + if (!share_context_.get())
|
| + share_context_ = context.Pass();
|
| + share_context = share_context_.get();
|
| + }
|
| + }
|
| +
|
| return webkit::gpu::ContextProviderInProcess::Create(
|
| - WrapContext(CreateContext(surface, service_, share_context_.get())),
|
| + WrapContext(CreateContext(surface, service_, share_context)),
|
| "Compositor-Onscreen");
|
| }
|
|
|
|
|