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