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 "cc/base/cc_export.h" | 8 #include "cc/base/cc_export.h" |
| 9 #include "cc/resources/picture_layer_tiling_set.h" | 9 #include "cc/resources/picture_layer_tiling_set.h" |
| 10 #include "cc/resources/tile.h" | 10 #include "cc/resources/tile.h" |
| (...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 57 public: | 57 public: |
| 58 VisibleTilingIterator() = default; | 58 VisibleTilingIterator() = default; |
| 59 VisibleTilingIterator(PictureLayerTiling* tiling, TilingData* tiling_data); | 59 VisibleTilingIterator(PictureLayerTiling* tiling, TilingData* tiling_data); |
| 60 | 60 |
| 61 VisibleTilingIterator& operator++(); | 61 VisibleTilingIterator& operator++(); |
| 62 | 62 |
| 63 private: | 63 private: |
| 64 TilingData::Iterator iterator_; | 64 TilingData::Iterator iterator_; |
| 65 }; | 65 }; |
| 66 | 66 |
| 67 class PendingVisibleTilingIterator : public OnePriorityRectIterator { | |
| 68 public: | |
| 69 PendingVisibleTilingIterator() = default; | |
| 70 PendingVisibleTilingIterator(PictureLayerTiling* tiling, | |
| 71 TilingData* tiling_data); | |
| 72 | |
| 73 PendingVisibleTilingIterator& operator++(); | |
| 74 | |
| 75 private: | |
| 76 TilingData::DifferenceIterator iterator_; | |
| 77 }; | |
| 78 | |
| 67 // Iterates over skewport only, spiral around the visible rect. | 79 // Iterates over skewport only, spiral around the visible rect. |
| 68 class SkewportTilingIterator : public OnePriorityRectIterator { | 80 class SkewportTilingIterator : public OnePriorityRectIterator { |
| 69 public: | 81 public: |
| 70 SkewportTilingIterator() = default; | 82 SkewportTilingIterator() = default; |
| 71 SkewportTilingIterator(PictureLayerTiling* tiling, TilingData* tiling_data); | 83 SkewportTilingIterator(PictureLayerTiling* tiling, TilingData* tiling_data); |
| 72 | 84 |
| 73 SkewportTilingIterator& operator++(); | 85 SkewportTilingIterator& operator++(); |
| 74 | 86 |
| 75 private: | 87 private: |
| 76 TilingData::SpiralDifferenceIterator iterator_; | 88 TilingData::SpiralDifferenceIterator iterator_; |
| 89 gfx::Rect pending_visible_rect_; | |
| 77 }; | 90 }; |
| 78 | 91 |
| 79 // Iterates over soon border only, spiral around the visible rect. | 92 // Iterates over soon border only, spiral around the visible rect. |
| 80 class SoonBorderTilingIterator : public OnePriorityRectIterator { | 93 class SoonBorderTilingIterator : public OnePriorityRectIterator { |
| 81 public: | 94 public: |
| 82 SoonBorderTilingIterator() = default; | 95 SoonBorderTilingIterator() = default; |
| 83 SoonBorderTilingIterator(PictureLayerTiling* tiling, | 96 SoonBorderTilingIterator(PictureLayerTiling* tiling, |
| 84 TilingData* tiling_data); | 97 TilingData* tiling_data); |
| 85 | 98 |
| 86 SoonBorderTilingIterator& operator++(); | 99 SoonBorderTilingIterator& operator++(); |
| 87 | 100 |
| 88 private: | 101 private: |
| 89 TilingData::SpiralDifferenceIterator iterator_; | 102 TilingData::SpiralDifferenceIterator iterator_; |
| 103 gfx::Rect pending_visible_rect_; | |
| 90 }; | 104 }; |
| 91 | 105 |
| 92 // Iterates over eventually rect only, spiral around the soon rect. | 106 // Iterates over eventually rect only, spiral around the soon rect. |
| 93 class EventuallyTilingIterator : public OnePriorityRectIterator { | 107 class EventuallyTilingIterator : public OnePriorityRectIterator { |
| 94 public: | 108 public: |
| 95 EventuallyTilingIterator() = default; | 109 EventuallyTilingIterator() = default; |
| 96 EventuallyTilingIterator(PictureLayerTiling* tiling, | 110 EventuallyTilingIterator(PictureLayerTiling* tiling, |
| 97 TilingData* tiling_data); | 111 TilingData* tiling_data); |
| 98 | 112 |
| 99 EventuallyTilingIterator& operator++(); | 113 EventuallyTilingIterator& operator++(); |
| 100 | 114 |
| 101 private: | 115 private: |
| 102 TilingData::SpiralDifferenceIterator iterator_; | 116 TilingData::SpiralDifferenceIterator iterator_; |
| 117 gfx::Rect pending_visible_rect_; | |
| 103 }; | 118 }; |
| 104 | 119 |
| 105 // Iterates over all of the above phases in the following order: visible, | 120 // Iterates over all of the above phases in the following order: visible, |
| 106 // skewport, soon border, eventually. | 121 // skewport, soon border, eventually. |
| 107 class TilingIterator { | 122 class TilingIterator { |
| 108 public: | 123 public: |
| 109 TilingIterator(); | 124 TilingIterator(); |
| 110 explicit TilingIterator(PictureLayerTiling* tiling, | 125 explicit TilingIterator(PictureLayerTiling* tiling, |
| 111 TilingData* tiling_data); | 126 TilingData* tiling_data); |
| 112 ~TilingIterator() = default; | 127 ~TilingIterator(); |
| 113 | 128 |
| 114 bool done() const { return current_tile_ == nullptr; } | 129 bool done() const { return current_tile_ == nullptr; } |
| 115 const Tile* operator*() const { return current_tile_; } | 130 const Tile* operator*() const { return current_tile_; } |
| 116 Tile* operator*() { return current_tile_; } | 131 Tile* operator*() { return current_tile_; } |
| 117 TilePriority::PriorityBin type() const { | 132 TilePriority::PriorityBin type() const { |
| 118 switch (phase_) { | 133 switch (phase_) { |
| 119 case VISIBLE_RECT: | 134 case VISIBLE_RECT: |
| 120 return TilePriority::NOW; | 135 return TilePriority::NOW; |
| 136 case PENDING_VISIBLE_RECT: | |
| 121 case SKEWPORT_RECT: | 137 case SKEWPORT_RECT: |
| 122 case SOON_BORDER_RECT: | 138 case SOON_BORDER_RECT: |
| 123 return TilePriority::SOON; | 139 return TilePriority::SOON; |
| 124 case EVENTUALLY_RECT: | 140 case EVENTUALLY_RECT: |
| 125 return TilePriority::EVENTUALLY; | 141 return TilePriority::EVENTUALLY; |
| 126 } | 142 } |
| 127 NOTREACHED(); | 143 NOTREACHED(); |
| 128 return TilePriority::EVENTUALLY; | 144 return TilePriority::EVENTUALLY; |
| 129 } | 145 } |
| 130 | 146 |
| 131 TilingIterator& operator++(); | 147 TilingIterator& operator++(); |
| 132 | 148 |
| 133 private: | 149 private: |
| 134 enum Phase { | 150 enum Phase { |
| 135 VISIBLE_RECT, | 151 VISIBLE_RECT, |
|
enne (OOO)
2015/04/02 21:45:34
Should this be ACTIVE_VISIBLE_RECT?
| |
| 152 PENDING_VISIBLE_RECT, | |
|
enne (OOO)
2015/04/02 21:45:34
This is nice!
| |
| 136 SKEWPORT_RECT, | 153 SKEWPORT_RECT, |
| 137 SOON_BORDER_RECT, | 154 SOON_BORDER_RECT, |
| 138 EVENTUALLY_RECT | 155 EVENTUALLY_RECT |
| 139 }; | 156 }; |
| 140 | 157 |
| 141 void AdvancePhase(); | 158 void AdvancePhase(); |
| 142 | 159 |
| 143 PictureLayerTiling* tiling_; | 160 PictureLayerTiling* tiling_; |
| 144 TilingData* tiling_data_; | 161 TilingData* tiling_data_; |
| 145 | 162 |
| 146 Phase phase_; | 163 Phase phase_; |
| 147 | 164 |
| 148 Tile* current_tile_; | 165 Tile* current_tile_; |
| 149 VisibleTilingIterator visible_iterator_; | 166 VisibleTilingIterator visible_iterator_; |
| 167 PendingVisibleTilingIterator pending_visible_iterator_; | |
| 150 SkewportTilingIterator skewport_iterator_; | 168 SkewportTilingIterator skewport_iterator_; |
| 151 SoonBorderTilingIterator soon_border_iterator_; | 169 SoonBorderTilingIterator soon_border_iterator_; |
| 152 EventuallyTilingIterator eventually_iterator_; | 170 EventuallyTilingIterator eventually_iterator_; |
| 153 }; | 171 }; |
| 154 | 172 |
| 155 enum IteratorType { LOW_RES, HIGH_RES, NUM_ITERATORS }; | 173 enum IteratorType { LOW_RES, HIGH_RES, NUM_ITERATORS }; |
| 156 | 174 |
| 157 void AdvanceToNextStage(); | 175 void AdvanceToNextStage(); |
| 158 | 176 |
| 159 PictureLayerTilingSet* tiling_set_; | 177 PictureLayerTilingSet* tiling_set_; |
| 160 | 178 |
| 161 struct IterationStage { | 179 struct IterationStage { |
| 162 IteratorType iterator_type; | 180 IteratorType iterator_type; |
| 163 TilePriority::PriorityBin tile_type; | 181 TilePriority::PriorityBin tile_type; |
| 164 }; | 182 }; |
| 165 | 183 |
| 166 size_t current_stage_; | 184 size_t current_stage_; |
| 167 | 185 |
| 168 // One low res stage, and three high res stages. | 186 // One low res stage, and three high res stages. |
| 169 IterationStage stages_[4]; | 187 IterationStage stages_[4]; |
| 170 TilingIterator iterators_[NUM_ITERATORS]; | 188 TilingIterator iterators_[NUM_ITERATORS]; |
| 171 }; | 189 }; |
| 172 | 190 |
| 173 } // namespace cc | 191 } // namespace cc |
| 174 | 192 |
| 175 #endif // CC_RESOURCES_TILING_SET_RASTER_QUEUE_ALL_H_ | 193 #endif // CC_RESOURCES_TILING_SET_RASTER_QUEUE_ALL_H_ |
| OLD | NEW |