| Index: cc/resources/resource_provider.cc
|
| diff --git a/cc/resources/resource_provider.cc b/cc/resources/resource_provider.cc
|
| index 1697ac2fc594c83214a1b9ae45423a54f7b49053..550475b169b2eb73e14a7c96335fc88b1d7f181b 100644
|
| --- a/cc/resources/resource_provider.cc
|
| +++ b/cc/resources/resource_provider.cc
|
| @@ -411,8 +411,7 @@ scoped_ptr<ResourceProvider> ResourceProvider::Create(
|
| BlockingTaskRunner* blocking_main_thread_task_runner,
|
| int highp_threshold_min,
|
| bool use_rgba_4444_texture_format,
|
| - size_t id_allocation_chunk_size,
|
| - bool use_distance_field_text) {
|
| + size_t id_allocation_chunk_size) {
|
| scoped_ptr<ResourceProvider> resource_provider(
|
| new ResourceProvider(output_surface,
|
| shared_bitmap_manager,
|
| @@ -420,8 +419,7 @@ scoped_ptr<ResourceProvider> ResourceProvider::Create(
|
| blocking_main_thread_task_runner,
|
| highp_threshold_min,
|
| use_rgba_4444_texture_format,
|
| - id_allocation_chunk_size,
|
| - use_distance_field_text));
|
| + id_allocation_chunk_size));
|
|
|
| if (resource_provider->ContextGL())
|
| resource_provider->InitializeGL();
|
| @@ -995,38 +993,12 @@ void ResourceProvider::UnlockForWriteToGpuMemoryBuffer(ResourceId id) {
|
| resource->read_lock_fences_enabled = true;
|
| }
|
|
|
| -const ResourceProvider::Resource* ResourceProvider::LockForWriteToSkSurface(
|
| - ResourceId id) {
|
| +void ResourceProvider::LockForWriteToSkSurface(ResourceId id) {
|
| Resource* resource = GetResource(id);
|
| DCHECK_EQ(GLTexture, resource->type);
|
| DCHECK(CanLockForWrite(id));
|
|
|
| resource->locked_for_write = true;
|
| - if (!resource->sk_surface) {
|
| - class GrContext* gr_context = GrContext();
|
| - // TODO(alokp): Implement TestContextProvider::GrContext().
|
| - if (!gr_context)
|
| - return resource;
|
| -
|
| - LazyAllocate(resource);
|
| -
|
| - GrBackendTextureDesc desc;
|
| - desc.fFlags = kRenderTarget_GrBackendTextureFlag;
|
| - desc.fWidth = resource->size.width();
|
| - desc.fHeight = resource->size.height();
|
| - desc.fConfig = ToGrPixelConfig(resource->format);
|
| - desc.fOrigin = kTopLeft_GrSurfaceOrigin;
|
| - desc.fTextureHandle = resource->gl_id;
|
| - skia::RefPtr<GrTexture> gr_texture =
|
| - skia::AdoptRef(gr_context->wrapBackendTexture(desc));
|
| - SkSurface::TextRenderMode text_render_mode =
|
| - use_distance_field_text_ ? SkSurface::kDistanceField_TextRenderMode
|
| - : SkSurface::kStandard_TextRenderMode;
|
| - resource->sk_surface = skia::AdoptRef(SkSurface::NewRenderTargetDirect(
|
| - gr_texture->asRenderTarget(), text_render_mode));
|
| - }
|
| -
|
| - return resource;
|
| }
|
|
|
| void ResourceProvider::UnlockForWriteToSkSurface(ResourceId id) {
|
| @@ -1141,16 +1113,49 @@ ResourceProvider::ScopedWriteLockGpuMemoryBuffer::
|
| ResourceProvider::ScopedWriteLockGr::ScopedWriteLockGr(
|
| ResourceProvider* resource_provider,
|
| ResourceProvider::ResourceId resource_id)
|
| - : resource_provider_(resource_provider),
|
| - resource_id_(resource_id),
|
| - sk_surface_(resource_provider->LockForWriteToSkSurface(resource_id)
|
| - ->sk_surface.get()) {
|
| + : resource_provider_(resource_provider), resource_id_(resource_id) {
|
| + resource_provider->LockForWriteToSkSurface(resource_id);
|
| }
|
|
|
| ResourceProvider::ScopedWriteLockGr::~ScopedWriteLockGr() {
|
| resource_provider_->UnlockForWriteToSkSurface(resource_id_);
|
| }
|
|
|
| +SkSurface* ResourceProvider::ScopedWriteLockGr::GetSkSurface(
|
| + bool use_distance_field_text) {
|
| + Resource* resource = resource_provider_->GetResource(resource_id_);
|
| + DCHECK(resource->locked_for_write);
|
| +
|
| + // If the surface doesn't exist, or doesn't have the correct dff setting,
|
| + // recreate the surface within the resource.
|
| + if (!resource->sk_surface ||
|
| + use_distance_field_text !=
|
| + resource->sk_surface->props().isUseDistanceFieldFonts()) {
|
| + class GrContext* gr_context = resource_provider_->GrContext();
|
| + // TODO(alokp): Implement TestContextProvider::GrContext().
|
| + if (!gr_context)
|
| + return nullptr;
|
| +
|
| + resource_provider_->LazyAllocate(resource);
|
| +
|
| + GrBackendTextureDesc desc;
|
| + desc.fFlags = kRenderTarget_GrBackendTextureFlag;
|
| + desc.fWidth = resource->size.width();
|
| + desc.fHeight = resource->size.height();
|
| + desc.fConfig = ToGrPixelConfig(resource->format);
|
| + desc.fOrigin = kTopLeft_GrSurfaceOrigin;
|
| + desc.fTextureHandle = resource->gl_id;
|
| + skia::RefPtr<GrTexture> gr_texture =
|
| + skia::AdoptRef(gr_context->wrapBackendTexture(desc));
|
| + SkSurface::TextRenderMode text_render_mode =
|
| + use_distance_field_text ? SkSurface::kDistanceField_TextRenderMode
|
| + : SkSurface::kStandard_TextRenderMode;
|
| + resource->sk_surface = skia::AdoptRef(SkSurface::NewRenderTargetDirect(
|
| + gr_texture->asRenderTarget(), text_render_mode));
|
| + }
|
| + return resource->sk_surface.get();
|
| +}
|
| +
|
| ResourceProvider::ResourceProvider(
|
| OutputSurface* output_surface,
|
| SharedBitmapManager* shared_bitmap_manager,
|
| @@ -1158,8 +1163,7 @@ ResourceProvider::ResourceProvider(
|
| BlockingTaskRunner* blocking_main_thread_task_runner,
|
| int highp_threshold_min,
|
| bool use_rgba_4444_texture_format,
|
| - size_t id_allocation_chunk_size,
|
| - bool use_distance_field_text)
|
| + size_t id_allocation_chunk_size)
|
| : output_surface_(output_surface),
|
| shared_bitmap_manager_(shared_bitmap_manager),
|
| gpu_memory_buffer_manager_(gpu_memory_buffer_manager),
|
| @@ -1177,8 +1181,7 @@ ResourceProvider::ResourceProvider(
|
| best_texture_format_(RGBA_8888),
|
| use_rgba_4444_texture_format_(use_rgba_4444_texture_format),
|
| id_allocation_chunk_size_(id_allocation_chunk_size),
|
| - use_sync_query_(false),
|
| - use_distance_field_text_(use_distance_field_text) {
|
| + use_sync_query_(false) {
|
| DCHECK(output_surface_->HasClient());
|
| DCHECK(id_allocation_chunk_size_);
|
| }
|
|
|