| OLD | NEW |
| 1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 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/layers/picture_layer_impl.h" | 5 #include "cc/layers/picture_layer_impl.h" |
| 6 | 6 |
| 7 #include <algorithm> | 7 #include <algorithm> |
| 8 #include <limits> | 8 #include <limits> |
| 9 #include <set> | 9 #include <set> |
| 10 #include <utility> | 10 #include <utility> |
| (...skipping 472 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 483 gfx::Size layer_bounds(400, 400); | 483 gfx::Size layer_bounds(400, 400); |
| 484 SetupDefaultTrees(layer_bounds); | 484 SetupDefaultTrees(layer_bounds); |
| 485 | 485 |
| 486 SetupDrawPropertiesAndUpdateTiles(active_layer_, 1.f, 1.f, 1.f, 1.f, 0.f, | 486 SetupDrawPropertiesAndUpdateTiles(active_layer_, 1.f, 1.f, 1.f, 1.f, 0.f, |
| 487 false); | 487 false); |
| 488 | 488 |
| 489 host_impl_.AdvanceToNextFrame(base::TimeDelta::FromMilliseconds(200)); | 489 host_impl_.AdvanceToNextFrame(base::TimeDelta::FromMilliseconds(200)); |
| 490 | 490 |
| 491 // Update tiles with viewport for tile priority as (0, 0, 100, 100) and the | 491 // Update tiles with viewport for tile priority as (0, 0, 100, 100) and the |
| 492 // identify transform for tile priority. | 492 // identify transform for tile priority. |
| 493 bool resourceless_software_draw = false; | 493 gfx::Rect viewport_rect_for_tile_priority = gfx::Rect(0, 0, 100, 100); |
| 494 gfx::Rect viewport = gfx::Rect(layer_bounds), | |
| 495 viewport_rect_for_tile_priority = gfx::Rect(0, 0, 100, 100); | |
| 496 gfx::Transform transform, transform_for_tile_priority; | 494 gfx::Transform transform, transform_for_tile_priority; |
| 497 | 495 |
| 498 host_impl_.SetExternalDrawConstraints(transform, | 496 host_impl_.SetExternalTilePriorityConstraints(viewport_rect_for_tile_priority, |
| 499 viewport, | 497 transform_for_tile_priority); |
| 500 viewport, | |
| 501 viewport_rect_for_tile_priority, | |
| 502 transform_for_tile_priority, | |
| 503 resourceless_software_draw); | |
| 504 bool update_lcd_text = false; | 498 bool update_lcd_text = false; |
| 505 host_impl_.active_tree()->UpdateDrawProperties(update_lcd_text); | 499 host_impl_.active_tree()->UpdateDrawProperties(update_lcd_text); |
| 506 | 500 |
| 507 gfx::Rect viewport_rect_for_tile_priority_in_view_space = | 501 gfx::Rect viewport_rect_for_tile_priority_in_view_space = |
| 508 viewport_rect_for_tile_priority; | 502 viewport_rect_for_tile_priority; |
| 509 | 503 |
| 510 // Verify the viewport rect for tile priority is used in picture layer tiling. | 504 // Verify the viewport rect for tile priority is used in picture layer tiling. |
| 511 EXPECT_EQ(viewport_rect_for_tile_priority_in_view_space, | 505 EXPECT_EQ(viewport_rect_for_tile_priority_in_view_space, |
| 512 active_layer_->viewport_rect_for_tile_priority_in_content_space()); | 506 active_layer_->viewport_rect_for_tile_priority_in_content_space()); |
| 513 PictureLayerTilingSet* tilings = active_layer_->tilings(); | 507 PictureLayerTilingSet* tilings = active_layer_->tilings(); |
| 514 for (size_t i = 0; i < tilings->num_tilings(); i++) { | 508 for (size_t i = 0; i < tilings->num_tilings(); i++) { |
| 515 PictureLayerTiling* tiling = tilings->tiling_at(i); | 509 PictureLayerTiling* tiling = tilings->tiling_at(i); |
| 516 EXPECT_EQ( | 510 EXPECT_EQ( |
| 517 tiling->GetCurrentVisibleRectForTesting(), | 511 tiling->GetCurrentVisibleRectForTesting(), |
| 518 gfx::ScaleToEnclosingRect(viewport_rect_for_tile_priority_in_view_space, | 512 gfx::ScaleToEnclosingRect(viewport_rect_for_tile_priority_in_view_space, |
| 519 tiling->contents_scale())); | 513 tiling->contents_scale())); |
| 520 } | 514 } |
| 521 | 515 |
| 522 // Update tiles with viewport for tile priority as (200, 200, 100, 100) in | 516 // Update tiles with viewport for tile priority as (200, 200, 100, 100) in |
| 523 // screen space and the transform for tile priority is translated and | 517 // screen space and the transform for tile priority is translated and |
| 524 // rotated. The actual viewport for tile priority used by PictureLayerImpl | 518 // rotated. The actual viewport for tile priority used by PictureLayerImpl |
| 525 // should be (200, 200, 100, 100) applied with the said transform. | 519 // should be (200, 200, 100, 100) applied with the said transform. |
| 526 host_impl_.AdvanceToNextFrame(base::TimeDelta::FromMilliseconds(200)); | 520 host_impl_.AdvanceToNextFrame(base::TimeDelta::FromMilliseconds(200)); |
| 527 | 521 |
| 528 viewport_rect_for_tile_priority = gfx::Rect(200, 200, 100, 100); | 522 viewport_rect_for_tile_priority = gfx::Rect(200, 200, 100, 100); |
| 529 transform_for_tile_priority.Translate(100, 100); | 523 transform_for_tile_priority.Translate(100, 100); |
| 530 transform_for_tile_priority.Rotate(45); | 524 transform_for_tile_priority.Rotate(45); |
| 531 host_impl_.SetExternalDrawConstraints(transform, | 525 host_impl_.SetExternalTilePriorityConstraints(viewport_rect_for_tile_priority, |
| 532 viewport, | 526 transform_for_tile_priority); |
| 533 viewport, | |
| 534 viewport_rect_for_tile_priority, | |
| 535 transform_for_tile_priority, | |
| 536 resourceless_software_draw); | |
| 537 host_impl_.active_tree()->UpdateDrawProperties(update_lcd_text); | 527 host_impl_.active_tree()->UpdateDrawProperties(update_lcd_text); |
| 538 | 528 |
| 539 gfx::Transform screen_to_view(gfx::Transform::kSkipInitialization); | 529 gfx::Transform screen_to_view(gfx::Transform::kSkipInitialization); |
| 540 bool success = transform_for_tile_priority.GetInverse(&screen_to_view); | 530 bool success = transform_for_tile_priority.GetInverse(&screen_to_view); |
| 541 EXPECT_TRUE(success); | 531 EXPECT_TRUE(success); |
| 542 | 532 |
| 543 // Note that we don't clip this to the layer bounds, since it is expected that | 533 // Note that we don't clip this to the layer bounds, since it is expected that |
| 544 // the rect will sometimes be outside of the layer bounds. If we clip to | 534 // the rect will sometimes be outside of the layer bounds. If we clip to |
| 545 // bounds, then tile priorities will end up being incorrect in cases of fully | 535 // bounds, then tile priorities will end up being incorrect in cases of fully |
| 546 // offscreen layer. | 536 // offscreen layer. |
| (...skipping 20 matching lines...) Expand all Loading... |
| 567 | 557 |
| 568 SetupDrawPropertiesAndUpdateTiles(active_layer_, 1.f, 1.f, 1.f, 1.f, 0.f, | 558 SetupDrawPropertiesAndUpdateTiles(active_layer_, 1.f, 1.f, 1.f, 1.f, 0.f, |
| 569 false); | 559 false); |
| 570 | 560 |
| 571 // UpdateTiles with valid viewport. Should update tile viewport. | 561 // UpdateTiles with valid viewport. Should update tile viewport. |
| 572 // Note viewport is considered invalid if and only if in resourceless | 562 // Note viewport is considered invalid if and only if in resourceless |
| 573 // software draw. | 563 // software draw. |
| 574 bool resourceless_software_draw = false; | 564 bool resourceless_software_draw = false; |
| 575 gfx::Rect viewport = gfx::Rect(layer_bounds); | 565 gfx::Rect viewport = gfx::Rect(layer_bounds); |
| 576 gfx::Transform transform; | 566 gfx::Transform transform; |
| 577 host_impl_.SetExternalDrawConstraints(transform, | 567 host_impl_.SetExternalTilePriorityConstraints(viewport, transform); |
| 578 viewport, | |
| 579 viewport, | |
| 580 viewport, | |
| 581 transform, | |
| 582 resourceless_software_draw); | |
| 583 active_layer_->draw_properties().visible_layer_rect = viewport; | 568 active_layer_->draw_properties().visible_layer_rect = viewport; |
| 584 active_layer_->draw_properties().screen_space_transform = transform; | 569 active_layer_->draw_properties().screen_space_transform = transform; |
| 585 active_layer_->UpdateTiles(resourceless_software_draw); | 570 active_layer_->UpdateTiles(resourceless_software_draw); |
| 586 | 571 |
| 587 gfx::Rect visible_rect_for_tile_priority = | 572 gfx::Rect visible_rect_for_tile_priority = |
| 588 active_layer_->visible_rect_for_tile_priority(); | 573 active_layer_->visible_rect_for_tile_priority(); |
| 589 EXPECT_FALSE(visible_rect_for_tile_priority.IsEmpty()); | 574 EXPECT_FALSE(visible_rect_for_tile_priority.IsEmpty()); |
| 590 gfx::Transform screen_space_transform_for_tile_priority = | 575 gfx::Transform screen_space_transform_for_tile_priority = |
| 591 active_layer_->draw_properties().screen_space_transform; | 576 active_layer_->draw_properties().screen_space_transform; |
| 592 | 577 |
| 593 // Expand viewport and set it as invalid for prioritizing tiles. | 578 // Expand viewport and set it as invalid for prioritizing tiles. |
| 594 // Should update viewport and transform, but not update visible rect. | 579 // Should update viewport and transform, but not update visible rect. |
| 595 host_impl_.AdvanceToNextFrame(base::TimeDelta::FromMilliseconds(200)); | 580 host_impl_.AdvanceToNextFrame(base::TimeDelta::FromMilliseconds(200)); |
| 596 resourceless_software_draw = true; | 581 resourceless_software_draw = true; |
| 597 viewport = gfx::ScaleToEnclosingRect(viewport, 2); | 582 viewport = gfx::ScaleToEnclosingRect(viewport, 2); |
| 598 transform.Translate(1.f, 1.f); | 583 transform.Translate(1.f, 1.f); |
| 599 active_layer_->draw_properties().visible_layer_rect = viewport; | 584 active_layer_->draw_properties().visible_layer_rect = viewport; |
| 600 active_layer_->draw_properties().screen_space_transform = transform; | 585 active_layer_->draw_properties().screen_space_transform = transform; |
| 601 host_impl_.SetExternalDrawConstraints(transform, | 586 host_impl_.SetExternalTilePriorityConstraints(viewport, transform); |
| 602 viewport, | |
| 603 viewport, | |
| 604 viewport, | |
| 605 transform, | |
| 606 resourceless_software_draw); | |
| 607 active_layer_->UpdateTiles(resourceless_software_draw); | 587 active_layer_->UpdateTiles(resourceless_software_draw); |
| 608 | 588 |
| 609 // Transform for tile priority is updated. | 589 // Transform for tile priority is updated. |
| 610 EXPECT_TRANSFORMATION_MATRIX_EQ( | 590 EXPECT_TRANSFORMATION_MATRIX_EQ( |
| 611 transform, active_layer_->draw_properties().screen_space_transform); | 591 transform, active_layer_->draw_properties().screen_space_transform); |
| 612 // Visible rect for tile priority retains old value. | 592 // Visible rect for tile priority retains old value. |
| 613 EXPECT_EQ(visible_rect_for_tile_priority, | 593 EXPECT_EQ(visible_rect_for_tile_priority, |
| 614 active_layer_->visible_rect_for_tile_priority()); | 594 active_layer_->visible_rect_for_tile_priority()); |
| 615 | 595 |
| 616 // Keep expanded viewport but mark it valid. Should update tile viewport. | 596 // Keep expanded viewport but mark it valid. Should update tile viewport. |
| 617 host_impl_.AdvanceToNextFrame(base::TimeDelta::FromMilliseconds(200)); | 597 host_impl_.AdvanceToNextFrame(base::TimeDelta::FromMilliseconds(200)); |
| 618 resourceless_software_draw = false; | 598 resourceless_software_draw = false; |
| 619 host_impl_.SetExternalDrawConstraints(transform, | 599 host_impl_.SetExternalTilePriorityConstraints(viewport, transform); |
| 620 viewport, | |
| 621 viewport, | |
| 622 viewport, | |
| 623 transform, | |
| 624 resourceless_software_draw); | |
| 625 active_layer_->UpdateTiles(resourceless_software_draw); | 600 active_layer_->UpdateTiles(resourceless_software_draw); |
| 626 | 601 |
| 627 EXPECT_TRANSFORMATION_MATRIX_EQ( | 602 EXPECT_TRANSFORMATION_MATRIX_EQ( |
| 628 transform, active_layer_->draw_properties().screen_space_transform); | 603 transform, active_layer_->draw_properties().screen_space_transform); |
| 629 EXPECT_EQ(viewport, active_layer_->visible_rect_for_tile_priority()); | 604 EXPECT_EQ(viewport, active_layer_->visible_rect_for_tile_priority()); |
| 630 } | 605 } |
| 631 | 606 |
| 632 TEST_F(PictureLayerImplTest, ViewportRectForTilePriorityIsCached) { | 607 TEST_F(PictureLayerImplTest, ViewportRectForTilePriorityIsCached) { |
| 633 host_impl_.AdvanceToNextFrame(base::TimeDelta::FromMilliseconds(1)); | 608 host_impl_.AdvanceToNextFrame(base::TimeDelta::FromMilliseconds(1)); |
| 634 gfx::Size layer_bounds(400, 400); | 609 gfx::Size layer_bounds(400, 400); |
| 635 SetupDefaultTrees(layer_bounds); | 610 SetupDefaultTrees(layer_bounds); |
| 636 | 611 |
| 637 SetupDrawPropertiesAndUpdateTiles(active_layer_, 1.f, 1.f, 1.f, 1.f, 0.f, | 612 SetupDrawPropertiesAndUpdateTiles(active_layer_, 1.f, 1.f, 1.f, 1.f, 0.f, |
| 638 false); | 613 false); |
| 639 | 614 |
| 640 host_impl_.AdvanceToNextFrame(base::TimeDelta::FromMilliseconds(200)); | 615 host_impl_.AdvanceToNextFrame(base::TimeDelta::FromMilliseconds(200)); |
| 641 | 616 |
| 642 bool resourceless_software_draw = false; | |
| 643 gfx::Rect viewport = gfx::Rect(layer_bounds); | |
| 644 gfx::Rect viewport_rect_for_tile_priority(0, 0, 100, 100); | 617 gfx::Rect viewport_rect_for_tile_priority(0, 0, 100, 100); |
| 645 gfx::Transform transform, transform_for_tile_priority; | 618 gfx::Transform transform_for_tile_priority; |
| 646 | 619 |
| 647 host_impl_.SetExternalDrawConstraints( | 620 host_impl_.SetExternalTilePriorityConstraints(viewport_rect_for_tile_priority, |
| 648 transform, viewport, viewport, viewport_rect_for_tile_priority, | 621 transform_for_tile_priority); |
| 649 transform_for_tile_priority, resourceless_software_draw); | |
| 650 bool update_lcd_text = false; | 622 bool update_lcd_text = false; |
| 651 host_impl_.active_tree()->UpdateDrawProperties(update_lcd_text); | 623 host_impl_.active_tree()->UpdateDrawProperties(update_lcd_text); |
| 652 | 624 |
| 653 EXPECT_EQ(viewport_rect_for_tile_priority, | 625 EXPECT_EQ(viewport_rect_for_tile_priority, |
| 654 active_layer_->viewport_rect_for_tile_priority_in_content_space()); | 626 active_layer_->viewport_rect_for_tile_priority_in_content_space()); |
| 655 | 627 |
| 656 host_impl_.AdvanceToNextFrame(base::TimeDelta::FromMilliseconds(200)); | 628 host_impl_.AdvanceToNextFrame(base::TimeDelta::FromMilliseconds(200)); |
| 657 | 629 |
| 658 gfx::Rect another_viewport_rect_for_tile_priority(11, 11, 50, 50); | 630 gfx::Rect another_viewport_rect_for_tile_priority(11, 11, 50, 50); |
| 659 host_impl_.SetExternalDrawConstraints( | 631 host_impl_.SetExternalTilePriorityConstraints( |
| 660 transform, viewport, viewport, another_viewport_rect_for_tile_priority, | 632 another_viewport_rect_for_tile_priority, transform_for_tile_priority); |
| 661 transform_for_tile_priority, resourceless_software_draw); | |
| 662 | 633 |
| 663 // Didn't call UpdateDrawProperties yet. The viewport rect for tile priority | 634 // Didn't call UpdateDrawProperties yet. The viewport rect for tile priority |
| 664 // should remain to be the previously cached value. | 635 // should remain to be the previously cached value. |
| 665 EXPECT_EQ(viewport_rect_for_tile_priority, | 636 EXPECT_EQ(viewport_rect_for_tile_priority, |
| 666 active_layer_->viewport_rect_for_tile_priority_in_content_space()); | 637 active_layer_->viewport_rect_for_tile_priority_in_content_space()); |
| 667 host_impl_.active_tree()->UpdateDrawProperties(update_lcd_text); | 638 host_impl_.active_tree()->UpdateDrawProperties(update_lcd_text); |
| 668 | 639 |
| 669 // Now the UpdateDrawProperties is called. The viewport rect for tile | 640 // Now the UpdateDrawProperties is called. The viewport rect for tile |
| 670 // priority should be the latest value. | 641 // priority should be the latest value. |
| 671 EXPECT_EQ(another_viewport_rect_for_tile_priority, | 642 EXPECT_EQ(another_viewport_rect_for_tile_priority, |
| (...skipping 1136 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1808 // tilings. | 1779 // tilings. |
| 1809 ActivateTree(); | 1780 ActivateTree(); |
| 1810 EXPECT_TRUE(active_layer_->CanHaveTilings()); | 1781 EXPECT_TRUE(active_layer_->CanHaveTilings()); |
| 1811 EXPECT_GT(active_layer_->ideal_contents_scale(), 0.f); | 1782 EXPECT_GT(active_layer_->ideal_contents_scale(), 0.f); |
| 1812 } | 1783 } |
| 1813 | 1784 |
| 1814 TEST_F(NoLowResPictureLayerImplTest, MarkRequiredOffscreenTiles) { | 1785 TEST_F(NoLowResPictureLayerImplTest, MarkRequiredOffscreenTiles) { |
| 1815 gfx::Size layer_bounds(200, 200); | 1786 gfx::Size layer_bounds(200, 200); |
| 1816 | 1787 |
| 1817 gfx::Transform transform; | 1788 gfx::Transform transform; |
| 1818 gfx::Transform transform_for_tile_priority; | |
| 1819 bool resourceless_software_draw = false; | 1789 bool resourceless_software_draw = false; |
| 1820 gfx::Rect viewport(0, 0, 100, 200); | 1790 gfx::Rect viewport(0, 0, 100, 200); |
| 1821 host_impl_.SetExternalDrawConstraints(transform, | 1791 host_impl_.SetExternalTilePriorityConstraints(viewport, transform); |
| 1822 viewport, | 1792 host_impl_.SetExternalViewportForTesting(viewport); |
| 1823 viewport, | |
| 1824 viewport, | |
| 1825 transform, | |
| 1826 resourceless_software_draw); | |
| 1827 | 1793 |
| 1828 scoped_refptr<FakeDisplayListRasterSource> pending_raster_source = | 1794 scoped_refptr<FakeDisplayListRasterSource> pending_raster_source = |
| 1829 FakeDisplayListRasterSource::CreateFilled(layer_bounds); | 1795 FakeDisplayListRasterSource::CreateFilled(layer_bounds); |
| 1830 SetupPendingTreeWithFixedTileSize(pending_raster_source, gfx::Size(100, 100), | 1796 SetupPendingTreeWithFixedTileSize(pending_raster_source, gfx::Size(100, 100), |
| 1831 Region()); | 1797 Region()); |
| 1832 | 1798 |
| 1833 EXPECT_EQ(1u, pending_layer_->num_tilings()); | 1799 EXPECT_EQ(1u, pending_layer_->num_tilings()); |
| 1834 EXPECT_EQ(viewport, pending_layer_->visible_rect_for_tile_priority()); | 1800 EXPECT_EQ(viewport, pending_layer_->visible_rect_for_tile_priority()); |
| 1835 | 1801 |
| 1836 base::TimeTicks time_ticks; | 1802 base::TimeTicks time_ticks; |
| (...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1870 SetupDefaultTreesWithFixedTileSize(layer_bounds, tile_size, Region()); | 1836 SetupDefaultTreesWithFixedTileSize(layer_bounds, tile_size, Region()); |
| 1871 | 1837 |
| 1872 ASSERT_EQ(1u, pending_layer_->num_tilings()); | 1838 ASSERT_EQ(1u, pending_layer_->num_tilings()); |
| 1873 ASSERT_EQ(1.f, pending_layer_->HighResTiling()->contents_scale()); | 1839 ASSERT_EQ(1.f, pending_layer_->HighResTiling()->contents_scale()); |
| 1874 | 1840 |
| 1875 // Set external viewport for tile priority. | 1841 // Set external viewport for tile priority. |
| 1876 gfx::Rect viewport = gfx::Rect(layer_bounds); | 1842 gfx::Rect viewport = gfx::Rect(layer_bounds); |
| 1877 gfx::Transform transform; | 1843 gfx::Transform transform; |
| 1878 gfx::Transform transform_for_tile_priority; | 1844 gfx::Transform transform_for_tile_priority; |
| 1879 bool resourceless_software_draw = false; | 1845 bool resourceless_software_draw = false; |
| 1880 host_impl_.SetExternalDrawConstraints(transform, | 1846 host_impl_.SetExternalTilePriorityConstraints( |
| 1881 viewport, | 1847 external_viewport_for_tile_priority, transform_for_tile_priority); |
| 1882 viewport, | |
| 1883 external_viewport_for_tile_priority, | |
| 1884 transform_for_tile_priority, | |
| 1885 resourceless_software_draw); | |
| 1886 host_impl_.AdvanceToNextFrame(base::TimeDelta::FromMilliseconds(1)); | 1848 host_impl_.AdvanceToNextFrame(base::TimeDelta::FromMilliseconds(1)); |
| 1887 bool update_lcd_text = false; | 1849 bool update_lcd_text = false; |
| 1888 host_impl_.pending_tree()->UpdateDrawProperties(update_lcd_text); | 1850 host_impl_.pending_tree()->UpdateDrawProperties(update_lcd_text); |
| 1889 | 1851 |
| 1890 // Set visible content rect that is different from | 1852 // Set visible content rect that is different from |
| 1891 // external_viewport_for_tile_priority. | 1853 // external_viewport_for_tile_priority. |
| 1892 pending_layer_->draw_properties().visible_layer_rect = visible_layer_rect; | 1854 pending_layer_->draw_properties().visible_layer_rect = visible_layer_rect; |
| 1893 host_impl_.AdvanceToNextFrame(base::TimeDelta::FromMilliseconds(200)); | 1855 host_impl_.AdvanceToNextFrame(base::TimeDelta::FromMilliseconds(200)); |
| 1894 pending_layer_->UpdateTiles(resourceless_software_draw); | 1856 pending_layer_->UpdateTiles(resourceless_software_draw); |
| 1895 | 1857 |
| (...skipping 1723 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3619 | 3581 |
| 3620 SetupDrawPropertiesAndUpdateTiles(active_layer_, 1.f, 1.f, 1.f, 1.f, 0.f, | 3582 SetupDrawPropertiesAndUpdateTiles(active_layer_, 1.f, 1.f, 1.f, 1.f, 0.f, |
| 3621 false); | 3583 false); |
| 3622 | 3584 |
| 3623 // UpdateTiles with valid viewport. Should update tile viewport. | 3585 // UpdateTiles with valid viewport. Should update tile viewport. |
| 3624 // Note viewport is considered invalid if and only if in resourceless | 3586 // Note viewport is considered invalid if and only if in resourceless |
| 3625 // software draw. | 3587 // software draw. |
| 3626 bool resourceless_software_draw = false; | 3588 bool resourceless_software_draw = false; |
| 3627 gfx::Rect viewport = gfx::Rect(layer_bounds); | 3589 gfx::Rect viewport = gfx::Rect(layer_bounds); |
| 3628 gfx::Transform transform; | 3590 gfx::Transform transform; |
| 3629 host_impl_.SetExternalDrawConstraints(transform, | 3591 host_impl_.SetExternalTilePriorityConstraints(viewport, transform); |
| 3630 viewport, | |
| 3631 viewport, | |
| 3632 viewport, | |
| 3633 transform, | |
| 3634 resourceless_software_draw); | |
| 3635 active_layer_->draw_properties().visible_layer_rect = viewport; | 3592 active_layer_->draw_properties().visible_layer_rect = viewport; |
| 3636 active_layer_->draw_properties().screen_space_transform = transform; | 3593 active_layer_->draw_properties().screen_space_transform = transform; |
| 3637 active_layer_->UpdateTiles(resourceless_software_draw); | 3594 active_layer_->UpdateTiles(resourceless_software_draw); |
| 3638 | 3595 |
| 3639 gfx::Rect visible_rect_for_tile_priority = | 3596 gfx::Rect visible_rect_for_tile_priority = |
| 3640 active_layer_->visible_rect_for_tile_priority(); | 3597 active_layer_->visible_rect_for_tile_priority(); |
| 3641 EXPECT_FALSE(visible_rect_for_tile_priority.IsEmpty()); | 3598 EXPECT_FALSE(visible_rect_for_tile_priority.IsEmpty()); |
| 3642 gfx::Transform screen_space_transform_for_tile_priority = | 3599 gfx::Transform screen_space_transform_for_tile_priority = |
| 3643 active_layer_->draw_properties().screen_space_transform; | 3600 active_layer_->draw_properties().screen_space_transform; |
| 3644 | 3601 |
| 3645 // Expand viewport and set it as invalid for prioritizing tiles. | 3602 // Expand viewport and set it as invalid for prioritizing tiles. |
| 3646 // Should update viewport and transform, but not update visible rect. | 3603 // Should update viewport and transform, but not update visible rect. |
| 3647 host_impl_.AdvanceToNextFrame(base::TimeDelta::FromMilliseconds(200)); | 3604 host_impl_.AdvanceToNextFrame(base::TimeDelta::FromMilliseconds(200)); |
| 3648 resourceless_software_draw = true; | 3605 resourceless_software_draw = true; |
| 3649 viewport = gfx::ScaleToEnclosingRect(viewport, 2); | 3606 viewport = gfx::ScaleToEnclosingRect(viewport, 2); |
| 3650 transform.Translate(1.f, 1.f); | 3607 transform.Translate(1.f, 1.f); |
| 3651 active_layer_->draw_properties().visible_layer_rect = viewport; | 3608 active_layer_->draw_properties().visible_layer_rect = viewport; |
| 3652 active_layer_->draw_properties().screen_space_transform = transform; | 3609 active_layer_->draw_properties().screen_space_transform = transform; |
| 3653 host_impl_.SetExternalDrawConstraints(transform, | 3610 host_impl_.SetExternalTilePriorityConstraints(viewport, transform); |
| 3654 viewport, | |
| 3655 viewport, | |
| 3656 viewport, | |
| 3657 transform, | |
| 3658 resourceless_software_draw); | |
| 3659 active_layer_->UpdateTiles(resourceless_software_draw); | 3611 active_layer_->UpdateTiles(resourceless_software_draw); |
| 3660 | 3612 |
| 3661 // Transform for tile priority is updated. | 3613 // Transform for tile priority is updated. |
| 3662 EXPECT_TRANSFORMATION_MATRIX_EQ( | 3614 EXPECT_TRANSFORMATION_MATRIX_EQ( |
| 3663 transform, active_layer_->draw_properties().screen_space_transform); | 3615 transform, active_layer_->draw_properties().screen_space_transform); |
| 3664 // Visible rect for tile priority retains old value. | 3616 // Visible rect for tile priority retains old value. |
| 3665 EXPECT_EQ(visible_rect_for_tile_priority, | 3617 EXPECT_EQ(visible_rect_for_tile_priority, |
| 3666 active_layer_->visible_rect_for_tile_priority()); | 3618 active_layer_->visible_rect_for_tile_priority()); |
| 3667 | 3619 |
| 3668 // Keep expanded viewport but mark it valid. Should update tile viewport. | 3620 // Keep expanded viewport but mark it valid. Should update tile viewport. |
| 3669 host_impl_.AdvanceToNextFrame(base::TimeDelta::FromMilliseconds(200)); | 3621 host_impl_.AdvanceToNextFrame(base::TimeDelta::FromMilliseconds(200)); |
| 3670 resourceless_software_draw = false; | 3622 resourceless_software_draw = false; |
| 3671 host_impl_.SetExternalDrawConstraints(transform, | 3623 host_impl_.SetExternalTilePriorityConstraints(viewport, transform); |
| 3672 viewport, | |
| 3673 viewport, | |
| 3674 viewport, | |
| 3675 transform, | |
| 3676 resourceless_software_draw); | |
| 3677 active_layer_->UpdateTiles(resourceless_software_draw); | 3624 active_layer_->UpdateTiles(resourceless_software_draw); |
| 3678 | 3625 |
| 3679 EXPECT_TRANSFORMATION_MATRIX_EQ( | 3626 EXPECT_TRANSFORMATION_MATRIX_EQ( |
| 3680 transform, active_layer_->draw_properties().screen_space_transform); | 3627 transform, active_layer_->draw_properties().screen_space_transform); |
| 3681 EXPECT_EQ(viewport, active_layer_->visible_rect_for_tile_priority()); | 3628 EXPECT_EQ(viewport, active_layer_->visible_rect_for_tile_priority()); |
| 3682 } | 3629 } |
| 3683 | 3630 |
| 3684 TEST_F(NoLowResPictureLayerImplTest, CleanUpTilings) { | 3631 TEST_F(NoLowResPictureLayerImplTest, CleanUpTilings) { |
| 3685 gfx::Size layer_bounds(1300, 1900); | 3632 gfx::Size layer_bounds(1300, 1900); |
| 3686 std::vector<PictureLayerTiling*> used_tilings; | 3633 std::vector<PictureLayerTiling*> used_tilings; |
| (...skipping 1095 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4782 scoped_refptr<FakeDisplayListRasterSource> pending_raster_source = | 4729 scoped_refptr<FakeDisplayListRasterSource> pending_raster_source = |
| 4783 FakeDisplayListRasterSource::CreateFilled(layer_bounds); | 4730 FakeDisplayListRasterSource::CreateFilled(layer_bounds); |
| 4784 scoped_refptr<FakeDisplayListRasterSource> active_raster_source = | 4731 scoped_refptr<FakeDisplayListRasterSource> active_raster_source = |
| 4785 FakeDisplayListRasterSource::CreateFilled(layer_bounds); | 4732 FakeDisplayListRasterSource::CreateFilled(layer_bounds); |
| 4786 | 4733 |
| 4787 SetupPendingTreeWithFixedTileSize(active_raster_source, tile_size, Region()); | 4734 SetupPendingTreeWithFixedTileSize(active_raster_source, tile_size, Region()); |
| 4788 | 4735 |
| 4789 ActivateTree(); | 4736 ActivateTree(); |
| 4790 EXPECT_TRUE(active_layer_->HighResTiling()->has_tiles()); | 4737 EXPECT_TRUE(active_layer_->HighResTiling()->has_tiles()); |
| 4791 | 4738 |
| 4792 host_impl_.SetExternalDrawConstraints( | 4739 host_impl_.SetExternalTilePriorityConstraints(gfx::Rect(0, 5000, 100, 100), |
| 4793 gfx::Transform(), // transform | 4740 gfx::Transform()); |
| 4794 gfx::Rect(), // clip | |
| 4795 gfx::Rect(), // viewport | |
| 4796 gfx::Rect(0, 5000, 100, 100), // viewport_rect_for_tile_priority | |
| 4797 gfx::Transform(), // transform_for_tile_priority | |
| 4798 false); | |
| 4799 | 4741 |
| 4800 SetupPendingTreeWithFixedTileSize(pending_raster_source, tile_size, | 4742 SetupPendingTreeWithFixedTileSize(pending_raster_source, tile_size, |
| 4801 gfx::Rect()); | 4743 gfx::Rect()); |
| 4802 | 4744 |
| 4803 EXPECT_FALSE(pending_layer_->HighResTiling()->has_tiles()); | 4745 EXPECT_FALSE(pending_layer_->HighResTiling()->has_tiles()); |
| 4804 EXPECT_TRUE(pending_layer_->HighResTiling()->live_tiles_rect().IsEmpty()); | 4746 EXPECT_TRUE(pending_layer_->HighResTiling()->live_tiles_rect().IsEmpty()); |
| 4805 ActivateTree(); | 4747 ActivateTree(); |
| 4806 EXPECT_FALSE(active_layer_->HighResTiling()->has_tiles()); | 4748 EXPECT_FALSE(active_layer_->HighResTiling()->has_tiles()); |
| 4807 EXPECT_TRUE(active_layer_->HighResTiling()->live_tiles_rect().IsEmpty()); | 4749 EXPECT_TRUE(active_layer_->HighResTiling()->live_tiles_rect().IsEmpty()); |
| 4808 | 4750 |
| 4809 host_impl_.SetExternalDrawConstraints( | 4751 host_impl_.SetExternalTilePriorityConstraints(gfx::Rect(0, 110, 100, 100), |
| 4810 gfx::Transform(), // transform | 4752 gfx::Transform()); |
| 4811 gfx::Rect(), // clip | |
| 4812 gfx::Rect(), // viewport | |
| 4813 gfx::Rect(0, 110, 100, 100), // viewport_rect_for_tile_priority | |
| 4814 gfx::Transform(), // transform_for_tile_priority | |
| 4815 false); | |
| 4816 | 4753 |
| 4817 SetupPendingTreeWithFixedTileSize(pending_raster_source, tile_size, | 4754 SetupPendingTreeWithFixedTileSize(pending_raster_source, tile_size, |
| 4818 gfx::Rect()); | 4755 gfx::Rect()); |
| 4819 | 4756 |
| 4820 EXPECT_FALSE(pending_layer_->HighResTiling()->has_tiles()); | 4757 EXPECT_FALSE(pending_layer_->HighResTiling()->has_tiles()); |
| 4821 EXPECT_FALSE(pending_layer_->HighResTiling()->live_tiles_rect().IsEmpty()); | 4758 EXPECT_FALSE(pending_layer_->HighResTiling()->live_tiles_rect().IsEmpty()); |
| 4822 ActivateTree(); | 4759 ActivateTree(); |
| 4823 EXPECT_TRUE(active_layer_->HighResTiling()->has_tiles()); | 4760 EXPECT_TRUE(active_layer_->HighResTiling()->has_tiles()); |
| 4824 EXPECT_FALSE(active_layer_->HighResTiling()->live_tiles_rect().IsEmpty()); | 4761 EXPECT_FALSE(active_layer_->HighResTiling()->live_tiles_rect().IsEmpty()); |
| 4825 } | 4762 } |
| (...skipping 258 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 5084 // New low res tiling. | 5021 // New low res tiling. |
| 5085 EXPECT_TRUE(tilings->tiling_at(2)->may_contain_low_resolution_tiles()); | 5022 EXPECT_TRUE(tilings->tiling_at(2)->may_contain_low_resolution_tiles()); |
| 5086 | 5023 |
| 5087 // This tiling will be high res now, it won't contain low res content since it | 5024 // This tiling will be high res now, it won't contain low res content since it |
| 5088 // was all destroyed. | 5025 // was all destroyed. |
| 5089 EXPECT_FALSE(tilings->tiling_at(1)->may_contain_low_resolution_tiles()); | 5026 EXPECT_FALSE(tilings->tiling_at(1)->may_contain_low_resolution_tiles()); |
| 5090 } | 5027 } |
| 5091 | 5028 |
| 5092 } // namespace | 5029 } // namespace |
| 5093 } // namespace cc | 5030 } // namespace cc |
| OLD | NEW |