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

Unified Diff: cc/resources/tile_manager.cc

Issue 257773009: cc: Change required_for_activation bookkeeping. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 years, 8 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
Index: cc/resources/tile_manager.cc
diff --git a/cc/resources/tile_manager.cc b/cc/resources/tile_manager.cc
index f9fafbbca09b5943bf4a63a516f153181802e3c0..a1fae8a4a30febab2fdaa3abe20030d55e33f268 100644
--- a/cc/resources/tile_manager.cc
+++ b/cc/resources/tile_manager.cc
@@ -675,7 +675,8 @@ void TileManager::GetTilesWithAssignedBins(PrioritizedTileSet* tiles) {
// should keep it in the prioritized tile set to ensure that AssignGpuMemory
// can visit it.
if (mts.bin == NEVER_BIN &&
- !mts.tile_versions[mts.raster_mode].raster_task_) {
+ !mts.tile_versions[mts.raster_mode].raster_task_ &&
+ !tile->required_for_activation()) {
FreeResourcesForTile(tile);
continue;
}
@@ -840,6 +841,7 @@ void TileManager::AssignGpuMemoryToTiles(
size_t max_raster_bytes = max_raster_usage_bytes_ / 2;
size_t raster_bytes = 0;
+ size_t processed_required_for_activation_tile_count = 0u;
unsigned schedule_priority = 1u;
for (PrioritizedTileSet::Iterator it(tiles, true); it; ++it) {
Tile* tile = *it;
@@ -859,6 +861,8 @@ void TileManager::AssignGpuMemoryToTiles(
// If the tile is not needed, free it up.
if (mts.bin == NEVER_BIN) {
FreeResourcesForTile(tile);
+ if (tile->required_for_activation())
+ ++processed_required_for_activation_tile_count;
continue;
}
@@ -917,8 +921,10 @@ void TileManager::AssignGpuMemoryToTiles(
hard_bytes_left -= tile_bytes;
soft_bytes_left =
(soft_bytes_left > tile_bytes) ? soft_bytes_left - tile_bytes : 0;
- if (tile_version.resource_)
+ if (tile_version.resource_) {
+ DCHECK(tile->IsReadyToDraw());
continue;
+ }
}
DCHECK(!tile_version.resource_);
@@ -937,16 +943,30 @@ void TileManager::AssignGpuMemoryToTiles(
if (!can_schedule_tile) {
all_tiles_that_need_to_be_rasterized_have_memory_ = false;
- if (tile->required_for_activation())
- all_tiles_required_for_activation_have_memory_ = false;
it.DisablePriorityOrdering();
continue;
}
raster_bytes = raster_bytes_if_rastered;
tiles_that_need_to_be_rasterized->push_back(tile);
+ if (tile->required_for_activation())
+ ++processed_required_for_activation_tile_count;
}
+ size_t total_required_for_activation_tile_count = 0;
enne (OOO) 2014/04/29 19:44:19 style nit: size_t -> int
vmpstr 2014/04/29 22:56:20 Done.
+ for (std::vector<PictureLayerImpl*>::const_iterator it = layers_.begin();
+ it != layers_.end();
+ ++it) {
+ if ((*it)->IsOnActiveOrPendingTree()) {
enne (OOO) 2014/04/29 19:44:19 Shouldn't this just be on pending?
vmpstr 2014/04/29 22:56:20 Done.
+ total_required_for_activation_tile_count +=
+ (*it)->UninitializedTilesRequiredForActivationCount();
+ }
+ }
+
+ all_tiles_required_for_activation_have_memory_ =
+ processed_required_for_activation_tile_count ==
+ total_required_for_activation_tile_count;
+
// OOM reporting uses hard-limit, soft-OOM is normal depending on limit.
ever_exceeded_memory_budget_ |= oomed_hard;
if (ever_exceeded_memory_budget_) {
@@ -1199,6 +1219,8 @@ void TileManager::OnRasterTaskCompleted(
++resources_releasable_;
}
+ client_->NotifyTileInitialized(tile);
+
FreeUnusedResourcesForTile(tile);
if (tile->priority(ACTIVE_TREE).distance_to_visible == 0.f)
did_initialize_visible_tile_ = true;

Powered by Google App Engine
This is Rietveld 408576698