| Index: cc/trees/layer_tree_host_impl.cc
|
| diff --git a/cc/trees/layer_tree_host_impl.cc b/cc/trees/layer_tree_host_impl.cc
|
| index a2c8111e0e7329d569bb383dafb1b65c3b6cdfea..5449040bfbe1adbef446dca9d0e3229ae6bed46b 100644
|
| --- a/cc/trees/layer_tree_host_impl.cc
|
| +++ b/cc/trees/layer_tree_host_impl.cc
|
| @@ -45,6 +45,7 @@
|
| #include "cc/quads/shared_quad_state.h"
|
| #include "cc/quads/solid_color_draw_quad.h"
|
| #include "cc/quads/texture_draw_quad.h"
|
| +#include "cc/resources/eviction_tile_priority_queue.h"
|
| #include "cc/resources/gpu_raster_worker_pool.h"
|
| #include "cc/resources/image_copy_raster_worker_pool.h"
|
| #include "cc/resources/image_raster_worker_pool.h"
|
| @@ -52,6 +53,7 @@
|
| #include "cc/resources/picture_layer_tiling.h"
|
| #include "cc/resources/pixel_buffer_raster_worker_pool.h"
|
| #include "cc/resources/prioritized_resource_manager.h"
|
| +#include "cc/resources/raster_tile_priority_queue.h"
|
| #include "cc/resources/raster_worker_pool.h"
|
| #include "cc/resources/resource_pool.h"
|
| #include "cc/resources/texture_mailbox_deleter.h"
|
| @@ -1246,7 +1248,64 @@ void LayerTreeHostImpl::DidInitializeVisibleTile() {
|
| client_->DidInitializeVisibleTileOnImplThread();
|
| }
|
|
|
| -const std::vector<PictureLayerImpl*>& LayerTreeHostImpl::GetPictureLayers() {
|
| +void LayerTreeHostImpl::GetPairedPictureLayers(
|
| + std::vector<PairedPictureLayer>* paired_layers) const {
|
| + paired_layers->clear();
|
| + // Reserve a maximum possible paired layers.
|
| + paired_layers->reserve(picture_layers_.size());
|
| +
|
| + for (std::vector<PictureLayerImpl*>::const_iterator it =
|
| + picture_layers_.begin();
|
| + it != picture_layers_.end();
|
| + ++it) {
|
| + PictureLayerImpl* layer = *it;
|
| +
|
| + // TODO(vmpstr): Iterators and should handle this instead. crbug.com/381704
|
| + if (!layer->HasValidTilePriorities())
|
| + continue;
|
| +
|
| + PictureLayerImpl* twin_layer = layer->GetTwinLayer();
|
| +
|
| + // Ignore the twin layer when tile priorities are invalid.
|
| + // TODO(vmpstr): Iterators should handle this instead. crbug.com/381704
|
| + if (twin_layer && !twin_layer->HasValidTilePriorities())
|
| + twin_layer = NULL;
|
| +
|
| + PairedPictureLayer paired_layer;
|
| + WhichTree tree = layer->GetTree();
|
| +
|
| + // If the current tree is ACTIVE_TREE, then always generate a paired_layer.
|
| + // If current tree is PENDING_TREE, then only generate a paired_layer if
|
| + // there is no twin layer.
|
| + if (tree == ACTIVE_TREE) {
|
| + DCHECK(!twin_layer || twin_layer->GetTree() == PENDING_TREE);
|
| + paired_layer.active_layer = layer;
|
| + paired_layer.pending_layer = twin_layer;
|
| + paired_layers->push_back(paired_layer);
|
| + } else if (!twin_layer) {
|
| + paired_layer.active_layer = NULL;
|
| + paired_layer.pending_layer = layer;
|
| + paired_layers->push_back(paired_layer);
|
| + }
|
| + }
|
| +}
|
| +
|
| +void LayerTreeHostImpl::BuildRasterQueue(RasterTilePriorityQueue* queue,
|
| + TreePriority tree_priority) {
|
| + std::vector<PairedPictureLayer> paired_layers;
|
| + GetPairedPictureLayers(&paired_layers);
|
| + queue->Build(paired_layers, tree_priority);
|
| +}
|
| +
|
| +void LayerTreeHostImpl::BuildEvictionQueue(EvictionTilePriorityQueue* queue,
|
| + TreePriority tree_priority) {
|
| + std::vector<PairedPictureLayer> paired_layers;
|
| + GetPairedPictureLayers(&paired_layers);
|
| + queue->Build(paired_layers, tree_priority);
|
| +}
|
| +
|
| +const std::vector<PictureLayerImpl*>& LayerTreeHostImpl::GetPictureLayers()
|
| + const {
|
| return picture_layers_;
|
| }
|
|
|
|
|