| 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 |