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

Side by Side 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, 1 month 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 unified diff | 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 »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2012 The Chromium Authors. All rights reserved. 1 // Copyright 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "cc/resources/resource_provider.h" 5 #include "cc/resources/resource_provider.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <limits> 8 #include <limits>
9 9
10 #include "base/containers/hash_tables.h" 10 #include "base/containers/hash_tables.h"
(...skipping 393 matching lines...) Expand 10 before | Expand all | Expand 10 after
404 404
405 ResourceProvider::Child::~Child() {} 405 ResourceProvider::Child::~Child() {}
406 406
407 scoped_ptr<ResourceProvider> ResourceProvider::Create( 407 scoped_ptr<ResourceProvider> ResourceProvider::Create(
408 OutputSurface* output_surface, 408 OutputSurface* output_surface,
409 SharedBitmapManager* shared_bitmap_manager, 409 SharedBitmapManager* shared_bitmap_manager,
410 GpuMemoryBufferManager* gpu_memory_buffer_manager, 410 GpuMemoryBufferManager* gpu_memory_buffer_manager,
411 BlockingTaskRunner* blocking_main_thread_task_runner, 411 BlockingTaskRunner* blocking_main_thread_task_runner,
412 int highp_threshold_min, 412 int highp_threshold_min,
413 bool use_rgba_4444_texture_format, 413 bool use_rgba_4444_texture_format,
414 size_t id_allocation_chunk_size, 414 size_t id_allocation_chunk_size) {
415 bool use_distance_field_text) {
416 scoped_ptr<ResourceProvider> resource_provider( 415 scoped_ptr<ResourceProvider> resource_provider(
417 new ResourceProvider(output_surface, 416 new ResourceProvider(output_surface,
418 shared_bitmap_manager, 417 shared_bitmap_manager,
419 gpu_memory_buffer_manager, 418 gpu_memory_buffer_manager,
420 blocking_main_thread_task_runner, 419 blocking_main_thread_task_runner,
421 highp_threshold_min, 420 highp_threshold_min,
422 use_rgba_4444_texture_format, 421 use_rgba_4444_texture_format,
423 id_allocation_chunk_size, 422 id_allocation_chunk_size));
424 use_distance_field_text));
425 423
426 if (resource_provider->ContextGL()) 424 if (resource_provider->ContextGL())
427 resource_provider->InitializeGL(); 425 resource_provider->InitializeGL();
428 else 426 else
429 resource_provider->InitializeSoftware(); 427 resource_provider->InitializeSoftware();
430 428
431 DCHECK_NE(InvalidType, resource_provider->default_resource_type()); 429 DCHECK_NE(InvalidType, resource_provider->default_resource_type());
432 return resource_provider.Pass(); 430 return resource_provider.Pass();
433 } 431 }
434 432
(...skipping 553 matching lines...) Expand 10 before | Expand all | Expand 10 after
988 986
989 resource->locked_for_write = false; 987 resource->locked_for_write = false;
990 resource->dirty_image = true; 988 resource->dirty_image = true;
991 989
992 // GpuMemoryBuffer provides direct access to the memory used by the GPU. 990 // GpuMemoryBuffer provides direct access to the memory used by the GPU.
993 // Read lock fences are required to ensure that we're not trying to map a 991 // Read lock fences are required to ensure that we're not trying to map a
994 // buffer that is currently in-use by the GPU. 992 // buffer that is currently in-use by the GPU.
995 resource->read_lock_fences_enabled = true; 993 resource->read_lock_fences_enabled = true;
996 } 994 }
997 995
998 const ResourceProvider::Resource* ResourceProvider::LockForWriteToSkSurface( 996 void ResourceProvider::LockForWriteToSkSurface(ResourceId id) {
999 ResourceId id) {
1000 Resource* resource = GetResource(id); 997 Resource* resource = GetResource(id);
1001 DCHECK_EQ(GLTexture, resource->type); 998 DCHECK_EQ(GLTexture, resource->type);
1002 DCHECK(CanLockForWrite(id)); 999 DCHECK(CanLockForWrite(id));
1003 1000
1004 resource->locked_for_write = true; 1001 resource->locked_for_write = true;
1005 if (!resource->sk_surface) {
1006 class GrContext* gr_context = GrContext();
1007 // TODO(alokp): Implement TestContextProvider::GrContext().
1008 if (!gr_context)
1009 return resource;
1010
1011 LazyAllocate(resource);
1012
1013 GrBackendTextureDesc desc;
1014 desc.fFlags = kRenderTarget_GrBackendTextureFlag;
1015 desc.fWidth = resource->size.width();
1016 desc.fHeight = resource->size.height();
1017 desc.fConfig = ToGrPixelConfig(resource->format);
1018 desc.fOrigin = kTopLeft_GrSurfaceOrigin;
1019 desc.fTextureHandle = resource->gl_id;
1020 skia::RefPtr<GrTexture> gr_texture =
1021 skia::AdoptRef(gr_context->wrapBackendTexture(desc));
1022 SkSurface::TextRenderMode text_render_mode =
1023 use_distance_field_text_ ? SkSurface::kDistanceField_TextRenderMode
1024 : SkSurface::kStandard_TextRenderMode;
1025 resource->sk_surface = skia::AdoptRef(SkSurface::NewRenderTargetDirect(
1026 gr_texture->asRenderTarget(), text_render_mode));
1027 }
1028
1029 return resource;
1030 } 1002 }
1031 1003
1032 void ResourceProvider::UnlockForWriteToSkSurface(ResourceId id) { 1004 void ResourceProvider::UnlockForWriteToSkSurface(ResourceId id) {
1033 Resource* resource = GetResource(id); 1005 Resource* resource = GetResource(id);
1034 DCHECK(resource->locked_for_write); 1006 DCHECK(resource->locked_for_write);
1035 DCHECK_EQ(resource->exported_count, 0); 1007 DCHECK_EQ(resource->exported_count, 0);
1036 DCHECK(resource->origin == Resource::Internal); 1008 DCHECK(resource->origin == Resource::Internal);
1037 DCHECK_EQ(GLTexture, resource->type); 1009 DCHECK_EQ(GLTexture, resource->type);
1038 resource->locked_for_write = false; 1010 resource->locked_for_write = false;
1039 } 1011 }
(...skipping 94 matching lines...) Expand 10 before | Expand all | Expand 10 after
1134 } 1106 }
1135 1107
1136 ResourceProvider::ScopedWriteLockGpuMemoryBuffer:: 1108 ResourceProvider::ScopedWriteLockGpuMemoryBuffer::
1137 ~ScopedWriteLockGpuMemoryBuffer() { 1109 ~ScopedWriteLockGpuMemoryBuffer() {
1138 resource_provider_->UnlockForWriteToGpuMemoryBuffer(resource_id_); 1110 resource_provider_->UnlockForWriteToGpuMemoryBuffer(resource_id_);
1139 } 1111 }
1140 1112
1141 ResourceProvider::ScopedWriteLockGr::ScopedWriteLockGr( 1113 ResourceProvider::ScopedWriteLockGr::ScopedWriteLockGr(
1142 ResourceProvider* resource_provider, 1114 ResourceProvider* resource_provider,
1143 ResourceProvider::ResourceId resource_id) 1115 ResourceProvider::ResourceId resource_id)
1144 : resource_provider_(resource_provider), 1116 : resource_provider_(resource_provider), resource_id_(resource_id) {
1145 resource_id_(resource_id), 1117 resource_provider->LockForWriteToSkSurface(resource_id);
1146 sk_surface_(resource_provider->LockForWriteToSkSurface(resource_id)
1147 ->sk_surface.get()) {
1148 } 1118 }
1149 1119
1150 ResourceProvider::ScopedWriteLockGr::~ScopedWriteLockGr() { 1120 ResourceProvider::ScopedWriteLockGr::~ScopedWriteLockGr() {
1151 resource_provider_->UnlockForWriteToSkSurface(resource_id_); 1121 resource_provider_->UnlockForWriteToSkSurface(resource_id_);
1152 } 1122 }
1153 1123
1124 SkSurface* ResourceProvider::ScopedWriteLockGr::GetSkSurface(
1125 bool use_distance_field_text) {
1126 Resource* resource = resource_provider_->GetResource(resource_id_);
1127 DCHECK(resource->locked_for_write);
1128
1129 // If the surface doesn't exist, or doesn't have the correct dff setting,
1130 // recreate the surface within the resource.
1131 if (!resource->sk_surface ||
1132 use_distance_field_text !=
1133 resource->sk_surface->props().isUseDistanceFieldFonts()) {
1134 class GrContext* gr_context = resource_provider_->GrContext();
1135 // TODO(alokp): Implement TestContextProvider::GrContext().
1136 if (!gr_context)
1137 return nullptr;
1138
1139 resource_provider_->LazyAllocate(resource);
1140
1141 GrBackendTextureDesc desc;
1142 desc.fFlags = kRenderTarget_GrBackendTextureFlag;
1143 desc.fWidth = resource->size.width();
1144 desc.fHeight = resource->size.height();
1145 desc.fConfig = ToGrPixelConfig(resource->format);
1146 desc.fOrigin = kTopLeft_GrSurfaceOrigin;
1147 desc.fTextureHandle = resource->gl_id;
1148 skia::RefPtr<GrTexture> gr_texture =
1149 skia::AdoptRef(gr_context->wrapBackendTexture(desc));
1150 SkSurface::TextRenderMode text_render_mode =
1151 use_distance_field_text ? SkSurface::kDistanceField_TextRenderMode
1152 : SkSurface::kStandard_TextRenderMode;
1153 resource->sk_surface = skia::AdoptRef(SkSurface::NewRenderTargetDirect(
1154 gr_texture->asRenderTarget(), text_render_mode));
1155 }
1156 return resource->sk_surface.get();
1157 }
1158
1154 ResourceProvider::ResourceProvider( 1159 ResourceProvider::ResourceProvider(
1155 OutputSurface* output_surface, 1160 OutputSurface* output_surface,
1156 SharedBitmapManager* shared_bitmap_manager, 1161 SharedBitmapManager* shared_bitmap_manager,
1157 GpuMemoryBufferManager* gpu_memory_buffer_manager, 1162 GpuMemoryBufferManager* gpu_memory_buffer_manager,
1158 BlockingTaskRunner* blocking_main_thread_task_runner, 1163 BlockingTaskRunner* blocking_main_thread_task_runner,
1159 int highp_threshold_min, 1164 int highp_threshold_min,
1160 bool use_rgba_4444_texture_format, 1165 bool use_rgba_4444_texture_format,
1161 size_t id_allocation_chunk_size, 1166 size_t id_allocation_chunk_size)
1162 bool use_distance_field_text)
1163 : output_surface_(output_surface), 1167 : output_surface_(output_surface),
1164 shared_bitmap_manager_(shared_bitmap_manager), 1168 shared_bitmap_manager_(shared_bitmap_manager),
1165 gpu_memory_buffer_manager_(gpu_memory_buffer_manager), 1169 gpu_memory_buffer_manager_(gpu_memory_buffer_manager),
1166 blocking_main_thread_task_runner_(blocking_main_thread_task_runner), 1170 blocking_main_thread_task_runner_(blocking_main_thread_task_runner),
1167 lost_output_surface_(false), 1171 lost_output_surface_(false),
1168 highp_threshold_min_(highp_threshold_min), 1172 highp_threshold_min_(highp_threshold_min),
1169 next_id_(1), 1173 next_id_(1),
1170 next_child_(1), 1174 next_child_(1),
1171 default_resource_type_(InvalidType), 1175 default_resource_type_(InvalidType),
1172 use_texture_storage_ext_(false), 1176 use_texture_storage_ext_(false),
1173 use_texture_format_bgra_(false), 1177 use_texture_format_bgra_(false),
1174 use_texture_usage_hint_(false), 1178 use_texture_usage_hint_(false),
1175 use_compressed_texture_etc1_(false), 1179 use_compressed_texture_etc1_(false),
1176 max_texture_size_(0), 1180 max_texture_size_(0),
1177 best_texture_format_(RGBA_8888), 1181 best_texture_format_(RGBA_8888),
1178 use_rgba_4444_texture_format_(use_rgba_4444_texture_format), 1182 use_rgba_4444_texture_format_(use_rgba_4444_texture_format),
1179 id_allocation_chunk_size_(id_allocation_chunk_size), 1183 id_allocation_chunk_size_(id_allocation_chunk_size),
1180 use_sync_query_(false), 1184 use_sync_query_(false) {
1181 use_distance_field_text_(use_distance_field_text) {
1182 DCHECK(output_surface_->HasClient()); 1185 DCHECK(output_surface_->HasClient());
1183 DCHECK(id_allocation_chunk_size_); 1186 DCHECK(id_allocation_chunk_size_);
1184 } 1187 }
1185 1188
1186 void ResourceProvider::InitializeSoftware() { 1189 void ResourceProvider::InitializeSoftware() {
1187 DCHECK(thread_checker_.CalledOnValidThread()); 1190 DCHECK(thread_checker_.CalledOnValidThread());
1188 DCHECK_NE(Bitmap, default_resource_type_); 1191 DCHECK_NE(Bitmap, default_resource_type_);
1189 1192
1190 CleanUpGLIfNeeded(); 1193 CleanUpGLIfNeeded();
1191 1194
(...skipping 899 matching lines...) Expand 10 before | Expand all | Expand 10 after
2091 ContextProvider* context_provider = output_surface_->context_provider(); 2094 ContextProvider* context_provider = output_surface_->context_provider();
2092 return context_provider ? context_provider->ContextGL() : NULL; 2095 return context_provider ? context_provider->ContextGL() : NULL;
2093 } 2096 }
2094 2097
2095 class GrContext* ResourceProvider::GrContext() const { 2098 class GrContext* ResourceProvider::GrContext() const {
2096 ContextProvider* context_provider = output_surface_->context_provider(); 2099 ContextProvider* context_provider = output_surface_->context_provider();
2097 return context_provider ? context_provider->GrContext() : NULL; 2100 return context_provider ? context_provider->GrContext() : NULL;
2098 } 2101 }
2099 2102
2100 } // namespace cc 2103 } // namespace cc
OLDNEW
« 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