OLD | NEW |
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 448 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
459 if (gr_context) { | 459 if (gr_context) { |
460 GrBackendTextureDesc desc; | 460 GrBackendTextureDesc desc; |
461 desc.fFlags = kRenderTarget_GrBackendTextureFlag; | 461 desc.fFlags = kRenderTarget_GrBackendTextureFlag; |
462 desc.fWidth = resource()->size.width(); | 462 desc.fWidth = resource()->size.width(); |
463 desc.fHeight = resource()->size.height(); | 463 desc.fHeight = resource()->size.height(); |
464 desc.fConfig = ToGrPixelConfig(resource()->format); | 464 desc.fConfig = ToGrPixelConfig(resource()->format); |
465 desc.fOrigin = kTopLeft_GrSurfaceOrigin; | 465 desc.fOrigin = kTopLeft_GrSurfaceOrigin; |
466 desc.fTextureHandle = resource()->gl_id; | 466 desc.fTextureHandle = resource()->gl_id; |
467 skia::RefPtr<GrTexture> gr_texture = | 467 skia::RefPtr<GrTexture> gr_texture = |
468 skia::AdoptRef(gr_context->wrapBackendTexture(desc)); | 468 skia::AdoptRef(gr_context->wrapBackendTexture(desc)); |
469 surface = skia::AdoptRef( | 469 SkSurface::TextRenderMode trm = |
470 SkSurface::NewRenderTargetDirect(gr_texture->asRenderTarget())); | 470 use_distance_field_text_ ? SkSurface::kDistanceField_TextRenderMode |
| 471 : SkSurface::kStandard_TextRenderMode; |
| 472 surface = skia::AdoptRef(SkSurface::NewRenderTargetDirect( |
| 473 gr_texture->asRenderTarget(), trm)); |
471 } | 474 } |
472 break; | 475 break; |
473 } | 476 } |
474 case Bitmap: { | 477 case Bitmap: { |
475 DCHECK(resource()->pixels); | 478 DCHECK(resource()->pixels); |
476 DCHECK_EQ(RGBA_8888, resource()->format); | 479 DCHECK_EQ(RGBA_8888, resource()->format); |
477 SkImageInfo image_info = SkImageInfo::MakeN32Premul( | 480 SkImageInfo image_info = SkImageInfo::MakeN32Premul( |
478 resource()->size.width(), resource()->size.height()); | 481 resource()->size.width(), resource()->size.height()); |
479 surface = skia::AdoptRef(SkSurface::NewRasterDirect( | 482 surface = skia::AdoptRef(SkSurface::NewRasterDirect( |
480 image_info, resource()->pixels, image_info.minRowBytes())); | 483 image_info, resource()->pixels, image_info.minRowBytes())); |
(...skipping 104 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
585 | 588 |
586 ResourceProvider::Child::Child() : marked_for_deletion(false) {} | 589 ResourceProvider::Child::Child() : marked_for_deletion(false) {} |
587 | 590 |
588 ResourceProvider::Child::~Child() {} | 591 ResourceProvider::Child::~Child() {} |
589 | 592 |
590 scoped_ptr<ResourceProvider> ResourceProvider::Create( | 593 scoped_ptr<ResourceProvider> ResourceProvider::Create( |
591 OutputSurface* output_surface, | 594 OutputSurface* output_surface, |
592 SharedBitmapManager* shared_bitmap_manager, | 595 SharedBitmapManager* shared_bitmap_manager, |
593 int highp_threshold_min, | 596 int highp_threshold_min, |
594 bool use_rgba_4444_texture_format, | 597 bool use_rgba_4444_texture_format, |
595 size_t id_allocation_chunk_size) { | 598 size_t id_allocation_chunk_size, |
| 599 bool use_distance_field_text) { |
596 scoped_ptr<ResourceProvider> resource_provider( | 600 scoped_ptr<ResourceProvider> resource_provider( |
597 new ResourceProvider(output_surface, | 601 new ResourceProvider(output_surface, |
598 shared_bitmap_manager, | 602 shared_bitmap_manager, |
599 highp_threshold_min, | 603 highp_threshold_min, |
600 use_rgba_4444_texture_format, | 604 use_rgba_4444_texture_format, |
601 id_allocation_chunk_size)); | 605 id_allocation_chunk_size, |
| 606 use_distance_field_text)); |
602 | 607 |
603 if (resource_provider->ContextGL()) | 608 if (resource_provider->ContextGL()) |
604 resource_provider->InitializeGL(); | 609 resource_provider->InitializeGL(); |
605 else | 610 else |
606 resource_provider->InitializeSoftware(); | 611 resource_provider->InitializeSoftware(); |
607 | 612 |
608 DCHECK_NE(InvalidType, resource_provider->default_resource_type()); | 613 DCHECK_NE(InvalidType, resource_provider->default_resource_type()); |
609 return resource_provider.Pass(); | 614 return resource_provider.Pass(); |
610 } | 615 } |
611 | 616 |
(...skipping 628 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1240 } | 1245 } |
1241 | 1246 |
1242 ResourceProvider::ScopedWriteLockSoftware::~ScopedWriteLockSoftware() { | 1247 ResourceProvider::ScopedWriteLockSoftware::~ScopedWriteLockSoftware() { |
1243 resource_provider_->UnlockForWrite(resource_id_); | 1248 resource_provider_->UnlockForWrite(resource_id_); |
1244 } | 1249 } |
1245 | 1250 |
1246 ResourceProvider::ResourceProvider(OutputSurface* output_surface, | 1251 ResourceProvider::ResourceProvider(OutputSurface* output_surface, |
1247 SharedBitmapManager* shared_bitmap_manager, | 1252 SharedBitmapManager* shared_bitmap_manager, |
1248 int highp_threshold_min, | 1253 int highp_threshold_min, |
1249 bool use_rgba_4444_texture_format, | 1254 bool use_rgba_4444_texture_format, |
1250 size_t id_allocation_chunk_size) | 1255 size_t id_allocation_chunk_size, |
| 1256 bool use_distance_field_text) |
1251 : output_surface_(output_surface), | 1257 : output_surface_(output_surface), |
1252 shared_bitmap_manager_(shared_bitmap_manager), | 1258 shared_bitmap_manager_(shared_bitmap_manager), |
1253 lost_output_surface_(false), | 1259 lost_output_surface_(false), |
1254 highp_threshold_min_(highp_threshold_min), | 1260 highp_threshold_min_(highp_threshold_min), |
1255 next_id_(1), | 1261 next_id_(1), |
1256 next_child_(1), | 1262 next_child_(1), |
1257 default_resource_type_(InvalidType), | 1263 default_resource_type_(InvalidType), |
1258 use_texture_storage_ext_(false), | 1264 use_texture_storage_ext_(false), |
1259 use_texture_usage_hint_(false), | 1265 use_texture_usage_hint_(false), |
1260 use_compressed_texture_etc1_(false), | 1266 use_compressed_texture_etc1_(false), |
1261 max_texture_size_(0), | 1267 max_texture_size_(0), |
1262 best_texture_format_(RGBA_8888), | 1268 best_texture_format_(RGBA_8888), |
1263 use_rgba_4444_texture_format_(use_rgba_4444_texture_format), | 1269 use_rgba_4444_texture_format_(use_rgba_4444_texture_format), |
1264 id_allocation_chunk_size_(id_allocation_chunk_size), | 1270 id_allocation_chunk_size_(id_allocation_chunk_size), |
1265 use_sync_query_(false) { | 1271 use_sync_query_(false), |
| 1272 use_distance_field_text_(use_distance_field_text) { |
1266 DCHECK(output_surface_->HasClient()); | 1273 DCHECK(output_surface_->HasClient()); |
1267 DCHECK(id_allocation_chunk_size_); | 1274 DCHECK(id_allocation_chunk_size_); |
1268 } | 1275 } |
1269 | 1276 |
1270 void ResourceProvider::InitializeSoftware() { | 1277 void ResourceProvider::InitializeSoftware() { |
1271 DCHECK(thread_checker_.CalledOnValidThread()); | 1278 DCHECK(thread_checker_.CalledOnValidThread()); |
1272 DCHECK_NE(Bitmap, default_resource_type_); | 1279 DCHECK_NE(Bitmap, default_resource_type_); |
1273 | 1280 |
1274 CleanUpGLIfNeeded(); | 1281 CleanUpGLIfNeeded(); |
1275 | 1282 |
(...skipping 475 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1751 } | 1758 } |
1752 | 1759 |
1753 SkCanvas* ResourceProvider::MapDirectRasterBuffer(ResourceId id) { | 1760 SkCanvas* ResourceProvider::MapDirectRasterBuffer(ResourceId id) { |
1754 // Resource needs to be locked for write since DirectRasterBuffer writes | 1761 // Resource needs to be locked for write since DirectRasterBuffer writes |
1755 // directly to it. | 1762 // directly to it. |
1756 LockForWrite(id); | 1763 LockForWrite(id); |
1757 Resource* resource = GetResource(id); | 1764 Resource* resource = GetResource(id); |
1758 if (!resource->direct_raster_buffer.get()) { | 1765 if (!resource->direct_raster_buffer.get()) { |
1759 resource->direct_raster_buffer.reset( | 1766 resource->direct_raster_buffer.reset( |
1760 new DirectRasterBuffer(resource, this)); | 1767 new DirectRasterBuffer(resource, this)); |
| 1768 resource->direct_raster_buffer->SetUseDistanceFieldText( |
| 1769 use_distance_field_text_); |
1761 } | 1770 } |
1762 return resource->direct_raster_buffer->LockForWrite(); | 1771 return resource->direct_raster_buffer->LockForWrite(); |
1763 } | 1772 } |
1764 | 1773 |
1765 void ResourceProvider::UnmapDirectRasterBuffer(ResourceId id) { | 1774 void ResourceProvider::UnmapDirectRasterBuffer(ResourceId id) { |
1766 Resource* resource = GetResource(id); | 1775 Resource* resource = GetResource(id); |
1767 DCHECK(resource->direct_raster_buffer.get()); | 1776 DCHECK(resource->direct_raster_buffer.get()); |
1768 resource->direct_raster_buffer->UnlockForWrite(); | 1777 resource->direct_raster_buffer->UnlockForWrite(); |
1769 UnlockForWrite(id); | 1778 UnlockForWrite(id); |
1770 } | 1779 } |
(...skipping 504 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2275 ContextProvider* context_provider = output_surface_->context_provider(); | 2284 ContextProvider* context_provider = output_surface_->context_provider(); |
2276 return context_provider ? context_provider->ContextGL() : NULL; | 2285 return context_provider ? context_provider->ContextGL() : NULL; |
2277 } | 2286 } |
2278 | 2287 |
2279 class GrContext* ResourceProvider::GrContext() const { | 2288 class GrContext* ResourceProvider::GrContext() const { |
2280 ContextProvider* context_provider = output_surface_->context_provider(); | 2289 ContextProvider* context_provider = output_surface_->context_provider(); |
2281 return context_provider ? context_provider->GrContext() : NULL; | 2290 return context_provider ? context_provider->GrContext() : NULL; |
2282 } | 2291 } |
2283 | 2292 |
2284 } // namespace cc | 2293 } // namespace cc |
OLD | NEW |