Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(14)

Unified Diff: cc/resources/resource_provider.cc

Issue 664803003: Update from chromium a8e7c94b1b79a0948d05a1fcfff53391d22ce37a (Closed) Base URL: git@github.com:domokit/mojo.git@master
Patch Set: Created 6 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « cc/resources/resource_provider.h ('k') | cc/resources/resource_provider_unittest.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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_);
}
« no previous file with comments | « cc/resources/resource_provider.h ('k') | cc/resources/resource_provider_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698