| 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 <stddef.h> | 5 #include <stddef.h> |
| 6 | 6 |
| 7 #include <utility> | 7 #include <utility> |
| 8 | 8 |
| 9 #include "cc/tiles/tiling_set_eviction_queue.h" | 9 #include "cc/tiles/tiling_set_eviction_queue.h" |
| 10 | 10 |
| (...skipping 236 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 247 // Find the first tiling with a tile. | 247 // Find the first tiling with a tile. |
| 248 while (tiling_index_ < tilings_->size()) { | 248 while (tiling_index_ < tilings_->size()) { |
| 249 if (!(*tilings_)[tiling_index_]->has_eventually_rect_tiles()) { | 249 if (!(*tilings_)[tiling_index_]->has_eventually_rect_tiles()) { |
| 250 ++tiling_index_; | 250 ++tiling_index_; |
| 251 continue; | 251 continue; |
| 252 } | 252 } |
| 253 iterator_ = TilingData::ReverseSpiralDifferenceIterator( | 253 iterator_ = TilingData::ReverseSpiralDifferenceIterator( |
| 254 (*tilings_)[tiling_index_]->tiling_data(), | 254 (*tilings_)[tiling_index_]->tiling_data(), |
| 255 (*tilings_)[tiling_index_]->current_eventually_rect(), | 255 (*tilings_)[tiling_index_]->current_eventually_rect(), |
| 256 (*tilings_)[tiling_index_]->current_skewport_rect(), | 256 (*tilings_)[tiling_index_]->current_skewport_rect(), |
| 257 (*tilings_)[tiling_index_]->current_soon_border_rect()); | 257 (*tilings_)[tiling_index_]->current_soon_border_rect(), |
| 258 TilingData::IsPyramidSequenceEnabled()); |
| 258 if (!iterator_) { | 259 if (!iterator_) { |
| 259 ++tiling_index_; | 260 ++tiling_index_; |
| 260 continue; | 261 continue; |
| 261 } | 262 } |
| 262 break; | 263 break; |
| 263 } | 264 } |
| 264 if (tiling_index_ >= tilings_->size()) | 265 if (tiling_index_ >= tilings_->size()) |
| 265 return; | 266 return; |
| 266 if (!GetFirstTileAndCheckIfValid(&iterator_)) | 267 if (!GetFirstTileAndCheckIfValid(&iterator_)) |
| 267 ++(*this); | 268 ++(*this); |
| 268 } | 269 } |
| 269 | 270 |
| 270 TilingSetEvictionQueue::EventuallyTilingIterator& | 271 TilingSetEvictionQueue::EventuallyTilingIterator& |
| 271 TilingSetEvictionQueue::EventuallyTilingIterator:: | 272 TilingSetEvictionQueue::EventuallyTilingIterator:: |
| 272 operator++() { | 273 operator++() { |
| 273 bool found_tile = AdvanceToNextTile(&iterator_); | 274 bool found_tile = AdvanceToNextTile(&iterator_); |
| 274 while (!found_tile && (tiling_index_ + 1) < tilings_->size()) { | 275 while (!found_tile && (tiling_index_ + 1) < tilings_->size()) { |
| 275 ++tiling_index_; | 276 ++tiling_index_; |
| 276 if (!(*tilings_)[tiling_index_]->has_eventually_rect_tiles()) | 277 if (!(*tilings_)[tiling_index_]->has_eventually_rect_tiles()) |
| 277 continue; | 278 continue; |
| 278 iterator_ = TilingData::ReverseSpiralDifferenceIterator( | 279 iterator_ = TilingData::ReverseSpiralDifferenceIterator( |
| 279 (*tilings_)[tiling_index_]->tiling_data(), | 280 (*tilings_)[tiling_index_]->tiling_data(), |
| 280 (*tilings_)[tiling_index_]->current_eventually_rect(), | 281 (*tilings_)[tiling_index_]->current_eventually_rect(), |
| 281 (*tilings_)[tiling_index_]->current_skewport_rect(), | 282 (*tilings_)[tiling_index_]->current_skewport_rect(), |
| 282 (*tilings_)[tiling_index_]->current_soon_border_rect()); | 283 (*tilings_)[tiling_index_]->current_soon_border_rect(), |
| 284 TilingData::IsPyramidSequenceEnabled()); |
| 283 if (!iterator_) | 285 if (!iterator_) |
| 284 continue; | 286 continue; |
| 285 found_tile = GetFirstTileAndCheckIfValid(&iterator_); | 287 found_tile = GetFirstTileAndCheckIfValid(&iterator_); |
| 286 if (!found_tile) | 288 if (!found_tile) |
| 287 found_tile = AdvanceToNextTile(&iterator_); | 289 found_tile = AdvanceToNextTile(&iterator_); |
| 288 } | 290 } |
| 289 return *this; | 291 return *this; |
| 290 } | 292 } |
| 291 | 293 |
| 292 // SoonBorderTilingIterator | 294 // SoonBorderTilingIterator |
| 293 TilingSetEvictionQueue::SoonBorderTilingIterator::SoonBorderTilingIterator( | 295 TilingSetEvictionQueue::SoonBorderTilingIterator::SoonBorderTilingIterator( |
| 294 std::vector<PictureLayerTiling*>* tilings, | 296 std::vector<PictureLayerTiling*>* tilings, |
| 295 WhichTree tree) | 297 WhichTree tree) |
| 296 : EvictionRectIterator(tilings, | 298 : EvictionRectIterator(tilings, |
| 297 tree, | 299 tree, |
| 298 PictureLayerTiling::SOON_BORDER_RECT) { | 300 PictureLayerTiling::SOON_BORDER_RECT) { |
| 299 // Find the first tiling with a tile. | 301 // Find the first tiling with a tile. |
| 300 while (tiling_index_ < tilings_->size()) { | 302 while (tiling_index_ < tilings_->size()) { |
| 301 if (!(*tilings_)[tiling_index_]->has_soon_border_rect_tiles()) { | 303 if (!(*tilings_)[tiling_index_]->has_soon_border_rect_tiles()) { |
| 302 ++tiling_index_; | 304 ++tiling_index_; |
| 303 continue; | 305 continue; |
| 304 } | 306 } |
| 305 iterator_ = TilingData::ReverseSpiralDifferenceIterator( | 307 iterator_ = TilingData::ReverseSpiralDifferenceIterator( |
| 306 (*tilings_)[tiling_index_]->tiling_data(), | 308 (*tilings_)[tiling_index_]->tiling_data(), |
| 307 (*tilings_)[tiling_index_]->current_soon_border_rect(), | 309 (*tilings_)[tiling_index_]->current_soon_border_rect(), |
| 308 (*tilings_)[tiling_index_]->current_skewport_rect(), | 310 (*tilings_)[tiling_index_]->current_skewport_rect(), |
| 309 (*tilings_)[tiling_index_]->current_visible_rect()); | 311 (*tilings_)[tiling_index_]->current_visible_rect(), |
| 312 TilingData::IsPyramidSequenceEnabled()); |
| 310 if (!iterator_) { | 313 if (!iterator_) { |
| 311 ++tiling_index_; | 314 ++tiling_index_; |
| 312 continue; | 315 continue; |
| 313 } | 316 } |
| 314 break; | 317 break; |
| 315 } | 318 } |
| 316 if (tiling_index_ >= tilings_->size()) | 319 if (tiling_index_ >= tilings_->size()) |
| 317 return; | 320 return; |
| 318 if (!GetFirstTileAndCheckIfValid(&iterator_)) | 321 if (!GetFirstTileAndCheckIfValid(&iterator_)) |
| 319 ++(*this); | 322 ++(*this); |
| 320 } | 323 } |
| 321 | 324 |
| 322 TilingSetEvictionQueue::SoonBorderTilingIterator& | 325 TilingSetEvictionQueue::SoonBorderTilingIterator& |
| 323 TilingSetEvictionQueue::SoonBorderTilingIterator:: | 326 TilingSetEvictionQueue::SoonBorderTilingIterator:: |
| 324 operator++() { | 327 operator++() { |
| 325 bool found_tile = AdvanceToNextTile(&iterator_); | 328 bool found_tile = AdvanceToNextTile(&iterator_); |
| 326 while (!found_tile && (tiling_index_ + 1) < tilings_->size()) { | 329 while (!found_tile && (tiling_index_ + 1) < tilings_->size()) { |
| 327 ++tiling_index_; | 330 ++tiling_index_; |
| 328 if (!(*tilings_)[tiling_index_]->has_soon_border_rect_tiles()) | 331 if (!(*tilings_)[tiling_index_]->has_soon_border_rect_tiles()) |
| 329 continue; | 332 continue; |
| 330 iterator_ = TilingData::ReverseSpiralDifferenceIterator( | 333 iterator_ = TilingData::ReverseSpiralDifferenceIterator( |
| 331 (*tilings_)[tiling_index_]->tiling_data(), | 334 (*tilings_)[tiling_index_]->tiling_data(), |
| 332 (*tilings_)[tiling_index_]->current_soon_border_rect(), | 335 (*tilings_)[tiling_index_]->current_soon_border_rect(), |
| 333 (*tilings_)[tiling_index_]->current_skewport_rect(), | 336 (*tilings_)[tiling_index_]->current_skewport_rect(), |
| 334 (*tilings_)[tiling_index_]->current_visible_rect()); | 337 (*tilings_)[tiling_index_]->current_visible_rect(), |
| 338 TilingData::IsPyramidSequenceEnabled()); |
| 335 if (!iterator_) | 339 if (!iterator_) |
| 336 continue; | 340 continue; |
| 337 found_tile = GetFirstTileAndCheckIfValid(&iterator_); | 341 found_tile = GetFirstTileAndCheckIfValid(&iterator_); |
| 338 if (!found_tile) | 342 if (!found_tile) |
| 339 found_tile = AdvanceToNextTile(&iterator_); | 343 found_tile = AdvanceToNextTile(&iterator_); |
| 340 } | 344 } |
| 341 return *this; | 345 return *this; |
| 342 } | 346 } |
| 343 | 347 |
| 344 // SkewportTilingIterator | 348 // SkewportTilingIterator |
| 345 TilingSetEvictionQueue::SkewportTilingIterator::SkewportTilingIterator( | 349 TilingSetEvictionQueue::SkewportTilingIterator::SkewportTilingIterator( |
| 346 std::vector<PictureLayerTiling*>* tilings, | 350 std::vector<PictureLayerTiling*>* tilings, |
| 347 WhichTree tree) | 351 WhichTree tree) |
| 348 : EvictionRectIterator(tilings, tree, PictureLayerTiling::SKEWPORT_RECT) { | 352 : EvictionRectIterator(tilings, tree, PictureLayerTiling::SKEWPORT_RECT) { |
| 349 // Find the first tiling with a tile. | 353 // Find the first tiling with a tile. |
| 350 while (tiling_index_ < tilings_->size()) { | 354 while (tiling_index_ < tilings_->size()) { |
| 351 if (!(*tilings_)[tiling_index_]->has_skewport_rect_tiles()) { | 355 if (!(*tilings_)[tiling_index_]->has_skewport_rect_tiles()) { |
| 352 ++tiling_index_; | 356 ++tiling_index_; |
| 353 continue; | 357 continue; |
| 354 } | 358 } |
| 355 iterator_ = TilingData::ReverseSpiralDifferenceIterator( | 359 iterator_ = TilingData::ReverseSpiralDifferenceIterator( |
| 356 (*tilings_)[tiling_index_]->tiling_data(), | 360 (*tilings_)[tiling_index_]->tiling_data(), |
| 357 (*tilings_)[tiling_index_]->current_skewport_rect(), | 361 (*tilings_)[tiling_index_]->current_skewport_rect(), |
| 358 (*tilings_)[tiling_index_]->current_visible_rect(), | 362 (*tilings_)[tiling_index_]->current_visible_rect(), |
| 359 (*tilings_)[tiling_index_]->current_visible_rect()); | 363 (*tilings_)[tiling_index_]->current_visible_rect(), |
| 364 TilingData::IsPyramidSequenceEnabled()); |
| 360 if (!iterator_) { | 365 if (!iterator_) { |
| 361 ++tiling_index_; | 366 ++tiling_index_; |
| 362 continue; | 367 continue; |
| 363 } | 368 } |
| 364 break; | 369 break; |
| 365 } | 370 } |
| 366 if (tiling_index_ >= tilings_->size()) | 371 if (tiling_index_ >= tilings_->size()) |
| 367 return; | 372 return; |
| 368 if (!GetFirstTileAndCheckIfValid(&iterator_)) | 373 if (!GetFirstTileAndCheckIfValid(&iterator_)) |
| 369 ++(*this); | 374 ++(*this); |
| 370 } | 375 } |
| 371 | 376 |
| 372 TilingSetEvictionQueue::SkewportTilingIterator& | 377 TilingSetEvictionQueue::SkewportTilingIterator& |
| 373 TilingSetEvictionQueue::SkewportTilingIterator:: | 378 TilingSetEvictionQueue::SkewportTilingIterator:: |
| 374 operator++() { | 379 operator++() { |
| 375 bool found_tile = AdvanceToNextTile(&iterator_); | 380 bool found_tile = AdvanceToNextTile(&iterator_); |
| 376 while (!found_tile && (tiling_index_ + 1) < tilings_->size()) { | 381 while (!found_tile && (tiling_index_ + 1) < tilings_->size()) { |
| 377 ++tiling_index_; | 382 ++tiling_index_; |
| 378 if (!(*tilings_)[tiling_index_]->has_skewport_rect_tiles()) | 383 if (!(*tilings_)[tiling_index_]->has_skewport_rect_tiles()) |
| 379 continue; | 384 continue; |
| 380 iterator_ = TilingData::ReverseSpiralDifferenceIterator( | 385 iterator_ = TilingData::ReverseSpiralDifferenceIterator( |
| 381 (*tilings_)[tiling_index_]->tiling_data(), | 386 (*tilings_)[tiling_index_]->tiling_data(), |
| 382 (*tilings_)[tiling_index_]->current_skewport_rect(), | 387 (*tilings_)[tiling_index_]->current_skewport_rect(), |
| 383 (*tilings_)[tiling_index_]->current_visible_rect(), | 388 (*tilings_)[tiling_index_]->current_visible_rect(), |
| 384 (*tilings_)[tiling_index_]->current_visible_rect()); | 389 (*tilings_)[tiling_index_]->current_visible_rect(), |
| 390 TilingData::IsPyramidSequenceEnabled()); |
| 385 if (!iterator_) | 391 if (!iterator_) |
| 386 continue; | 392 continue; |
| 387 found_tile = GetFirstTileAndCheckIfValid(&iterator_); | 393 found_tile = GetFirstTileAndCheckIfValid(&iterator_); |
| 388 if (!found_tile) | 394 if (!found_tile) |
| 389 found_tile = AdvanceToNextTile(&iterator_); | 395 found_tile = AdvanceToNextTile(&iterator_); |
| 390 } | 396 } |
| 391 return *this; | 397 return *this; |
| 392 } | 398 } |
| 393 | 399 |
| 394 // PendingVisibleIterator | 400 // PendingVisibleIterator |
| (...skipping 125 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 520 | 526 |
| 521 bool TilingSetEvictionQueue::VisibleTilingIterator::TileMatchesRequiredFlags( | 527 bool TilingSetEvictionQueue::VisibleTilingIterator::TileMatchesRequiredFlags( |
| 522 const PrioritizedTile& tile) const { | 528 const PrioritizedTile& tile) const { |
| 523 bool activation_flag_matches = tile.tile()->required_for_activation() == | 529 bool activation_flag_matches = tile.tile()->required_for_activation() == |
| 524 return_required_for_activation_tiles_; | 530 return_required_for_activation_tiles_; |
| 525 bool occluded_flag_matches = tile.is_occluded() == return_occluded_tiles_; | 531 bool occluded_flag_matches = tile.is_occluded() == return_occluded_tiles_; |
| 526 return activation_flag_matches && occluded_flag_matches; | 532 return activation_flag_matches && occluded_flag_matches; |
| 527 } | 533 } |
| 528 | 534 |
| 529 } // namespace cc | 535 } // namespace cc |
| OLD | NEW |