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