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

Unified Diff: cc/resources/tile_manager.cc

Issue 651503004: cc: Bump up pending tree now tiles order for smoothness mode. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: format fix Created 6 years, 2 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 c9fab0fc06034c14f840772b76aadcf7972a9fad..e03fe3f938d20891d4e4248a9ce2d2f385c663a9 100644
--- a/cc/resources/tile_manager.cc
+++ b/cc/resources/tile_manager.cc
@@ -512,21 +512,41 @@ bool TileManager::FreeTileResourcesWithLowerPriorityUntilUsageIsWithinLimit(
return true;
}
-bool TileManager::TilePriorityViolatesMemoryPolicy(
- const TilePriority& priority) {
+bool TileManager::TileViolatesMemoryPolicy(const Tile* tile) {
+ bool memory_policy_violated = true;
+ const TilePriority& priority =
+ tile->priority_for_tree_priority(global_state_.tree_priority);
switch (global_state_.memory_limit_policy) {
case ALLOW_NOTHING:
+ // In the case of ALLOW_NOTHING, there are no special cases. A tile always
+ // violated memory policy.
return true;
case ALLOW_ABSOLUTE_MINIMUM:
- return priority.priority_bin > TilePriority::NOW;
+ memory_policy_violated = priority.priority_bin > TilePriority::NOW;
+ break;
case ALLOW_PREPAINT_ONLY:
- return priority.priority_bin > TilePriority::SOON;
+ memory_policy_violated = priority.priority_bin > TilePriority::SOON;
+ break;
case ALLOW_ANYTHING:
- return priority.distance_to_visible ==
- std::numeric_limits<float>::infinity();
+ memory_policy_violated = priority.distance_to_visible ==
+ std::numeric_limits<float>::infinity();
+ break;
}
- NOTREACHED();
- return true;
reveman 2014/10/13 19:45:11 can we keep this NOTREACHED statement?
vmpstr 2014/10/13 20:20:14 Done.
+
+ // If memory policy was violated, we need to check whether this tile is coming
+ // from the NOW bin on the pending tree. The reason for this is that there is
+ // a possibility that a pending tree tile could be required for activation and
+ // we don't want to starve activation in any of the above cases.
+ // TODO(vmpstr): Note that it is insufficient to check whether tile is
+ // required for activation, since pending tree iterator can return NOW bin
+ // tiles not required for activation before NOW bin tiles that are required.
+ // The todo here is to fix this, so that we can check only the activation
+ // requirement.
+ if (memory_policy_violated) {
+ const TilePriority& pending_priority = tile->priority(PENDING_TREE);
+ memory_policy_violated = pending_priority.priority_bin != TilePriority::NOW;
+ }
reveman 2014/10/13 19:45:11 Looks like this is just being tacked on as a quick
vmpstr 2014/10/13 20:20:14 Reworked this a bit.
+ return memory_policy_violated;
}
void TileManager::AssignGpuMemoryToTiles(
@@ -560,10 +580,7 @@ void TileManager::AssignGpuMemoryToTiles(
while (!raster_priority_queue_.IsEmpty()) {
Tile* tile = raster_priority_queue_.Top();
- TilePriority priority =
- tile->priority_for_tree_priority(global_state_.tree_priority);
-
- if (TilePriorityViolatesMemoryPolicy(priority))
+ if (TileViolatesMemoryPolicy(tile))
break;
// We won't be able to schedule this tile, so break out early.
@@ -589,6 +606,8 @@ void TileManager::AssignGpuMemoryToTiles(
tile->size(), resource_pool_->resource_format());
}
+ const TilePriority& priority =
+ tile->priority_for_tree_priority(global_state_.tree_priority);
bool tile_is_needed_now = priority.priority_bin == TilePriority::NOW;
// This is the memory limit that will be used by this tile. Depending on

Powered by Google App Engine
This is Rietveld 408576698