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 #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 155 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
166 ++(*this); | 166 ++(*this); |
167 } | 167 } |
168 | 168 |
169 TilingSetRasterQueueAll::VisibleTilingIterator& | 169 TilingSetRasterQueueAll::VisibleTilingIterator& |
170 TilingSetRasterQueueAll::VisibleTilingIterator:: | 170 TilingSetRasterQueueAll::VisibleTilingIterator:: |
171 operator++() { | 171 operator++() { |
172 AdvanceToNextTile(&iterator_); | 172 AdvanceToNextTile(&iterator_); |
173 return *this; | 173 return *this; |
174 } | 174 } |
175 | 175 |
176 // PendingVisibleTilingIterator. | |
177 TilingSetRasterQueueAll::PendingVisibleTilingIterator:: | |
178 PendingVisibleTilingIterator(PictureLayerTiling* tiling, | |
179 TilingData* tiling_data) | |
180 : OnePriorityRectIterator(tiling, tiling_data) { | |
181 iterator_ = TilingData::DifferenceIterator(tiling_data_, | |
182 tiling_->pending_visible_rect(), | |
enne (OOO)
2015/04/09 17:54:24
This is still a little brain-breaking to me. Pend
vmpstr
2015/04/10 20:25:14
Yep. The way I am meaning to write this is that a
enne (OOO)
2015/04/10 21:16:28
My concern is kind of both? Maybe a comment here o
vmpstr
2015/04/10 22:24:29
I've added a comment (next to the enum in the head
| |
183 tiling_->current_visible_rect()); | |
184 if (!iterator_) | |
185 return; | |
186 if (!GetFirstTileAndCheckIfValid(&iterator_)) | |
187 ++(*this); | |
188 } | |
189 | |
190 TilingSetRasterQueueAll::PendingVisibleTilingIterator& | |
191 TilingSetRasterQueueAll::PendingVisibleTilingIterator:: | |
192 operator++() { | |
193 AdvanceToNextTile(&iterator_); | |
194 return *this; | |
195 } | |
196 | |
176 // SkewportTilingIterator. | 197 // SkewportTilingIterator. |
177 TilingSetRasterQueueAll::SkewportTilingIterator::SkewportTilingIterator( | 198 TilingSetRasterQueueAll::SkewportTilingIterator::SkewportTilingIterator( |
178 PictureLayerTiling* tiling, | 199 PictureLayerTiling* tiling, |
179 TilingData* tiling_data) | 200 TilingData* tiling_data) |
180 : OnePriorityRectIterator(tiling, tiling_data) { | 201 : OnePriorityRectIterator(tiling, tiling_data), |
202 pending_visible_rect_(tiling->pending_visible_rect()) { | |
181 if (!tiling_->has_skewport_rect_tiles()) | 203 if (!tiling_->has_skewport_rect_tiles()) |
182 return; | 204 return; |
183 iterator_ = TilingData::SpiralDifferenceIterator( | 205 iterator_ = TilingData::SpiralDifferenceIterator( |
184 tiling_data_, tiling_->current_skewport_rect(), | 206 tiling_data_, tiling_->current_skewport_rect(), |
185 tiling_->current_visible_rect(), tiling_->current_visible_rect()); | 207 tiling_->current_visible_rect(), tiling_->current_visible_rect()); |
186 if (!iterator_) | 208 if (!iterator_) |
187 return; | 209 return; |
188 if (!GetFirstTileAndCheckIfValid(&iterator_)) | 210 if (!GetFirstTileAndCheckIfValid(&iterator_)) { |
211 ++(*this); | |
212 return; | |
213 } | |
214 if (tile_->content_rect().Intersects(pending_visible_rect_)) | |
189 ++(*this); | 215 ++(*this); |
190 } | 216 } |
191 | 217 |
192 TilingSetRasterQueueAll::SkewportTilingIterator& | 218 TilingSetRasterQueueAll::SkewportTilingIterator& |
193 TilingSetRasterQueueAll::SkewportTilingIterator:: | 219 TilingSetRasterQueueAll::SkewportTilingIterator:: |
194 operator++() { | 220 operator++() { |
195 AdvanceToNextTile(&iterator_); | 221 AdvanceToNextTile(&iterator_); |
222 while (!done()) { | |
223 if (!tile_->content_rect().Intersects(pending_visible_rect_)) | |
224 break; | |
225 AdvanceToNextTile(&iterator_); | |
226 } | |
196 return *this; | 227 return *this; |
197 } | 228 } |
198 | 229 |
199 // SoonBorderTilingIterator. | 230 // SoonBorderTilingIterator. |
200 TilingSetRasterQueueAll::SoonBorderTilingIterator::SoonBorderTilingIterator( | 231 TilingSetRasterQueueAll::SoonBorderTilingIterator::SoonBorderTilingIterator( |
201 PictureLayerTiling* tiling, | 232 PictureLayerTiling* tiling, |
202 TilingData* tiling_data) | 233 TilingData* tiling_data) |
203 : OnePriorityRectIterator(tiling, tiling_data) { | 234 : OnePriorityRectIterator(tiling, tiling_data), |
235 pending_visible_rect_(tiling->pending_visible_rect()) { | |
204 if (!tiling_->has_soon_border_rect_tiles()) | 236 if (!tiling_->has_soon_border_rect_tiles()) |
205 return; | 237 return; |
206 iterator_ = TilingData::SpiralDifferenceIterator( | 238 iterator_ = TilingData::SpiralDifferenceIterator( |
207 tiling_data_, tiling_->current_soon_border_rect(), | 239 tiling_data_, tiling_->current_soon_border_rect(), |
208 tiling_->current_skewport_rect(), tiling_->current_visible_rect()); | 240 tiling_->current_skewport_rect(), tiling_->current_visible_rect()); |
209 if (!iterator_) | 241 if (!iterator_) |
210 return; | 242 return; |
211 if (!GetFirstTileAndCheckIfValid(&iterator_)) | 243 if (!GetFirstTileAndCheckIfValid(&iterator_)) { |
244 ++(*this); | |
245 return; | |
246 } | |
247 if (tile_->content_rect().Intersects(pending_visible_rect_)) | |
212 ++(*this); | 248 ++(*this); |
213 } | 249 } |
214 | 250 |
215 TilingSetRasterQueueAll::SoonBorderTilingIterator& | 251 TilingSetRasterQueueAll::SoonBorderTilingIterator& |
216 TilingSetRasterQueueAll::SoonBorderTilingIterator:: | 252 TilingSetRasterQueueAll::SoonBorderTilingIterator:: |
217 operator++() { | 253 operator++() { |
218 AdvanceToNextTile(&iterator_); | 254 AdvanceToNextTile(&iterator_); |
255 while (!done()) { | |
256 if (!tile_->content_rect().Intersects(pending_visible_rect_)) | |
257 break; | |
258 AdvanceToNextTile(&iterator_); | |
259 } | |
219 return *this; | 260 return *this; |
220 } | 261 } |
221 | 262 |
222 // EventuallyTilingIterator. | 263 // EventuallyTilingIterator. |
223 TilingSetRasterQueueAll::EventuallyTilingIterator::EventuallyTilingIterator( | 264 TilingSetRasterQueueAll::EventuallyTilingIterator::EventuallyTilingIterator( |
224 PictureLayerTiling* tiling, | 265 PictureLayerTiling* tiling, |
225 TilingData* tiling_data) | 266 TilingData* tiling_data) |
226 : OnePriorityRectIterator(tiling, tiling_data) { | 267 : OnePriorityRectIterator(tiling, tiling_data), |
268 pending_visible_rect_(tiling->pending_visible_rect()) { | |
227 if (!tiling_->has_eventually_rect_tiles()) | 269 if (!tiling_->has_eventually_rect_tiles()) |
228 return; | 270 return; |
229 iterator_ = TilingData::SpiralDifferenceIterator( | 271 iterator_ = TilingData::SpiralDifferenceIterator( |
230 tiling_data_, tiling_->current_eventually_rect(), | 272 tiling_data_, tiling_->current_eventually_rect(), |
231 tiling_->current_skewport_rect(), tiling_->current_soon_border_rect()); | 273 tiling_->current_skewport_rect(), tiling_->current_soon_border_rect()); |
232 if (!iterator_) | 274 if (!iterator_) |
233 return; | 275 return; |
234 if (!GetFirstTileAndCheckIfValid(&iterator_)) | 276 if (!GetFirstTileAndCheckIfValid(&iterator_)) { |
277 ++(*this); | |
278 return; | |
279 } | |
280 if (tile_->content_rect().Intersects(pending_visible_rect_)) | |
235 ++(*this); | 281 ++(*this); |
236 } | 282 } |
237 | 283 |
238 TilingSetRasterQueueAll::EventuallyTilingIterator& | 284 TilingSetRasterQueueAll::EventuallyTilingIterator& |
239 TilingSetRasterQueueAll::EventuallyTilingIterator:: | 285 TilingSetRasterQueueAll::EventuallyTilingIterator:: |
240 operator++() { | 286 operator++() { |
241 AdvanceToNextTile(&iterator_); | 287 AdvanceToNextTile(&iterator_); |
288 while (!done()) { | |
289 if (!tile_->content_rect().Intersects(pending_visible_rect_)) | |
290 break; | |
291 AdvanceToNextTile(&iterator_); | |
292 } | |
242 return *this; | 293 return *this; |
243 } | 294 } |
244 | 295 |
245 // TilingIterator | 296 // TilingIterator |
246 TilingSetRasterQueueAll::TilingIterator::TilingIterator() | 297 TilingSetRasterQueueAll::TilingIterator::TilingIterator() |
247 : tiling_(NULL), current_tile_(NULL) { | 298 : tiling_(NULL), current_tile_(NULL) { |
248 } | 299 } |
249 | 300 |
250 TilingSetRasterQueueAll::TilingIterator::TilingIterator( | 301 TilingSetRasterQueueAll::TilingIterator::TilingIterator( |
251 PictureLayerTiling* tiling, | 302 PictureLayerTiling* tiling, |
252 TilingData* tiling_data) | 303 TilingData* tiling_data) |
253 : tiling_(tiling), | 304 : tiling_(tiling), |
254 tiling_data_(tiling_data), | 305 tiling_data_(tiling_data), |
255 phase_(VISIBLE_RECT), | 306 phase_(VISIBLE_RECT), |
256 current_tile_(NULL) { | 307 current_tile_(NULL) { |
257 visible_iterator_ = VisibleTilingIterator(tiling_, tiling_data_); | 308 visible_iterator_ = VisibleTilingIterator(tiling_, tiling_data_); |
258 if (visible_iterator_.done()) { | 309 if (visible_iterator_.done()) { |
259 AdvancePhase(); | 310 AdvancePhase(); |
260 return; | 311 return; |
261 } | 312 } |
262 current_tile_ = *visible_iterator_; | 313 current_tile_ = *visible_iterator_; |
263 } | 314 } |
264 | 315 |
316 TilingSetRasterQueueAll::TilingIterator::~TilingIterator() { | |
317 } | |
318 | |
265 void TilingSetRasterQueueAll::TilingIterator::AdvancePhase() { | 319 void TilingSetRasterQueueAll::TilingIterator::AdvancePhase() { |
266 DCHECK_LT(phase_, EVENTUALLY_RECT); | 320 DCHECK_LT(phase_, EVENTUALLY_RECT); |
267 | 321 |
268 current_tile_ = nullptr; | 322 current_tile_ = nullptr; |
269 while (!current_tile_ && phase_ < EVENTUALLY_RECT) { | 323 while (!current_tile_ && phase_ < EVENTUALLY_RECT) { |
270 phase_ = static_cast<Phase>(phase_ + 1); | 324 phase_ = static_cast<Phase>(phase_ + 1); |
271 switch (phase_) { | 325 switch (phase_) { |
272 case VISIBLE_RECT: | 326 case VISIBLE_RECT: |
273 NOTREACHED(); | 327 NOTREACHED(); |
274 return; | 328 return; |
329 case PENDING_VISIBLE_RECT: | |
330 pending_visible_iterator_ = | |
331 PendingVisibleTilingIterator(tiling_, tiling_data_); | |
332 if (!pending_visible_iterator_.done()) | |
333 current_tile_ = *pending_visible_iterator_; | |
334 break; | |
275 case SKEWPORT_RECT: | 335 case SKEWPORT_RECT: |
276 skewport_iterator_ = SkewportTilingIterator(tiling_, tiling_data_); | 336 skewport_iterator_ = SkewportTilingIterator(tiling_, tiling_data_); |
277 if (!skewport_iterator_.done()) | 337 if (!skewport_iterator_.done()) |
278 current_tile_ = *skewport_iterator_; | 338 current_tile_ = *skewport_iterator_; |
279 break; | 339 break; |
280 case SOON_BORDER_RECT: | 340 case SOON_BORDER_RECT: |
281 soon_border_iterator_ = SoonBorderTilingIterator(tiling_, tiling_data_); | 341 soon_border_iterator_ = SoonBorderTilingIterator(tiling_, tiling_data_); |
282 if (!soon_border_iterator_.done()) | 342 if (!soon_border_iterator_.done()) |
283 current_tile_ = *soon_border_iterator_; | 343 current_tile_ = *soon_border_iterator_; |
284 break; | 344 break; |
(...skipping 11 matching lines...) Expand all Loading... | |
296 operator++() { | 356 operator++() { |
297 switch (phase_) { | 357 switch (phase_) { |
298 case VISIBLE_RECT: | 358 case VISIBLE_RECT: |
299 ++visible_iterator_; | 359 ++visible_iterator_; |
300 if (visible_iterator_.done()) { | 360 if (visible_iterator_.done()) { |
301 AdvancePhase(); | 361 AdvancePhase(); |
302 return *this; | 362 return *this; |
303 } | 363 } |
304 current_tile_ = *visible_iterator_; | 364 current_tile_ = *visible_iterator_; |
305 break; | 365 break; |
366 case PENDING_VISIBLE_RECT: | |
367 ++pending_visible_iterator_; | |
368 if (pending_visible_iterator_.done()) { | |
369 AdvancePhase(); | |
370 return *this; | |
371 } | |
372 current_tile_ = *pending_visible_iterator_; | |
373 break; | |
306 case SKEWPORT_RECT: | 374 case SKEWPORT_RECT: |
307 ++skewport_iterator_; | 375 ++skewport_iterator_; |
308 if (skewport_iterator_.done()) { | 376 if (skewport_iterator_.done()) { |
309 AdvancePhase(); | 377 AdvancePhase(); |
310 return *this; | 378 return *this; |
311 } | 379 } |
312 current_tile_ = *skewport_iterator_; | 380 current_tile_ = *skewport_iterator_; |
313 break; | 381 break; |
314 case SOON_BORDER_RECT: | 382 case SOON_BORDER_RECT: |
315 ++soon_border_iterator_; | 383 ++soon_border_iterator_; |
316 if (soon_border_iterator_.done()) { | 384 if (soon_border_iterator_.done()) { |
317 AdvancePhase(); | 385 AdvancePhase(); |
318 return *this; | 386 return *this; |
319 } | 387 } |
320 current_tile_ = *soon_border_iterator_; | 388 current_tile_ = *soon_border_iterator_; |
321 break; | 389 break; |
322 case EVENTUALLY_RECT: | 390 case EVENTUALLY_RECT: |
323 ++eventually_iterator_; | 391 ++eventually_iterator_; |
324 if (eventually_iterator_.done()) { | 392 if (eventually_iterator_.done()) { |
325 current_tile_ = nullptr; | 393 current_tile_ = nullptr; |
326 return *this; | 394 return *this; |
327 } | 395 } |
328 current_tile_ = *eventually_iterator_; | 396 current_tile_ = *eventually_iterator_; |
329 break; | 397 break; |
330 } | 398 } |
331 return *this; | 399 return *this; |
332 } | 400 } |
333 | 401 |
334 } // namespace cc | 402 } // namespace cc |
OLD | NEW |