| 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/tile_manager.h" | 5 #include "cc/resources/tile_manager.h" |
| 6 | 6 |
| 7 #include <algorithm> | 7 #include <algorithm> |
| 8 #include <limits> | 8 #include <limits> |
| 9 #include <string> | 9 #include <string> |
| 10 | 10 |
| (...skipping 135 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 146 : client_(client), | 146 : client_(client), |
| 147 resource_pool_(ResourcePool::Create(resource_provider)), | 147 resource_pool_(ResourcePool::Create(resource_provider)), |
| 148 raster_worker_pool_(raster_worker_pool.Pass()), | 148 raster_worker_pool_(raster_worker_pool.Pass()), |
| 149 prioritized_tiles_dirty_(false), | 149 prioritized_tiles_dirty_(false), |
| 150 all_tiles_that_need_to_be_rasterized_have_memory_(true), | 150 all_tiles_that_need_to_be_rasterized_have_memory_(true), |
| 151 all_tiles_required_for_activation_have_memory_(true), | 151 all_tiles_required_for_activation_have_memory_(true), |
| 152 bytes_releasable_(0), | 152 bytes_releasable_(0), |
| 153 resources_releasable_(0), | 153 resources_releasable_(0), |
| 154 ever_exceeded_memory_budget_(false), | 154 ever_exceeded_memory_budget_(false), |
| 155 rendering_stats_instrumentation_(rendering_stats_instrumentation), | 155 rendering_stats_instrumentation_(rendering_stats_instrumentation), |
| 156 did_initialize_visible_tile_(false) { | 156 did_initialize_visible_tile_(false), |
| 157 use_16_bit_tiles_(resource_provider->use_16bit_textures()) { |
| 157 raster_worker_pool_->SetClient(this); | 158 raster_worker_pool_->SetClient(this); |
| 158 } | 159 } |
| 159 | 160 |
| 160 TileManager::~TileManager() { | 161 TileManager::~TileManager() { |
| 161 // Reset global state and manage. This should cause | 162 // Reset global state and manage. This should cause |
| 162 // our memory usage to drop to zero. | 163 // our memory usage to drop to zero. |
| 163 global_state_ = GlobalStateThatImpactsTilePriority(); | 164 global_state_ = GlobalStateThatImpactsTilePriority(); |
| 164 | 165 |
| 165 DCHECK_EQ(0u, tiles_.size()); | 166 DCHECK_EQ(0u, tiles_.size()); |
| 166 | 167 |
| (...skipping 563 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 730 tile->layer_id(), | 731 tile->layer_id(), |
| 731 base::Unretained(pixel_ref))); | 732 base::Unretained(pixel_ref))); |
| 732 } | 733 } |
| 733 | 734 |
| 734 RasterWorkerPool::RasterTask TileManager::CreateRasterTask(Tile* tile) { | 735 RasterWorkerPool::RasterTask TileManager::CreateRasterTask(Tile* tile) { |
| 735 ManagedTileState& mts = tile->managed_state(); | 736 ManagedTileState& mts = tile->managed_state(); |
| 736 | 737 |
| 737 scoped_ptr<ResourcePool::Resource> resource = | 738 scoped_ptr<ResourcePool::Resource> resource = |
| 738 resource_pool_->AcquireResource( | 739 resource_pool_->AcquireResource( |
| 739 tile->tile_size_.size(), | 740 tile->tile_size_.size(), |
| 740 raster_worker_pool_->GetResourceFormat()); | 741 raster_worker_pool_->GetResourceFormat(), |
| 742 use_16_bit_tiles_); |
| 741 const Resource* const_resource = resource.get(); | 743 const Resource* const_resource = resource.get(); |
| 742 | 744 |
| 743 // Create and queue all image decode tasks that this tile depends on. | 745 // Create and queue all image decode tasks that this tile depends on. |
| 744 RasterWorkerPool::Task::Set decode_tasks; | 746 RasterWorkerPool::Task::Set decode_tasks; |
| 745 PixelRefTaskMap& existing_pixel_refs = image_decode_tasks_[tile->layer_id()]; | 747 PixelRefTaskMap& existing_pixel_refs = image_decode_tasks_[tile->layer_id()]; |
| 746 for (PicturePileImpl::PixelRefIterator iter(tile->content_rect(), | 748 for (PicturePileImpl::PixelRefIterator iter(tile->content_rect(), |
| 747 tile->contents_scale(), | 749 tile->contents_scale(), |
| 748 tile->picture_pile()); | 750 tile->picture_pile()); |
| 749 iter; ++iter) { | 751 iter; ++iter) { |
| 750 skia::LazyPixelRef* pixel_ref = *iter; | 752 skia::LazyPixelRef* pixel_ref = *iter; |
| (...skipping 23 matching lines...) Expand all Loading... |
| 774 mts.resolution, | 776 mts.resolution, |
| 775 tile->layer_id(), | 777 tile->layer_id(), |
| 776 static_cast<const void *>(tile), | 778 static_cast<const void *>(tile), |
| 777 tile->source_frame_number(), | 779 tile->source_frame_number(), |
| 778 rendering_stats_instrumentation_, | 780 rendering_stats_instrumentation_, |
| 779 base::Bind(&TileManager::OnRasterTaskCompleted, | 781 base::Bind(&TileManager::OnRasterTaskCompleted, |
| 780 base::Unretained(this), | 782 base::Unretained(this), |
| 781 tile->id(), | 783 tile->id(), |
| 782 base::Passed(&resource), | 784 base::Passed(&resource), |
| 783 mts.raster_mode), | 785 mts.raster_mode), |
| 784 &decode_tasks); | 786 &decode_tasks, |
| 787 use_16_bit_tiles_); |
| 785 } | 788 } |
| 786 | 789 |
| 787 void TileManager::OnImageDecodeTaskCompleted( | 790 void TileManager::OnImageDecodeTaskCompleted( |
| 788 int layer_id, | 791 int layer_id, |
| 789 skia::LazyPixelRef* pixel_ref, | 792 skia::LazyPixelRef* pixel_ref, |
| 790 bool was_canceled) { | 793 bool was_canceled) { |
| 791 // If the task was canceled, we need to clean it up | 794 // If the task was canceled, we need to clean it up |
| 792 // from |image_decode_tasks_|. | 795 // from |image_decode_tasks_|. |
| 793 if (!was_canceled) | 796 if (!was_canceled) |
| 794 return; | 797 return; |
| (...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 846 bytes_releasable_ += tile->bytes_consumed_if_allocated(); | 849 bytes_releasable_ += tile->bytes_consumed_if_allocated(); |
| 847 ++resources_releasable_; | 850 ++resources_releasable_; |
| 848 } | 851 } |
| 849 | 852 |
| 850 FreeUnusedResourcesForTile(tile); | 853 FreeUnusedResourcesForTile(tile); |
| 851 if (tile->priority(ACTIVE_TREE).distance_to_visible_in_pixels == 0) | 854 if (tile->priority(ACTIVE_TREE).distance_to_visible_in_pixels == 0) |
| 852 did_initialize_visible_tile_ = true; | 855 did_initialize_visible_tile_ = true; |
| 853 } | 856 } |
| 854 | 857 |
| 855 } // namespace cc | 858 } // namespace cc |
| OLD | NEW |