| 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;
|
|
|