| 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 162 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 173 raster_worker_pool_->Shutdown(); | 173 raster_worker_pool_->Shutdown(); |
| 174 raster_worker_pool_->CheckForCompletedTasks(); | 174 raster_worker_pool_->CheckForCompletedTasks(); |
| 175 | 175 |
| 176 DCHECK_EQ(0u, bytes_releasable_); | 176 DCHECK_EQ(0u, bytes_releasable_); |
| 177 DCHECK_EQ(0u, resources_releasable_); | 177 DCHECK_EQ(0u, resources_releasable_); |
| 178 } | 178 } |
| 179 | 179 |
| 180 void TileManager::SetGlobalState( | 180 void TileManager::SetGlobalState( |
| 181 const GlobalStateThatImpactsTilePriority& global_state) { | 181 const GlobalStateThatImpactsTilePriority& global_state) { |
| 182 global_state_ = global_state; | 182 global_state_ = global_state; |
| 183 resource_pool_->SetMemoryUsageLimits( | 183 resource_pool_->SetResourceUsageLimits( |
| 184 global_state_.memory_limit_in_bytes, | 184 global_state_.memory_limit_in_bytes, |
| 185 global_state_.unused_memory_limit_in_bytes, | 185 global_state_.unused_memory_limit_in_bytes, |
| 186 global_state_.num_resources_limit); | 186 global_state_.num_resources_limit); |
| 187 } | 187 } |
| 188 | 188 |
| 189 void TileManager::RegisterTile(Tile* tile) { | 189 void TileManager::RegisterTile(Tile* tile) { |
| 190 DCHECK(!tile->required_for_activation()); | 190 DCHECK(!tile->required_for_activation()); |
| 191 DCHECK(tiles_.find(tile->id()) == tiles_.end()); | 191 DCHECK(tiles_.find(tile->id()) == tiles_.end()); |
| 192 | 192 |
| 193 tiles_[tile->id()] = tile; | 193 tiles_[tile->id()] = tile; |
| (...skipping 298 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 492 // the needs-to-be-rasterized queue. | 492 // the needs-to-be-rasterized queue. |
| 493 all_tiles_that_need_to_be_rasterized_have_memory_ = true; | 493 all_tiles_that_need_to_be_rasterized_have_memory_ = true; |
| 494 all_tiles_required_for_activation_have_memory_ = true; | 494 all_tiles_required_for_activation_have_memory_ = true; |
| 495 all_tiles_required_for_activation_have_been_initialized_ = true; | 495 all_tiles_required_for_activation_have_been_initialized_ = true; |
| 496 | 496 |
| 497 // Cast to prevent overflow. | 497 // Cast to prevent overflow. |
| 498 int64 bytes_available = | 498 int64 bytes_available = |
| 499 static_cast<int64>(bytes_releasable_) + | 499 static_cast<int64>(bytes_releasable_) + |
| 500 static_cast<int64>(global_state_.memory_limit_in_bytes) - | 500 static_cast<int64>(global_state_.memory_limit_in_bytes) - |
| 501 static_cast<int64>(resource_pool_->acquired_memory_usage_bytes()); | 501 static_cast<int64>(resource_pool_->acquired_memory_usage_bytes()); |
| 502 int resources_available = resources_releasable_ + | 502 int resources_available = |
| 503 global_state_.num_resources_limit - | 503 resources_releasable_ + |
| 504 resource_pool_->NumResources(); | 504 global_state_.num_resources_limit - |
| 505 resource_pool_->acquired_resource_count(); |
| 505 | 506 |
| 506 size_t bytes_allocatable = | 507 size_t bytes_allocatable = |
| 507 std::max(static_cast<int64>(0), bytes_available); | 508 std::max(static_cast<int64>(0), bytes_available); |
| 508 size_t resources_allocatable = std::max(0, resources_available); | 509 size_t resources_allocatable = std::max(0, resources_available); |
| 509 | 510 |
| 510 size_t bytes_that_exceeded_memory_budget = 0; | 511 size_t bytes_that_exceeded_memory_budget = 0; |
| 511 size_t bytes_left = bytes_allocatable; | 512 size_t bytes_left = bytes_allocatable; |
| 512 size_t resources_left = resources_allocatable; | 513 size_t resources_left = resources_allocatable; |
| 513 bool oomed = false; | 514 bool oomed = false; |
| 514 | 515 |
| (...skipping 183 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 698 | 699 |
| 699 DCHECK(tile_version.requires_resource()); | 700 DCHECK(tile_version.requires_resource()); |
| 700 DCHECK(!tile_version.resource_); | 701 DCHECK(!tile_version.resource_); |
| 701 | 702 |
| 702 if (tile_version.raster_task_.is_null()) | 703 if (tile_version.raster_task_.is_null()) |
| 703 tile_version.raster_task_ = CreateRasterTask(tile); | 704 tile_version.raster_task_ = CreateRasterTask(tile); |
| 704 | 705 |
| 705 tasks.Append(tile_version.raster_task_, tile->required_for_activation()); | 706 tasks.Append(tile_version.raster_task_, tile->required_for_activation()); |
| 706 } | 707 } |
| 707 | 708 |
| 709 // We must reduce the amount of unused resoruces before calling |
| 710 // ScheduleTasks to prevent usage from rising above limits. |
| 711 resource_pool_->ReduceResourceUsage(); |
| 712 |
| 708 // Schedule running of |tasks|. This replaces any previously | 713 // Schedule running of |tasks|. This replaces any previously |
| 709 // scheduled tasks and effectively cancels all tasks not present | 714 // scheduled tasks and effectively cancels all tasks not present |
| 710 // in |tasks|. | 715 // in |tasks|. |
| 711 raster_worker_pool_->ScheduleTasks(&tasks); | 716 raster_worker_pool_->ScheduleTasks(&tasks); |
| 712 } | 717 } |
| 713 | 718 |
| 714 RasterWorkerPool::Task TileManager::CreateImageDecodeTask( | 719 RasterWorkerPool::Task TileManager::CreateImageDecodeTask( |
| 715 Tile* tile, skia::LazyPixelRef* pixel_ref) { | 720 Tile* tile, skia::LazyPixelRef* pixel_ref) { |
| 716 return RasterWorkerPool::CreateImageDecodeTask( | 721 return RasterWorkerPool::CreateImageDecodeTask( |
| 717 pixel_ref, | 722 pixel_ref, |
| (...skipping 119 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 837 bytes_releasable_ += tile->bytes_consumed_if_allocated(); | 842 bytes_releasable_ += tile->bytes_consumed_if_allocated(); |
| 838 ++resources_releasable_; | 843 ++resources_releasable_; |
| 839 } | 844 } |
| 840 | 845 |
| 841 FreeUnusedResourcesForTile(tile); | 846 FreeUnusedResourcesForTile(tile); |
| 842 if (tile->priority(ACTIVE_TREE).distance_to_visible_in_pixels == 0) | 847 if (tile->priority(ACTIVE_TREE).distance_to_visible_in_pixels == 0) |
| 843 did_initialize_visible_tile_ = true; | 848 did_initialize_visible_tile_ = true; |
| 844 } | 849 } |
| 845 | 850 |
| 846 } // namespace cc | 851 } // namespace cc |
| OLD | NEW |