| 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;
|
| }
|
|
|
|
|