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 |