Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(3344)

Unified Diff: cc/layers/picture_layer_impl.cc

Issue 416403007: cc: Only create tiling eviction iterators as they are required. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 6 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« cc/layers/picture_layer_impl.h ('K') | « cc/layers/picture_layer_impl.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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
« cc/layers/picture_layer_impl.h ('K') | « cc/layers/picture_layer_impl.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698