Index: cc/resources/tiling_set_raster_queue_all.h |
diff --git a/cc/resources/tiling_set_raster_queue_all.h b/cc/resources/tiling_set_raster_queue_all.h |
index 5577c6c58aaf14b7936e30f9a13d6e7ca7595b49..ebca838f232b288c00e6e6770d3d97e997d23bf2 100644 |
--- a/cc/resources/tiling_set_raster_queue_all.h |
+++ b/cc/resources/tiling_set_raster_queue_all.h |
@@ -26,12 +26,90 @@ class CC_EXPORT TilingSetRasterQueueAll { |
bool IsEmpty() const; |
private: |
+ // Helper base class for individual region iterators. |
+ class OnePriorityRectIterator { |
+ public: |
+ OnePriorityRectIterator(); |
+ OnePriorityRectIterator(PictureLayerTiling* tiling, |
+ TilingData* tiling_data); |
+ |
+ bool done() const { return !tile_; } |
+ Tile* operator*() const { return tile_; } |
+ |
+ protected: |
+ ~OnePriorityRectIterator() = default; |
+ bool TileNeedsRaster(Tile* tile) const { |
+ return tile->NeedsRaster() && !tiling_->IsTileOccluded(tile); |
+ } |
+ |
+ template <typename TilingIteratorType> |
+ void AdvanceToNextTile(TilingIteratorType* iterator); |
+ template <typename TilingIteratorType> |
+ bool GetFirstTileAndCheckIfValid(TilingIteratorType* iterator); |
+ |
+ Tile* tile_; |
+ PictureLayerTiling* tiling_; |
+ TilingData* tiling_data_; |
+ }; |
+ |
+ // Iterates over visible rect only, left to right top to bottom order. |
+ class VisibleTilingIterator : public OnePriorityRectIterator { |
+ public: |
+ VisibleTilingIterator() = default; |
+ VisibleTilingIterator(PictureLayerTiling* tiling, TilingData* tiling_data); |
+ |
+ VisibleTilingIterator& operator++(); |
+ |
+ private: |
+ TilingData::Iterator iterator_; |
+ }; |
+ |
+ // Iterates over skewport only, spiral around the visible rect. |
+ class SkewportTilingIterator : public OnePriorityRectIterator { |
+ public: |
+ SkewportTilingIterator() = default; |
+ SkewportTilingIterator(PictureLayerTiling* tiling, TilingData* tiling_data); |
+ |
+ SkewportTilingIterator& operator++(); |
+ |
+ private: |
+ TilingData::SpiralDifferenceIterator iterator_; |
+ }; |
+ |
+ // Iterates over soon border only, spiral around the visible rect. |
+ class SoonBorderTilingIterator : public OnePriorityRectIterator { |
+ public: |
+ SoonBorderTilingIterator() = default; |
+ SoonBorderTilingIterator(PictureLayerTiling* tiling, |
+ TilingData* tiling_data); |
+ |
+ SoonBorderTilingIterator& operator++(); |
+ |
+ private: |
+ TilingData::SpiralDifferenceIterator iterator_; |
+ }; |
+ |
+ // Iterates over eventually rect only, spiral around the soon rect. |
+ class EventuallyTilingIterator : public OnePriorityRectIterator { |
+ public: |
+ EventuallyTilingIterator() = default; |
+ EventuallyTilingIterator(PictureLayerTiling* tiling, |
+ TilingData* tiling_data); |
+ |
+ EventuallyTilingIterator& operator++(); |
+ |
+ private: |
+ TilingData::SpiralDifferenceIterator iterator_; |
+ }; |
+ |
+ // Iterates over all of the above phases in the following order: visible, |
+ // skewport, soon border, eventually. |
class TilingIterator { |
public: |
TilingIterator(); |
explicit TilingIterator(PictureLayerTiling* tiling, |
TilingData* tiling_data); |
- ~TilingIterator(); |
+ ~TilingIterator() = default; |
bool done() const { return current_tile_ == nullptr; } |
const Tile* operator*() const { return current_tile_; } |
@@ -61,9 +139,6 @@ class CC_EXPORT TilingSetRasterQueueAll { |
}; |
void AdvancePhase(); |
- bool TileNeedsRaster(Tile* tile) const { |
- return tile->NeedsRaster() && !tiling_->IsTileOccluded(tile); |
- } |
PictureLayerTiling* tiling_; |
TilingData* tiling_data_; |
@@ -71,8 +146,10 @@ class CC_EXPORT TilingSetRasterQueueAll { |
Phase phase_; |
Tile* current_tile_; |
- TilingData::Iterator visible_iterator_; |
- TilingData::SpiralDifferenceIterator spiral_iterator_; |
+ VisibleTilingIterator visible_iterator_; |
+ SkewportTilingIterator skewport_iterator_; |
+ SoonBorderTilingIterator soon_border_iterator_; |
+ EventuallyTilingIterator eventually_iterator_; |
}; |
enum IteratorType { LOW_RES, HIGH_RES, NUM_ITERATORS }; |