OLD | NEW |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 |
OLD | NEW |