Index: cc/resources/tile_manager.cc |
diff --git a/cc/resources/tile_manager.cc b/cc/resources/tile_manager.cc |
index 1162c72df8ceef4fdad907a656e538da2ef45a43..b752303a193e2327433db7e05f58ad5fb07c56b6 100644 |
--- a/cc/resources/tile_manager.cc |
+++ b/cc/resources/tile_manager.cc |
@@ -263,12 +263,8 @@ TaskSetCollection TileManager::TasksThatShouldBeForcedToComplete() const { |
} |
void TileManager::FreeResourcesForReleasedTiles() { |
- for (std::vector<Tile*>::iterator it = released_tiles_.begin(); |
- it != released_tiles_.end(); |
- ++it) { |
- Tile* tile = *it; |
+ for (auto* tile : released_tiles_) |
FreeResourcesForTile(tile); |
- } |
} |
void TileManager::CleanUpReleasedTiles() { |
@@ -340,7 +336,7 @@ void TileManager::PrepareTiles( |
FreeResourcesForReleasedTiles(); |
CleanUpReleasedTiles(); |
- TileVector tiles_that_need_to_be_rasterized; |
+ PrioritizedTileVector tiles_that_need_to_be_rasterized; |
scoped_ptr<RasterTilePriorityQueue> raster_priority_queue( |
client_->BuildRasterQueue(global_state_.tree_priority, |
RasterTilePriorityQueue::Type::ALL)); |
@@ -352,7 +348,7 @@ void TileManager::PrepareTiles( |
// tile that will be rasterized is required for draw. |
client_->SetIsLikelyToRequireADraw( |
!tiles_that_need_to_be_rasterized.empty() && |
- (*tiles_that_need_to_be_rasterized.begin())->required_for_draw()); |
+ tiles_that_need_to_be_rasterized.front().tile()->required_for_draw()); |
// Schedule tile tasks. |
ScheduleTasks(tiles_that_need_to_be_rasterized); |
@@ -415,7 +411,7 @@ TileManager::FreeTileResourcesUntilUsageIsWithinLimit( |
if (eviction_priority_queue->IsEmpty()) |
break; |
- Tile* tile = eviction_priority_queue->Top(); |
+ Tile* tile = eviction_priority_queue->Top().tile(); |
*usage -= MemoryUsage::FromTile(tile); |
FreeResourcesForTileAndNotifyClientIfTileWasReadyToDraw(tile); |
eviction_priority_queue->Pop(); |
@@ -437,10 +433,11 @@ TileManager::FreeTileResourcesWithLowerPriorityUntilUsageIsWithinLimit( |
if (eviction_priority_queue->IsEmpty()) |
break; |
- Tile* tile = eviction_priority_queue->Top(); |
- if (!other_priority.IsHigherPriorityThan(tile->priority())) |
+ const PrioritizedTile& prioritized_tile = eviction_priority_queue->Top(); |
+ if (!other_priority.IsHigherPriorityThan(prioritized_tile.priority())) |
break; |
+ Tile* tile = prioritized_tile.tile(); |
*usage -= MemoryUsage::FromTile(tile); |
FreeResourcesForTileAndNotifyClientIfTileWasReadyToDraw(tile); |
eviction_priority_queue->Pop(); |
@@ -468,7 +465,7 @@ bool TileManager::TilePriorityViolatesMemoryPolicy( |
void TileManager::AssignGpuMemoryToTiles( |
RasterTilePriorityQueue* raster_priority_queue, |
size_t scheduled_raster_task_limit, |
- TileVector* tiles_that_need_to_be_rasterized) { |
+ PrioritizedTileVector* tiles_that_need_to_be_rasterized) { |
TRACE_EVENT_BEGIN0("cc", "TileManager::AssignGpuMemoryToTiles"); |
// Maintain the list of released resources that can potentially be re-used |
@@ -492,8 +489,9 @@ void TileManager::AssignGpuMemoryToTiles( |
scoped_ptr<EvictionTilePriorityQueue> eviction_priority_queue; |
for (; !raster_priority_queue->IsEmpty(); raster_priority_queue->Pop()) { |
- Tile* tile = raster_priority_queue->Top(); |
- TilePriority priority = tile->priority(); |
+ const PrioritizedTile& prioritized_tile = raster_priority_queue->Top(); |
+ Tile* tile = prioritized_tile.tile(); |
+ TilePriority priority = prioritized_tile.priority(); |
if (TilePriorityViolatesMemoryPolicy(priority)) { |
TRACE_EVENT_INSTANT0( |
@@ -509,11 +507,10 @@ void TileManager::AssignGpuMemoryToTiles( |
break; |
} |
- TileDrawInfo& draw_info = tile->draw_info(); |
tile->scheduled_priority_ = schedule_priority++; |
- DCHECK_IMPLIES(draw_info.mode() != TileDrawInfo::OOM_MODE, |
- !draw_info.IsReadyToDraw()); |
+ DCHECK_IMPLIES(tile->draw_info().mode() != TileDrawInfo::OOM_MODE, |
+ !tile->draw_info().IsReadyToDraw()); |
// If the tile already has a raster_task, then the memory used by it is |
// already accounted for in memory_usage. Otherwise, we'll have to acquire |
@@ -551,7 +548,7 @@ void TileManager::AssignGpuMemoryToTiles( |
} |
memory_usage += memory_required_by_tile_to_be_scheduled; |
- tiles_that_need_to_be_rasterized->push_back(tile); |
+ tiles_that_need_to_be_rasterized->push_back(prioritized_tile); |
} |
// Note that we should try and further reduce memory in case the above loop |
@@ -592,7 +589,7 @@ void TileManager::FreeResourcesForTileAndNotifyClientIfTileWasReadyToDraw( |
} |
void TileManager::ScheduleTasks( |
- const TileVector& tiles_that_need_to_be_rasterized) { |
+ const PrioritizedTileVector& tiles_that_need_to_be_rasterized) { |
TRACE_EVENT1("cc", |
"TileManager::ScheduleTasks", |
"count", |
@@ -604,17 +601,14 @@ void TileManager::ScheduleTasks( |
// Build a new task queue containing all task currently needed. Tasks |
// are added in order of priority, highest priority task first. |
- for (TileVector::const_iterator it = tiles_that_need_to_be_rasterized.begin(); |
- it != tiles_that_need_to_be_rasterized.end(); |
- ++it) { |
- Tile* tile = *it; |
- TileDrawInfo& draw_info = tile->draw_info(); |
+ for (auto& prioritized_tile : tiles_that_need_to_be_rasterized) { |
+ Tile* tile = prioritized_tile.tile(); |
- DCHECK(draw_info.requires_resource()); |
- DCHECK(!draw_info.resource_); |
+ DCHECK(tile->draw_info().requires_resource()); |
+ DCHECK(!tile->draw_info().resource_); |
if (!tile->raster_task_.get()) |
- tile->raster_task_ = CreateRasterTask(tile); |
+ tile->raster_task_ = CreateRasterTask(prioritized_tile); |
TaskSetCollection task_sets; |
if (tile->required_for_activation()) |
@@ -654,7 +648,9 @@ scoped_refptr<ImageDecodeTask> TileManager::CreateImageDecodeTask( |
base::Unretained(pixel_ref)))); |
} |
-scoped_refptr<RasterTask> TileManager::CreateRasterTask(Tile* tile) { |
+scoped_refptr<RasterTask> TileManager::CreateRasterTask( |
+ const PrioritizedTile& prioritized_tile) { |
+ Tile* tile = prioritized_tile.tile(); |
scoped_ptr<ScopedResource> resource = |
resource_pool_->AcquireResource(tile->desired_texture_size(), |
tile_task_runner_->GetResourceFormat()); |
@@ -685,9 +681,9 @@ scoped_refptr<RasterTask> TileManager::CreateRasterTask(Tile* tile) { |
return make_scoped_refptr(new RasterTaskImpl( |
const_resource, tile->raster_source(), tile->content_rect(), |
- tile->contents_scale(), tile->priority().resolution, tile->layer_id(), |
- static_cast<const void*>(tile), tile->source_frame_number(), |
- tile->use_picture_analysis(), |
+ tile->contents_scale(), prioritized_tile.priority().resolution, |
+ tile->layer_id(), static_cast<const void*>(tile), |
+ tile->source_frame_number(), tile->use_picture_analysis(), |
base::Bind(&TileManager::OnRasterTaskCompleted, base::Unretained(this), |
tile->id(), base::Passed(&resource)), |
&decode_tasks)); |
@@ -788,7 +784,7 @@ bool TileManager::AreRequiredTilesReadyToDraw( |
// have to iterate the queue to check whether the required tiles are ready to |
// draw. |
for (; !raster_priority_queue->IsEmpty(); raster_priority_queue->Pop()) { |
- if (!raster_priority_queue->Top()->IsReadyToDraw()) |
+ if (!raster_priority_queue->Top().tile()->IsReadyToDraw()) |
return false; |
} |
@@ -796,7 +792,7 @@ bool TileManager::AreRequiredTilesReadyToDraw( |
scoped_ptr<RasterTilePriorityQueue> all_queue( |
client_->BuildRasterQueue(global_state_.tree_priority, type)); |
for (; !all_queue->IsEmpty(); all_queue->Pop()) { |
- auto* tile = all_queue->Top(); |
+ Tile* tile = all_queue->Top().tile(); |
DCHECK_IMPLIES(tile->required_for_activation(), tile->IsReadyToDraw()); |
} |
#endif |
@@ -864,7 +860,7 @@ void TileManager::CheckIfMoreTilesNeedToBePrepared() { |
// When OOM, keep re-assigning memory until we reach a steady state |
// where top-priority tiles are initialized. |
- TileVector tiles_that_need_to_be_rasterized; |
+ PrioritizedTileVector tiles_that_need_to_be_rasterized; |
scoped_ptr<RasterTilePriorityQueue> raster_priority_queue( |
client_->BuildRasterQueue(global_state_.tree_priority, |
RasterTilePriorityQueue::Type::ALL)); |
@@ -876,7 +872,7 @@ void TileManager::CheckIfMoreTilesNeedToBePrepared() { |
// tile that will be rasterized is required for draw. |
client_->SetIsLikelyToRequireADraw( |
!tiles_that_need_to_be_rasterized.empty() && |
- (*tiles_that_need_to_be_rasterized.begin())->required_for_draw()); |
+ tiles_that_need_to_be_rasterized.front().tile()->required_for_draw()); |
// |tiles_that_need_to_be_rasterized| will be empty when we reach a |
// steady memory state. Keep scheduling tasks until we reach this state. |
@@ -917,7 +913,7 @@ void TileManager::CheckIfMoreTilesNeedToBePrepared() { |
// Mark required tiles as OOM so that we can activate without them. |
for (; !required_for_activation_queue->IsEmpty(); |
required_for_activation_queue->Pop()) { |
- Tile* tile = required_for_activation_queue->Top(); |
+ Tile* tile = required_for_activation_queue->Top().tile(); |
tile->draw_info().set_oom(); |
client_->NotifyTileStateChanged(tile); |
} |