| Index: cc/layers/picture_layer_impl.cc
|
| diff --git a/cc/layers/picture_layer_impl.cc b/cc/layers/picture_layer_impl.cc
|
| index 181501310760f60df712761baef455a373ebab13..a62b0e9eef3226b29462ec6dea99eaceffbf482b 100644
|
| --- a/cc/layers/picture_layer_impl.cc
|
| +++ b/cc/layers/picture_layer_impl.cc
|
| @@ -1567,7 +1567,8 @@ PictureLayerImpl::LayerEvictionTileIterator::LayerEvictionTileIterator(
|
| : iterator_index_(0),
|
| iteration_stage_(TilePriority::EVENTUALLY),
|
| required_for_activation_(false),
|
| - layer_(layer) {
|
| + layer_(layer),
|
| + tree_priority_(tree_priority) {
|
| // Early out if the layer has no tilings.
|
| // TODO(vmpstr): Once tile priorities are determined by the iterators, ensure
|
| // that layers that don't have valid tile priorities have lowest priorities so
|
| @@ -1586,12 +1587,11 @@ PictureLayerImpl::LayerEvictionTileIterator::LayerEvictionTileIterator(
|
| }
|
|
|
| iterators_.reserve(layer_->tilings_->num_tilings());
|
| + tilings_.reserve(layer_->tilings_->num_tilings());
|
|
|
| // Higher resolution non-ideal goes first.
|
| - for (size_t i = 0; i < high_res_tiling_index; ++i) {
|
| - iterators_.push_back(PictureLayerTiling::TilingEvictionTileIterator(
|
| - layer_->tilings_->tiling_at(i), tree_priority));
|
| - }
|
| + for (size_t i = 0; i < high_res_tiling_index; ++i)
|
| + tilings_.push_back(layer_->tilings_->tiling_at(i));
|
|
|
| // Lower resolution non-ideal goes next.
|
| for (size_t i = layer_->tilings_->num_tilings() - 1;
|
| @@ -1601,24 +1601,20 @@ PictureLayerImpl::LayerEvictionTileIterator::LayerEvictionTileIterator(
|
| if (tiling->resolution() == LOW_RESOLUTION)
|
| continue;
|
|
|
| - iterators_.push_back(
|
| - PictureLayerTiling::TilingEvictionTileIterator(tiling, tree_priority));
|
| + tilings_.push_back(tiling);
|
| }
|
|
|
| // Now, put the low res tiling if we have one.
|
| - if (low_res_tiling_index < layer_->tilings_->num_tilings()) {
|
| - iterators_.push_back(PictureLayerTiling::TilingEvictionTileIterator(
|
| - layer_->tilings_->tiling_at(low_res_tiling_index), tree_priority));
|
| - }
|
| + if (low_res_tiling_index < layer_->tilings_->num_tilings())
|
| + tilings_.push_back(layer_->tilings_->tiling_at(low_res_tiling_index));
|
|
|
| // Finally, put the high res tiling if we have one.
|
| - if (high_res_tiling_index < layer_->tilings_->num_tilings()) {
|
| - iterators_.push_back(PictureLayerTiling::TilingEvictionTileIterator(
|
| - layer_->tilings_->tiling_at(high_res_tiling_index), tree_priority));
|
| - }
|
| + if (high_res_tiling_index < layer_->tilings_->num_tilings())
|
| + tilings_.push_back(layer_->tilings_->tiling_at(high_res_tiling_index));
|
|
|
| - DCHECK_GT(iterators_.size(), 0u);
|
| + DCHECK_GT(tilings_.size(), 0u);
|
|
|
| + EnsureCurrentIteratorCreated();
|
| if (!iterators_[iterator_index_] ||
|
| !IsCorrectType(&iterators_[iterator_index_])) {
|
| AdvanceToNextIterator();
|
| @@ -1653,7 +1649,8 @@ void PictureLayerImpl::LayerEvictionTileIterator::AdvanceToNextIterator() {
|
| ++iterator_index_;
|
|
|
| while (true) {
|
| - while (iterator_index_ < iterators_.size()) {
|
| + while (iterator_index_ < tilings_.size()) {
|
| + EnsureCurrentIteratorCreated();
|
| if (iterators_[iterator_index_] &&
|
| IsCorrectType(&iterators_[iterator_index_])) {
|
| return;
|
| @@ -1678,7 +1675,7 @@ void PictureLayerImpl::LayerEvictionTileIterator::AdvanceToNextIterator() {
|
| }
|
|
|
| PictureLayerImpl::LayerEvictionTileIterator::operator bool() const {
|
| - return iterator_index_ < iterators_.size();
|
| + return iterator_index_ < tilings_.size();
|
| }
|
|
|
| bool PictureLayerImpl::LayerEvictionTileIterator::IsCorrectType(
|
| @@ -1687,4 +1684,16 @@ bool PictureLayerImpl::LayerEvictionTileIterator::IsCorrectType(
|
| (**it)->required_for_activation() == required_for_activation_;
|
| }
|
|
|
| +void
|
| +PictureLayerImpl::LayerEvictionTileIterator::EnsureCurrentIteratorCreated() {
|
| + if (iterator_index_ < iterators_.size())
|
| + return;
|
| +
|
| + DCHECK_EQ(iterator_index_, iterators_.size());
|
| + DCHECK_LT(iterator_index_, tilings_.size());
|
| +
|
| + iterators_.push_back(PictureLayerTiling::TilingEvictionTileIterator(
|
| + tilings_[iterator_index_], tree_priority_));
|
| +}
|
| +
|
| } // namespace cc
|
|
|