Index: cc/resources/eviction_tile_priority_queue.cc |
diff --git a/cc/resources/eviction_tile_priority_queue.cc b/cc/resources/eviction_tile_priority_queue.cc |
index 9f05e816764613ee7424cff8bff3d6f6376e8430..00c58e63cbd7c37baebdd8686cc244705084677c 100644 |
--- a/cc/resources/eviction_tile_priority_queue.cc |
+++ b/cc/resources/eviction_tile_priority_queue.cc |
@@ -157,9 +157,7 @@ Tile* EvictionTilePriorityQueue::PairedPictureLayerQueue::Top( |
DCHECK(*next_iterator); |
Tile* tile = **next_iterator; |
- DCHECK(std::find(returned_shared_tiles.begin(), |
- returned_shared_tiles.end(), |
- tile) == returned_shared_tiles.end()); |
+ DCHECK(returned_tiles_for_debug.find(tile) == returned_tiles_for_debug.end()); |
return tile; |
} |
@@ -171,25 +169,11 @@ void EvictionTilePriorityQueue::PairedPictureLayerQueue::Pop( |
PictureLayerImpl::LayerEvictionTileIterator* next_iterator = |
next_tree == ACTIVE_TREE ? &active_iterator : &pending_iterator; |
DCHECK(*next_iterator); |
- returned_shared_tiles.push_back(**next_iterator); |
+ DCHECK(returned_tiles_for_debug.insert(**next_iterator).second); |
++(*next_iterator); |
- if (IsEmpty()) |
- return; |
- |
- next_tree = NextTileIteratorTree(tree_priority); |
- next_iterator = |
- next_tree == ACTIVE_TREE ? &active_iterator : &pending_iterator; |
- while (std::find(returned_shared_tiles.begin(), |
- returned_shared_tiles.end(), |
- **next_iterator) != returned_shared_tiles.end()) { |
- ++(*next_iterator); |
- if (IsEmpty()) |
- break; |
- next_tree = NextTileIteratorTree(tree_priority); |
- next_iterator = |
- next_tree == ACTIVE_TREE ? &active_iterator : &pending_iterator; |
- } |
+ // If no empty, use Top to do DCHECK the next iterator. |
+ DCHECK(IsEmpty() || Top(tree_priority)); |
} |
WhichTree |
@@ -213,6 +197,15 @@ EvictionTilePriorityQueue::PairedPictureLayerQueue::NextTileIteratorTree( |
const TilePriority& pending_priority = |
pending_tile->priority_for_tree_priority(tree_priority); |
+ if (active_priority.priority_bin == pending_priority.priority_bin) { |
+ if (active_tile->required_for_activation()) { |
+ if (!pending_tile->required_for_activation()) |
+ return PENDING_TREE; |
+ } else if (pending_tile->required_for_activation()) { |
+ return ACTIVE_TREE; |
+ } |
+ } |
+ |
if (pending_priority.IsHigherPriorityThan(active_priority)) |
return ACTIVE_TREE; |
return PENDING_TREE; |