Index: cc/resources/resource_provider.cc |
diff --git a/cc/resources/resource_provider.cc b/cc/resources/resource_provider.cc |
index b90b59477376960656266cdb0f60b87d0d8173b0..42ef4b389e3e24bbdda084df4cad5e9f850a10d9 100644 |
--- a/cc/resources/resource_provider.cc |
+++ b/cc/resources/resource_provider.cc |
@@ -1087,17 +1087,25 @@ ResourceProvider::ScopedWriteLockGpuMemoryBuffer::GetGpuMemoryBuffer() { |
ResourceProvider::ScopedWriteLockGr::ScopedWriteLockGr( |
ResourceProvider* resource_provider, |
- ResourceProvider::ResourceId resource_id, |
- bool use_distance_field_text, |
- bool can_use_lcd_text, |
- int msaa_sample_count) |
+ ResourceProvider::ResourceId resource_id) |
: resource_provider_(resource_provider), |
resource_(resource_provider->LockForWrite(resource_id)) { |
- // Create the sk_surface. |
+ DCHECK(thread_checker_.CalledOnValidThread()); |
+ resource_provider_->LazyAllocate(resource_); |
+} |
+ |
+ResourceProvider::ScopedWriteLockGr::~ScopedWriteLockGr() { |
DCHECK(thread_checker_.CalledOnValidThread()); |
DCHECK(resource_->locked_for_write); |
+ resource_provider_->UnlockForWrite(resource_); |
+} |
- resource_provider_->LazyAllocate(resource_); |
+void ResourceProvider::ScopedWriteLockGr::InitSkSurface( |
+ bool use_worker_context, |
+ bool use_distance_field_text, |
+ bool can_use_lcd_text, |
+ int msaa_sample_count) { |
+ DCHECK(resource_->locked_for_write); |
GrBackendTextureDesc desc; |
desc.fFlags = kRenderTarget_GrBackendTextureFlag; |
@@ -1108,7 +1116,8 @@ ResourceProvider::ScopedWriteLockGr::ScopedWriteLockGr( |
desc.fTextureHandle = resource_->gl_id; |
desc.fSampleCnt = msaa_sample_count; |
- class GrContext* gr_context = resource_provider_->GrContext(); |
+ class GrContext* gr_context = |
+ resource_provider_->GrContext(use_worker_context); |
skia::RefPtr<GrTexture> gr_texture = |
skia::AdoptRef(gr_context->wrapBackendTexture(desc)); |
if (gr_texture) { |
@@ -1124,12 +1133,13 @@ ResourceProvider::ScopedWriteLockGr::ScopedWriteLockGr( |
} |
sk_surface_ = skia::AdoptRef(SkSurface::NewRenderTargetDirect( |
gr_texture->asRenderTarget(), &surface_props)); |
+ return; |
} |
+ sk_surface_.clear(); |
} |
-ResourceProvider::ScopedWriteLockGr::~ScopedWriteLockGr() { |
- DCHECK(thread_checker_.CalledOnValidThread()); |
- resource_provider_->UnlockForWrite(resource_); |
+void ResourceProvider::ScopedWriteLockGr::ReleaseSkSurface() { |
+ sk_surface_.clear(); |
} |
ResourceProvider::SynchronousFence::SynchronousFence( |
@@ -2135,8 +2145,10 @@ GLES2Interface* ResourceProvider::ContextGL() const { |
return context_provider ? context_provider->ContextGL() : NULL; |
} |
-class GrContext* ResourceProvider::GrContext() const { |
- ContextProvider* context_provider = output_surface_->context_provider(); |
+class GrContext* ResourceProvider::GrContext(bool worker_context) const { |
+ ContextProvider* context_provider = |
+ worker_context ? output_surface_->worker_context_provider() |
+ : output_surface_->context_provider(); |
return context_provider ? context_provider->GrContext() : NULL; |
} |