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

Side by Side Diff: cc/resources/picture_layer_tiling.cc

Issue 13582006: Prioritize tiles near the viewport in out-of-viewport layers (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 7 years, 8 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 | Annotate | Revision Log
« no previous file with comments | « cc/resources/picture_layer_tiling.h ('k') | cc/resources/picture_layer_tiling_unittest.cc » ('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 2012 The Chromium Authors. All rights reserved. 1 // Copyright 2012 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/resources/picture_layer_tiling.h" 5 #include "cc/resources/picture_layer_tiling.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <cmath> 8 #include <cmath>
9 9
10 #include "base/debug/trace_event.h" 10 #include "base/debug/trace_event.h"
(...skipping 357 matching lines...) Expand 10 before | Expand all | Expand 10 after
368 368
369 gfx::Size tile_size = tiling_data_.max_texture_size(); 369 gfx::Size tile_size = tiling_data_.max_texture_size();
370 int64 prioritized_rect_area = 370 int64 prioritized_rect_area =
371 max_tiles_for_interest_area * 371 max_tiles_for_interest_area *
372 tile_size.width() * tile_size.height(); 372 tile_size.width() * tile_size.height();
373 373
374 gfx::Rect prioritized_rect = ExpandRectEquallyToAreaBoundedBy( 374 gfx::Rect prioritized_rect = ExpandRectEquallyToAreaBoundedBy(
375 viewport_in_content_space, 375 viewport_in_content_space,
376 prioritized_rect_area, 376 prioritized_rect_area,
377 ContentRect()); 377 ContentRect());
378
379 if (prioritized_rect.IsEmpty()) {
380 // For a layer out of the viewport, prioritize its tiles near to the
381 // viewport border so that they could be available when scrolled in.
382 prioritized_rect = ExpandRectBySizeBoundedBy(
danakj 2013/04/03 23:08:34 NAK: Using the viewport rect (or something at most
383 viewport_in_content_space,
384 tile_size.width() * 2,
385 tile_size.height() * 2,
386 ContentRect());
387 }
388
378 DCHECK(ContentRect().Contains(prioritized_rect)); 389 DCHECK(ContentRect().Contains(prioritized_rect));
379 390
380 // Iterate through all of the tiles that were live last frame but will 391 // Iterate through all of the tiles that were live last frame but will
381 // not be live this frame, and mark them as being dead. 392 // not be live this frame, and mark them as being dead.
382 for (TilingData::DifferenceIterator iter(&tiling_data_, 393 for (TilingData::DifferenceIterator iter(&tiling_data_,
383 last_prioritized_rect_, 394 last_prioritized_rect_,
384 prioritized_rect); 395 prioritized_rect);
385 iter; 396 iter;
386 ++iter) { 397 ++iter) {
387 TileMap::iterator find = tiles_.find(iter.index()); 398 TileMap::iterator find = tiles_.find(iter.index());
(...skipping 136 matching lines...) Expand 10 before | Expand all | Expand 10 after
524 535
525 gfx::Rect PictureLayerTiling::ExpandRectEquallyToAreaBoundedBy( 536 gfx::Rect PictureLayerTiling::ExpandRectEquallyToAreaBoundedBy(
526 gfx::Rect starting_rect, 537 gfx::Rect starting_rect,
527 int64 target_area, 538 int64 target_area,
528 gfx::Rect bounding_rect) { 539 gfx::Rect bounding_rect) {
529 DCHECK(!starting_rect.IsEmpty()); 540 DCHECK(!starting_rect.IsEmpty());
530 DCHECK(!bounding_rect.IsEmpty()); 541 DCHECK(!bounding_rect.IsEmpty());
531 DCHECK_GT(target_area, 0); 542 DCHECK_GT(target_area, 0);
532 543
533 gfx::Rect rect = IntersectRects(starting_rect, bounding_rect); 544 gfx::Rect rect = IntersectRects(starting_rect, bounding_rect);
545
534 if (rect.IsEmpty()) 546 if (rect.IsEmpty())
enne (OOO) 2013/04/03 23:41:49 I think this patch should really just remove this
535 return rect; 547 return rect;
536 548
537 // These values will be updated by the loop and uses as the output. 549 // These values will be updated by the loop and uses as the output.
538 int origin_x = rect.x(); 550 int origin_x = rect.x();
539 int origin_y = rect.y(); 551 int origin_y = rect.y();
540 int width = rect.width(); 552 int width = rect.width();
541 int height = rect.height(); 553 int height = rect.height();
542 554
543 // In the beginning we will consider 2 edges in each dimension. 555 // In the beginning we will consider 2 edges in each dimension.
544 int num_y_edges = 2; 556 int num_y_edges = 2;
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after
607 } 619 }
608 620
609 // If our delta is less then our event distance, we're done. 621 // If our delta is less then our event distance, we're done.
610 if (delta < event.distance) 622 if (delta < event.distance)
611 break; 623 break;
612 } 624 }
613 625
614 return gfx::Rect(origin_x, origin_y, width, height); 626 return gfx::Rect(origin_x, origin_y, width, height);
615 } 627 }
616 628
629 gfx::Rect PictureLayerTiling::ExpandRectBySizeBoundedBy(
630 gfx::Rect starting_rect,
631 int horizontal_expansion,
632 int vertical_expansion,
633 gfx::Rect bounding_rect) {
634 starting_rect.Inset(-horizontal_expansion, -vertical_expansion);
635 return IntersectRects(starting_rect, bounding_rect);
636 }
637
617 } // namespace cc 638 } // namespace cc
OLDNEW
« no previous file with comments | « cc/resources/picture_layer_tiling.h ('k') | cc/resources/picture_layer_tiling_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698