Index: cc/resources/raster_tile_priority_queue_all.cc |
diff --git a/cc/resources/raster_tile_priority_queue_all.cc b/cc/resources/raster_tile_priority_queue_all.cc |
index 9baa9b32de7177e67738a675a78dda8f1cf65779..77e4a0b4b5b7f461bc91f53facf598554623fe83 100644 |
--- a/cc/resources/raster_tile_priority_queue_all.cc |
+++ b/cc/resources/raster_tile_priority_queue_all.cc |
@@ -4,6 +4,7 @@ |
#include "cc/resources/raster_tile_priority_queue_all.h" |
+#include "base/containers/hash_tables.h" |
#include "cc/resources/tiling_set_raster_queue_all.h" |
namespace cc { |
@@ -127,11 +128,10 @@ WhichTree HigherPriorityTree(TreePriority tree_priority, |
} |
scoped_ptr<TilingSetRasterQueueAll> CreateTilingSetRasterQueue( |
- PictureLayerImpl* layer, |
+ PictureLayerTilingSet* tiling_set, |
TreePriority tree_priority) { |
- if (!layer) |
+ if (!tiling_set) |
return nullptr; |
- PictureLayerTilingSet* tiling_set = layer->picture_layer_tiling_set(); |
bool prioritize_low_res = tree_priority == SMOOTHNESS_TAKES_PRIORITY; |
return make_scoped_ptr( |
new TilingSetRasterQueueAll(tiling_set, prioritize_low_res)); |
@@ -146,14 +146,26 @@ RasterTilePriorityQueueAll::~RasterTilePriorityQueueAll() { |
} |
void RasterTilePriorityQueueAll::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; |
+ // Reset |active| if it doesn't have valid tile priorities. |
+ if (active && !active->HasValidTilePriorities()) |
+ active = nullptr; |
+ |
+ PictureLayerTilingSet* pending = |
+ has_pending_tree ? paired_tiling_set.pending : nullptr; |
+ // Reset |pending| if it doesn't have valid tile priorities. |
+ if (pending && !pending->HasValidTilePriorities()) |
+ pending = nullptr; |
+ |
+ paired_queues_.push_back(make_scoped_ptr( |
+ new PairedTilingSetQueue(active, pending, tree_priority_))); |
} |
paired_queues_.make_heap(RasterOrderComparator(tree_priority_)); |
} |
@@ -180,13 +192,12 @@ RasterTilePriorityQueueAll::PairedTilingSetQueue::PairedTilingSetQueue() { |
} |
RasterTilePriorityQueueAll::PairedTilingSetQueue::PairedTilingSetQueue( |
- const PictureLayerImpl::Pair& layer_pair, |
+ PictureLayerTilingSet* active_set, |
+ PictureLayerTilingSet* pending_set, |
TreePriority tree_priority) |
- : active_queue_( |
- CreateTilingSetRasterQueue(layer_pair.active, tree_priority)), |
- pending_queue_( |
- CreateTilingSetRasterQueue(layer_pair.pending, tree_priority)), |
- has_both_layers_(layer_pair.active && layer_pair.pending) { |
+ : active_queue_(CreateTilingSetRasterQueue(active_set, tree_priority)), |
+ pending_queue_(CreateTilingSetRasterQueue(pending_set, tree_priority)), |
+ has_both_tiling_sets_(active_set && pending_set) { |
SkipTilesReturnedByTwin(tree_priority); |
TRACE_EVENT_INSTANT1(TRACE_DISABLED_BY_DEFAULT("cc.debug"), |
@@ -238,7 +249,7 @@ void RasterTilePriorityQueueAll::PairedTilingSetQueue::Pop( |
void RasterTilePriorityQueueAll::PairedTilingSetQueue::SkipTilesReturnedByTwin( |
TreePriority tree_priority) { |
- if (!has_both_layers_) |
+ if (!has_both_tiling_sets_) |
return; |
// We have both layers (active and pending) thus we can encounter shared |