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 |