Index: cc/layers/picture_layer_impl.cc |
diff --git a/cc/layers/picture_layer_impl.cc b/cc/layers/picture_layer_impl.cc |
index eb90e955d9e699b613001cf3552de27af76fdc81..6ec1f0a1b616f9694a366a247f4f56838291c09e 100644 |
--- a/cc/layers/picture_layer_impl.cc |
+++ b/cc/layers/picture_layer_impl.cc |
@@ -106,6 +106,14 @@ scoped_ptr<TilingSetEvictionQueue> PictureLayerImpl::CreateEvictionQueue( |
new TilingSetEvictionQueue(tilings_.get(), tree_priority)); |
} |
+scoped_ptr<TilingSetRasterQueue> PictureLayerImpl::CreateRasterQueue( |
+ bool prioritize_low_res) { |
+ if (!tilings_) |
+ return make_scoped_ptr(new TilingSetRasterQueue()); |
+ return make_scoped_ptr( |
+ new TilingSetRasterQueue(tilings_.get(), prioritize_low_res)); |
+} |
+ |
const char* PictureLayerImpl::LayerTypeAsString() const { |
return "cc::PictureLayerImpl"; |
} |
@@ -1368,123 +1376,4 @@ bool PictureLayerImpl::AllTilesRequiredForDrawAreReadyToDraw() const { |
&PictureLayerTiling::IsTileRequiredForDrawIfVisible); |
} |
-PictureLayerImpl::LayerRasterTileIterator::LayerRasterTileIterator() |
- : layer_(nullptr), current_stage_(arraysize(stages_)) { |
-} |
- |
-PictureLayerImpl::LayerRasterTileIterator::LayerRasterTileIterator( |
- PictureLayerImpl* layer, |
- bool prioritize_low_res) |
- : layer_(layer), current_stage_(0) { |
- DCHECK(layer_); |
- |
- // Early out if the layer has no tilings. |
- if (!layer_->tilings_ || !layer_->tilings_->num_tilings()) { |
- current_stage_ = arraysize(stages_); |
- return; |
- } |
- |
- // Tiles without valid priority are treated as having lowest priority and |
- // never considered for raster. |
- if (!layer_->HasValidTilePriorities()) { |
- current_stage_ = arraysize(stages_); |
- return; |
- } |
- |
- // Find high and low res tilings and initialize the iterators. |
- for (size_t i = 0; i < layer_->tilings_->num_tilings(); ++i) { |
- PictureLayerTiling* tiling = layer_->tilings_->tiling_at(i); |
- if (tiling->resolution() == HIGH_RESOLUTION) { |
- iterators_[HIGH_RES] = |
- PictureLayerTiling::TilingRasterTileIterator(tiling); |
- } |
- |
- if (prioritize_low_res && tiling->resolution() == LOW_RESOLUTION) { |
- iterators_[LOW_RES] = |
- PictureLayerTiling::TilingRasterTileIterator(tiling); |
- } |
- } |
- |
- if (prioritize_low_res) { |
- stages_[0].iterator_type = LOW_RES; |
- stages_[0].tile_type = TilePriority::NOW; |
- |
- stages_[1].iterator_type = HIGH_RES; |
- stages_[1].tile_type = TilePriority::NOW; |
- } else { |
- stages_[0].iterator_type = HIGH_RES; |
- stages_[0].tile_type = TilePriority::NOW; |
- |
- stages_[1].iterator_type = LOW_RES; |
- stages_[1].tile_type = TilePriority::NOW; |
- } |
- |
- stages_[2].iterator_type = HIGH_RES; |
- stages_[2].tile_type = TilePriority::SOON; |
- |
- stages_[3].iterator_type = HIGH_RES; |
- stages_[3].tile_type = TilePriority::EVENTUALLY; |
- |
- IteratorType index = stages_[current_stage_].iterator_type; |
- TilePriority::PriorityBin tile_type = stages_[current_stage_].tile_type; |
- if (!iterators_[index] || iterators_[index].get_type() != tile_type) |
- AdvanceToNextStage(); |
-} |
- |
-PictureLayerImpl::LayerRasterTileIterator::~LayerRasterTileIterator() {} |
- |
-PictureLayerImpl::LayerRasterTileIterator::operator bool() const { |
- return current_stage_ < arraysize(stages_); |
-} |
- |
-PictureLayerImpl::LayerRasterTileIterator& |
-PictureLayerImpl::LayerRasterTileIterator:: |
-operator++() { |
- IteratorType index = stages_[current_stage_].iterator_type; |
- TilePriority::PriorityBin tile_type = stages_[current_stage_].tile_type; |
- |
- // First advance the iterator. |
- DCHECK(iterators_[index]); |
- DCHECK(iterators_[index].get_type() == tile_type); |
- ++iterators_[index]; |
- |
- if (!iterators_[index] || iterators_[index].get_type() != tile_type) |
- AdvanceToNextStage(); |
- |
- return *this; |
-} |
- |
-Tile* PictureLayerImpl::LayerRasterTileIterator::operator*() { |
- DCHECK(*this); |
- |
- IteratorType index = stages_[current_stage_].iterator_type; |
- DCHECK(iterators_[index]); |
- DCHECK(iterators_[index].get_type() == stages_[current_stage_].tile_type); |
- |
- return *iterators_[index]; |
-} |
- |
-const Tile* PictureLayerImpl::LayerRasterTileIterator::operator*() const { |
- DCHECK(*this); |
- |
- IteratorType index = stages_[current_stage_].iterator_type; |
- DCHECK(iterators_[index]); |
- DCHECK(iterators_[index].get_type() == stages_[current_stage_].tile_type); |
- |
- return *iterators_[index]; |
-} |
- |
-void PictureLayerImpl::LayerRasterTileIterator::AdvanceToNextStage() { |
- DCHECK_LT(current_stage_, arraysize(stages_)); |
- ++current_stage_; |
- while (current_stage_ < arraysize(stages_)) { |
- IteratorType index = stages_[current_stage_].iterator_type; |
- TilePriority::PriorityBin tile_type = stages_[current_stage_].tile_type; |
- |
- if (iterators_[index] && iterators_[index].get_type() == tile_type) |
- break; |
- ++current_stage_; |
- } |
-} |
- |
} // namespace cc |