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

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

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