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 |