Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(816)

Side by Side Diff: cc/resources/tiling_set_raster_queue_all.cc

Issue 1001833005: Update from https://crrev.com/320343 (Closed) Base URL: git@github.com:domokit/mojo.git@master
Patch Set: Supress Created 5 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « cc/resources/tiling_set_raster_queue_all.h ('k') | cc/resources/video_resource_updater.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 #include "cc/resources/tiling_set_raster_queue_all.h" 5 #include "cc/resources/tiling_set_raster_queue_all.h"
6 6
7 #include <utility> 7 #include <utility>
8 8
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 94 matching lines...) Expand 10 before | Expand all | Expand 10 after
105 while (current_stage_ < arraysize(stages_)) { 105 while (current_stage_ < arraysize(stages_)) {
106 IteratorType index = stages_[current_stage_].iterator_type; 106 IteratorType index = stages_[current_stage_].iterator_type;
107 TilePriority::PriorityBin tile_type = stages_[current_stage_].tile_type; 107 TilePriority::PriorityBin tile_type = stages_[current_stage_].tile_type;
108 108
109 if (!iterators_[index].done() && iterators_[index].type() == tile_type) 109 if (!iterators_[index].done() && iterators_[index].type() == tile_type)
110 break; 110 break;
111 ++current_stage_; 111 ++current_stage_;
112 } 112 }
113 } 113 }
114 114
115 // OnePriorityRectIterator
116 TilingSetRasterQueueAll::OnePriorityRectIterator::OnePriorityRectIterator()
117 : tile_(nullptr), tiling_(nullptr), tiling_data_(nullptr) {
118 }
119
120 TilingSetRasterQueueAll::OnePriorityRectIterator::OnePriorityRectIterator(
121 PictureLayerTiling* tiling,
122 TilingData* tiling_data)
123 : tile_(nullptr), tiling_(tiling), tiling_data_(tiling_data) {
124 }
125
126 template <typename TilingIteratorType>
127 void TilingSetRasterQueueAll::OnePriorityRectIterator::AdvanceToNextTile(
128 TilingIteratorType* iterator) {
129 tile_ = nullptr;
130 while (!tile_ || !TileNeedsRaster(tile_)) {
131 ++(*iterator);
132 if (!(*iterator)) {
133 tile_ = nullptr;
134 return;
135 }
136 tile_ = tiling_->TileAt(iterator->index_x(), iterator->index_y());
137 }
138 tiling_->UpdateTileAndTwinPriority(tile_);
139 }
140
141 template <typename TilingIteratorType>
142 bool TilingSetRasterQueueAll::OnePriorityRectIterator::
143 GetFirstTileAndCheckIfValid(TilingIteratorType* iterator) {
144 tile_ = tiling_->TileAt(iterator->index_x(), iterator->index_y());
145 if (!tile_ || !TileNeedsRaster(tile_)) {
146 tile_ = nullptr;
147 return false;
148 }
149 tiling_->UpdateTileAndTwinPriority(tile_);
150 return true;
151 }
152
153 // VisibleTilingIterator.
154 TilingSetRasterQueueAll::VisibleTilingIterator::VisibleTilingIterator(
155 PictureLayerTiling* tiling,
156 TilingData* tiling_data)
157 : OnePriorityRectIterator(tiling, tiling_data) {
158 if (!tiling_->has_visible_rect_tiles())
159 return;
160 iterator_ =
161 TilingData::Iterator(tiling_data_, tiling_->current_visible_rect(),
162 false /* include_borders */);
163 if (!iterator_)
164 return;
165 if (!GetFirstTileAndCheckIfValid(&iterator_))
166 ++(*this);
167 }
168
169 TilingSetRasterQueueAll::VisibleTilingIterator&
170 TilingSetRasterQueueAll::VisibleTilingIterator::
171 operator++() {
172 AdvanceToNextTile(&iterator_);
173 return *this;
174 }
175
176 // SkewportTilingIterator.
177 TilingSetRasterQueueAll::SkewportTilingIterator::SkewportTilingIterator(
178 PictureLayerTiling* tiling,
179 TilingData* tiling_data)
180 : OnePriorityRectIterator(tiling, tiling_data) {
181 if (!tiling_->has_skewport_rect_tiles())
182 return;
183 iterator_ = TilingData::SpiralDifferenceIterator(
184 tiling_data_, tiling_->current_skewport_rect(),
185 tiling_->current_visible_rect(), tiling_->current_visible_rect());
186 if (!iterator_)
187 return;
188 if (!GetFirstTileAndCheckIfValid(&iterator_))
189 ++(*this);
190 }
191
192 TilingSetRasterQueueAll::SkewportTilingIterator&
193 TilingSetRasterQueueAll::SkewportTilingIterator::
194 operator++() {
195 AdvanceToNextTile(&iterator_);
196 return *this;
197 }
198
199 // SoonBorderTilingIterator.
200 TilingSetRasterQueueAll::SoonBorderTilingIterator::SoonBorderTilingIterator(
201 PictureLayerTiling* tiling,
202 TilingData* tiling_data)
203 : OnePriorityRectIterator(tiling, tiling_data) {
204 if (!tiling_->has_soon_border_rect_tiles())
205 return;
206 iterator_ = TilingData::SpiralDifferenceIterator(
207 tiling_data_, tiling_->current_soon_border_rect(),
208 tiling_->current_skewport_rect(), tiling_->current_visible_rect());
209 if (!iterator_)
210 return;
211 if (!GetFirstTileAndCheckIfValid(&iterator_))
212 ++(*this);
213 }
214
215 TilingSetRasterQueueAll::SoonBorderTilingIterator&
216 TilingSetRasterQueueAll::SoonBorderTilingIterator::
217 operator++() {
218 AdvanceToNextTile(&iterator_);
219 return *this;
220 }
221
222 // EventuallyTilingIterator.
223 TilingSetRasterQueueAll::EventuallyTilingIterator::EventuallyTilingIterator(
224 PictureLayerTiling* tiling,
225 TilingData* tiling_data)
226 : OnePriorityRectIterator(tiling, tiling_data) {
227 if (!tiling_->has_eventually_rect_tiles())
228 return;
229 iterator_ = TilingData::SpiralDifferenceIterator(
230 tiling_data_, tiling_->current_eventually_rect(),
231 tiling_->current_skewport_rect(), tiling_->current_soon_border_rect());
232 if (!iterator_)
233 return;
234 if (!GetFirstTileAndCheckIfValid(&iterator_))
235 ++(*this);
236 }
237
238 TilingSetRasterQueueAll::EventuallyTilingIterator&
239 TilingSetRasterQueueAll::EventuallyTilingIterator::
240 operator++() {
241 AdvanceToNextTile(&iterator_);
242 return *this;
243 }
244
245 // TilingIterator
115 TilingSetRasterQueueAll::TilingIterator::TilingIterator() 246 TilingSetRasterQueueAll::TilingIterator::TilingIterator()
116 : tiling_(NULL), current_tile_(NULL) { 247 : tiling_(NULL), current_tile_(NULL) {
117 } 248 }
118 249
119 TilingSetRasterQueueAll::TilingIterator::TilingIterator( 250 TilingSetRasterQueueAll::TilingIterator::TilingIterator(
120 PictureLayerTiling* tiling, 251 PictureLayerTiling* tiling,
121 TilingData* tiling_data) 252 TilingData* tiling_data)
122 : tiling_(tiling), 253 : tiling_(tiling),
123 tiling_data_(tiling_data), 254 tiling_data_(tiling_data),
124 phase_(VISIBLE_RECT), 255 phase_(VISIBLE_RECT),
125 current_tile_(NULL) { 256 current_tile_(NULL) {
126 if (!tiling_->has_visible_rect_tiles()) { 257 visible_iterator_ = VisibleTilingIterator(tiling_, tiling_data_);
258 if (visible_iterator_.done()) {
127 AdvancePhase(); 259 AdvancePhase();
128 return; 260 return;
129 } 261 }
130 262 current_tile_ = *visible_iterator_;
131 visible_iterator_ =
132 TilingData::Iterator(tiling_data_, tiling_->current_visible_rect(),
133 false /* include_borders */);
134 if (!visible_iterator_) {
135 AdvancePhase();
136 return;
137 }
138
139 current_tile_ =
140 tiling_->TileAt(visible_iterator_.index_x(), visible_iterator_.index_y());
141 if (!current_tile_ || !TileNeedsRaster(current_tile_)) {
142 ++(*this);
143 return;
144 }
145 tiling_->UpdateTileAndTwinPriority(current_tile_);
146 }
147
148 TilingSetRasterQueueAll::TilingIterator::~TilingIterator() {
149 } 263 }
150 264
151 void TilingSetRasterQueueAll::TilingIterator::AdvancePhase() { 265 void TilingSetRasterQueueAll::TilingIterator::AdvancePhase() {
152 DCHECK_LT(phase_, EVENTUALLY_RECT); 266 DCHECK_LT(phase_, EVENTUALLY_RECT);
153 267
154 do { 268 current_tile_ = nullptr;
269 while (!current_tile_ && phase_ < EVENTUALLY_RECT) {
155 phase_ = static_cast<Phase>(phase_ + 1); 270 phase_ = static_cast<Phase>(phase_ + 1);
156 switch (phase_) { 271 switch (phase_) {
157 case VISIBLE_RECT: 272 case VISIBLE_RECT:
158 NOTREACHED(); 273 NOTREACHED();
159 return; 274 return;
160 case SKEWPORT_RECT: 275 case SKEWPORT_RECT:
161 if (!tiling_->has_skewport_rect_tiles()) 276 skewport_iterator_ = SkewportTilingIterator(tiling_, tiling_data_);
162 continue; 277 if (!skewport_iterator_.done())
163 278 current_tile_ = *skewport_iterator_;
164 spiral_iterator_ = TilingData::SpiralDifferenceIterator(
165 tiling_data_, tiling_->current_skewport_rect(),
166 tiling_->current_visible_rect(), tiling_->current_visible_rect());
167 break; 279 break;
168 case SOON_BORDER_RECT: 280 case SOON_BORDER_RECT:
169 if (!tiling_->has_soon_border_rect_tiles()) 281 soon_border_iterator_ = SoonBorderTilingIterator(tiling_, tiling_data_);
170 continue; 282 if (!soon_border_iterator_.done())
171 283 current_tile_ = *soon_border_iterator_;
172 spiral_iterator_ = TilingData::SpiralDifferenceIterator(
173 tiling_data_, tiling_->current_soon_border_rect(),
174 tiling_->current_skewport_rect(), tiling_->current_visible_rect());
175 break; 284 break;
176 case EVENTUALLY_RECT: 285 case EVENTUALLY_RECT:
177 if (!tiling_->has_eventually_rect_tiles()) { 286 eventually_iterator_ = EventuallyTilingIterator(tiling_, tiling_data_);
178 current_tile_ = NULL; 287 if (!eventually_iterator_.done())
179 return; 288 current_tile_ = *eventually_iterator_;
180 }
181
182 spiral_iterator_ = TilingData::SpiralDifferenceIterator(
183 tiling_data_, tiling_->current_eventually_rect(),
184 tiling_->current_skewport_rect(),
185 tiling_->current_soon_border_rect());
186 break; 289 break;
187 } 290 }
188 291 }
189 while (spiral_iterator_) {
190 current_tile_ = tiling_->TileAt(spiral_iterator_.index_x(),
191 spiral_iterator_.index_y());
192 if (current_tile_ && TileNeedsRaster(current_tile_))
193 break;
194 ++spiral_iterator_;
195 }
196
197 if (!spiral_iterator_ && phase_ == EVENTUALLY_RECT) {
198 current_tile_ = NULL;
199 break;
200 }
201 } while (!spiral_iterator_);
202
203 if (current_tile_)
204 tiling_->UpdateTileAndTwinPriority(current_tile_);
205 } 292 }
206 293
207 TilingSetRasterQueueAll::TilingIterator& 294 TilingSetRasterQueueAll::TilingIterator&
208 TilingSetRasterQueueAll::TilingIterator:: 295 TilingSetRasterQueueAll::TilingIterator::
209 operator++() { 296 operator++() {
210 current_tile_ = NULL; 297 switch (phase_) {
211 while (!current_tile_ || !TileNeedsRaster(current_tile_)) { 298 case VISIBLE_RECT:
212 std::pair<int, int> next_index; 299 ++visible_iterator_;
213 switch (phase_) { 300 if (visible_iterator_.done()) {
214 case VISIBLE_RECT: 301 AdvancePhase();
215 ++visible_iterator_; 302 return *this;
216 if (!visible_iterator_) { 303 }
217 AdvancePhase(); 304 current_tile_ = *visible_iterator_;
218 return *this; 305 break;
219 } 306 case SKEWPORT_RECT:
220 next_index = visible_iterator_.index(); 307 ++skewport_iterator_;
221 break; 308 if (skewport_iterator_.done()) {
222 case SKEWPORT_RECT: 309 AdvancePhase();
223 case SOON_BORDER_RECT: 310 return *this;
224 ++spiral_iterator_; 311 }
225 if (!spiral_iterator_) { 312 current_tile_ = *skewport_iterator_;
226 AdvancePhase(); 313 break;
227 return *this; 314 case SOON_BORDER_RECT:
228 } 315 ++soon_border_iterator_;
229 next_index = spiral_iterator_.index(); 316 if (soon_border_iterator_.done()) {
230 break; 317 AdvancePhase();
231 case EVENTUALLY_RECT: 318 return *this;
232 ++spiral_iterator_; 319 }
233 if (!spiral_iterator_) { 320 current_tile_ = *soon_border_iterator_;
234 current_tile_ = NULL; 321 break;
235 return *this; 322 case EVENTUALLY_RECT:
236 } 323 ++eventually_iterator_;
237 next_index = spiral_iterator_.index(); 324 if (eventually_iterator_.done()) {
238 break; 325 current_tile_ = nullptr;
239 } 326 return *this;
240 current_tile_ = tiling_->TileAt(next_index.first, next_index.second); 327 }
241 } 328 current_tile_ = *eventually_iterator_;
242 329 break;
243 if (current_tile_) 330 }
244 tiling_->UpdateTileAndTwinPriority(current_tile_); 331 return *this;
245 return *this; 332 }
246 } 333
247
248 } // namespace cc 334 } // namespace cc
OLDNEW
« no previous file with comments | « cc/resources/tiling_set_raster_queue_all.h ('k') | cc/resources/video_resource_updater.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698