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> |
11 | 11 |
12 #include "cc/layers/append_quads_data.h" | 12 #include "cc/layers/append_quads_data.h" |
13 #include "cc/layers/picture_layer.h" | 13 #include "cc/layers/picture_layer.h" |
14 #include "cc/test/fake_content_layer_client.h" | 14 #include "cc/test/fake_content_layer_client.h" |
15 #include "cc/test/fake_impl_proxy.h" | 15 #include "cc/test/fake_impl_proxy.h" |
16 #include "cc/test/fake_layer_tree_host_impl.h" | 16 #include "cc/test/fake_layer_tree_host_impl.h" |
17 #include "cc/test/fake_output_surface.h" | 17 #include "cc/test/fake_output_surface.h" |
18 #include "cc/test/fake_picture_layer_impl.h" | 18 #include "cc/test/fake_picture_layer_impl.h" |
19 #include "cc/test/fake_picture_pile_impl.h" | 19 #include "cc/test/fake_picture_pile_impl.h" |
20 #include "cc/test/geometry_test_utils.h" | 20 #include "cc/test/geometry_test_utils.h" |
21 #include "cc/test/gpu_rasterization_settings.h" | |
22 #include "cc/test/hybrid_rasterization_settings.h" | |
23 #include "cc/test/impl_side_painting_settings.h" | 21 #include "cc/test/impl_side_painting_settings.h" |
24 #include "cc/test/mock_quad_culler.h" | 22 #include "cc/test/mock_quad_culler.h" |
25 #include "cc/test/test_shared_bitmap_manager.h" | 23 #include "cc/test/test_shared_bitmap_manager.h" |
26 #include "cc/test/test_web_graphics_context_3d.h" | 24 #include "cc/test/test_web_graphics_context_3d.h" |
27 #include "cc/trees/layer_tree_impl.h" | 25 #include "cc/trees/layer_tree_impl.h" |
28 #include "testing/gtest/include/gtest/gtest.h" | 26 #include "testing/gtest/include/gtest/gtest.h" |
29 #include "ui/gfx/rect_conversions.h" | 27 #include "ui/gfx/rect_conversions.h" |
30 | 28 |
31 namespace cc { | 29 namespace cc { |
32 namespace { | 30 namespace { |
(...skipping 1594 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1627 // ReleaseResources has set needs update draw properties so that the | 1625 // ReleaseResources has set needs update draw properties so that the |
1628 // new tiling gets the appropriate resolution set in ManageTilings. | 1626 // new tiling gets the appropriate resolution set in ManageTilings. |
1629 EXPECT_TRUE(host_impl_.active_tree()->needs_update_draw_properties()); | 1627 EXPECT_TRUE(host_impl_.active_tree()->needs_update_draw_properties()); |
1630 host_impl_.active_tree()->UpdateDrawProperties(); | 1628 host_impl_.active_tree()->UpdateDrawProperties(); |
1631 PictureLayerTiling* high_res = | 1629 PictureLayerTiling* high_res = |
1632 active_layer_->tilings()->TilingAtScale(new_scale); | 1630 active_layer_->tilings()->TilingAtScale(new_scale); |
1633 ASSERT_TRUE(!!high_res); | 1631 ASSERT_TRUE(!!high_res); |
1634 EXPECT_EQ(HIGH_RESOLUTION, high_res->resolution()); | 1632 EXPECT_EQ(HIGH_RESOLUTION, high_res->resolution()); |
1635 } | 1633 } |
1636 | 1634 |
1637 TEST_F(PictureLayerImplTest, TilingWithoutGpuRasterization) { | 1635 TEST_F(PictureLayerImplTest, NoLowResTilingWithGpuRasterization) { |
1638 gfx::Size default_tile_size(host_impl_.settings().default_tile_size); | 1636 gfx::Size default_tile_size(host_impl_.settings().default_tile_size); |
1639 gfx::Size layer_bounds(default_tile_size.width() * 4, | 1637 gfx::Size layer_bounds(default_tile_size.width() * 4, |
1640 default_tile_size.height() * 4); | 1638 default_tile_size.height() * 4); |
1641 float result_scale_x, result_scale_y; | 1639 float result_scale_x, result_scale_y; |
1642 gfx::Size result_bounds; | 1640 gfx::Size result_bounds; |
1643 | 1641 |
1644 SetupDefaultTrees(layer_bounds); | 1642 SetupDefaultTrees(layer_bounds); |
1645 EXPECT_FALSE(pending_layer_->ShouldUseGpuRasterization()); | 1643 EXPECT_FALSE(pending_layer_->ShouldUseGpuRasterization()); |
1646 EXPECT_EQ(0u, pending_layer_->tilings()->num_tilings()); | 1644 EXPECT_EQ(0u, pending_layer_->tilings()->num_tilings()); |
1647 pending_layer_->CalculateContentsScale(1.f, | 1645 pending_layer_->CalculateContentsScale(1.f, |
1648 1.f, | 1646 1.f, |
1649 1.f, | 1647 1.f, |
1650 1.f, | 1648 1.f, |
1651 false, | 1649 false, |
1652 &result_scale_x, | 1650 &result_scale_x, |
1653 &result_scale_y, | 1651 &result_scale_y, |
1654 &result_bounds); | 1652 &result_bounds); |
1655 // Should have a low-res and a high-res tiling. | 1653 // Should have a low-res and a high-res tiling. |
1656 ASSERT_EQ(2u, pending_layer_->tilings()->num_tilings()); | 1654 ASSERT_EQ(2u, pending_layer_->tilings()->num_tilings()); |
| 1655 |
| 1656 pending_layer_->SetUseGpuRasterization(true); |
| 1657 EXPECT_TRUE(pending_layer_->ShouldUseGpuRasterization()); |
| 1658 EXPECT_EQ(0u, pending_layer_->tilings()->num_tilings()); |
| 1659 pending_layer_->CalculateContentsScale(1.f, |
| 1660 1.f, |
| 1661 1.f, |
| 1662 1.f, |
| 1663 false, |
| 1664 &result_scale_x, |
| 1665 &result_scale_y, |
| 1666 &result_bounds); |
| 1667 // Should only have the high-res tiling. |
| 1668 ASSERT_EQ(1u, pending_layer_->tilings()->num_tilings()); |
1657 } | 1669 } |
1658 | 1670 |
1659 TEST_F(PictureLayerImplTest, NoTilingIfDoesNotDrawContent) { | 1671 TEST_F(PictureLayerImplTest, NoTilingIfDoesNotDrawContent) { |
1660 // Set up layers with tilings. | 1672 // Set up layers with tilings. |
1661 SetupDefaultTrees(gfx::Size(10, 10)); | 1673 SetupDefaultTrees(gfx::Size(10, 10)); |
1662 SetContentsScaleOnBothLayers(1.f, 1.f, 1.f, 1.f, false); | 1674 SetContentsScaleOnBothLayers(1.f, 1.f, 1.f, 1.f, false); |
1663 pending_layer_->PushPropertiesTo(active_layer_); | 1675 pending_layer_->PushPropertiesTo(active_layer_); |
1664 EXPECT_TRUE(pending_layer_->DrawsContent()); | 1676 EXPECT_TRUE(pending_layer_->DrawsContent()); |
1665 EXPECT_TRUE(pending_layer_->CanHaveTilings()); | 1677 EXPECT_TRUE(pending_layer_->CanHaveTilings()); |
1666 EXPECT_GE(pending_layer_->num_tilings(), 0u); | 1678 EXPECT_GE(pending_layer_->num_tilings(), 0u); |
(...skipping 94 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1761 static_cast<FakeOutputSurface*>(host_impl_.output_surface()); | 1773 static_cast<FakeOutputSurface*>(host_impl_.output_surface()); |
1762 ASSERT_TRUE(fake_output_surface->InitializeAndSetContext3d( | 1774 ASSERT_TRUE(fake_output_surface->InitializeAndSetContext3d( |
1763 TestContextProvider::Create(), NULL)); | 1775 TestContextProvider::Create(), NULL)); |
1764 | 1776 |
1765 // These will crash PictureLayerImpl if this is not true. | 1777 // These will crash PictureLayerImpl if this is not true. |
1766 ASSERT_TRUE(host_impl_.pending_tree()->needs_update_draw_properties()); | 1778 ASSERT_TRUE(host_impl_.pending_tree()->needs_update_draw_properties()); |
1767 ASSERT_TRUE(host_impl_.active_tree()->needs_update_draw_properties()); | 1779 ASSERT_TRUE(host_impl_.active_tree()->needs_update_draw_properties()); |
1768 host_impl_.active_tree()->UpdateDrawProperties(); | 1780 host_impl_.active_tree()->UpdateDrawProperties(); |
1769 } | 1781 } |
1770 | 1782 |
1771 class HybridRasterizationPictureLayerImplTest : public PictureLayerImplTest { | 1783 TEST_F(PictureLayerImplTest, HighResTilingDuringAnimationForCpuRasterization) { |
1772 public: | |
1773 HybridRasterizationPictureLayerImplTest() | |
1774 : PictureLayerImplTest(HybridRasterizationSettings()) {} | |
1775 }; | |
1776 | |
1777 TEST_F(HybridRasterizationPictureLayerImplTest, Tiling) { | |
1778 gfx::Size default_tile_size(host_impl_.settings().default_tile_size); | |
1779 gfx::Size layer_bounds(default_tile_size.width() * 4, | |
1780 default_tile_size.height() * 4); | |
1781 float result_scale_x, result_scale_y; | |
1782 gfx::Size result_bounds; | |
1783 | |
1784 SetupDefaultTrees(layer_bounds); | |
1785 EXPECT_FALSE(pending_layer_->ShouldUseGpuRasterization()); | |
1786 EXPECT_EQ(0u, pending_layer_->tilings()->num_tilings()); | |
1787 pending_layer_->CalculateContentsScale(1.f, | |
1788 1.f, | |
1789 1.f, | |
1790 1.f, | |
1791 false, | |
1792 &result_scale_x, | |
1793 &result_scale_y, | |
1794 &result_bounds); | |
1795 // Should have a low-res and a high-res tiling. | |
1796 ASSERT_EQ(2u, pending_layer_->tilings()->num_tilings()); | |
1797 | |
1798 pending_layer_->SetHasGpuRasterizationHint(true); | |
1799 EXPECT_TRUE(pending_layer_->ShouldUseGpuRasterization()); | |
1800 EXPECT_EQ(0u, pending_layer_->tilings()->num_tilings()); | |
1801 pending_layer_->CalculateContentsScale(1.f, | |
1802 1.f, | |
1803 1.f, | |
1804 1.f, | |
1805 false, | |
1806 &result_scale_x, | |
1807 &result_scale_y, | |
1808 &result_bounds); | |
1809 // Should only have the high-res tiling. | |
1810 ASSERT_EQ(1u, pending_layer_->tilings()->num_tilings()); | |
1811 } | |
1812 | |
1813 TEST_F(HybridRasterizationPictureLayerImplTest, | |
1814 HighResTilingDuringAnimationForCpuRasterization) { | |
1815 gfx::Size tile_size(host_impl_.settings().default_tile_size); | 1784 gfx::Size tile_size(host_impl_.settings().default_tile_size); |
1816 SetupDefaultTrees(tile_size); | 1785 SetupDefaultTrees(tile_size); |
1817 pending_layer_->SetHasGpuRasterizationHint(false); | |
1818 active_layer_->SetHasGpuRasterizationHint(false); | |
1819 | 1786 |
1820 float contents_scale = 1.f; | 1787 float contents_scale = 1.f; |
1821 float device_scale = 1.3f; | 1788 float device_scale = 1.3f; |
1822 float page_scale = 1.4f; | 1789 float page_scale = 1.4f; |
1823 float maximum_animation_scale = 1.f; | 1790 float maximum_animation_scale = 1.f; |
1824 bool animating_transform = false; | 1791 bool animating_transform = false; |
1825 | 1792 |
1826 SetContentsScaleOnBothLayers(contents_scale, | 1793 SetContentsScaleOnBothLayers(contents_scale, |
1827 device_scale, | 1794 device_scale, |
1828 page_scale, | 1795 page_scale, |
(...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1894 contents_scale = 4.f; | 1861 contents_scale = 4.f; |
1895 | 1862 |
1896 SetContentsScaleOnBothLayers(contents_scale, | 1863 SetContentsScaleOnBothLayers(contents_scale, |
1897 device_scale, | 1864 device_scale, |
1898 page_scale, | 1865 page_scale, |
1899 maximum_animation_scale, | 1866 maximum_animation_scale, |
1900 animating_transform); | 1867 animating_transform); |
1901 EXPECT_BOTH_EQ(HighResTiling()->contents_scale(), 4.f); | 1868 EXPECT_BOTH_EQ(HighResTiling()->contents_scale(), 4.f); |
1902 } | 1869 } |
1903 | 1870 |
1904 TEST_F(HybridRasterizationPictureLayerImplTest, | 1871 TEST_F(PictureLayerImplTest, HighResTilingDuringAnimationForGpuRasterization) { |
1905 HighResTilingDuringAnimationForGpuRasterization) { | |
1906 gfx::Size tile_size(host_impl_.settings().default_tile_size); | 1872 gfx::Size tile_size(host_impl_.settings().default_tile_size); |
1907 SetupDefaultTrees(tile_size); | 1873 SetupDefaultTrees(tile_size); |
1908 pending_layer_->SetHasGpuRasterizationHint(true); | 1874 pending_layer_->SetUseGpuRasterization(true); |
1909 active_layer_->SetHasGpuRasterizationHint(true); | 1875 active_layer_->SetUseGpuRasterization(true); |
1910 | 1876 |
1911 float contents_scale = 1.f; | 1877 float contents_scale = 1.f; |
1912 float device_scale = 1.f; | 1878 float device_scale = 1.f; |
1913 float page_scale = 1.f; | 1879 float page_scale = 1.f; |
1914 float maximum_animation_scale = 1.f; | 1880 float maximum_animation_scale = 1.f; |
1915 bool animating_transform = false; | 1881 bool animating_transform = false; |
1916 | 1882 |
1917 SetContentsScaleOnBothLayers(contents_scale, | 1883 SetContentsScaleOnBothLayers(contents_scale, |
1918 device_scale, | 1884 device_scale, |
1919 page_scale, | 1885 page_scale, |
(...skipping 29 matching lines...) Expand all Loading... |
1949 contents_scale = 4.f; | 1915 contents_scale = 4.f; |
1950 animating_transform = false; | 1916 animating_transform = false; |
1951 SetContentsScaleOnBothLayers(contents_scale, | 1917 SetContentsScaleOnBothLayers(contents_scale, |
1952 device_scale, | 1918 device_scale, |
1953 page_scale, | 1919 page_scale, |
1954 maximum_animation_scale, | 1920 maximum_animation_scale, |
1955 animating_transform); | 1921 animating_transform); |
1956 EXPECT_BOTH_EQ(HighResTiling()->contents_scale(), 4.f); | 1922 EXPECT_BOTH_EQ(HighResTiling()->contents_scale(), 4.f); |
1957 } | 1923 } |
1958 | 1924 |
1959 class GpuRasterizationPictureLayerImplTest : public PictureLayerImplTest { | |
1960 public: | |
1961 GpuRasterizationPictureLayerImplTest() | |
1962 : PictureLayerImplTest(GpuRasterizationSettings()) {} | |
1963 }; | |
1964 | |
1965 TEST_F(GpuRasterizationPictureLayerImplTest, Tiling) { | |
1966 gfx::Size default_tile_size(host_impl_.settings().default_tile_size); | |
1967 gfx::Size layer_bounds(default_tile_size.width() * 4, | |
1968 default_tile_size.height() * 4); | |
1969 float result_scale_x, result_scale_y; | |
1970 gfx::Size result_bounds; | |
1971 | |
1972 SetupDefaultTrees(layer_bounds); | |
1973 pending_layer_->SetHasGpuRasterizationHint(true); | |
1974 EXPECT_TRUE(pending_layer_->ShouldUseGpuRasterization()); | |
1975 EXPECT_EQ(0u, pending_layer_->tilings()->num_tilings()); | |
1976 pending_layer_->CalculateContentsScale(1.f, | |
1977 1.f, | |
1978 1.f, | |
1979 1.f, | |
1980 false, | |
1981 &result_scale_x, | |
1982 &result_scale_y, | |
1983 &result_bounds); | |
1984 // Should only have the high-res tiling. | |
1985 ASSERT_EQ(1u, pending_layer_->tilings()->num_tilings()); | |
1986 | |
1987 pending_layer_->SetHasGpuRasterizationHint(false); | |
1988 EXPECT_TRUE(pending_layer_->ShouldUseGpuRasterization()); | |
1989 // Should still have the high-res tiling. | |
1990 EXPECT_EQ(1u, pending_layer_->tilings()->num_tilings()); | |
1991 pending_layer_->CalculateContentsScale(1.f, | |
1992 1.f, | |
1993 1.f, | |
1994 1.f, | |
1995 false, | |
1996 &result_scale_x, | |
1997 &result_scale_y, | |
1998 &result_bounds); | |
1999 // Should still only have the high-res tiling. | |
2000 ASSERT_EQ(1u, pending_layer_->tilings()->num_tilings()); | |
2001 } | |
2002 | |
2003 TEST_F(PictureLayerImplTest, LayerRasterTileIterator) { | 1925 TEST_F(PictureLayerImplTest, LayerRasterTileIterator) { |
2004 gfx::Size tile_size(100, 100); | 1926 gfx::Size tile_size(100, 100); |
2005 gfx::Size layer_bounds(1000, 1000); | 1927 gfx::Size layer_bounds(1000, 1000); |
2006 | 1928 |
2007 scoped_refptr<FakePicturePileImpl> pending_pile = | 1929 scoped_refptr<FakePicturePileImpl> pending_pile = |
2008 FakePicturePileImpl::CreateFilledPile(tile_size, layer_bounds); | 1930 FakePicturePileImpl::CreateFilledPile(tile_size, layer_bounds); |
2009 | 1931 |
2010 SetupPendingTree(pending_pile); | 1932 SetupPendingTree(pending_pile); |
2011 | 1933 |
2012 ASSERT_TRUE(pending_layer_->CanHaveTilings()); | 1934 ASSERT_TRUE(pending_layer_->CanHaveTilings()); |
(...skipping 220 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2233 EXPECT_FLOAT_EQ(tile->contents_scale(), expected_scales[scale_index]); | 2155 EXPECT_FLOAT_EQ(tile->contents_scale(), expected_scales[scale_index]); |
2234 unique_tiles.insert(tile); | 2156 unique_tiles.insert(tile); |
2235 } | 2157 } |
2236 | 2158 |
2237 EXPECT_TRUE(reached_required); | 2159 EXPECT_TRUE(reached_required); |
2238 EXPECT_EQ(all_tiles_set.size(), unique_tiles.size()); | 2160 EXPECT_EQ(all_tiles_set.size(), unique_tiles.size()); |
2239 } | 2161 } |
2240 | 2162 |
2241 } // namespace | 2163 } // namespace |
2242 } // namespace cc | 2164 } // namespace cc |
OLD | NEW |