Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(619)

Unified Diff: cc/resources/tile_manager.cc

Issue 1130123003: cc: Separate the priority from the tile and put in new PrioritizedTile (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: merge Created 5 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « cc/resources/tile_manager.h ('k') | cc/resources/tile_manager_perftest.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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);
}
« no previous file with comments | « cc/resources/tile_manager.h ('k') | cc/resources/tile_manager_perftest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698