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

Unified Diff: cc/resources/tile_manager.cc

Issue 862263004: cc: Make eviction queue building consistent with raster. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: update Created 5 years, 11 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 81ae8b5c9ee656486454580dacd4e726a8c1a9c7..f0c8895a70f3141f790ff224864a58289df83bf1 100644
--- a/cc/resources/tile_manager.cc
+++ b/cc/resources/tile_manager.cc
@@ -240,7 +240,6 @@ TileManager::TileManager(
task_runner_.get(),
base::Bind(&TileManager::CheckIfMoreTilesNeedToBePrepared,
base::Unretained(this))),
- eviction_priority_queue_is_up_to_date_(false),
did_notify_ready_to_activate_(false),
did_notify_ready_to_draw_(false) {
tile_task_runner_->SetClient(this);
@@ -374,15 +373,12 @@ void TileManager::PrepareTiles(
did_notify_ready_to_draw_ = false;
} else {
if (global_state_.hard_memory_limit_in_bytes == 0) {
- // TODO(vmpstr): Add a function to unconditionally create an eviction
- // queue and guard the rest of the calls sites with this flag, instead of
- // clearing here and building, which is a bit awkward.
- eviction_priority_queue_is_up_to_date_ = false;
resource_pool_->CheckBusyResources(false);
MemoryUsage memory_limit(0, 0);
MemoryUsage memory_usage(resource_pool_->acquired_memory_usage_bytes(),
resource_pool_->acquired_resource_count());
FreeTileResourcesUntilUsageIsWithinLimit(memory_limit, &memory_usage);
+ eviction_priority_queue_.reset();
}
did_notify_ready_to_activate_ = false;
@@ -493,17 +489,12 @@ void TileManager::BasicStateAsValueInto(base::debug::TracedValue* state) const {
}
void TileManager::RebuildEvictionQueueIfNeeded() {
- TRACE_EVENT1("cc",
- "TileManager::RebuildEvictionQueueIfNeeded",
- "eviction_priority_queue_is_up_to_date",
- eviction_priority_queue_is_up_to_date_);
- if (eviction_priority_queue_is_up_to_date_)
+ TRACE_EVENT0("cc", "TileManager::RebuildEvictionQueueIfNeeded");
+ if (eviction_priority_queue_)
return;
- eviction_priority_queue_.Reset();
- client_->BuildEvictionQueue(&eviction_priority_queue_,
- global_state_.tree_priority);
- eviction_priority_queue_is_up_to_date_ = true;
+ eviction_priority_queue_ =
+ client_->BuildEvictionQueue(global_state_.tree_priority);
}
bool TileManager::FreeTileResourcesUntilUsageIsWithinLimit(
@@ -511,13 +502,13 @@ bool TileManager::FreeTileResourcesUntilUsageIsWithinLimit(
MemoryUsage* usage) {
while (usage->Exceeds(limit)) {
RebuildEvictionQueueIfNeeded();
- if (eviction_priority_queue_.IsEmpty())
+ if (eviction_priority_queue_->IsEmpty())
return false;
- Tile* tile = eviction_priority_queue_.Top();
+ Tile* tile = eviction_priority_queue_->Top();
*usage -= MemoryUsage::FromTile(tile);
FreeResourcesForTileAndNotifyClientIfTileWasReadyToDraw(tile);
- eviction_priority_queue_.Pop();
+ eviction_priority_queue_->Pop();
}
return true;
}
@@ -528,16 +519,16 @@ bool TileManager::FreeTileResourcesWithLowerPriorityUntilUsageIsWithinLimit(
MemoryUsage* usage) {
while (usage->Exceeds(limit)) {
RebuildEvictionQueueIfNeeded();
- if (eviction_priority_queue_.IsEmpty())
+ if (eviction_priority_queue_->IsEmpty())
return false;
- Tile* tile = eviction_priority_queue_.Top();
+ Tile* tile = eviction_priority_queue_->Top();
if (!other_priority.IsHigherPriorityThan(tile->combined_priority()))
return false;
*usage -= MemoryUsage::FromTile(tile);
FreeResourcesForTileAndNotifyClientIfTileWasReadyToDraw(tile);
- eviction_priority_queue_.Pop();
+ eviction_priority_queue_->Pop();
}
return true;
}
@@ -584,7 +575,7 @@ void TileManager::AssignGpuMemoryToTiles(
MemoryUsage memory_usage(resource_pool_->acquired_memory_usage_bytes(),
resource_pool_->acquired_resource_count());
- eviction_priority_queue_is_up_to_date_ = false;
+ DCHECK(!eviction_priority_queue_);
for (; !raster_priority_queue->IsEmpty(); raster_priority_queue->Pop()) {
Tile* tile = raster_priority_queue->Top();
TilePriority priority = tile->combined_priority();
@@ -649,6 +640,8 @@ void TileManager::AssignGpuMemoryToTiles(
// as possible to stay within the memory limit.
FreeTileResourcesUntilUsageIsWithinLimit(hard_memory_limit, &memory_usage);
+ eviction_priority_queue_.reset();
danakj 2015/01/22 23:12:23 Can you explain this? There's a DCHECK above that
vmpstr 2015/01/22 23:45:03 Since creating an eviction queue might be expensiv
+
UMA_HISTOGRAM_BOOLEAN("TileManager.ExceededMemoryBudget",
!had_enough_memory_to_schedule_tiles_needed_now);
did_oom_on_last_assign_ = !had_enough_memory_to_schedule_tiles_needed_now;
« 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