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/tiles/tiling_set_raster_queue_all.h" | 5 #include "cc/tiles/tiling_set_raster_queue_all.h" |
6 | 6 |
7 #include <utility> | 7 #include <utility> |
8 | 8 |
9 #include "cc/tiles/picture_layer_tiling_set.h" | 9 #include "cc/tiles/picture_layer_tiling_set.h" |
10 #include "cc/tiles/tile.h" | 10 #include "cc/tiles/tile.h" |
(...skipping 134 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
145 TilingSetRasterQueueAll::OnePriorityRectIterator::OnePriorityRectIterator() | 145 TilingSetRasterQueueAll::OnePriorityRectIterator::OnePriorityRectIterator() |
146 : tiling_(nullptr), tiling_data_(nullptr) { | 146 : tiling_(nullptr), tiling_data_(nullptr) { |
147 } | 147 } |
148 | 148 |
149 TilingSetRasterQueueAll::OnePriorityRectIterator::OnePriorityRectIterator( | 149 TilingSetRasterQueueAll::OnePriorityRectIterator::OnePriorityRectIterator( |
150 PictureLayerTiling* tiling, | 150 PictureLayerTiling* tiling, |
151 TilingData* tiling_data, | 151 TilingData* tiling_data, |
152 PictureLayerTiling::PriorityRectType priority_rect_type) | 152 PictureLayerTiling::PriorityRectType priority_rect_type) |
153 : tiling_(tiling), | 153 : tiling_(tiling), |
154 tiling_data_(tiling_data), | 154 tiling_data_(tiling_data), |
155 priority_rect_type_(priority_rect_type) { | 155 priority_rect_type_(priority_rect_type), |
| 156 pending_visible_rect_(tiling->pending_visible_rect()) { |
156 } | 157 } |
157 | 158 |
158 template <typename TilingIteratorType> | 159 template <typename TilingIteratorType> |
159 void TilingSetRasterQueueAll::OnePriorityRectIterator::AdvanceToNextTile( | 160 void TilingSetRasterQueueAll::OnePriorityRectIterator::AdvanceToNextTile( |
160 TilingIteratorType* iterator) { | 161 TilingIteratorType* iterator) { |
161 for (;;) { | 162 for (;;) { |
162 ++(*iterator); | 163 ++(*iterator); |
163 if (!(*iterator)) { | 164 if (!(*iterator)) { |
164 current_tile_ = PrioritizedTile(); | 165 current_tile_ = PrioritizedTile(); |
165 break; | 166 break; |
(...skipping 21 matching lines...) Expand all Loading... |
187 } | 188 } |
188 | 189 |
189 bool TilingSetRasterQueueAll::OnePriorityRectIterator::IsTileValid( | 190 bool TilingSetRasterQueueAll::OnePriorityRectIterator::IsTileValid( |
190 const Tile* tile) const { | 191 const Tile* tile) const { |
191 if (!tile || !TileNeedsRaster(tile)) | 192 if (!tile || !TileNeedsRaster(tile)) |
192 return false; | 193 return false; |
193 // After the pending visible rect has been processed, we must return false | 194 // After the pending visible rect has been processed, we must return false |
194 // for pending visible rect tiles as tiling iterators do not ignore those | 195 // for pending visible rect tiles as tiling iterators do not ignore those |
195 // tiles. | 196 // tiles. |
196 if (priority_rect_type_ > PictureLayerTiling::PENDING_VISIBLE_RECT && | 197 if (priority_rect_type_ > PictureLayerTiling::PENDING_VISIBLE_RECT && |
197 tiling_->pending_visible_rect().Intersects(tile->content_rect())) { | 198 pending_visible_rect_.Intersects(tile->content_rect())) { |
198 return false; | 199 return false; |
199 } | 200 } |
200 return true; | 201 return true; |
201 } | 202 } |
202 | 203 |
203 // VisibleTilingIterator. | 204 // VisibleTilingIterator. |
204 TilingSetRasterQueueAll::VisibleTilingIterator::VisibleTilingIterator( | 205 TilingSetRasterQueueAll::VisibleTilingIterator::VisibleTilingIterator( |
205 PictureLayerTiling* tiling, | 206 PictureLayerTiling* tiling, |
206 TilingData* tiling_data) | 207 TilingData* tiling_data) |
207 : OnePriorityRectIterator(tiling, | 208 : OnePriorityRectIterator(tiling, |
(...skipping 17 matching lines...) Expand all Loading... |
225 return *this; | 226 return *this; |
226 } | 227 } |
227 | 228 |
228 // PendingVisibleTilingIterator. | 229 // PendingVisibleTilingIterator. |
229 TilingSetRasterQueueAll::PendingVisibleTilingIterator:: | 230 TilingSetRasterQueueAll::PendingVisibleTilingIterator:: |
230 PendingVisibleTilingIterator(PictureLayerTiling* tiling, | 231 PendingVisibleTilingIterator(PictureLayerTiling* tiling, |
231 TilingData* tiling_data) | 232 TilingData* tiling_data) |
232 : OnePriorityRectIterator(tiling, | 233 : OnePriorityRectIterator(tiling, |
233 tiling_data, | 234 tiling_data, |
234 PictureLayerTiling::PENDING_VISIBLE_RECT) { | 235 PictureLayerTiling::PENDING_VISIBLE_RECT) { |
235 iterator_ = TilingData::DifferenceIterator(tiling_data_, | 236 iterator_ = TilingData::DifferenceIterator( |
236 tiling_->pending_visible_rect(), | 237 tiling_data_, pending_visible_rect_, tiling_->current_visible_rect()); |
237 tiling_->current_visible_rect()); | |
238 if (!iterator_) | 238 if (!iterator_) |
239 return; | 239 return; |
240 if (!GetFirstTileAndCheckIfValid(&iterator_)) | 240 if (!GetFirstTileAndCheckIfValid(&iterator_)) |
241 ++(*this); | 241 ++(*this); |
242 } | 242 } |
243 | 243 |
244 TilingSetRasterQueueAll::PendingVisibleTilingIterator& | 244 TilingSetRasterQueueAll::PendingVisibleTilingIterator& |
245 TilingSetRasterQueueAll::PendingVisibleTilingIterator:: | 245 TilingSetRasterQueueAll::PendingVisibleTilingIterator:: |
246 operator++() { | 246 operator++() { |
247 AdvanceToNextTile(&iterator_); | 247 AdvanceToNextTile(&iterator_); |
248 return *this; | 248 return *this; |
249 } | 249 } |
250 | 250 |
251 // SkewportTilingIterator. | 251 // SkewportTilingIterator. |
252 TilingSetRasterQueueAll::SkewportTilingIterator::SkewportTilingIterator( | 252 TilingSetRasterQueueAll::SkewportTilingIterator::SkewportTilingIterator( |
253 PictureLayerTiling* tiling, | 253 PictureLayerTiling* tiling, |
254 TilingData* tiling_data) | 254 TilingData* tiling_data) |
255 : OnePriorityRectIterator(tiling, | 255 : OnePriorityRectIterator(tiling, |
256 tiling_data, | 256 tiling_data, |
257 PictureLayerTiling::SKEWPORT_RECT), | 257 PictureLayerTiling::SKEWPORT_RECT) { |
258 pending_visible_rect_(tiling->pending_visible_rect()) { | |
259 if (!tiling_->has_skewport_rect_tiles()) | 258 if (!tiling_->has_skewport_rect_tiles()) |
260 return; | 259 return; |
261 iterator_ = TilingData::SpiralDifferenceIterator( | 260 iterator_ = TilingData::SpiralDifferenceIterator( |
262 tiling_data_, tiling_->current_skewport_rect(), | 261 tiling_data_, tiling_->current_skewport_rect(), |
263 tiling_->current_visible_rect(), tiling_->current_visible_rect()); | 262 tiling_->current_visible_rect(), tiling_->current_visible_rect()); |
264 if (!iterator_) | 263 if (!iterator_) |
265 return; | 264 return; |
266 if (!GetFirstTileAndCheckIfValid(&iterator_)) { | 265 if (!GetFirstTileAndCheckIfValid(&iterator_)) { |
267 ++(*this); | 266 ++(*this); |
268 return; | 267 return; |
269 } | 268 } |
270 // TODO(e_hakkinen): This is not needed as GetFirstTileAndCheckIfValid | |
271 // does the same checking. | |
272 if (current_tile_.tile()->content_rect().Intersects(pending_visible_rect_)) | |
273 ++(*this); | |
274 } | 269 } |
275 | 270 |
276 TilingSetRasterQueueAll::SkewportTilingIterator& | 271 TilingSetRasterQueueAll::SkewportTilingIterator& |
277 TilingSetRasterQueueAll::SkewportTilingIterator:: | 272 TilingSetRasterQueueAll::SkewportTilingIterator:: |
278 operator++() { | 273 operator++() { |
279 AdvanceToNextTile(&iterator_); | 274 AdvanceToNextTile(&iterator_); |
280 // TODO(e_hakkinen): This is not needed as GetFirstTileAndCheckIfValid called | |
281 // by AdvanceToNextTile does the same checking. | |
282 while (!done()) { | |
283 if (!current_tile_.tile()->content_rect().Intersects(pending_visible_rect_)) | |
284 break; | |
285 AdvanceToNextTile(&iterator_); | |
286 } | |
287 return *this; | 275 return *this; |
288 } | 276 } |
289 | 277 |
290 // SoonBorderTilingIterator. | 278 // SoonBorderTilingIterator. |
291 TilingSetRasterQueueAll::SoonBorderTilingIterator::SoonBorderTilingIterator( | 279 TilingSetRasterQueueAll::SoonBorderTilingIterator::SoonBorderTilingIterator( |
292 PictureLayerTiling* tiling, | 280 PictureLayerTiling* tiling, |
293 TilingData* tiling_data) | 281 TilingData* tiling_data) |
294 : OnePriorityRectIterator(tiling, | 282 : OnePriorityRectIterator(tiling, |
295 tiling_data, | 283 tiling_data, |
296 PictureLayerTiling::SOON_BORDER_RECT), | 284 PictureLayerTiling::SOON_BORDER_RECT) { |
297 pending_visible_rect_(tiling->pending_visible_rect()) { | |
298 if (!tiling_->has_soon_border_rect_tiles()) | 285 if (!tiling_->has_soon_border_rect_tiles()) |
299 return; | 286 return; |
300 iterator_ = TilingData::SpiralDifferenceIterator( | 287 iterator_ = TilingData::SpiralDifferenceIterator( |
301 tiling_data_, tiling_->current_soon_border_rect(), | 288 tiling_data_, tiling_->current_soon_border_rect(), |
302 tiling_->current_skewport_rect(), tiling_->current_visible_rect()); | 289 tiling_->current_skewport_rect(), tiling_->current_visible_rect()); |
303 if (!iterator_) | 290 if (!iterator_) |
304 return; | 291 return; |
305 if (!GetFirstTileAndCheckIfValid(&iterator_)) { | 292 if (!GetFirstTileAndCheckIfValid(&iterator_)) { |
306 ++(*this); | 293 ++(*this); |
307 return; | 294 return; |
308 } | 295 } |
309 // TODO(e_hakkinen): This is not needed as GetFirstTileAndCheckIfValid | |
310 // does the same checking. | |
311 if (current_tile_.tile()->content_rect().Intersects(pending_visible_rect_)) | |
312 ++(*this); | |
313 } | 296 } |
314 | 297 |
315 TilingSetRasterQueueAll::SoonBorderTilingIterator& | 298 TilingSetRasterQueueAll::SoonBorderTilingIterator& |
316 TilingSetRasterQueueAll::SoonBorderTilingIterator:: | 299 TilingSetRasterQueueAll::SoonBorderTilingIterator:: |
317 operator++() { | 300 operator++() { |
318 AdvanceToNextTile(&iterator_); | 301 AdvanceToNextTile(&iterator_); |
319 // TODO(e_hakkinen): This is not needed as GetFirstTileAndCheckIfValid called | |
320 // by AdvanceToNextTile does the same checking. | |
321 while (!done()) { | |
322 if (!current_tile_.tile()->content_rect().Intersects(pending_visible_rect_)) | |
323 break; | |
324 AdvanceToNextTile(&iterator_); | |
325 } | |
326 return *this; | 302 return *this; |
327 } | 303 } |
328 | 304 |
329 // EventuallyTilingIterator. | 305 // EventuallyTilingIterator. |
330 TilingSetRasterQueueAll::EventuallyTilingIterator::EventuallyTilingIterator( | 306 TilingSetRasterQueueAll::EventuallyTilingIterator::EventuallyTilingIterator( |
331 PictureLayerTiling* tiling, | 307 PictureLayerTiling* tiling, |
332 TilingData* tiling_data) | 308 TilingData* tiling_data) |
333 : OnePriorityRectIterator(tiling, | 309 : OnePriorityRectIterator(tiling, |
334 tiling_data, | 310 tiling_data, |
335 PictureLayerTiling::EVENTUALLY_RECT), | 311 PictureLayerTiling::EVENTUALLY_RECT) { |
336 pending_visible_rect_(tiling->pending_visible_rect()) { | |
337 if (!tiling_->has_eventually_rect_tiles()) | 312 if (!tiling_->has_eventually_rect_tiles()) |
338 return; | 313 return; |
339 iterator_ = TilingData::SpiralDifferenceIterator( | 314 iterator_ = TilingData::SpiralDifferenceIterator( |
340 tiling_data_, tiling_->current_eventually_rect(), | 315 tiling_data_, tiling_->current_eventually_rect(), |
341 tiling_->current_skewport_rect(), tiling_->current_soon_border_rect()); | 316 tiling_->current_skewport_rect(), tiling_->current_soon_border_rect()); |
342 if (!iterator_) | 317 if (!iterator_) |
343 return; | 318 return; |
344 if (!GetFirstTileAndCheckIfValid(&iterator_)) { | 319 if (!GetFirstTileAndCheckIfValid(&iterator_)) { |
345 ++(*this); | 320 ++(*this); |
346 return; | 321 return; |
347 } | 322 } |
348 // TODO(e_hakkinen): This is not needed as GetFirstTileAndCheckIfValid | |
349 // does the same checking. | |
350 if (current_tile_.tile()->content_rect().Intersects(pending_visible_rect_)) | |
351 ++(*this); | |
352 } | 323 } |
353 | 324 |
354 TilingSetRasterQueueAll::EventuallyTilingIterator& | 325 TilingSetRasterQueueAll::EventuallyTilingIterator& |
355 TilingSetRasterQueueAll::EventuallyTilingIterator:: | 326 TilingSetRasterQueueAll::EventuallyTilingIterator:: |
356 operator++() { | 327 operator++() { |
357 AdvanceToNextTile(&iterator_); | 328 AdvanceToNextTile(&iterator_); |
358 // TODO(e_hakkinen): This is not needed as GetFirstTileAndCheckIfValid called | |
359 // by AdvanceToNextTile does the same checking. | |
360 while (!done()) { | |
361 if (!current_tile_.tile()->content_rect().Intersects(pending_visible_rect_)) | |
362 break; | |
363 AdvanceToNextTile(&iterator_); | |
364 } | |
365 return *this; | 329 return *this; |
366 } | 330 } |
367 | 331 |
368 // TilingIterator | 332 // TilingIterator |
369 TilingSetRasterQueueAll::TilingIterator::TilingIterator() : tiling_(nullptr) { | 333 TilingSetRasterQueueAll::TilingIterator::TilingIterator() : tiling_(nullptr) { |
370 } | 334 } |
371 | 335 |
372 TilingSetRasterQueueAll::TilingIterator::TilingIterator( | 336 TilingSetRasterQueueAll::TilingIterator::TilingIterator( |
373 PictureLayerTiling* tiling, | 337 PictureLayerTiling* tiling, |
374 TilingData* tiling_data) | 338 TilingData* tiling_data) |
(...skipping 86 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
461 current_tile_ = PrioritizedTile(); | 425 current_tile_ = PrioritizedTile(); |
462 return *this; | 426 return *this; |
463 } | 427 } |
464 current_tile_ = *eventually_iterator_; | 428 current_tile_ = *eventually_iterator_; |
465 break; | 429 break; |
466 } | 430 } |
467 return *this; | 431 return *this; |
468 } | 432 } |
469 | 433 |
470 } // namespace cc | 434 } // namespace cc |
OLD | NEW |