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: |
| 150 // PENDING VISIBLE RECT refers to the visible rect that will become current |
| 151 // upon activation (ie, the pending tree's visible rect). Tiles in this |
| 152 // region that are not part of the current visible rect are all handled |
| 153 // here. Note that when processing a pending tree, this rect is the same as |
| 154 // the visible rect so no tiles are processed in this case. |
134 enum Phase { | 155 enum Phase { |
135 VISIBLE_RECT, | 156 VISIBLE_RECT, |
| 157 PENDING_VISIBLE_RECT, |
136 SKEWPORT_RECT, | 158 SKEWPORT_RECT, |
137 SOON_BORDER_RECT, | 159 SOON_BORDER_RECT, |
138 EVENTUALLY_RECT | 160 EVENTUALLY_RECT |
139 }; | 161 }; |
140 | 162 |
141 void AdvancePhase(); | 163 void AdvancePhase(); |
142 | 164 |
143 PictureLayerTiling* tiling_; | 165 PictureLayerTiling* tiling_; |
144 TilingData* tiling_data_; | 166 TilingData* tiling_data_; |
145 | 167 |
146 Phase phase_; | 168 Phase phase_; |
147 | 169 |
148 Tile* current_tile_; | 170 Tile* current_tile_; |
149 VisibleTilingIterator visible_iterator_; | 171 VisibleTilingIterator visible_iterator_; |
| 172 PendingVisibleTilingIterator pending_visible_iterator_; |
150 SkewportTilingIterator skewport_iterator_; | 173 SkewportTilingIterator skewport_iterator_; |
151 SoonBorderTilingIterator soon_border_iterator_; | 174 SoonBorderTilingIterator soon_border_iterator_; |
152 EventuallyTilingIterator eventually_iterator_; | 175 EventuallyTilingIterator eventually_iterator_; |
153 }; | 176 }; |
154 | 177 |
155 enum IteratorType { LOW_RES, HIGH_RES, NUM_ITERATORS }; | 178 enum IteratorType { |
| 179 LOW_RES, |
| 180 HIGH_RES, |
| 181 ACTIVE_NON_IDEAL_PENDING_HIGH_RES, |
| 182 NUM_ITERATORS |
| 183 }; |
156 | 184 |
157 void AdvanceToNextStage(); | 185 void AdvanceToNextStage(); |
158 | 186 |
159 PictureLayerTilingSet* tiling_set_; | 187 PictureLayerTilingSet* tiling_set_; |
160 | 188 |
161 struct IterationStage { | 189 struct IterationStage { |
| 190 IterationStage(IteratorType type, TilePriority::PriorityBin bin); |
162 IteratorType iterator_type; | 191 IteratorType iterator_type; |
163 TilePriority::PriorityBin tile_type; | 192 TilePriority::PriorityBin tile_type; |
164 }; | 193 }; |
165 | 194 |
166 size_t current_stage_; | 195 size_t current_stage_; |
167 | 196 |
168 // One low res stage, and three high res stages. | 197 std::vector<IterationStage> stages_; |
169 IterationStage stages_[4]; | |
170 TilingIterator iterators_[NUM_ITERATORS]; | 198 TilingIterator iterators_[NUM_ITERATORS]; |
171 }; | 199 }; |
172 | 200 |
173 } // namespace cc | 201 } // namespace cc |
174 | 202 |
175 #endif // CC_RESOURCES_TILING_SET_RASTER_QUEUE_ALL_H_ | 203 #endif // CC_RESOURCES_TILING_SET_RASTER_QUEUE_ALL_H_ |
OLD | NEW |