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

Unified Diff: cc/resources/tile_manager.cc

Issue 291093008: cc: Prevent tiles that are required for activation from being placed in NEVER_BIN. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 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 | « no previous file | cc/resources/tile_manager_unittest.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 9494586e2e8bbe139731351ff9809f7587712096..82b6bf4913ea3a47b0ff04661c1870a4eace4535 100644
--- a/cc/resources/tile_manager.cc
+++ b/cc/resources/tile_manager.cc
@@ -590,12 +590,6 @@ void TileManager::GetTilesWithAssignedBins(PrioritizedTileSet* tiles) {
bool active_is_non_ideal =
active_priority.resolution == NON_IDEAL_RESOLUTION;
- // Adjust pending bin state for low res tiles. This prevents
- // pending tree low-res tiles from being initialized before
- // high-res tiles.
- if (pending_is_low_res)
- pending_bin = std::max(pending_bin, EVENTUALLY_BIN);
-
// Adjust bin state based on if ready to draw.
active_bin = kBinReadyToDrawMap[tile_is_ready_to_draw][active_bin];
pending_bin = kBinReadyToDrawMap[tile_is_ready_to_draw][pending_bin];
@@ -611,14 +605,11 @@ void TileManager::GetTilesWithAssignedBins(PrioritizedTileSet* tiles) {
if (!tile_is_ready_to_draw && pending_is_non_ideal)
pending_bin = NEVER_BIN;
- // Compute combined bin.
- ManagedTileBin combined_bin = std::min(active_bin, pending_bin);
-
if (!tile_is_ready_to_draw || tile_version.requires_resource()) {
// The bin that the tile would have if the GPU memory manager had
// a maximally permissive policy, send to the GPU memory manager
// to determine policy.
- ManagedTileBin gpu_memmgr_stats_bin = combined_bin;
+ ManagedTileBin gpu_memmgr_stats_bin = std::min(active_bin, pending_bin);
if ((gpu_memmgr_stats_bin == NOW_BIN) ||
(gpu_memmgr_stats_bin == NOW_AND_READY_TO_DRAW_BIN))
memory_required_bytes_ += BytesConsumedIfAllocated(tile);
@@ -630,10 +621,15 @@ void TileManager::GetTilesWithAssignedBins(PrioritizedTileSet* tiles) {
tree_bin[ACTIVE_TREE] = kBinPolicyMap[memory_policy][active_bin];
tree_bin[PENDING_TREE] = kBinPolicyMap[memory_policy][pending_bin];
+ // Adjust pending bin state for low res tiles. This prevents pending tree
+ // low-res tiles from being initialized before high-res tiles.
+ if (pending_is_low_res)
+ tree_bin[PENDING_TREE] = std::max(tree_bin[PENDING_TREE], EVENTUALLY_BIN);
+
TilePriority tile_priority;
switch (tree_priority) {
case SAME_PRIORITY_FOR_BOTH_TREES:
- mts.bin = kBinPolicyMap[memory_policy][combined_bin];
+ mts.bin = std::min(tree_bin[ACTIVE_TREE], tree_bin[PENDING_TREE]);
tile_priority = tile->combined_priority();
break;
case SMOOTHNESS_TAKES_PRIORITY:
@@ -662,6 +658,13 @@ void TileManager::GetTilesWithAssignedBins(PrioritizedTileSet* tiles) {
mts.visible_and_ready_to_draw =
tree_bin[ACTIVE_TREE] == NOW_AND_READY_TO_DRAW_BIN;
+ // Tiles that are required for activation shouldn't be in NEVER_BIN unless
+ // smoothness takes priority or memory policy allows nothing to be
+ // initialized.
+ DCHECK(!mts.required_for_activation || mts.bin != NEVER_BIN ||
+ tree_priority == SMOOTHNESS_TAKES_PRIORITY ||
+ memory_policy == ALLOW_NOTHING);
+
// If the tile is in NEVER_BIN and it does not have an active task, then we
// can release the resources early. If it does have the task however, we
// should keep it in the prioritized tile set to ensure that AssignGpuMemory
« no previous file with comments | « no previous file | cc/resources/tile_manager_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698