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

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

Issue 12259027: cc: Simplify the logic for deciding to update tile priorities. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Add early-out and unit test Created 7 years, 7 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
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 "cc/test/fake_picture_layer_tiling_client.h" 7 #include "cc/test/fake_picture_layer_tiling_client.h"
8 #include "testing/gtest/include/gtest/gtest.h" 8 #include "testing/gtest/include/gtest/gtest.h"
9 #include "ui/gfx/rect_conversions.h" 9 #include "ui/gfx/rect_conversions.h"
10 #include "ui/gfx/size_conversions.h" 10 #include "ui/gfx/size_conversions.h"
(...skipping 86 matching lines...) Expand 10 before | Expand all | Expand 10 after
97 } 97 }
98 98
99 void VerifyTilesExactlyCoverRect(float rect_scale, gfx::Rect rect) { 99 void VerifyTilesExactlyCoverRect(float rect_scale, gfx::Rect rect) {
100 VerifyTilesExactlyCoverRect(rect_scale, rect, rect); 100 VerifyTilesExactlyCoverRect(rect_scale, rect, rect);
101 } 101 }
102 102
103 void VerifyTiles( 103 void VerifyTiles(
104 float rect_scale, 104 float rect_scale,
105 gfx::Rect rect, 105 gfx::Rect rect,
106 base::Callback<void(Tile* tile, gfx::Rect geometry_rect)> callback) { 106 base::Callback<void(Tile* tile, gfx::Rect geometry_rect)> callback) {
107 VerifyTiles(tiling_.get(),
108 rect_scale,
109 rect,
110 callback);
111 }
112
113 void VerifyTiles(
114 PictureLayerTiling* tiling,
115 float rect_scale,
116 gfx::Rect rect,
117 base::Callback<void(Tile* tile, gfx::Rect geometry_rect)> callback) {
107 Region remaining = rect; 118 Region remaining = rect;
108 for (PictureLayerTiling::CoverageIterator iter( 119 for (PictureLayerTiling::CoverageIterator iter(tiling, rect_scale, rect);
109 tiling_.get(), rect_scale, rect);
110 iter; 120 iter;
111 ++iter) { 121 ++iter) {
112 remaining.Subtract(iter.geometry_rect()); 122 remaining.Subtract(iter.geometry_rect());
113 callback.Run(*iter, iter.geometry_rect()); 123 callback.Run(*iter, iter.geometry_rect());
114 } 124 }
115 EXPECT_TRUE(remaining.IsEmpty()); 125 EXPECT_TRUE(remaining.IsEmpty());
116 } 126 }
117 127
118 void VerifyTilesCoverNonContainedRect(float rect_scale, gfx::Rect dest_rect) { 128 void VerifyTilesCoverNonContainedRect(float rect_scale, gfx::Rect dest_rect) {
119 float dest_to_contents_scale = tiling_->contents_scale() / rect_scale; 129 float dest_to_contents_scale = tiling_->contents_scale() / rect_scale;
(...skipping 343 matching lines...) Expand 10 before | Expand all | Expand 10 after
463 ACTIVE_TREE, 473 ACTIVE_TREE,
464 layer_bounds, // device viewport 474 layer_bounds, // device viewport
465 gfx::Rect(layer_bounds), // viewport in layer space 475 gfx::Rect(layer_bounds), // viewport in layer space
466 gfx::Rect(layer_bounds), // visible content rect 476 gfx::Rect(layer_bounds), // visible content rect
467 layer_bounds, // last layer bounds 477 layer_bounds, // last layer bounds
468 layer_bounds, // current layer bounds 478 layer_bounds, // current layer bounds
469 1.f, // last contents scale 479 1.f, // last contents scale
470 1.f, // current contents scale 480 1.f, // current contents scale
471 gfx::Transform(), // last screen transform 481 gfx::Transform(), // last screen transform
472 gfx::Transform(), // current screen transform 482 gfx::Transform(), // current screen transform
473 1, // current frame number
474 1.0, // current frame time 483 1.0, // current frame time
475 false, // store screen space quads on tiles 484 false, // store screen space quads on tiles
476 10000); // max tiles in tile manager 485 10000); // max tiles in tile manager
477 VerifyTiles(1.f, gfx::Rect(layer_bounds), base::Bind(&TileExists, true)); 486 VerifyTiles(1.f, gfx::Rect(layer_bounds), base::Bind(&TileExists, true));
478 487
479 // Make the viewport rect empty. All tiles are killed and become zombies. 488 // Make the viewport rect empty. All tiles are killed and become zombies.
480 tiling_->UpdateTilePriorities( 489 tiling_->UpdateTilePriorities(
481 ACTIVE_TREE, 490 ACTIVE_TREE,
482 layer_bounds, // device viewport 491 layer_bounds, // device viewport
483 gfx::Rect(), // viewport in layer space 492 gfx::Rect(), // viewport in layer space
484 gfx::Rect(), // visible content rect 493 gfx::Rect(), // visible content rect
485 layer_bounds, // last layer bounds 494 layer_bounds, // last layer bounds
486 layer_bounds, // current layer bounds 495 layer_bounds, // current layer bounds
487 1.f, // last contents scale 496 1.f, // last contents scale
488 1.f, // current contents scale 497 1.f, // current contents scale
489 gfx::Transform(), // last screen transform 498 gfx::Transform(), // last screen transform
490 gfx::Transform(), // current screen transform 499 gfx::Transform(), // current screen transform
491 2, // current frame number
492 2.0, // current frame time 500 2.0, // current frame time
493 false, // store screen space quads on tiles 501 false, // store screen space quads on tiles
494 10000); // max tiles in tile manager 502 10000); // max tiles in tile manager
495 VerifyTiles(1.f, gfx::Rect(layer_bounds), base::Bind(&TileExists, false)); 503 VerifyTiles(1.f, gfx::Rect(layer_bounds), base::Bind(&TileExists, false));
496 } 504 }
497 505
498 TEST_F(PictureLayerTilingIteratorTest, TilesExistGiantViewport) { 506 TEST_F(PictureLayerTilingIteratorTest, TilesExistGiantViewport) {
499 gfx::Size layer_bounds(1099, 801); 507 gfx::Size layer_bounds(1099, 801);
500 Initialize(gfx::Size(100, 100), 1.f, layer_bounds); 508 Initialize(gfx::Size(100, 100), 1.f, layer_bounds);
501 VerifyTilesExactlyCoverRect(1.f, gfx::Rect(layer_bounds)); 509 VerifyTilesExactlyCoverRect(1.f, gfx::Rect(layer_bounds));
502 VerifyTiles(1.f, gfx::Rect(layer_bounds), base::Bind(&TileExists, false)); 510 VerifyTiles(1.f, gfx::Rect(layer_bounds), base::Bind(&TileExists, false));
503 511
504 gfx::Rect giant_rect(-10000000, -10000000, 1000000000, 1000000000); 512 gfx::Rect giant_rect(-10000000, -10000000, 1000000000, 1000000000);
505 513
506 tiling_->UpdateTilePriorities( 514 tiling_->UpdateTilePriorities(
507 ACTIVE_TREE, 515 ACTIVE_TREE,
508 layer_bounds, // device viewport 516 layer_bounds, // device viewport
509 giant_rect, // viewport in layer space 517 giant_rect, // viewport in layer space
510 gfx::Rect(layer_bounds), // visible content rect 518 gfx::Rect(layer_bounds), // visible content rect
511 layer_bounds, // last layer bounds 519 layer_bounds, // last layer bounds
512 layer_bounds, // current layer bounds 520 layer_bounds, // current layer bounds
513 1.f, // last contents scale 521 1.f, // last contents scale
514 1.f, // current contents scale 522 1.f, // current contents scale
515 gfx::Transform(), // last screen transform 523 gfx::Transform(), // last screen transform
516 gfx::Transform(), // current screen transform 524 gfx::Transform(), // current screen transform
517 1, // current frame number
518 1.0, // current frame time 525 1.0, // current frame time
519 false, // store screen space quads on tiles 526 false, // store screen space quads on tiles
520 10000); // max tiles in tile manager 527 10000); // max tiles in tile manager
521 VerifyTiles(1.f, gfx::Rect(layer_bounds), base::Bind(&TileExists, true)); 528 VerifyTiles(1.f, gfx::Rect(layer_bounds), base::Bind(&TileExists, true));
522 529
523 // If the visible content rect is empty, it should still have live tiles. 530 // If the visible content rect is empty, it should still have live tiles.
524 tiling_->UpdateTilePriorities( 531 tiling_->UpdateTilePriorities(
525 ACTIVE_TREE, 532 ACTIVE_TREE,
526 layer_bounds, // device viewport 533 layer_bounds, // device viewport
527 giant_rect, // viewport in layer space 534 giant_rect, // viewport in layer space
528 gfx::Rect(), // visible content rect 535 gfx::Rect(), // visible content rect
529 layer_bounds, // last layer bounds 536 layer_bounds, // last layer bounds
530 layer_bounds, // current layer bounds 537 layer_bounds, // current layer bounds
531 1.f, // last contents scale 538 1.f, // last contents scale
532 1.f, // current contents scale 539 1.f, // current contents scale
533 gfx::Transform(), // last screen transform 540 gfx::Transform(), // last screen transform
534 gfx::Transform(), // current screen transform 541 gfx::Transform(), // current screen transform
535 2, // current frame number
536 2.0, // current frame time 542 2.0, // current frame time
537 false, // store screen space quads on tiles 543 false, // store screen space quads on tiles
538 10000); // max tiles in tile manager 544 10000); // max tiles in tile manager
539 VerifyTiles(1.f, gfx::Rect(layer_bounds), base::Bind(&TileExists, true)); 545 VerifyTiles(1.f, gfx::Rect(layer_bounds), base::Bind(&TileExists, true));
540 } 546 }
541 547
542 TEST_F(PictureLayerTilingIteratorTest, TilesExistOutsideViewport) { 548 TEST_F(PictureLayerTilingIteratorTest, TilesExistOutsideViewport) {
543 gfx::Size layer_bounds(1099, 801); 549 gfx::Size layer_bounds(1099, 801);
544 Initialize(gfx::Size(100, 100), 1.f, layer_bounds); 550 Initialize(gfx::Size(100, 100), 1.f, layer_bounds);
545 VerifyTilesExactlyCoverRect(1.f, gfx::Rect(layer_bounds)); 551 VerifyTilesExactlyCoverRect(1.f, gfx::Rect(layer_bounds));
546 VerifyTiles(1.f, gfx::Rect(layer_bounds), base::Bind(&TileExists, false)); 552 VerifyTiles(1.f, gfx::Rect(layer_bounds), base::Bind(&TileExists, false));
547 553
548 // This rect does not intersect with the layer, as the layer is outside the 554 // This rect does not intersect with the layer, as the layer is outside the
549 // viewport. 555 // viewport.
550 gfx::Rect viewport_rect(1100, 0, 1000, 1000); 556 gfx::Rect viewport_rect(1100, 0, 1000, 1000);
551 EXPECT_FALSE(viewport_rect.Intersects(gfx::Rect(layer_bounds))); 557 EXPECT_FALSE(viewport_rect.Intersects(gfx::Rect(layer_bounds)));
552 558
553 tiling_->UpdateTilePriorities( 559 tiling_->UpdateTilePriorities(
554 ACTIVE_TREE, 560 ACTIVE_TREE,
555 layer_bounds, // device viewport 561 layer_bounds, // device viewport
556 viewport_rect, // viewport in layer space 562 viewport_rect, // viewport in layer space
557 gfx::Rect(), // visible content rect 563 gfx::Rect(), // visible content rect
558 layer_bounds, // last layer bounds 564 layer_bounds, // last layer bounds
559 layer_bounds, // current layer bounds 565 layer_bounds, // current layer bounds
560 1.f, // last contents scale 566 1.f, // last contents scale
561 1.f, // current contents scale 567 1.f, // current contents scale
562 gfx::Transform(), // last screen transform 568 gfx::Transform(), // last screen transform
563 gfx::Transform(), // current screen transform 569 gfx::Transform(), // current screen transform
564 2, // current frame number 570 1.0, // current frame time
565 2.0, // current frame time
566 false, // store screen space quads on tiles 571 false, // store screen space quads on tiles
567 10000); // max tiles in tile manager 572 10000); // max tiles in tile manager
568 VerifyTiles(1.f, gfx::Rect(layer_bounds), base::Bind(&TileExists, true)); 573 VerifyTiles(1.f, gfx::Rect(layer_bounds), base::Bind(&TileExists, true));
569 } 574 }
570 575
571 static void TilesIntersectingRectExist(gfx::Rect rect, 576 static void TilesIntersectingRectExist(gfx::Rect rect,
572 Tile* tile, 577 Tile* tile,
573 gfx::Rect geometry_rect) { 578 gfx::Rect geometry_rect) {
574 bool expected_exists = rect.Intersects(geometry_rect); 579 bool expected_exists = rect.Intersects(geometry_rect);
575 EXPECT_EQ(expected_exists, tile != NULL) 580 EXPECT_EQ(expected_exists, tile != NULL)
(...skipping 14 matching lines...) Expand all
590 ACTIVE_TREE, 595 ACTIVE_TREE,
591 layer_bounds, // device viewport 596 layer_bounds, // device viewport
592 gfx::Rect(layer_bounds), // viewport in layer space 597 gfx::Rect(layer_bounds), // viewport in layer space
593 visible_rect, // visible content rect 598 visible_rect, // visible content rect
594 layer_bounds, // last layer bounds 599 layer_bounds, // last layer bounds
595 layer_bounds, // current layer bounds 600 layer_bounds, // current layer bounds
596 1.f, // last contents scale 601 1.f, // last contents scale
597 1.f, // current contents scale 602 1.f, // current contents scale
598 gfx::Transform(), // last screen transform 603 gfx::Transform(), // last screen transform
599 gfx::Transform(), // current screen transform 604 gfx::Transform(), // current screen transform
600 2, // current frame number 605 1.0, // current frame time
601 2.0, // current frame time
602 false, // store screen space quads on tiles 606 false, // store screen space quads on tiles
603 1); // max tiles in tile manager 607 1); // max tiles in tile manager
604 VerifyTiles(1.f, 608 VerifyTiles(1.f,
605 gfx::Rect(layer_bounds), 609 gfx::Rect(layer_bounds),
606 base::Bind(&TilesIntersectingRectExist, visible_rect)); 610 base::Bind(&TilesIntersectingRectExist, visible_rect));
607 } 611 }
608 612
609 static void CountExistingTiles(int *count, 613 static void CountExistingTiles(int *count,
610 Tile* tile, 614 Tile* tile,
611 gfx::Rect geometry_rect) { 615 gfx::Rect geometry_rect) {
(...skipping 12 matching lines...) Expand all
624 ACTIVE_TREE, 628 ACTIVE_TREE,
625 layer_bounds, // device viewport 629 layer_bounds, // device viewport
626 gfx::Rect(layer_bounds), // viewport in layer space 630 gfx::Rect(layer_bounds), // viewport in layer space
627 gfx::Rect(layer_bounds), // visible content rect 631 gfx::Rect(layer_bounds), // visible content rect
628 layer_bounds, // last layer bounds 632 layer_bounds, // last layer bounds
629 layer_bounds, // current layer bounds 633 layer_bounds, // current layer bounds
630 1.f, // last contents scale 634 1.f, // last contents scale
631 1.f, // current contents scale 635 1.f, // current contents scale
632 gfx::Transform(), // last screen transform 636 gfx::Transform(), // last screen transform
633 gfx::Transform(), // current screen transform 637 gfx::Transform(), // current screen transform
634 2, // current frame number 638 1.0, // current frame time
635 2.0, // current frame time
636 false, // store screen space quads on tiles 639 false, // store screen space quads on tiles
637 1); // max tiles in tile manager 640 1); // max tiles in tile manager
638 641
639 int num_tiles = 0; 642 int num_tiles = 0;
640 VerifyTiles(1.f, 643 VerifyTiles(1.f,
641 gfx::Rect(layer_bounds), 644 gfx::Rect(layer_bounds),
642 base::Bind(&CountExistingTiles, &num_tiles)); 645 base::Bind(&CountExistingTiles, &num_tiles));
643 // If we're making a rect the size of one tile, it can only overlap up to 4 646 // If we're making a rect the size of one tile, it can only overlap up to 4
644 // tiles depending on its position. 647 // tiles depending on its position.
645 EXPECT_LE(num_tiles, 4); 648 EXPECT_LE(num_tiles, 4);
646 VerifyTiles(1.f, gfx::Rect(), base::Bind(&TileExists, false)); 649 VerifyTiles(1.f, gfx::Rect(), base::Bind(&TileExists, false));
647 } 650 }
648 651
652 TEST_F(PictureLayerTilingIteratorTest, Clone) {
653 gfx::Size layer_bounds(1099, 801);
654 Initialize(gfx::Size(100, 100), 1.f, layer_bounds);
655
656 VerifyTiles(1.f, gfx::Rect(layer_bounds), base::Bind(&TileExists, false));
657
658 tiling_->UpdateTilePriorities(
659 PENDING_TREE,
660 layer_bounds, // device viewport
661 gfx::Rect(layer_bounds), // viewport in layer space
662 gfx::Rect(layer_bounds), // visible content rect
663 layer_bounds, // last layer bounds
664 layer_bounds, // current layer bounds
665 1.f, // last contents scale
666 1.f, // current contents scale
667 gfx::Transform(), // last screen transform
668 gfx::Transform(), // current screen transform
669 1.0, // current frame time
670 false, // store screen space quads on tiles
671 10000); // max tiles in tile manager
672 tiling_->set_resolution(HIGH_RESOLUTION);
673
674 // The pending tiling has tiles now.
675 VerifyTiles(1.f, gfx::Rect(layer_bounds), base::Bind(&TileExists, true));
676 EXPECT_EQ(HIGH_RESOLUTION, tiling_->resolution());
677
678 // Clone to the active tiling.
679 scoped_ptr<PictureLayerTiling> active_tiling =
680 tiling_->Clone(layer_bounds, &client_);
681
682 // The active tiling starts with no tiles.
683 VerifyTiles(active_tiling.get(),
684 1.f,
685 gfx::Rect(layer_bounds),
686 base::Bind(&TileExists, false));
687 EXPECT_EQ(HIGH_RESOLUTION, tiling_->resolution());
688
689 // UpdateTilePriorities on the active tiling at the same frame time. The
690 // active tiling should get tiles.
691 active_tiling->UpdateTilePriorities(
692 PENDING_TREE,
693 layer_bounds, // device viewport
694 gfx::Rect(layer_bounds), // viewport in layer space
695 gfx::Rect(layer_bounds), // visible content rect
696 layer_bounds, // last layer bounds
697 layer_bounds, // current layer bounds
698 1.f, // last contents scale
699 1.f, // current contents scale
700 gfx::Transform(), // last screen transform
701 gfx::Transform(), // current screen transform
702 1.0, // current frame time
703 false, // store screen space quads on tiles
704 10000); // max tiles in tile manager
705 VerifyTiles(active_tiling.get(),
706 1.f,
707 gfx::Rect(layer_bounds),
708 base::Bind(&TileExists, true));
709 }
710
649 } // namespace 711 } // namespace
650 } // namespace cc 712 } // namespace cc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698