| Index: cc/raster/gpu_tile_task_worker_pool.cc
|
| diff --git a/cc/raster/gpu_tile_task_worker_pool.cc b/cc/raster/gpu_tile_task_worker_pool.cc
|
| index 23804550122319aaf08eff05b70121cc15fdccee..3567308fcdc70d01c810bd6963fddb714c5e2fef 100644
|
| --- a/cc/raster/gpu_tile_task_worker_pool.cc
|
| +++ b/cc/raster/gpu_tile_task_worker_pool.cc
|
| @@ -46,9 +46,13 @@
|
| ContextProvider* context_provider = rasterizer_->resource_provider()
|
| ->output_surface()
|
| ->worker_context_provider();
|
| - DCHECK(context_provider);
|
| -
|
| - ContextProvider::ScopedContextLock scoped_context(context_provider);
|
| +
|
| + // The context lock must be held while accessing the context on a
|
| + // worker thread.
|
| + base::AutoLock context_lock(*context_provider->GetLock());
|
| +
|
| + // Allow this worker thread to bind to context_provider.
|
| + context_provider->DetachFromThread();
|
|
|
| gfx::Rect playback_rect = raster_full_rect;
|
| if (resource_has_previous_content_) {
|
| @@ -63,7 +67,10 @@
|
| playback_rect, scale);
|
|
|
| // Barrier to sync worker context output to cc context.
|
| - scoped_context.ContextGL()->OrderingBarrierCHROMIUM();
|
| + context_provider->ContextGL()->OrderingBarrierCHROMIUM();
|
| +
|
| + // Allow compositor thread to bind to context_provider.
|
| + context_provider->DetachFromThread();
|
| }
|
|
|
| private:
|
|
|