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 b1ca48de5b46251930a1814881cde8dc2519ca29..6dd061b5219048c261242070053c903c385ae672 100644 |
--- a/cc/resources/eviction_tile_priority_queue.cc |
+++ b/cc/resources/eviction_tile_priority_queue.cc |
@@ -4,6 +4,8 @@ |
#include "cc/resources/eviction_tile_priority_queue.h" |
+#include "base/containers/hash_tables.h" |
+ |
namespace cc { |
namespace { |
@@ -78,6 +80,18 @@ class EvictionOrderComparator { |
} // namespace |
+// static |
+scoped_ptr<EvictionTilePriorityQueue> EvictionTilePriorityQueue::Create( |
+ const base::hash_map<int, PictureLayerTilingSet::Pair>& |
+ paired_picture_layer_tiling_sets, |
+ bool has_pending_tree, |
+ TreePriority tree_priority) { |
+ scoped_ptr<EvictionTilePriorityQueue> queue(new EvictionTilePriorityQueue); |
+ queue->Build(paired_picture_layer_tiling_sets, has_pending_tree, |
+ tree_priority); |
+ return queue; |
+} |
+ |
EvictionTilePriorityQueue::EvictionTilePriorityQueue() { |
} |
@@ -85,16 +99,19 @@ EvictionTilePriorityQueue::~EvictionTilePriorityQueue() { |
} |
void EvictionTilePriorityQueue::Build( |
- const std::vector<PictureLayerImpl::Pair>& paired_layers, |
+ const base::hash_map<int, PictureLayerTilingSet::Pair>& |
+ paired_picture_layer_tiling_sets, |
+ bool has_pending_tree, |
TreePriority tree_priority) { |
tree_priority_ = tree_priority; |
- for (std::vector<PictureLayerImpl::Pair>::const_iterator it = |
- paired_layers.begin(); |
- it != paired_layers.end(); |
- ++it) { |
- paired_queues_.push_back( |
- make_scoped_ptr(new PairedTilingSetQueue(*it, tree_priority_))); |
+ for (const auto& paired_tiling_set_pair : paired_picture_layer_tiling_sets) { |
+ const auto& paired_tiling_set = paired_tiling_set_pair.second; |
+ PictureLayerTilingSet* active = paired_tiling_set.active; |
+ PictureLayerTilingSet* pending = |
+ has_pending_tree ? paired_tiling_set.pending : nullptr; |
+ paired_queues_.push_back(make_scoped_ptr( |
+ new PairedTilingSetQueue(active, pending, tree_priority_))); |
} |
paired_queues_.make_heap(EvictionOrderComparator(tree_priority_)); |
@@ -122,18 +139,17 @@ EvictionTilePriorityQueue::PairedTilingSetQueue::PairedTilingSetQueue() { |
} |
EvictionTilePriorityQueue::PairedTilingSetQueue::PairedTilingSetQueue( |
- const PictureLayerImpl::Pair& layer_pair, |
+ PictureLayerTilingSet* active_set, |
+ PictureLayerTilingSet* pending_set, |
TreePriority tree_priority) { |
- bool skip_shared_out_of_order_tiles = layer_pair.active && layer_pair.pending; |
- if (layer_pair.active) { |
+ bool skip_shared_out_of_order_tiles = active_set && pending_set; |
+ if (active_set) { |
active_queue = make_scoped_ptr(new TilingSetEvictionQueue( |
- layer_pair.active->picture_layer_tiling_set(), tree_priority, |
- skip_shared_out_of_order_tiles)); |
+ active_set, tree_priority, skip_shared_out_of_order_tiles)); |
} |
- if (layer_pair.pending) { |
+ if (pending_set) { |
pending_queue = make_scoped_ptr(new TilingSetEvictionQueue( |
- layer_pair.pending->picture_layer_tiling_set(), tree_priority, |
- skip_shared_out_of_order_tiles)); |
+ pending_set, tree_priority, skip_shared_out_of_order_tiles)); |
} |
} |