Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(212)

Side by Side Diff: cc/tiles/tiling_set_eviction_queue.cc

Issue 2498383002: cc: Implement tiling iterator based on pyramid sequence.
Patch Set: Created 4 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « cc/tiles/tiling_set_eviction_queue.h ('k') | cc/tiles/tiling_set_raster_queue_all.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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
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
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
OLDNEW
« no previous file with comments | « cc/tiles/tiling_set_eviction_queue.h ('k') | cc/tiles/tiling_set_raster_queue_all.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698