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 1389 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1400 AppendQuadsData data; | 1400 AppendQuadsData data; |
1401 active_layer_->WillDraw(DRAW_MODE_RESOURCELESS_SOFTWARE, NULL); | 1401 active_layer_->WillDraw(DRAW_MODE_RESOURCELESS_SOFTWARE, NULL); |
1402 active_layer_->AppendQuads(render_pass.get(), occlusion_tracker, &data); | 1402 active_layer_->AppendQuads(render_pass.get(), occlusion_tracker, &data); |
1403 active_layer_->DidDraw(NULL); | 1403 active_layer_->DidDraw(NULL); |
1404 | 1404 |
1405 ASSERT_EQ(1U, render_pass->quad_list.size()); | 1405 ASSERT_EQ(1U, render_pass->quad_list.size()); |
1406 EXPECT_EQ(DrawQuad::PICTURE_CONTENT, | 1406 EXPECT_EQ(DrawQuad::PICTURE_CONTENT, |
1407 render_pass->quad_list.front()->material); | 1407 render_pass->quad_list.front()->material); |
1408 } | 1408 } |
1409 | 1409 |
1410 TEST_F(PictureLayerImplTest, MarkRequiredNullTiles) { | |
1411 gfx::Size tile_size(100, 100); | |
1412 gfx::Size layer_bounds(1000, 1000); | |
1413 | |
1414 scoped_refptr<FakePicturePileImpl> pending_pile = | |
1415 FakePicturePileImpl::CreateEmptyPile(tile_size, layer_bounds); | |
1416 // Layers with entirely empty piles can't get tilings. | |
1417 pending_pile->AddRecordingAt(0, 0); | |
1418 | |
1419 SetupPendingTree(pending_pile); | |
1420 | |
1421 ASSERT_TRUE(pending_layer_->CanHaveTilings()); | |
1422 pending_layer_->AddTiling(1.0f); | |
1423 pending_layer_->AddTiling(2.0f); | |
1424 | |
1425 // It should be safe to call this (and MarkVisibleResourcesAsRequired) | |
1426 // on a layer with no recordings. | |
1427 host_impl_.pending_tree()->UpdateDrawProperties(); | |
1428 pending_layer_->MarkVisibleResourcesAsRequired(); | |
1429 } | |
1430 | |
1431 TEST_F(PictureLayerImplTest, MarkRequiredOffscreenTiles) { | 1410 TEST_F(PictureLayerImplTest, MarkRequiredOffscreenTiles) { |
1432 gfx::Size tile_size(100, 100); | 1411 gfx::Size tile_size(100, 100); |
1433 gfx::Size layer_bounds(200, 200); | 1412 gfx::Size layer_bounds(200, 200); |
1434 | 1413 |
1435 scoped_refptr<FakePicturePileImpl> pending_pile = | 1414 scoped_refptr<FakePicturePileImpl> pending_pile = |
1436 FakePicturePileImpl::CreateFilledPile(tile_size, layer_bounds); | 1415 FakePicturePileImpl::CreateFilledPile(tile_size, layer_bounds); |
1437 SetupPendingTree(pending_pile); | 1416 SetupPendingTree(pending_pile); |
1438 | 1417 |
1439 gfx::Transform transform; | 1418 gfx::Transform transform; |
1440 gfx::Transform transform_for_tile_priority; | 1419 gfx::Transform transform_for_tile_priority; |
1441 bool resourceless_software_draw = false; | 1420 bool resourceless_software_draw = false; |
1442 gfx::Rect viewport(0, 0, 100, 200); | 1421 gfx::Rect viewport(0, 0, 100, 200); |
1443 host_impl_.SetExternalDrawConstraints(transform, | 1422 host_impl_.SetExternalDrawConstraints(transform, |
1444 viewport, | 1423 viewport, |
1445 viewport, | 1424 viewport, |
1446 viewport, | 1425 viewport, |
1447 transform, | 1426 transform, |
1448 resourceless_software_draw); | 1427 resourceless_software_draw); |
1449 | 1428 |
1450 pending_layer_->set_fixed_tile_size(tile_size); | 1429 pending_layer_->set_fixed_tile_size(tile_size); |
1451 ASSERT_TRUE(pending_layer_->CanHaveTilings()); | 1430 ASSERT_TRUE(pending_layer_->CanHaveTilings()); |
1452 PictureLayerTiling* tiling = pending_layer_->AddTiling(1.f); | 1431 PictureLayerTiling* tiling = pending_layer_->AddTiling(1.f); |
1453 host_impl_.pending_tree()->UpdateDrawProperties(); | 1432 host_impl_.pending_tree()->UpdateDrawProperties(); |
1454 EXPECT_EQ(tiling->resolution(), HIGH_RESOLUTION); | |
1455 EXPECT_EQ(viewport, pending_layer_->visible_rect_for_tile_priority()); | 1433 EXPECT_EQ(viewport, pending_layer_->visible_rect_for_tile_priority()); |
1456 | 1434 |
1457 // Fake set priorities. | 1435 base::TimeTicks time_ticks; |
1458 for (PictureLayerTiling::CoverageIterator iter( | 1436 time_ticks += base::TimeDelta::FromMilliseconds(1); |
1459 tiling, pending_layer_->contents_scale_x(), gfx::Rect(layer_bounds)); | 1437 host_impl_.SetCurrentBeginFrameArgs( |
1460 iter; | 1438 CreateBeginFrameArgsForTesting(time_ticks)); |
1461 ++iter) { | 1439 pending_layer_->UpdateTiles(Occlusion(), resourceless_software_draw); |
1462 if (!*iter) | 1440 EXPECT_EQ(HIGH_RESOLUTION, tiling->resolution()); |
1463 continue; | |
1464 Tile* tile = *iter; | |
1465 TilePriority priority; | |
1466 priority.resolution = HIGH_RESOLUTION; | |
1467 gfx::Rect tile_bounds = iter.geometry_rect(); | |
1468 if (pending_layer_->visible_rect_for_tile_priority().Intersects( | |
1469 tile_bounds)) { | |
1470 priority.priority_bin = TilePriority::NOW; | |
1471 priority.distance_to_visible = 0.f; | |
1472 } else { | |
1473 priority.priority_bin = TilePriority::SOON; | |
1474 priority.distance_to_visible = 1.f; | |
1475 } | |
1476 tile->SetPriority(PENDING_TREE, priority); | |
1477 } | |
1478 | |
1479 pending_layer_->MarkVisibleResourcesAsRequired(); | |
1480 | 1441 |
1481 int num_visible = 0; | 1442 int num_visible = 0; |
1482 int num_offscreen = 0; | 1443 int num_offscreen = 0; |
1483 | 1444 |
1484 for (PictureLayerTiling::CoverageIterator iter( | 1445 for (PictureLayerTiling::TilingRasterTileIterator iter(tiling); iter; |
1485 tiling, pending_layer_->contents_scale_x(), gfx::Rect(layer_bounds)); | |
1486 iter; | |
1487 ++iter) { | 1446 ++iter) { |
1488 if (!*iter) | |
1489 continue; | |
1490 const Tile* tile = *iter; | 1447 const Tile* tile = *iter; |
1448 DCHECK(tile); | |
1491 if (tile->priority(PENDING_TREE).distance_to_visible == 0.f) { | 1449 if (tile->priority(PENDING_TREE).distance_to_visible == 0.f) { |
1492 EXPECT_TRUE(tile->required_for_activation()); | 1450 EXPECT_TRUE(tile->required_for_activation()); |
1493 num_visible++; | 1451 num_visible++; |
1494 } else { | 1452 } else { |
1495 EXPECT_FALSE(tile->required_for_activation()); | 1453 EXPECT_FALSE(tile->required_for_activation()); |
1496 num_offscreen++; | 1454 num_offscreen++; |
1497 } | 1455 } |
1498 } | 1456 } |
1499 | 1457 |
1500 EXPECT_GT(num_visible, 0); | 1458 EXPECT_GT(num_visible, 0); |
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1537 host_impl_.pending_tree()->UpdateDrawProperties(); | 1495 host_impl_.pending_tree()->UpdateDrawProperties(); |
1538 | 1496 |
1539 // Set visible content rect that is different from | 1497 // Set visible content rect that is different from |
1540 // external_viewport_for_tile_priority. | 1498 // external_viewport_for_tile_priority. |
1541 pending_layer_->draw_properties().visible_content_rect = visible_content_rect; | 1499 pending_layer_->draw_properties().visible_content_rect = visible_content_rect; |
1542 time_ticks += base::TimeDelta::FromMilliseconds(200); | 1500 time_ticks += base::TimeDelta::FromMilliseconds(200); |
1543 host_impl_.SetCurrentBeginFrameArgs( | 1501 host_impl_.SetCurrentBeginFrameArgs( |
1544 CreateBeginFrameArgsForTesting(time_ticks)); | 1502 CreateBeginFrameArgsForTesting(time_ticks)); |
1545 pending_layer_->UpdateTiles(Occlusion(), resourceless_software_draw); | 1503 pending_layer_->UpdateTiles(Occlusion(), resourceless_software_draw); |
1546 | 1504 |
1547 pending_layer_->MarkVisibleResourcesAsRequired(); | |
1548 | |
1549 // Intersect the two rects. Any tile outside should not be required for | 1505 // Intersect the two rects. Any tile outside should not be required for |
1550 // activation. | 1506 // activation. |
1551 gfx::Rect viewport_for_tile_priority = | 1507 gfx::Rect viewport_for_tile_priority = |
1552 pending_layer_->GetViewportForTilePriorityInContentSpace(); | 1508 pending_layer_->GetViewportForTilePriorityInContentSpace(); |
1553 viewport_for_tile_priority.Intersect(pending_layer_->visible_content_rect()); | 1509 viewport_for_tile_priority.Intersect(pending_layer_->visible_content_rect()); |
1554 | 1510 |
1555 int num_inside = 0; | 1511 int num_inside = 0; |
1556 int num_outside = 0; | 1512 int num_outside = 0; |
1557 for (PictureLayerTiling::CoverageIterator iter( | 1513 for (PictureLayerTiling::CoverageIterator iter( |
1558 tiling, pending_layer_->contents_scale_x(), gfx::Rect(layer_bounds)); | 1514 tiling, pending_layer_->contents_scale_x(), gfx::Rect(layer_bounds)); |
(...skipping 188 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1747 | 1703 |
1748 // No tiles shared. | 1704 // No tiles shared. |
1749 pending_layer_->set_invalidation(gfx::Rect(layer_bounds)); | 1705 pending_layer_->set_invalidation(gfx::Rect(layer_bounds)); |
1750 | 1706 |
1751 CreateHighLowResAndSetAllTilesVisible(); | 1707 CreateHighLowResAndSetAllTilesVisible(); |
1752 | 1708 |
1753 active_layer_->SetAllTilesReady(); | 1709 active_layer_->SetAllTilesReady(); |
1754 | 1710 |
1755 // No shared tiles and all active tiles ready, so pending can only | 1711 // No shared tiles and all active tiles ready, so pending can only |
1756 // activate with all high res tiles. | 1712 // activate with all high res tiles. |
1757 pending_layer_->MarkVisibleResourcesAsRequired(); | 1713 pending_layer_->HighResTiling()->UpdateAllTilePrioritiesForTesting(); |
1714 pending_layer_->LowResTiling()->UpdateAllTilePrioritiesForTesting(); | |
1715 | |
1758 AssertAllTilesRequired(pending_layer_->HighResTiling()); | 1716 AssertAllTilesRequired(pending_layer_->HighResTiling()); |
1759 AssertNoTilesRequired(pending_layer_->LowResTiling()); | 1717 AssertNoTilesRequired(pending_layer_->LowResTiling()); |
1760 } | 1718 } |
1761 | 1719 |
1762 TEST_F(PictureLayerImplTest, HighResRequiredWhenMissingHighResFlagOn) { | 1720 TEST_F(PictureLayerImplTest, HighResRequiredWhenMissingHighResFlagOn) { |
1763 gfx::Size layer_bounds(400, 400); | 1721 gfx::Size layer_bounds(400, 400); |
1764 gfx::Size tile_size(100, 100); | 1722 gfx::Size tile_size(100, 100); |
1765 SetupDefaultTreesWithFixedTileSize(layer_bounds, tile_size); | 1723 SetupDefaultTreesWithFixedTileSize(layer_bounds, tile_size); |
1766 | 1724 |
1767 // All tiles shared (no invalidation). | 1725 // All tiles shared (no invalidation). |
1768 CreateHighLowResAndSetAllTilesVisible(); | 1726 CreateHighLowResAndSetAllTilesVisible(); |
1769 | 1727 |
1770 // Verify active tree not ready. | 1728 // Verify active tree not ready. |
1771 Tile* some_active_tile = | 1729 Tile* some_active_tile = |
1772 active_layer_->HighResTiling()->AllTilesForTesting()[0]; | 1730 active_layer_->HighResTiling()->AllTilesForTesting()[0]; |
1773 EXPECT_FALSE(some_active_tile->IsReadyToDraw()); | 1731 EXPECT_FALSE(some_active_tile->IsReadyToDraw()); |
1774 | 1732 |
1775 // When high res are required, even if the active tree is not ready, | 1733 // When high res are required, even if the active tree is not ready, |
1776 // the high res tiles must be ready. | 1734 // the high res tiles must be ready. |
1777 host_impl_.active_tree()->SetRequiresHighResToDraw(); | 1735 host_impl_.active_tree()->SetRequiresHighResToDraw(); |
1778 pending_layer_->MarkVisibleResourcesAsRequired(); | 1736 |
1737 pending_layer_->HighResTiling()->UpdateAllTilePrioritiesForTesting(); | |
1738 pending_layer_->LowResTiling()->UpdateAllTilePrioritiesForTesting(); | |
1739 | |
1779 AssertAllTilesRequired(pending_layer_->HighResTiling()); | 1740 AssertAllTilesRequired(pending_layer_->HighResTiling()); |
1780 AssertNoTilesRequired(pending_layer_->LowResTiling()); | 1741 AssertNoTilesRequired(pending_layer_->LowResTiling()); |
1781 } | 1742 } |
1782 | 1743 |
1783 TEST_F(PictureLayerImplTest, NothingRequiredIfAllHighResTilesShared) { | 1744 TEST_F(PictureLayerImplTest, AllHighResRequiredEvenIfShared) { |
1784 gfx::Size layer_bounds(400, 400); | 1745 gfx::Size layer_bounds(400, 400); |
1785 gfx::Size tile_size(100, 100); | 1746 gfx::Size tile_size(100, 100); |
1786 SetupDefaultTreesWithFixedTileSize(layer_bounds, tile_size); | 1747 SetupDefaultTreesWithFixedTileSize(layer_bounds, tile_size); |
1787 | 1748 |
1788 CreateHighLowResAndSetAllTilesVisible(); | 1749 CreateHighLowResAndSetAllTilesVisible(); |
1789 | 1750 |
1790 Tile* some_active_tile = | 1751 Tile* some_active_tile = |
1791 active_layer_->HighResTiling()->AllTilesForTesting()[0]; | 1752 active_layer_->HighResTiling()->AllTilesForTesting()[0]; |
1792 EXPECT_FALSE(some_active_tile->IsReadyToDraw()); | 1753 EXPECT_FALSE(some_active_tile->IsReadyToDraw()); |
1793 | 1754 |
1794 // All tiles shared (no invalidation), so even though the active tree's | 1755 // All tiles shared (no invalidation), so even though the active tree's |
1795 // tiles aren't ready, there is nothing required. | 1756 // tiles aren't ready, there is nothing required. |
1796 pending_layer_->MarkVisibleResourcesAsRequired(); | 1757 pending_layer_->HighResTiling()->UpdateAllTilePrioritiesForTesting(); |
1797 AssertNoTilesRequired(pending_layer_->HighResTiling()); | 1758 pending_layer_->LowResTiling()->UpdateAllTilePrioritiesForTesting(); |
1759 | |
1760 AssertAllTilesRequired(pending_layer_->HighResTiling()); | |
1798 AssertNoTilesRequired(pending_layer_->LowResTiling()); | 1761 AssertNoTilesRequired(pending_layer_->LowResTiling()); |
1799 } | 1762 } |
1800 | 1763 |
1801 TEST_F(PictureLayerImplTest, NothingRequiredIfActiveMissingTiles) { | 1764 TEST_F(PictureLayerImplTest, NothingRequiredIfActiveMissingTiles) { |
1802 gfx::Size layer_bounds(400, 400); | 1765 gfx::Size layer_bounds(400, 400); |
1803 gfx::Size tile_size(100, 100); | 1766 gfx::Size tile_size(100, 100); |
1804 scoped_refptr<FakePicturePileImpl> pending_pile = | 1767 scoped_refptr<FakePicturePileImpl> pending_pile = |
1805 FakePicturePileImpl::CreateFilledPile(tile_size, layer_bounds); | 1768 FakePicturePileImpl::CreateFilledPile(tile_size, layer_bounds); |
1806 // This pile will create tilings, but has no recordings so will not create any | 1769 // This pile will create tilings, but has no recordings so will not create any |
1807 // tiles. This is attempting to simulate scrolling past the end of recorded | 1770 // tiles. This is attempting to simulate scrolling past the end of recorded |
1808 // content on the active layer, where the recordings are so far away that | 1771 // content on the active layer, where the recordings are so far away that |
1809 // no tiles are created. | 1772 // no tiles are created. |
1810 scoped_refptr<FakePicturePileImpl> active_pile = | 1773 scoped_refptr<FakePicturePileImpl> active_pile = |
1811 FakePicturePileImpl::CreateEmptyPileThatThinksItHasRecordings( | 1774 FakePicturePileImpl::CreateEmptyPileThatThinksItHasRecordings( |
1812 tile_size, layer_bounds); | 1775 tile_size, layer_bounds); |
1813 SetupTrees(pending_pile, active_pile); | 1776 SetupTrees(pending_pile, active_pile); |
1814 pending_layer_->set_fixed_tile_size(tile_size); | 1777 pending_layer_->set_fixed_tile_size(tile_size); |
1815 active_layer_->set_fixed_tile_size(tile_size); | 1778 active_layer_->set_fixed_tile_size(tile_size); |
1816 | 1779 |
1817 CreateHighLowResAndSetAllTilesVisible(); | 1780 CreateHighLowResAndSetAllTilesVisible(); |
1818 | 1781 |
1819 // Active layer has tilings, but no tiles due to missing recordings. | 1782 // Active layer has tilings, but no tiles due to missing recordings. |
1820 EXPECT_TRUE(active_layer_->CanHaveTilings()); | 1783 EXPECT_TRUE(active_layer_->CanHaveTilings()); |
1821 EXPECT_EQ(active_layer_->tilings()->num_tilings(), 2u); | 1784 EXPECT_EQ(active_layer_->tilings()->num_tilings(), 2u); |
1822 EXPECT_EQ(active_layer_->HighResTiling()->AllTilesForTesting().size(), 0u); | 1785 EXPECT_EQ(active_layer_->HighResTiling()->AllTilesForTesting().size(), 0u); |
1823 | 1786 |
1824 // Since the active layer has no tiles at all, the pending layer doesn't | 1787 // Since the active layer has no tiles at all, the pending layer doesn't |
1825 // need content in order to activate. | 1788 // need content in order to activate. |
1826 pending_layer_->MarkVisibleResourcesAsRequired(); | 1789 pending_layer_->HighResTiling()->UpdateAllTilePrioritiesForTesting(); |
1790 pending_layer_->LowResTiling()->UpdateAllTilePrioritiesForTesting(); | |
1791 | |
1827 AssertNoTilesRequired(pending_layer_->HighResTiling()); | 1792 AssertNoTilesRequired(pending_layer_->HighResTiling()); |
1828 AssertNoTilesRequired(pending_layer_->LowResTiling()); | 1793 AssertNoTilesRequired(pending_layer_->LowResTiling()); |
1829 } | 1794 } |
1830 | 1795 |
1831 TEST_F(PictureLayerImplTest, HighResRequiredIfActiveCantHaveTiles) { | 1796 TEST_F(PictureLayerImplTest, HighResRequiredIfActiveCantHaveTiles) { |
1832 gfx::Size layer_bounds(400, 400); | 1797 gfx::Size layer_bounds(400, 400); |
1833 gfx::Size tile_size(100, 100); | 1798 gfx::Size tile_size(100, 100); |
1834 scoped_refptr<FakePicturePileImpl> pending_pile = | 1799 scoped_refptr<FakePicturePileImpl> pending_pile = |
1835 FakePicturePileImpl::CreateFilledPile(tile_size, layer_bounds); | 1800 FakePicturePileImpl::CreateFilledPile(tile_size, layer_bounds); |
1836 scoped_refptr<FakePicturePileImpl> active_pile = | 1801 scoped_refptr<FakePicturePileImpl> active_pile = |
1837 FakePicturePileImpl::CreateEmptyPile(tile_size, layer_bounds); | 1802 FakePicturePileImpl::CreateEmptyPile(tile_size, layer_bounds); |
1838 SetupTrees(pending_pile, active_pile); | 1803 SetupTrees(pending_pile, active_pile); |
1839 pending_layer_->set_fixed_tile_size(tile_size); | 1804 pending_layer_->set_fixed_tile_size(tile_size); |
1840 active_layer_->set_fixed_tile_size(tile_size); | 1805 active_layer_->set_fixed_tile_size(tile_size); |
1841 | 1806 |
1842 CreateHighLowResAndSetAllTilesVisible(); | 1807 CreateHighLowResAndSetAllTilesVisible(); |
1843 | 1808 |
1844 // Active layer can't have tiles. | 1809 // Active layer can't have tiles. |
1845 EXPECT_FALSE(active_layer_->CanHaveTilings()); | 1810 EXPECT_FALSE(active_layer_->CanHaveTilings()); |
1846 | 1811 |
1847 // All high res tiles required. This should be considered identical | 1812 // All high res tiles required. This should be considered identical |
1848 // to the case where there is no active layer, to avoid flashing content. | 1813 // to the case where there is no active layer, to avoid flashing content. |
1849 // This can happen if a layer exists for a while and switches from | 1814 // This can happen if a layer exists for a while and switches from |
1850 // not being able to have content to having content. | 1815 // not being able to have content to having content. |
1851 pending_layer_->MarkVisibleResourcesAsRequired(); | 1816 pending_layer_->HighResTiling()->UpdateAllTilePrioritiesForTesting(); |
1817 pending_layer_->LowResTiling()->UpdateAllTilePrioritiesForTesting(); | |
1818 | |
1852 AssertAllTilesRequired(pending_layer_->HighResTiling()); | 1819 AssertAllTilesRequired(pending_layer_->HighResTiling()); |
1853 AssertNoTilesRequired(pending_layer_->LowResTiling()); | 1820 AssertNoTilesRequired(pending_layer_->LowResTiling()); |
1854 } | 1821 } |
1855 | 1822 |
1856 TEST_F(PictureLayerImplTest, HighResRequiredWhenActiveHasDifferentBounds) { | 1823 TEST_F(PictureLayerImplTest, HighResRequiredWhenActiveHasDifferentBounds) { |
1857 gfx::Size layer_bounds(200, 200); | 1824 gfx::Size layer_bounds(200, 200); |
1858 gfx::Size tile_size(100, 100); | 1825 gfx::Size tile_size(100, 100); |
1859 SetupDefaultTreesWithFixedTileSize(layer_bounds, tile_size); | 1826 SetupDefaultTreesWithFixedTileSize(layer_bounds, tile_size); |
1860 | 1827 |
1861 gfx::Size pending_layer_bounds(400, 400); | 1828 gfx::Size pending_layer_bounds(400, 400); |
1862 pending_layer_->SetBounds(pending_layer_bounds); | 1829 pending_layer_->SetBounds(pending_layer_bounds); |
1863 | 1830 |
1864 CreateHighLowResAndSetAllTilesVisible(); | 1831 CreateHighLowResAndSetAllTilesVisible(); |
1832 // TODO(vmpstr): This is confusing. Rework the test to create different bounds | |
1833 // on different trees instead of fudging tilings. | |
1834 pending_layer_->HighResTiling()->ComputeTilePriorityRects( | |
1835 PENDING_TREE, gfx::Rect(pending_layer_bounds), 1.f, 1.f, Occlusion()); | |
1865 | 1836 |
1837 pending_layer_->HighResTiling()->UpdateAllTilePrioritiesForTesting(); | |
1866 active_layer_->SetAllTilesReady(); | 1838 active_layer_->SetAllTilesReady(); |
1867 | 1839 |
1868 // Since the active layer has different bounds, the pending layer needs all | 1840 // Since the active layer has different bounds, the pending layer needs all |
1869 // high res tiles in order to activate. | 1841 // high res tiles in order to activate. |
1870 pending_layer_->MarkVisibleResourcesAsRequired(); | 1842 pending_layer_->HighResTiling()->UpdateAllTilePrioritiesForTesting(); |
1843 pending_layer_->LowResTiling()->UpdateAllTilePrioritiesForTesting(); | |
1844 | |
1871 AssertAllTilesRequired(pending_layer_->HighResTiling()); | 1845 AssertAllTilesRequired(pending_layer_->HighResTiling()); |
1872 AssertNoTilesRequired(pending_layer_->LowResTiling()); | 1846 AssertNoTilesRequired(pending_layer_->LowResTiling()); |
1873 } | 1847 } |
1874 | 1848 |
1875 TEST_F(PictureLayerImplTest, ActivateUninitializedLayer) { | 1849 TEST_F(PictureLayerImplTest, ActivateUninitializedLayer) { |
1876 gfx::Size tile_size(100, 100); | 1850 gfx::Size tile_size(100, 100); |
1877 gfx::Size layer_bounds(400, 400); | 1851 gfx::Size layer_bounds(400, 400); |
1878 scoped_refptr<FakePicturePileImpl> pending_pile = | 1852 scoped_refptr<FakePicturePileImpl> pending_pile = |
1879 FakePicturePileImpl::CreateFilledPile(tile_size, layer_bounds); | 1853 FakePicturePileImpl::CreateFilledPile(tile_size, layer_bounds); |
1880 | 1854 |
(...skipping 828 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
2709 for (size_t i = 0; i < tilings.size(); ++i) { | 2683 for (size_t i = 0; i < tilings.size(); ++i) { |
2710 PictureLayerTiling* tiling = tilings.at(i); | 2684 PictureLayerTiling* tiling = tilings.at(i); |
2711 for (PictureLayerTiling::CoverageIterator iter( | 2685 for (PictureLayerTiling::CoverageIterator iter( |
2712 tiling, | 2686 tiling, |
2713 pending_layer_->contents_scale_x(), | 2687 pending_layer_->contents_scale_x(), |
2714 pending_layer_->visible_content_rect()); | 2688 pending_layer_->visible_content_rect()); |
2715 iter; | 2689 iter; |
2716 ++iter) { | 2690 ++iter) { |
2717 if (mark_required) { | 2691 if (mark_required) { |
2718 number_of_marked_tiles++; | 2692 number_of_marked_tiles++; |
2719 iter->MarkRequiredForActivation(); | 2693 iter->set_required_for_activation(true); |
2720 } else { | 2694 } else { |
2721 number_of_unmarked_tiles++; | 2695 number_of_unmarked_tiles++; |
2722 } | 2696 } |
2723 mark_required = !mark_required; | 2697 mark_required = !mark_required; |
2724 } | 2698 } |
2725 } | 2699 } |
2726 | 2700 |
2727 // Sanity checks. | 2701 // Sanity checks. |
2728 EXPECT_EQ(91u, all_tiles.size()); | 2702 EXPECT_EQ(91u, all_tiles.size()); |
2729 EXPECT_EQ(91u, all_tiles_set.size()); | 2703 EXPECT_EQ(91u, all_tiles_set.size()); |
(...skipping 191 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
2921 gfx::Size tile_size(100, 100); | 2895 gfx::Size tile_size(100, 100); |
2922 gfx::Size layer_bounds(1000, 1000); | 2896 gfx::Size layer_bounds(1000, 1000); |
2923 | 2897 |
2924 SetupDefaultTreesWithFixedTileSize(layer_bounds, tile_size); | 2898 SetupDefaultTreesWithFixedTileSize(layer_bounds, tile_size); |
2925 | 2899 |
2926 // Make sure some tiles are not shared. | 2900 // Make sure some tiles are not shared. |
2927 pending_layer_->set_invalidation(gfx::Rect(gfx::Point(50, 50), tile_size)); | 2901 pending_layer_->set_invalidation(gfx::Rect(gfx::Point(50, 50), tile_size)); |
2928 | 2902 |
2929 CreateHighLowResAndSetAllTilesVisible(); | 2903 CreateHighLowResAndSetAllTilesVisible(); |
2930 active_layer_->SetAllTilesReady(); | 2904 active_layer_->SetAllTilesReady(); |
2931 pending_layer_->MarkVisibleResourcesAsRequired(); | |
2932 | 2905 |
2933 // All pending layer tiles required are not ready. | 2906 // All pending layer tiles required are not ready. |
2934 EXPECT_FALSE(pending_layer_->AllTilesRequiredForActivationAreReadyToDraw()); | 2907 EXPECT_FALSE(pending_layer_->AllTilesRequiredForActivationAreReadyToDraw()); |
2935 | 2908 |
2936 // Initialize all low-res tiles. | 2909 // Initialize all low-res tiles. |
2937 pending_layer_->SetAllTilesReadyInTiling(pending_layer_->LowResTiling()); | 2910 pending_layer_->SetAllTilesReadyInTiling(pending_layer_->LowResTiling()); |
2938 | 2911 |
2939 // Low-res tiles should not be enough. | 2912 // Low-res tiles should not be enough. |
2940 EXPECT_FALSE(pending_layer_->AllTilesRequiredForActivationAreReadyToDraw()); | 2913 EXPECT_FALSE(pending_layer_->AllTilesRequiredForActivationAreReadyToDraw()); |
2941 | 2914 |
2942 // Initialize remaining tiles. | 2915 // Initialize remaining tiles. |
2943 pending_layer_->SetAllTilesReady(); | 2916 pending_layer_->SetAllTilesReady(); |
2944 | 2917 |
2945 EXPECT_TRUE(pending_layer_->AllTilesRequiredForActivationAreReadyToDraw()); | 2918 EXPECT_TRUE(pending_layer_->AllTilesRequiredForActivationAreReadyToDraw()); |
2946 } | 2919 } |
2947 | 2920 |
2948 TEST_F(PictureLayerImplTest, HighResReadyToDrawEnoughToActivate) { | 2921 TEST_F(PictureLayerImplTest, HighResReadyToDrawEnoughToActivate) { |
2949 gfx::Size tile_size(100, 100); | 2922 gfx::Size tile_size(100, 100); |
2950 gfx::Size layer_bounds(1000, 1000); | 2923 gfx::Size layer_bounds(1000, 1000); |
2951 | 2924 |
2952 SetupDefaultTreesWithFixedTileSize(layer_bounds, tile_size); | 2925 SetupDefaultTreesWithFixedTileSize(layer_bounds, tile_size); |
2953 | 2926 |
2954 // Make sure some tiles are not shared. | 2927 // Make sure some tiles are not shared. |
2955 pending_layer_->set_invalidation(gfx::Rect(gfx::Point(50, 50), tile_size)); | 2928 pending_layer_->set_invalidation(gfx::Rect(gfx::Point(50, 50), tile_size)); |
2956 | 2929 |
2957 CreateHighLowResAndSetAllTilesVisible(); | 2930 CreateHighLowResAndSetAllTilesVisible(); |
2958 active_layer_->SetAllTilesReady(); | 2931 active_layer_->SetAllTilesReady(); |
2959 pending_layer_->MarkVisibleResourcesAsRequired(); | |
2960 | 2932 |
2961 // All pending layer tiles required are not ready. | 2933 // All pending layer tiles required are not ready. |
2962 EXPECT_FALSE(pending_layer_->AllTilesRequiredForActivationAreReadyToDraw()); | 2934 EXPECT_FALSE(pending_layer_->AllTilesRequiredForActivationAreReadyToDraw()); |
2963 | 2935 |
2964 // Initialize all high-res tiles. | 2936 // Initialize all high-res tiles. |
2965 pending_layer_->SetAllTilesReadyInTiling(pending_layer_->HighResTiling()); | 2937 pending_layer_->SetAllTilesReadyInTiling(pending_layer_->HighResTiling()); |
2966 | 2938 |
2967 // High-res tiles should be enough, since they cover everything visible. | 2939 // High-res tiles should be enough, since they cover everything visible. |
2968 EXPECT_TRUE(pending_layer_->AllTilesRequiredForActivationAreReadyToDraw()); | 2940 EXPECT_TRUE(pending_layer_->AllTilesRequiredForActivationAreReadyToDraw()); |
2969 } | 2941 } |
2970 | 2942 |
2971 TEST_F(PictureLayerImplTest, | 2943 TEST_F(PictureLayerImplTest, |
2972 SharedActiveHighResReadyAndPendingLowResReadyNotEnoughToActivate) { | 2944 SharedActiveHighResReadyAndPendingLowResReadyNotEnoughToActivate) { |
2973 gfx::Size tile_size(100, 100); | 2945 gfx::Size tile_size(100, 100); |
2974 gfx::Size layer_bounds(1000, 1000); | 2946 gfx::Size layer_bounds(1000, 1000); |
2975 | 2947 |
2976 SetupDefaultTreesWithFixedTileSize(layer_bounds, tile_size); | 2948 SetupDefaultTreesWithFixedTileSize(layer_bounds, tile_size); |
2977 | 2949 |
2978 // Make sure some tiles are not shared. | 2950 // Make sure some tiles are not shared. |
2979 pending_layer_->set_invalidation(gfx::Rect(gfx::Point(50, 50), tile_size)); | 2951 pending_layer_->set_invalidation(gfx::Rect(gfx::Point(50, 50), tile_size)); |
2980 | 2952 |
2981 CreateHighLowResAndSetAllTilesVisible(); | 2953 CreateHighLowResAndSetAllTilesVisible(); |
2982 | 2954 |
2983 // Initialize all high-res tiles in the active layer. | 2955 // Initialize all high-res tiles in the active layer. |
2984 active_layer_->SetAllTilesReadyInTiling(active_layer_->HighResTiling()); | 2956 active_layer_->SetAllTilesReadyInTiling(active_layer_->HighResTiling()); |
2985 // And all the low-res tiles in the pending layer. | 2957 // And all the low-res tiles in the pending layer. |
2986 pending_layer_->SetAllTilesReadyInTiling(pending_layer_->LowResTiling()); | 2958 pending_layer_->SetAllTilesReadyInTiling(pending_layer_->LowResTiling()); |
2987 | 2959 |
2988 pending_layer_->MarkVisibleResourcesAsRequired(); | |
2989 | |
2990 // The unshared high-res tiles are not ready, so we cannot activate. | 2960 // The unshared high-res tiles are not ready, so we cannot activate. |
2991 EXPECT_FALSE(pending_layer_->AllTilesRequiredForActivationAreReadyToDraw()); | 2961 EXPECT_FALSE(pending_layer_->AllTilesRequiredForActivationAreReadyToDraw()); |
2992 | 2962 |
2993 // When the unshared pending high-res tiles are ready, we can activate. | 2963 // When the unshared pending high-res tiles are ready, we can activate. |
2994 pending_layer_->SetAllTilesReadyInTiling(pending_layer_->HighResTiling()); | 2964 pending_layer_->SetAllTilesReadyInTiling(pending_layer_->HighResTiling()); |
2995 EXPECT_TRUE(pending_layer_->AllTilesRequiredForActivationAreReadyToDraw()); | 2965 EXPECT_TRUE(pending_layer_->AllTilesRequiredForActivationAreReadyToDraw()); |
2996 } | 2966 } |
2997 | 2967 |
2998 TEST_F(PictureLayerImplTest, SharedActiveHighResReadyNotEnoughToActivate) { | 2968 TEST_F(PictureLayerImplTest, SharedActiveHighResReadyNotEnoughToActivate) { |
2999 gfx::Size tile_size(100, 100); | 2969 gfx::Size tile_size(100, 100); |
3000 gfx::Size layer_bounds(1000, 1000); | 2970 gfx::Size layer_bounds(1000, 1000); |
3001 | 2971 |
3002 SetupDefaultTreesWithFixedTileSize(layer_bounds, tile_size); | 2972 SetupDefaultTreesWithFixedTileSize(layer_bounds, tile_size); |
3003 | 2973 |
3004 // Make sure some tiles are not shared. | 2974 // Make sure some tiles are not shared. |
3005 pending_layer_->set_invalidation(gfx::Rect(gfx::Point(50, 50), tile_size)); | 2975 pending_layer_->set_invalidation(gfx::Rect(gfx::Point(50, 50), tile_size)); |
3006 | 2976 |
3007 CreateHighLowResAndSetAllTilesVisible(); | 2977 CreateHighLowResAndSetAllTilesVisible(); |
3008 | 2978 |
3009 // Initialize all high-res tiles in the active layer. | 2979 // Initialize all high-res tiles in the active layer. |
3010 active_layer_->SetAllTilesReadyInTiling(active_layer_->HighResTiling()); | 2980 active_layer_->SetAllTilesReadyInTiling(active_layer_->HighResTiling()); |
3011 | 2981 |
3012 pending_layer_->MarkVisibleResourcesAsRequired(); | |
3013 | |
3014 // The unshared high-res tiles are not ready, so we cannot activate. | 2982 // The unshared high-res tiles are not ready, so we cannot activate. |
3015 EXPECT_FALSE(pending_layer_->AllTilesRequiredForActivationAreReadyToDraw()); | 2983 EXPECT_FALSE(pending_layer_->AllTilesRequiredForActivationAreReadyToDraw()); |
3016 | 2984 |
3017 // When the unshared pending high-res tiles are ready, we can activate. | 2985 // When the unshared pending high-res tiles are ready, we can activate. |
3018 pending_layer_->SetAllTilesReadyInTiling(pending_layer_->HighResTiling()); | 2986 pending_layer_->SetAllTilesReadyInTiling(pending_layer_->HighResTiling()); |
3019 EXPECT_TRUE(pending_layer_->AllTilesRequiredForActivationAreReadyToDraw()); | 2987 EXPECT_TRUE(pending_layer_->AllTilesRequiredForActivationAreReadyToDraw()); |
3020 } | 2988 } |
3021 | 2989 |
3022 class NoLowResPictureLayerImplTest : public PictureLayerImplTest { | 2990 class NoLowResPictureLayerImplTest : public PictureLayerImplTest { |
3023 public: | 2991 public: |
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
3078 7.26f, // ideal contents scale | 3046 7.26f, // ideal contents scale |
3079 2.2f, // device scale | 3047 2.2f, // device scale |
3080 3.3f, // page scale | 3048 3.3f, // page scale |
3081 1.f, // maximum animation scale | 3049 1.f, // maximum animation scale |
3082 false); | 3050 false); |
3083 ASSERT_EQ(3u, pending_layer_->tilings()->num_tilings()); | 3051 ASSERT_EQ(3u, pending_layer_->tilings()->num_tilings()); |
3084 EXPECT_FLOAT_EQ(7.26f, | 3052 EXPECT_FLOAT_EQ(7.26f, |
3085 pending_layer_->tilings()->tiling_at(0)->contents_scale()); | 3053 pending_layer_->tilings()->tiling_at(0)->contents_scale()); |
3086 } | 3054 } |
3087 | 3055 |
3088 TEST_F(NoLowResPictureLayerImplTest, MarkRequiredNullTiles) { | 3056 TEST_F(NoLowResPictureLayerImplTest, AllHighResRequiredEvenIfShared) { |
3089 gfx::Size tile_size(100, 100); | |
3090 gfx::Size layer_bounds(1000, 1000); | |
3091 | |
3092 scoped_refptr<FakePicturePileImpl> pending_pile = | |
3093 FakePicturePileImpl::CreateEmptyPile(tile_size, layer_bounds); | |
3094 // Layers with entirely empty piles can't get tilings. | |
3095 pending_pile->AddRecordingAt(0, 0); | |
3096 | |
3097 SetupPendingTree(pending_pile); | |
3098 | |
3099 ASSERT_TRUE(pending_layer_->CanHaveTilings()); | |
3100 pending_layer_->AddTiling(1.0f); | |
3101 pending_layer_->AddTiling(2.0f); | |
3102 | |
3103 // It should be safe to call this (and MarkVisibleResourcesAsRequired) | |
3104 // on a layer with no recordings. | |
3105 host_impl_.pending_tree()->UpdateDrawProperties(); | |
3106 pending_layer_->MarkVisibleResourcesAsRequired(); | |
3107 } | |
3108 | |
3109 TEST_F(NoLowResPictureLayerImplTest, NothingRequiredIfAllHighResTilesShared) { | |
3110 gfx::Size layer_bounds(400, 400); | 3057 gfx::Size layer_bounds(400, 400); |
3111 gfx::Size tile_size(100, 100); | 3058 gfx::Size tile_size(100, 100); |
3112 SetupDefaultTreesWithFixedTileSize(layer_bounds, tile_size); | 3059 SetupDefaultTreesWithFixedTileSize(layer_bounds, tile_size); |
3113 | 3060 |
3114 CreateHighLowResAndSetAllTilesVisible(); | 3061 CreateHighLowResAndSetAllTilesVisible(); |
3115 | 3062 |
3116 Tile* some_active_tile = | 3063 Tile* some_active_tile = |
3117 active_layer_->HighResTiling()->AllTilesForTesting()[0]; | 3064 active_layer_->HighResTiling()->AllTilesForTesting()[0]; |
3118 EXPECT_FALSE(some_active_tile->IsReadyToDraw()); | 3065 EXPECT_FALSE(some_active_tile->IsReadyToDraw()); |
3119 | 3066 |
3120 // All tiles shared (no invalidation), so even though the active tree's | 3067 // All tiles shared (no invalidation), so even though the active tree's |
3121 // tiles aren't ready, there is nothing required. | 3068 // tiles aren't ready, there is nothing required. |
danakj
2014/10/08 18:46:25
This comment is wrong now, can you explain what is
vmpstr
2014/10/08 22:38:34
Done.
| |
3122 pending_layer_->MarkVisibleResourcesAsRequired(); | 3069 pending_layer_->HighResTiling()->UpdateAllTilePrioritiesForTesting(); |
3123 AssertNoTilesRequired(pending_layer_->HighResTiling()); | 3070 if (host_impl_.settings().create_low_res_tiling) |
3124 if (host_impl_.settings().create_low_res_tiling) { | 3071 pending_layer_->LowResTiling()->UpdateAllTilePrioritiesForTesting(); |
3072 | |
3073 AssertAllTilesRequired(pending_layer_->HighResTiling()); | |
3074 if (host_impl_.settings().create_low_res_tiling) | |
3125 AssertNoTilesRequired(pending_layer_->LowResTiling()); | 3075 AssertNoTilesRequired(pending_layer_->LowResTiling()); |
3126 } | |
3127 } | 3076 } |
3128 | 3077 |
3129 TEST_F(NoLowResPictureLayerImplTest, NothingRequiredIfActiveMissingTiles) { | 3078 TEST_F(NoLowResPictureLayerImplTest, NothingRequiredIfActiveMissingTiles) { |
3130 gfx::Size layer_bounds(400, 400); | 3079 gfx::Size layer_bounds(400, 400); |
3131 gfx::Size tile_size(100, 100); | 3080 gfx::Size tile_size(100, 100); |
3132 scoped_refptr<FakePicturePileImpl> pending_pile = | 3081 scoped_refptr<FakePicturePileImpl> pending_pile = |
3133 FakePicturePileImpl::CreateFilledPile(tile_size, layer_bounds); | 3082 FakePicturePileImpl::CreateFilledPile(tile_size, layer_bounds); |
3134 // This pile will create tilings, but has no recordings so will not create any | 3083 // This pile will create tilings, but has no recordings so will not create any |
3135 // tiles. This is attempting to simulate scrolling past the end of recorded | 3084 // tiles. This is attempting to simulate scrolling past the end of recorded |
3136 // content on the active layer, where the recordings are so far away that | 3085 // content on the active layer, where the recordings are so far away that |
3137 // no tiles are created. | 3086 // no tiles are created. |
3138 scoped_refptr<FakePicturePileImpl> active_pile = | 3087 scoped_refptr<FakePicturePileImpl> active_pile = |
3139 FakePicturePileImpl::CreateEmptyPileThatThinksItHasRecordings( | 3088 FakePicturePileImpl::CreateEmptyPileThatThinksItHasRecordings( |
3140 tile_size, layer_bounds); | 3089 tile_size, layer_bounds); |
3141 SetupTrees(pending_pile, active_pile); | 3090 SetupTrees(pending_pile, active_pile); |
3142 pending_layer_->set_fixed_tile_size(tile_size); | 3091 pending_layer_->set_fixed_tile_size(tile_size); |
3143 active_layer_->set_fixed_tile_size(tile_size); | 3092 active_layer_->set_fixed_tile_size(tile_size); |
3144 | 3093 |
3145 CreateHighLowResAndSetAllTilesVisible(); | 3094 CreateHighLowResAndSetAllTilesVisible(); |
3146 | 3095 |
3147 // Active layer has tilings, but no tiles due to missing recordings. | 3096 // Active layer has tilings, but no tiles due to missing recordings. |
3148 EXPECT_TRUE(active_layer_->CanHaveTilings()); | 3097 EXPECT_TRUE(active_layer_->CanHaveTilings()); |
3149 EXPECT_EQ(active_layer_->tilings()->num_tilings(), | 3098 EXPECT_EQ(active_layer_->tilings()->num_tilings(), |
3150 host_impl_.settings().create_low_res_tiling ? 2u : 1u); | 3099 host_impl_.settings().create_low_res_tiling ? 2u : 1u); |
3151 EXPECT_EQ(active_layer_->HighResTiling()->AllTilesForTesting().size(), 0u); | 3100 EXPECT_EQ(active_layer_->HighResTiling()->AllTilesForTesting().size(), 0u); |
3152 | 3101 |
3153 // Since the active layer has no tiles at all, the pending layer doesn't | 3102 // Since the active layer has no tiles at all, the pending layer doesn't |
3154 // need content in order to activate. | 3103 // need content in order to activate. |
3155 pending_layer_->MarkVisibleResourcesAsRequired(); | 3104 pending_layer_->HighResTiling()->UpdateAllTilePrioritiesForTesting(); |
3105 if (host_impl_.settings().create_low_res_tiling) | |
3106 pending_layer_->LowResTiling()->UpdateAllTilePrioritiesForTesting(); | |
3107 | |
3156 AssertNoTilesRequired(pending_layer_->HighResTiling()); | 3108 AssertNoTilesRequired(pending_layer_->HighResTiling()); |
3157 if (host_impl_.settings().create_low_res_tiling) | 3109 if (host_impl_.settings().create_low_res_tiling) |
3158 AssertNoTilesRequired(pending_layer_->LowResTiling()); | 3110 AssertNoTilesRequired(pending_layer_->LowResTiling()); |
3159 } | 3111 } |
3160 | 3112 |
3161 TEST_F(NoLowResPictureLayerImplTest, InvalidViewportForPrioritizingTiles) { | 3113 TEST_F(NoLowResPictureLayerImplTest, InvalidViewportForPrioritizingTiles) { |
3162 base::TimeTicks time_ticks; | 3114 base::TimeTicks time_ticks; |
3163 time_ticks += base::TimeDelta::FromMilliseconds(1); | 3115 time_ticks += base::TimeDelta::FromMilliseconds(1); |
3164 host_impl_.SetCurrentBeginFrameArgs( | 3116 host_impl_.SetCurrentBeginFrameArgs( |
3165 CreateBeginFrameArgsForTesting(time_ticks)); | 3117 CreateBeginFrameArgsForTesting(time_ticks)); |
(...skipping 572 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
3738 ++it) { | 3690 ++it) { |
3739 Tile* tile = *it; | 3691 Tile* tile = *it; |
3740 | 3692 |
3741 EXPECT_FALSE(tile->is_occluded(PENDING_TREE)); | 3693 EXPECT_FALSE(tile->is_occluded(PENDING_TREE)); |
3742 | 3694 |
3743 bool tile_is_visible = | 3695 bool tile_is_visible = |
3744 tile->content_rect().Intersects(pending_layer_->visible_content_rect()); | 3696 tile->content_rect().Intersects(pending_layer_->visible_content_rect()); |
3745 if (tile_is_visible) | 3697 if (tile_is_visible) |
3746 unoccluded_tile_count++; | 3698 unoccluded_tile_count++; |
3747 } | 3699 } |
3748 EXPECT_EQ(unoccluded_tile_count, 20 + 2); | 3700 EXPECT_EQ(20 + 2, unoccluded_tile_count); |
3749 | 3701 |
3750 // Full occlusion. | 3702 // Full occlusion. |
3751 layer1->SetPosition(gfx::Point(0, 0)); | 3703 layer1->SetPosition(gfx::Point(0, 0)); |
3752 | 3704 |
3753 time_ticks += base::TimeDelta::FromMilliseconds(200); | 3705 time_ticks += base::TimeDelta::FromMilliseconds(200); |
3754 host_impl_.SetCurrentBeginFrameArgs( | 3706 host_impl_.SetCurrentBeginFrameArgs( |
3755 CreateBeginFrameArgsForTesting(time_ticks)); | 3707 CreateBeginFrameArgsForTesting(time_ticks)); |
3756 host_impl_.pending_tree()->UpdateDrawProperties(); | 3708 host_impl_.pending_tree()->UpdateDrawProperties(); |
3757 | 3709 |
3758 unoccluded_tile_count = 0; | 3710 unoccluded_tile_count = 0; |
(...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
3826 layer1->SetContentsOpaque(true); | 3778 layer1->SetContentsOpaque(true); |
3827 layer1->SetPosition(occluding_layer_position); | 3779 layer1->SetPosition(occluding_layer_position); |
3828 | 3780 |
3829 time_ticks += base::TimeDelta::FromMilliseconds(200); | 3781 time_ticks += base::TimeDelta::FromMilliseconds(200); |
3830 host_impl_.SetCurrentBeginFrameArgs( | 3782 host_impl_.SetCurrentBeginFrameArgs( |
3831 CreateBeginFrameArgsForTesting(time_ticks)); | 3783 CreateBeginFrameArgsForTesting(time_ticks)); |
3832 host_impl_.pending_tree()->UpdateDrawProperties(); | 3784 host_impl_.pending_tree()->UpdateDrawProperties(); |
3833 | 3785 |
3834 for (size_t i = 0; i < pending_layer_->num_tilings(); ++i) { | 3786 for (size_t i = 0; i < pending_layer_->num_tilings(); ++i) { |
3835 PictureLayerTiling* tiling = pending_layer_->tilings()->tiling_at(i); | 3787 PictureLayerTiling* tiling = pending_layer_->tilings()->tiling_at(i); |
3788 tiling->UpdateAllTilePrioritiesForTesting(); | |
3836 | 3789 |
3837 occluded_tile_count = 0; | 3790 occluded_tile_count = 0; |
3838 for (PictureLayerTiling::CoverageIterator iter( | 3791 for (PictureLayerTiling::CoverageIterator iter( |
3839 tiling, | 3792 tiling, |
3840 pending_layer_->contents_scale_x(), | 3793 pending_layer_->contents_scale_x(), |
3841 gfx::Rect(layer_bounds)); | 3794 gfx::Rect(layer_bounds)); |
3842 iter; | 3795 iter; |
3843 ++iter) { | 3796 ++iter) { |
3844 if (!*iter) | 3797 if (!*iter) |
3845 continue; | 3798 continue; |
(...skipping 19 matching lines...) Expand all Loading... | |
3865 // Full occlusion. | 3818 // Full occlusion. |
3866 layer1->SetPosition(gfx::PointF(0, 0)); | 3819 layer1->SetPosition(gfx::PointF(0, 0)); |
3867 | 3820 |
3868 time_ticks += base::TimeDelta::FromMilliseconds(200); | 3821 time_ticks += base::TimeDelta::FromMilliseconds(200); |
3869 host_impl_.SetCurrentBeginFrameArgs( | 3822 host_impl_.SetCurrentBeginFrameArgs( |
3870 CreateBeginFrameArgsForTesting(time_ticks)); | 3823 CreateBeginFrameArgsForTesting(time_ticks)); |
3871 host_impl_.pending_tree()->UpdateDrawProperties(); | 3824 host_impl_.pending_tree()->UpdateDrawProperties(); |
3872 | 3825 |
3873 for (size_t i = 0; i < pending_layer_->num_tilings(); ++i) { | 3826 for (size_t i = 0; i < pending_layer_->num_tilings(); ++i) { |
3874 PictureLayerTiling* tiling = pending_layer_->tilings()->tiling_at(i); | 3827 PictureLayerTiling* tiling = pending_layer_->tilings()->tiling_at(i); |
3828 tiling->UpdateAllTilePrioritiesForTesting(); | |
3875 | 3829 |
3876 occluded_tile_count = 0; | 3830 occluded_tile_count = 0; |
3877 for (PictureLayerTiling::CoverageIterator iter( | 3831 for (PictureLayerTiling::CoverageIterator iter( |
3878 tiling, | 3832 tiling, |
3879 pending_layer_->contents_scale_x(), | 3833 pending_layer_->contents_scale_x(), |
3880 gfx::Rect(layer_bounds)); | 3834 gfx::Rect(layer_bounds)); |
3881 iter; | 3835 iter; |
3882 ++iter) { | 3836 ++iter) { |
3883 if (!*iter) | 3837 if (!*iter) |
3884 continue; | 3838 continue; |
3885 const Tile* tile = *iter; | 3839 const Tile* tile = *iter; |
3886 | 3840 |
3887 if (tile->is_occluded(PENDING_TREE)) { | 3841 if (tile->is_occluded(PENDING_TREE)) { |
3888 EXPECT_FALSE(tile->required_for_activation()); | 3842 EXPECT_FALSE(tile->required_for_activation()); |
3889 occluded_tile_count++; | 3843 occluded_tile_count++; |
3890 } | 3844 } |
3891 } | 3845 } |
3892 switch (i) { | 3846 switch (i) { |
3893 case 0: | 3847 case 0: |
3894 EXPECT_EQ(occluded_tile_count, 25); | 3848 EXPECT_EQ(25, occluded_tile_count); |
3895 break; | 3849 break; |
3896 case 1: | 3850 case 1: |
3897 EXPECT_EQ(occluded_tile_count, 4); | 3851 EXPECT_EQ(4, occluded_tile_count); |
3898 break; | 3852 break; |
3899 default: | 3853 default: |
3900 NOTREACHED(); | 3854 NOTREACHED(); |
3901 } | 3855 } |
3902 } | 3856 } |
3903 } | 3857 } |
3904 | 3858 |
3905 TEST_F(OcclusionTrackingPictureLayerImplTest, OcclusionForDifferentScales) { | 3859 TEST_F(OcclusionTrackingPictureLayerImplTest, OcclusionForDifferentScales) { |
3906 gfx::Size tile_size(102, 102); | 3860 gfx::Size tile_size(102, 102); |
3907 gfx::Size layer_bounds(1000, 1000); | 3861 gfx::Size layer_bounds(1000, 1000); |
(...skipping 26 matching lines...) Expand all Loading... | |
3934 | 3888 |
3935 host_impl_.SetViewportSize(viewport_size); | 3889 host_impl_.SetViewportSize(viewport_size); |
3936 host_impl_.pending_tree()->UpdateDrawProperties(); | 3890 host_impl_.pending_tree()->UpdateDrawProperties(); |
3937 | 3891 |
3938 int tiling_count = 0; | 3892 int tiling_count = 0; |
3939 int occluded_tile_count = 0; | 3893 int occluded_tile_count = 0; |
3940 for (std::vector<PictureLayerTiling*>::iterator tiling_iterator = | 3894 for (std::vector<PictureLayerTiling*>::iterator tiling_iterator = |
3941 tilings.begin(); | 3895 tilings.begin(); |
3942 tiling_iterator != tilings.end(); | 3896 tiling_iterator != tilings.end(); |
3943 ++tiling_iterator) { | 3897 ++tiling_iterator) { |
3898 (*tiling_iterator)->UpdateAllTilePrioritiesForTesting(); | |
3944 std::vector<Tile*> tiles = (*tiling_iterator)->AllTilesForTesting(); | 3899 std::vector<Tile*> tiles = (*tiling_iterator)->AllTilesForTesting(); |
3945 | 3900 |
3946 occluded_tile_count = 0; | 3901 occluded_tile_count = 0; |
3947 for (size_t i = 0; i < tiles.size(); ++i) { | 3902 for (size_t i = 0; i < tiles.size(); ++i) { |
3948 if (tiles[i]->is_occluded(PENDING_TREE)) { | 3903 if (tiles[i]->is_occluded(PENDING_TREE)) { |
3949 gfx::Rect scaled_content_rect = ScaleToEnclosingRect( | 3904 gfx::Rect scaled_content_rect = ScaleToEnclosingRect( |
3950 tiles[i]->content_rect(), 1.0f / tiles[i]->contents_scale()); | 3905 tiles[i]->content_rect(), 1.0f / tiles[i]->contents_scale()); |
3951 EXPECT_GE(scaled_content_rect.x(), occluding_layer_position.x()); | 3906 EXPECT_GE(scaled_content_rect.x(), occluding_layer_position.x()); |
3952 occluded_tile_count++; | 3907 occluded_tile_count++; |
3953 } | 3908 } |
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
4001 // Partially invalidate the pending layer. | 3956 // Partially invalidate the pending layer. |
4002 pending_layer_->set_invalidation(invalidation_rect); | 3957 pending_layer_->set_invalidation(invalidation_rect); |
4003 | 3958 |
4004 host_impl_.SetViewportSize(viewport_size); | 3959 host_impl_.SetViewportSize(viewport_size); |
4005 | 3960 |
4006 active_layer_->CreateDefaultTilingsAndTiles(); | 3961 active_layer_->CreateDefaultTilingsAndTiles(); |
4007 pending_layer_->CreateDefaultTilingsAndTiles(); | 3962 pending_layer_->CreateDefaultTilingsAndTiles(); |
4008 | 3963 |
4009 for (size_t i = 0; i < pending_layer_->num_tilings(); ++i) { | 3964 for (size_t i = 0; i < pending_layer_->num_tilings(); ++i) { |
4010 PictureLayerTiling* tiling = pending_layer_->tilings()->tiling_at(i); | 3965 PictureLayerTiling* tiling = pending_layer_->tilings()->tiling_at(i); |
3966 tiling->UpdateAllTilePrioritiesForTesting(); | |
4011 | 3967 |
4012 for (PictureLayerTiling::CoverageIterator iter( | 3968 for (PictureLayerTiling::CoverageIterator iter( |
4013 tiling, | 3969 tiling, |
4014 pending_layer_->contents_scale_x(), | 3970 pending_layer_->contents_scale_x(), |
4015 gfx::Rect(layer_bounds)); | 3971 gfx::Rect(layer_bounds)); |
4016 iter; | 3972 iter; |
4017 ++iter) { | 3973 ++iter) { |
4018 if (!*iter) | 3974 if (!*iter) |
4019 continue; | 3975 continue; |
4020 const Tile* tile = *iter; | 3976 const Tile* tile = *iter; |
(...skipping 124 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
4145 // The total expected number of occluded tiles on all tilings for each of the | 4101 // The total expected number of occluded tiles on all tilings for each of the |
4146 // 3 tree priorities. | 4102 // 3 tree priorities. |
4147 size_t total_expected_occluded_tile_count[] = {13u, 43u, 43u}; | 4103 size_t total_expected_occluded_tile_count[] = {13u, 43u, 43u}; |
4148 | 4104 |
4149 ASSERT_EQ(arraysize(total_expected_occluded_tile_count), NUM_TREE_PRIORITIES); | 4105 ASSERT_EQ(arraysize(total_expected_occluded_tile_count), NUM_TREE_PRIORITIES); |
4150 | 4106 |
4151 // Verify number of occluded tiles on the pending layer for each tiling. | 4107 // Verify number of occluded tiles on the pending layer for each tiling. |
4152 for (size_t i = 0; i < pending_layer_->num_tilings(); ++i) { | 4108 for (size_t i = 0; i < pending_layer_->num_tilings(); ++i) { |
4153 PictureLayerTiling* tiling = pending_layer_->tilings()->tiling_at(i); | 4109 PictureLayerTiling* tiling = pending_layer_->tilings()->tiling_at(i); |
4154 tiling->CreateAllTilesForTesting(); | 4110 tiling->CreateAllTilesForTesting(); |
4111 tiling->UpdateAllTilePrioritiesForTesting(); | |
4155 | 4112 |
4156 size_t occluded_tile_count_on_pending = 0u; | 4113 size_t occluded_tile_count_on_pending = 0u; |
4157 size_t occluded_tile_count_on_active = 0u; | 4114 size_t occluded_tile_count_on_active = 0u; |
4158 size_t occluded_tile_count_on_both = 0u; | 4115 size_t occluded_tile_count_on_both = 0u; |
4159 for (PictureLayerTiling::CoverageIterator iter( | 4116 for (PictureLayerTiling::CoverageIterator iter( |
4160 tiling, | 4117 tiling, |
4161 pending_layer_->contents_scale_x(), | 4118 pending_layer_->contents_scale_x(), |
4162 gfx::Rect(layer_bounds)); | 4119 gfx::Rect(layer_bounds)); |
4163 iter; | 4120 iter; |
4164 ++iter) { | 4121 ++iter) { |
(...skipping 14 matching lines...) Expand all Loading... | |
4179 << i; | 4136 << i; |
4180 EXPECT_EQ(expected_occluded_tile_count_on_both[i], | 4137 EXPECT_EQ(expected_occluded_tile_count_on_both[i], |
4181 occluded_tile_count_on_both) | 4138 occluded_tile_count_on_both) |
4182 << i; | 4139 << i; |
4183 } | 4140 } |
4184 | 4141 |
4185 // Verify number of occluded tiles on the active layer for each tiling. | 4142 // Verify number of occluded tiles on the active layer for each tiling. |
4186 for (size_t i = 0; i < active_layer_->num_tilings(); ++i) { | 4143 for (size_t i = 0; i < active_layer_->num_tilings(); ++i) { |
4187 PictureLayerTiling* tiling = active_layer_->tilings()->tiling_at(i); | 4144 PictureLayerTiling* tiling = active_layer_->tilings()->tiling_at(i); |
4188 tiling->CreateAllTilesForTesting(); | 4145 tiling->CreateAllTilesForTesting(); |
4146 tiling->UpdateAllTilePrioritiesForTesting(); | |
4189 | 4147 |
4190 size_t occluded_tile_count_on_pending = 0u; | 4148 size_t occluded_tile_count_on_pending = 0u; |
4191 size_t occluded_tile_count_on_active = 0u; | 4149 size_t occluded_tile_count_on_active = 0u; |
4192 size_t occluded_tile_count_on_both = 0u; | 4150 size_t occluded_tile_count_on_both = 0u; |
4193 for (PictureLayerTiling::CoverageIterator iter( | 4151 for (PictureLayerTiling::CoverageIterator iter( |
4194 tiling, | 4152 tiling, |
4195 pending_layer_->contents_scale_x(), | 4153 pending_layer_->contents_scale_x(), |
4196 gfx::Rect(layer_bounds)); | 4154 gfx::Rect(layer_bounds)); |
4197 iter; | 4155 iter; |
4198 ++iter) { | 4156 ++iter) { |
(...skipping 202 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
4401 SetupPendingTree(pending_pile2); | 4359 SetupPendingTree(pending_pile2); |
4402 ActivateTree(); | 4360 ActivateTree(); |
4403 | 4361 |
4404 // We've switched to a solid color, so we should end up with no tilings. | 4362 // We've switched to a solid color, so we should end up with no tilings. |
4405 ASSERT_TRUE(active_layer_->tilings()); | 4363 ASSERT_TRUE(active_layer_->tilings()); |
4406 EXPECT_EQ(0u, active_layer_->tilings()->num_tilings()); | 4364 EXPECT_EQ(0u, active_layer_->tilings()->num_tilings()); |
4407 } | 4365 } |
4408 | 4366 |
4409 } // namespace | 4367 } // namespace |
4410 } // namespace cc | 4368 } // namespace cc |
OLD | NEW |