| 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 |