Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #ifndef CC_RESOURCES_TILING_SET_RASTER_QUEUE_ALL_H_ | 5 #ifndef CC_RESOURCES_TILING_SET_RASTER_QUEUE_ALL_H_ |
| 6 #define CC_RESOURCES_TILING_SET_RASTER_QUEUE_ALL_H_ | 6 #define CC_RESOURCES_TILING_SET_RASTER_QUEUE_ALL_H_ |
| 7 | 7 |
| 8 #include "base/containers/stack_container.h" | 8 #include "base/containers/stack_container.h" |
| 9 #include "cc/base/cc_export.h" | 9 #include "cc/base/cc_export.h" |
| 10 #include "cc/resources/picture_layer_tiling_set.h" | 10 #include "cc/resources/picture_layer_tiling_set.h" |
| (...skipping 14 matching lines...) Expand all Loading... | |
| 25 const Tile* Top() const; | 25 const Tile* Top() const; |
| 26 void Pop(); | 26 void Pop(); |
| 27 bool IsEmpty() const; | 27 bool IsEmpty() const; |
| 28 | 28 |
| 29 private: | 29 private: |
| 30 // Helper base class for individual region iterators. | 30 // Helper base class for individual region iterators. |
| 31 class OnePriorityRectIterator { | 31 class OnePriorityRectIterator { |
| 32 public: | 32 public: |
| 33 OnePriorityRectIterator(); | 33 OnePriorityRectIterator(); |
| 34 OnePriorityRectIterator(PictureLayerTiling* tiling, | 34 OnePriorityRectIterator(PictureLayerTiling* tiling, |
| 35 TilingData* tiling_data); | 35 TilingData* tiling_data, |
| 36 PictureLayerTiling::PriorityRect priority_rect); | |
| 36 | 37 |
| 37 bool done() const { return !tile_; } | 38 bool done() const { return !tile_; } |
| 38 Tile* operator*() const { return tile_; } | 39 Tile* operator*() const { return tile_; } |
| 39 | 40 |
| 40 protected: | 41 protected: |
| 41 ~OnePriorityRectIterator() = default; | 42 ~OnePriorityRectIterator() = default; |
| 42 bool TileNeedsRaster(Tile* tile) const { | 43 bool TileNeedsRaster(Tile* tile) const { |
| 43 return tile->NeedsRaster() && !tiling_->IsTileOccluded(tile); | 44 return tile->NeedsRaster() && !tiling_->IsTileOccluded(tile); |
| 44 } | 45 } |
| 45 | 46 |
| 46 template <typename TilingIteratorType> | 47 template <typename TilingIteratorType> |
| 47 void AdvanceToNextTile(TilingIteratorType* iterator); | 48 void AdvanceToNextTile(TilingIteratorType* iterator); |
| 48 template <typename TilingIteratorType> | 49 template <typename TilingIteratorType> |
| 49 bool GetFirstTileAndCheckIfValid(TilingIteratorType* iterator); | 50 bool GetFirstTileAndCheckIfValid(TilingIteratorType* iterator); |
| 50 | 51 |
| 51 Tile* tile_; | 52 Tile* tile_; |
| 52 PictureLayerTiling* tiling_; | 53 PictureLayerTiling* tiling_; |
| 54 const PictureLayerTiling* pending_twin_tiling_; | |
| 53 TilingData* tiling_data_; | 55 TilingData* tiling_data_; |
| 56 PictureLayerTiling::PriorityRect priority_rect_; | |
| 54 }; | 57 }; |
| 55 | 58 |
| 56 // Iterates over visible rect only, left to right top to bottom order. | 59 // Iterates over visible rect only, left to right top to bottom order. |
| 57 class VisibleTilingIterator : public OnePriorityRectIterator { | 60 class VisibleTilingIterator : public OnePriorityRectIterator { |
| 58 public: | 61 public: |
| 59 VisibleTilingIterator() = default; | 62 VisibleTilingIterator() = default; |
| 60 VisibleTilingIterator(PictureLayerTiling* tiling, TilingData* tiling_data); | 63 VisibleTilingIterator(PictureLayerTiling* tiling, TilingData* tiling_data); |
| 61 | 64 |
| 62 VisibleTilingIterator& operator++(); | 65 VisibleTilingIterator& operator++(); |
| 63 | 66 |
| (...skipping 16 matching lines...) Expand all Loading... | |
| 80 // Iterates over skewport only, spiral around the visible rect. | 83 // Iterates over skewport only, spiral around the visible rect. |
| 81 class SkewportTilingIterator : public OnePriorityRectIterator { | 84 class SkewportTilingIterator : public OnePriorityRectIterator { |
| 82 public: | 85 public: |
| 83 SkewportTilingIterator() = default; | 86 SkewportTilingIterator() = default; |
| 84 SkewportTilingIterator(PictureLayerTiling* tiling, TilingData* tiling_data); | 87 SkewportTilingIterator(PictureLayerTiling* tiling, TilingData* tiling_data); |
| 85 | 88 |
| 86 SkewportTilingIterator& operator++(); | 89 SkewportTilingIterator& operator++(); |
| 87 | 90 |
| 88 private: | 91 private: |
| 89 TilingData::SpiralDifferenceIterator iterator_; | 92 TilingData::SpiralDifferenceIterator iterator_; |
| 90 gfx::Rect pending_visible_rect_; | |
| 91 }; | 93 }; |
| 92 | 94 |
| 93 // Iterates over soon border only, spiral around the visible rect. | 95 // Iterates over soon border only, spiral around the visible rect. |
| 94 class SoonBorderTilingIterator : public OnePriorityRectIterator { | 96 class SoonBorderTilingIterator : public OnePriorityRectIterator { |
| 95 public: | 97 public: |
| 96 SoonBorderTilingIterator() = default; | 98 SoonBorderTilingIterator() = default; |
| 97 SoonBorderTilingIterator(PictureLayerTiling* tiling, | 99 SoonBorderTilingIterator(PictureLayerTiling* tiling, |
| 98 TilingData* tiling_data); | 100 TilingData* tiling_data); |
| 99 | 101 |
| 100 SoonBorderTilingIterator& operator++(); | 102 SoonBorderTilingIterator& operator++(); |
| 101 | 103 |
| 102 private: | 104 private: |
| 103 TilingData::SpiralDifferenceIterator iterator_; | 105 TilingData::SpiralDifferenceIterator iterator_; |
| 104 gfx::Rect pending_visible_rect_; | |
| 105 }; | 106 }; |
| 106 | 107 |
| 107 // Iterates over eventually rect only, spiral around the soon rect. | 108 // Iterates over eventually rect only, spiral around the soon rect. |
| 108 class EventuallyTilingIterator : public OnePriorityRectIterator { | 109 class EventuallyTilingIterator : public OnePriorityRectIterator { |
| 109 public: | 110 public: |
| 110 EventuallyTilingIterator() = default; | 111 EventuallyTilingIterator() = default; |
| 111 EventuallyTilingIterator(PictureLayerTiling* tiling, | 112 EventuallyTilingIterator(PictureLayerTiling* tiling, |
| 112 TilingData* tiling_data); | 113 TilingData* tiling_data); |
| 113 | 114 |
| 114 EventuallyTilingIterator& operator++(); | 115 EventuallyTilingIterator& operator++(); |
| 115 | 116 |
| 116 private: | 117 private: |
| 117 TilingData::SpiralDifferenceIterator iterator_; | 118 TilingData::SpiralDifferenceIterator iterator_; |
| 118 gfx::Rect pending_visible_rect_; | |
| 119 }; | 119 }; |
| 120 | 120 |
| 121 // Iterates over all of the above phases in the following order: visible, | 121 // Iterates over all of the above phases in the following order: visible, |
| 122 // skewport, soon border, eventually. | 122 // skewport, soon border, eventually. |
| 123 class TilingIterator { | 123 class TilingIterator { |
| 124 public: | 124 public: |
| 125 TilingIterator(); | 125 TilingIterator(); |
| 126 explicit TilingIterator(PictureLayerTiling* tiling, | 126 explicit TilingIterator(PictureLayerTiling* tiling, |
| 127 TilingData* tiling_data); | 127 TilingData* tiling_data); |
| 128 ~TilingIterator(); | 128 ~TilingIterator(); |
| 129 | 129 |
| 130 bool done() const { return current_tile_ == nullptr; } | 130 bool done() const { return current_tile_ == nullptr; } |
| 131 const Tile* operator*() const { return current_tile_; } | 131 const Tile* operator*() const { return current_tile_; } |
| 132 Tile* operator*() { return current_tile_; } | 132 Tile* operator*() { return current_tile_; } |
| 133 TilePriority::PriorityBin type() const { | 133 TilePriority::PriorityBin type() const { |
| 134 switch (phase_) { | 134 switch (phase_) { |
| 135 case VISIBLE_RECT: | 135 case Phase::VISIBLE_RECT: |
| 136 return TilePriority::NOW; | 136 return TilePriority::NOW; |
| 137 case PENDING_VISIBLE_RECT: | 137 case Phase::PENDING_VISIBLE_RECT: |
| 138 case SKEWPORT_RECT: | 138 case Phase::SKEWPORT_RECT: |
| 139 case SOON_BORDER_RECT: | 139 case Phase::SOON_BORDER_RECT: |
| 140 return TilePriority::SOON; | 140 return TilePriority::SOON; |
| 141 case EVENTUALLY_RECT: | 141 case Phase::EVENTUALLY_RECT: |
| 142 return TilePriority::EVENTUALLY; | 142 return TilePriority::EVENTUALLY; |
| 143 } | 143 } |
| 144 NOTREACHED(); | 144 NOTREACHED(); |
| 145 return TilePriority::EVENTUALLY; | 145 return TilePriority::EVENTUALLY; |
| 146 } | 146 } |
| 147 | 147 |
| 148 TilingIterator& operator++(); | 148 TilingIterator& operator++(); |
| 149 | 149 |
| 150 private: | 150 private: |
| 151 // PENDING VISIBLE RECT refers to the visible rect that will become current | 151 // PENDING VISIBLE RECT refers to the visible rect that will become current |
|
vmpstr
2015/05/05 18:04:02
Can you move this comment to where the enum is act
USE eero AT chromium.org
2015/05/06 12:05:20
Done.
| |
| 152 // upon activation (ie, the pending tree's visible rect). Tiles in this | 152 // upon activation (ie, the pending tree's visible rect). Tiles in this |
| 153 // region that are not part of the current visible rect are all handled | 153 // region that are not part of the current visible rect are all handled |
| 154 // here. Note that when processing a pending tree, this rect is the same as | 154 // here. Note that when processing a pending tree, this rect is the same as |
| 155 // the visible rect so no tiles are processed in this case. | 155 // the visible rect so no tiles are processed in this case. |
| 156 enum Phase { | 156 typedef PictureLayerTiling::PriorityRect Phase; |
|
vmpstr
2015/05/05 18:04:02
nit: using Phase = PictureLayerTiling::PriorityRec
USE eero AT chromium.org
2015/05/06 12:05:20
I knew that such a statement exists but I could no
| |
| 157 VISIBLE_RECT, | |
| 158 PENDING_VISIBLE_RECT, | |
| 159 SKEWPORT_RECT, | |
| 160 SOON_BORDER_RECT, | |
| 161 EVENTUALLY_RECT | |
| 162 }; | |
| 163 | 157 |
| 164 void AdvancePhase(); | 158 void AdvancePhase(); |
| 165 | 159 |
| 166 PictureLayerTiling* tiling_; | 160 PictureLayerTiling* tiling_; |
| 167 TilingData* tiling_data_; | 161 TilingData* tiling_data_; |
| 168 | 162 |
| 169 Phase phase_; | 163 Phase phase_; |
| 170 | 164 |
| 171 Tile* current_tile_; | 165 Tile* current_tile_; |
| 172 VisibleTilingIterator visible_iterator_; | 166 VisibleTilingIterator visible_iterator_; |
| (...skipping 24 matching lines...) Expand all Loading... | |
| 197 | 191 |
| 198 // The max number of stages is 6: 1 low res, 3 high res, and 2 active non | 192 // The max number of stages is 6: 1 low res, 3 high res, and 2 active non |
| 199 // ideal pending high res. | 193 // ideal pending high res. |
| 200 base::StackVector<IterationStage, 6> stages_; | 194 base::StackVector<IterationStage, 6> stages_; |
| 201 TilingIterator iterators_[NUM_ITERATORS]; | 195 TilingIterator iterators_[NUM_ITERATORS]; |
| 202 }; | 196 }; |
| 203 | 197 |
| 204 } // namespace cc | 198 } // namespace cc |
| 205 | 199 |
| 206 #endif // CC_RESOURCES_TILING_SET_RASTER_QUEUE_ALL_H_ | 200 #endif // CC_RESOURCES_TILING_SET_RASTER_QUEUE_ALL_H_ |
| OLD | NEW |