Index: cc/resources/resource_provider.cc |
diff --git a/cc/resources/resource_provider.cc b/cc/resources/resource_provider.cc |
index b90b59477376960656266cdb0f60b87d0d8173b0..2856a6ecdb6e6b6e31a3686439a79b74f1ae80cd 100644 |
--- a/cc/resources/resource_provider.cc |
+++ b/cc/resources/resource_provider.cc |
@@ -430,15 +430,13 @@ scoped_ptr<ResourceProvider> ResourceProvider::Create( |
BlockingTaskRunner* blocking_main_thread_task_runner, |
int highp_threshold_min, |
bool use_rgba_4444_texture_format, |
+ bool use_worker_context_for_gr, |
size_t id_allocation_chunk_size) { |
- scoped_ptr<ResourceProvider> resource_provider( |
- new ResourceProvider(output_surface, |
- shared_bitmap_manager, |
- gpu_memory_buffer_manager, |
- blocking_main_thread_task_runner, |
- highp_threshold_min, |
- use_rgba_4444_texture_format, |
- id_allocation_chunk_size)); |
+ scoped_ptr<ResourceProvider> resource_provider(new ResourceProvider( |
+ output_surface, shared_bitmap_manager, gpu_memory_buffer_manager, |
+ blocking_main_thread_task_runner, highp_threshold_min, |
+ use_rgba_4444_texture_format, use_worker_context_for_gr, |
+ id_allocation_chunk_size)); |
if (resource_provider->ContextGL()) |
resource_provider->InitializeGL(); |
@@ -1087,17 +1085,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. |
+ resource_provider_->LazyAllocate(resource_); |
+} |
+ |
+ResourceProvider::ScopedWriteLockGr::~ScopedWriteLockGr() { |
DCHECK(thread_checker_.CalledOnValidThread()); |
DCHECK(resource_->locked_for_write); |
+ resource_provider_->UnlockForWrite(resource_); |
+} |
- resource_provider_->LazyAllocate(resource_); |
+SkSurface* ResourceProvider::ScopedWriteLockGr::GetSkSurface( |
+ bool use_distance_field_text, |
+ bool can_use_lcd_text, |
+ int msaa_sample_count) { |
+ // TODO(vmiura): Update DCHECK later to match worker thread. |
+ // DCHECK(thread_checker_.CalledOnValidThread()); |
+ DCHECK(resource_->locked_for_write); |
GrBackendTextureDesc desc; |
desc.fFlags = kRenderTarget_GrBackendTextureFlag; |
@@ -1122,14 +1128,14 @@ ResourceProvider::ScopedWriteLockGr::ScopedWriteLockGr( |
surface_props = |
SkSurfaceProps(flags, SkSurfaceProps::kLegacyFontHost_InitType); |
} |
- sk_surface_ = skia::AdoptRef(SkSurface::NewRenderTargetDirect( |
- gr_texture->asRenderTarget(), &surface_props)); |
+ // TODO(vmiura): I removed this reference so that we don't delete it on the |
+ // compositor thread later. For now, releasing it on the worker thread. |
+ // resource_->sk_surface = skia::AdoptRef(SkSurface::NewRenderTargetDirect( |
+ // gr_texture->asRenderTarget(), &surface_props)); |
+ return SkSurface::NewRenderTargetDirect(gr_texture->asRenderTarget(), |
+ &surface_props); |
} |
-} |
- |
-ResourceProvider::ScopedWriteLockGr::~ScopedWriteLockGr() { |
- DCHECK(thread_checker_.CalledOnValidThread()); |
- resource_provider_->UnlockForWrite(resource_); |
+ return nullptr; |
} |
ResourceProvider::SynchronousFence::SynchronousFence( |
@@ -1168,6 +1174,7 @@ ResourceProvider::ResourceProvider( |
BlockingTaskRunner* blocking_main_thread_task_runner, |
int highp_threshold_min, |
bool use_rgba_4444_texture_format, |
+ bool use_worker_context_for_gr, |
size_t id_allocation_chunk_size) |
: output_surface_(output_surface), |
shared_bitmap_manager_(shared_bitmap_manager), |
@@ -1186,6 +1193,7 @@ ResourceProvider::ResourceProvider( |
max_texture_size_(0), |
best_texture_format_(RGBA_8888), |
use_rgba_4444_texture_format_(use_rgba_4444_texture_format), |
+ use_worker_context_for_gr_(use_worker_context_for_gr), |
id_allocation_chunk_size_(id_allocation_chunk_size), |
use_sync_query_(false) { |
DCHECK(output_surface_->HasClient()); |
@@ -2136,7 +2144,9 @@ GLES2Interface* ResourceProvider::ContextGL() const { |
} |
class GrContext* ResourceProvider::GrContext() const { |
- ContextProvider* context_provider = output_surface_->context_provider(); |
+ ContextProvider* context_provider = |
+ use_worker_context_for_gr_ ? output_surface_->worker_context_provider() |
+ : output_surface_->context_provider(); |
return context_provider ? context_provider->GrContext() : NULL; |
} |