OLD | NEW |
1 // Copyright 2011 The Chromium Authors. All rights reserved. | 1 // Copyright 2011 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/trees/layer_tree_host_impl.h" | 5 #include "cc/trees/layer_tree_host_impl.h" |
6 | 6 |
7 #include <cmath> | 7 #include <cmath> |
8 | 8 |
9 #include "base/bind.h" | 9 #include "base/bind.h" |
10 #include "base/command_line.h" | 10 #include "base/command_line.h" |
(...skipping 276 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
287 layer->SetScrollClipLayer(clip_layer->id()); | 287 layer->SetScrollClipLayer(clip_layer->id()); |
288 layer->SetDrawsContent(true); | 288 layer->SetDrawsContent(true); |
289 layer->SetBounds(size); | 289 layer->SetBounds(size); |
290 layer->SetContentBounds(size); | 290 layer->SetContentBounds(size); |
291 clip_layer->SetBounds(gfx::Size(size.width() / 2, size.height() / 2)); | 291 clip_layer->SetBounds(gfx::Size(size.width() / 2, size.height() / 2)); |
292 return layer.Pass(); | 292 return layer.Pass(); |
293 } | 293 } |
294 | 294 |
295 void DrawFrame() { | 295 void DrawFrame() { |
296 LayerTreeHostImpl::FrameData frame; | 296 LayerTreeHostImpl::FrameData frame; |
297 EXPECT_EQ(DrawSwapReadbackResult::DRAW_SUCCESS, | 297 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame, gfx::Rect())); |
298 host_impl_->PrepareToDraw(&frame, gfx::Rect())); | |
299 host_impl_->DrawLayers(&frame, gfx::FrameTime::Now()); | 298 host_impl_->DrawLayers(&frame, gfx::FrameTime::Now()); |
300 host_impl_->DidDrawAllLayers(frame); | 299 host_impl_->DidDrawAllLayers(frame); |
301 } | 300 } |
302 | 301 |
303 void pinch_zoom_pan_viewport_forces_commit_redraw(float device_scale_factor); | 302 void pinch_zoom_pan_viewport_forces_commit_redraw(float device_scale_factor); |
304 void pinch_zoom_pan_viewport_test(float device_scale_factor); | 303 void pinch_zoom_pan_viewport_test(float device_scale_factor); |
305 void pinch_zoom_pan_viewport_and_scroll_test(float device_scale_factor); | 304 void pinch_zoom_pan_viewport_and_scroll_test(float device_scale_factor); |
306 void pinch_zoom_pan_viewport_and_scroll_boundary_test( | 305 void pinch_zoom_pan_viewport_and_scroll_boundary_test( |
307 float device_scale_factor); | 306 float device_scale_factor); |
308 | 307 |
(...skipping 1326 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1635 DidDrawCheckLayer::Create(host_impl_->active_tree(), 1)); | 1634 DidDrawCheckLayer::Create(host_impl_->active_tree(), 1)); |
1636 DidDrawCheckLayer* root = static_cast<DidDrawCheckLayer*>( | 1635 DidDrawCheckLayer* root = static_cast<DidDrawCheckLayer*>( |
1637 host_impl_->active_tree()->root_layer()); | 1636 host_impl_->active_tree()->root_layer()); |
1638 | 1637 |
1639 root->AddChild(DidDrawCheckLayer::Create(host_impl_->active_tree(), 2)); | 1638 root->AddChild(DidDrawCheckLayer::Create(host_impl_->active_tree(), 2)); |
1640 DidDrawCheckLayer* layer = | 1639 DidDrawCheckLayer* layer = |
1641 static_cast<DidDrawCheckLayer*>(root->children()[0]); | 1640 static_cast<DidDrawCheckLayer*>(root->children()[0]); |
1642 | 1641 |
1643 { | 1642 { |
1644 LayerTreeHostImpl::FrameData frame; | 1643 LayerTreeHostImpl::FrameData frame; |
1645 EXPECT_EQ(DrawSwapReadbackResult::DRAW_SUCCESS, | 1644 EXPECT_EQ(DRAW_SUCCESS, |
1646 host_impl_->PrepareToDraw(&frame, gfx::Rect(10, 10))); | 1645 host_impl_->PrepareToDraw(&frame, gfx::Rect(10, 10))); |
1647 host_impl_->DrawLayers(&frame, gfx::FrameTime::Now()); | 1646 host_impl_->DrawLayers(&frame, gfx::FrameTime::Now()); |
1648 host_impl_->DidDrawAllLayers(frame); | 1647 host_impl_->DidDrawAllLayers(frame); |
1649 | 1648 |
1650 EXPECT_TRUE(layer->will_draw_called()); | 1649 EXPECT_TRUE(layer->will_draw_called()); |
1651 EXPECT_TRUE(layer->append_quads_called()); | 1650 EXPECT_TRUE(layer->append_quads_called()); |
1652 EXPECT_TRUE(layer->did_draw_called()); | 1651 EXPECT_TRUE(layer->did_draw_called()); |
1653 } | 1652 } |
1654 | 1653 |
1655 { | 1654 { |
1656 LayerTreeHostImpl::FrameData frame; | 1655 LayerTreeHostImpl::FrameData frame; |
1657 | 1656 |
1658 layer->set_will_draw_returns_false(); | 1657 layer->set_will_draw_returns_false(); |
1659 layer->ClearDidDrawCheck(); | 1658 layer->ClearDidDrawCheck(); |
1660 | 1659 |
1661 EXPECT_EQ(DrawSwapReadbackResult::DRAW_SUCCESS, | 1660 EXPECT_EQ(DRAW_SUCCESS, |
1662 host_impl_->PrepareToDraw(&frame, gfx::Rect(10, 10))); | 1661 host_impl_->PrepareToDraw(&frame, gfx::Rect(10, 10))); |
1663 host_impl_->DrawLayers(&frame, gfx::FrameTime::Now()); | 1662 host_impl_->DrawLayers(&frame, gfx::FrameTime::Now()); |
1664 host_impl_->DidDrawAllLayers(frame); | 1663 host_impl_->DidDrawAllLayers(frame); |
1665 | 1664 |
1666 EXPECT_TRUE(layer->will_draw_called()); | 1665 EXPECT_TRUE(layer->will_draw_called()); |
1667 EXPECT_FALSE(layer->append_quads_called()); | 1666 EXPECT_FALSE(layer->append_quads_called()); |
1668 EXPECT_FALSE(layer->did_draw_called()); | 1667 EXPECT_FALSE(layer->did_draw_called()); |
1669 } | 1668 } |
1670 } | 1669 } |
1671 | 1670 |
(...skipping 12 matching lines...) Expand all Loading... |
1684 // Ensure visible_content_rect for layer is empty. | 1683 // Ensure visible_content_rect for layer is empty. |
1685 layer->SetPosition(gfx::PointF(100.f, 100.f)); | 1684 layer->SetPosition(gfx::PointF(100.f, 100.f)); |
1686 layer->SetBounds(gfx::Size(10, 10)); | 1685 layer->SetBounds(gfx::Size(10, 10)); |
1687 layer->SetContentBounds(gfx::Size(10, 10)); | 1686 layer->SetContentBounds(gfx::Size(10, 10)); |
1688 | 1687 |
1689 LayerTreeHostImpl::FrameData frame; | 1688 LayerTreeHostImpl::FrameData frame; |
1690 | 1689 |
1691 EXPECT_FALSE(layer->will_draw_called()); | 1690 EXPECT_FALSE(layer->will_draw_called()); |
1692 EXPECT_FALSE(layer->did_draw_called()); | 1691 EXPECT_FALSE(layer->did_draw_called()); |
1693 | 1692 |
1694 EXPECT_EQ(DrawSwapReadbackResult::DRAW_SUCCESS, | 1693 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame, gfx::Rect())); |
1695 host_impl_->PrepareToDraw(&frame, gfx::Rect())); | |
1696 host_impl_->DrawLayers(&frame, gfx::FrameTime::Now()); | 1694 host_impl_->DrawLayers(&frame, gfx::FrameTime::Now()); |
1697 host_impl_->DidDrawAllLayers(frame); | 1695 host_impl_->DidDrawAllLayers(frame); |
1698 | 1696 |
1699 EXPECT_FALSE(layer->will_draw_called()); | 1697 EXPECT_FALSE(layer->will_draw_called()); |
1700 EXPECT_FALSE(layer->did_draw_called()); | 1698 EXPECT_FALSE(layer->did_draw_called()); |
1701 | 1699 |
1702 EXPECT_TRUE(layer->visible_content_rect().IsEmpty()); | 1700 EXPECT_TRUE(layer->visible_content_rect().IsEmpty()); |
1703 | 1701 |
1704 // Ensure visible_content_rect for layer is not empty | 1702 // Ensure visible_content_rect for layer is not empty |
1705 layer->SetPosition(gfx::PointF()); | 1703 layer->SetPosition(gfx::PointF()); |
1706 | 1704 |
1707 EXPECT_FALSE(layer->will_draw_called()); | 1705 EXPECT_FALSE(layer->will_draw_called()); |
1708 EXPECT_FALSE(layer->did_draw_called()); | 1706 EXPECT_FALSE(layer->did_draw_called()); |
1709 | 1707 |
1710 EXPECT_EQ(DrawSwapReadbackResult::DRAW_SUCCESS, | 1708 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame, gfx::Rect())); |
1711 host_impl_->PrepareToDraw(&frame, gfx::Rect())); | |
1712 host_impl_->DrawLayers(&frame, gfx::FrameTime::Now()); | 1709 host_impl_->DrawLayers(&frame, gfx::FrameTime::Now()); |
1713 host_impl_->DidDrawAllLayers(frame); | 1710 host_impl_->DidDrawAllLayers(frame); |
1714 | 1711 |
1715 EXPECT_TRUE(layer->will_draw_called()); | 1712 EXPECT_TRUE(layer->will_draw_called()); |
1716 EXPECT_TRUE(layer->did_draw_called()); | 1713 EXPECT_TRUE(layer->did_draw_called()); |
1717 | 1714 |
1718 EXPECT_FALSE(layer->visible_content_rect().IsEmpty()); | 1715 EXPECT_FALSE(layer->visible_content_rect().IsEmpty()); |
1719 } | 1716 } |
1720 | 1717 |
1721 TEST_F(LayerTreeHostImplTest, WillDrawNotCalledOnOccludedLayer) { | 1718 TEST_F(LayerTreeHostImplTest, WillDrawNotCalledOnOccludedLayer) { |
(...skipping 18 matching lines...) Expand all Loading... |
1740 top_layer->SetContentBounds(big_size); | 1737 top_layer->SetContentBounds(big_size); |
1741 top_layer->SetContentsOpaque(true); | 1738 top_layer->SetContentsOpaque(true); |
1742 | 1739 |
1743 LayerTreeHostImpl::FrameData frame; | 1740 LayerTreeHostImpl::FrameData frame; |
1744 | 1741 |
1745 EXPECT_FALSE(occluded_layer->will_draw_called()); | 1742 EXPECT_FALSE(occluded_layer->will_draw_called()); |
1746 EXPECT_FALSE(occluded_layer->did_draw_called()); | 1743 EXPECT_FALSE(occluded_layer->did_draw_called()); |
1747 EXPECT_FALSE(top_layer->will_draw_called()); | 1744 EXPECT_FALSE(top_layer->will_draw_called()); |
1748 EXPECT_FALSE(top_layer->did_draw_called()); | 1745 EXPECT_FALSE(top_layer->did_draw_called()); |
1749 | 1746 |
1750 EXPECT_EQ(DrawSwapReadbackResult::DRAW_SUCCESS, | 1747 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame, gfx::Rect())); |
1751 host_impl_->PrepareToDraw(&frame, gfx::Rect())); | |
1752 host_impl_->DrawLayers(&frame, gfx::FrameTime::Now()); | 1748 host_impl_->DrawLayers(&frame, gfx::FrameTime::Now()); |
1753 host_impl_->DidDrawAllLayers(frame); | 1749 host_impl_->DidDrawAllLayers(frame); |
1754 | 1750 |
1755 EXPECT_FALSE(occluded_layer->will_draw_called()); | 1751 EXPECT_FALSE(occluded_layer->will_draw_called()); |
1756 EXPECT_FALSE(occluded_layer->did_draw_called()); | 1752 EXPECT_FALSE(occluded_layer->did_draw_called()); |
1757 EXPECT_TRUE(top_layer->will_draw_called()); | 1753 EXPECT_TRUE(top_layer->will_draw_called()); |
1758 EXPECT_TRUE(top_layer->did_draw_called()); | 1754 EXPECT_TRUE(top_layer->did_draw_called()); |
1759 } | 1755 } |
1760 | 1756 |
1761 TEST_F(LayerTreeHostImplTest, DidDrawCalledOnAllLayers) { | 1757 TEST_F(LayerTreeHostImplTest, DidDrawCalledOnAllLayers) { |
(...skipping 11 matching lines...) Expand all Loading... |
1773 static_cast<DidDrawCheckLayer*>(layer1->children()[0]); | 1769 static_cast<DidDrawCheckLayer*>(layer1->children()[0]); |
1774 | 1770 |
1775 layer1->SetOpacity(0.3f); | 1771 layer1->SetOpacity(0.3f); |
1776 layer1->SetShouldFlattenTransform(true); | 1772 layer1->SetShouldFlattenTransform(true); |
1777 | 1773 |
1778 EXPECT_FALSE(root->did_draw_called()); | 1774 EXPECT_FALSE(root->did_draw_called()); |
1779 EXPECT_FALSE(layer1->did_draw_called()); | 1775 EXPECT_FALSE(layer1->did_draw_called()); |
1780 EXPECT_FALSE(layer2->did_draw_called()); | 1776 EXPECT_FALSE(layer2->did_draw_called()); |
1781 | 1777 |
1782 LayerTreeHostImpl::FrameData frame; | 1778 LayerTreeHostImpl::FrameData frame; |
1783 EXPECT_EQ(DrawSwapReadbackResult::DRAW_SUCCESS, | 1779 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame, gfx::Rect())); |
1784 host_impl_->PrepareToDraw(&frame, gfx::Rect())); | |
1785 host_impl_->DrawLayers(&frame, gfx::FrameTime::Now()); | 1780 host_impl_->DrawLayers(&frame, gfx::FrameTime::Now()); |
1786 host_impl_->DidDrawAllLayers(frame); | 1781 host_impl_->DidDrawAllLayers(frame); |
1787 | 1782 |
1788 EXPECT_TRUE(root->did_draw_called()); | 1783 EXPECT_TRUE(root->did_draw_called()); |
1789 EXPECT_TRUE(layer1->did_draw_called()); | 1784 EXPECT_TRUE(layer1->did_draw_called()); |
1790 EXPECT_TRUE(layer2->did_draw_called()); | 1785 EXPECT_TRUE(layer2->did_draw_called()); |
1791 | 1786 |
1792 EXPECT_NE(root->render_surface(), layer1->render_surface()); | 1787 EXPECT_NE(root->render_surface(), layer1->render_surface()); |
1793 EXPECT_TRUE(!!layer1->render_surface()); | 1788 EXPECT_TRUE(!!layer1->render_surface()); |
1794 } | 1789 } |
(...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1859 root->AddChild( | 1854 root->AddChild( |
1860 MissingTextureAnimatingLayer::Create(host_impl_->active_tree(), | 1855 MissingTextureAnimatingLayer::Create(host_impl_->active_tree(), |
1861 2, | 1856 2, |
1862 tile_missing, | 1857 tile_missing, |
1863 skips_draw, | 1858 skips_draw, |
1864 is_animating, | 1859 is_animating, |
1865 host_impl_->resource_provider())); | 1860 host_impl_->resource_provider())); |
1866 | 1861 |
1867 LayerTreeHostImpl::FrameData frame; | 1862 LayerTreeHostImpl::FrameData frame; |
1868 | 1863 |
1869 EXPECT_EQ(DrawSwapReadbackResult::DRAW_SUCCESS, | 1864 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame, gfx::Rect())); |
1870 host_impl_->PrepareToDraw(&frame, gfx::Rect())); | |
1871 host_impl_->DrawLayers(&frame, gfx::FrameTime::Now()); | 1865 host_impl_->DrawLayers(&frame, gfx::FrameTime::Now()); |
1872 host_impl_->DidDrawAllLayers(frame); | 1866 host_impl_->DidDrawAllLayers(frame); |
1873 } | 1867 } |
1874 | 1868 |
1875 TEST_F(LayerTreeHostImplTest, PrepareToDrawSucceedsWithAnimatedLayer) { | 1869 TEST_F(LayerTreeHostImplTest, PrepareToDrawSucceedsWithAnimatedLayer) { |
1876 host_impl_->active_tree()->SetRootLayer( | 1870 host_impl_->active_tree()->SetRootLayer( |
1877 DidDrawCheckLayer::Create(host_impl_->active_tree(), 1)); | 1871 DidDrawCheckLayer::Create(host_impl_->active_tree(), 1)); |
1878 DidDrawCheckLayer* root = | 1872 DidDrawCheckLayer* root = |
1879 static_cast<DidDrawCheckLayer*>(host_impl_->active_tree()->root_layer()); | 1873 static_cast<DidDrawCheckLayer*>(host_impl_->active_tree()->root_layer()); |
1880 bool tile_missing = false; | 1874 bool tile_missing = false; |
1881 bool skips_draw = false; | 1875 bool skips_draw = false; |
1882 bool is_animating = true; | 1876 bool is_animating = true; |
1883 root->AddChild( | 1877 root->AddChild( |
1884 MissingTextureAnimatingLayer::Create(host_impl_->active_tree(), | 1878 MissingTextureAnimatingLayer::Create(host_impl_->active_tree(), |
1885 2, | 1879 2, |
1886 tile_missing, | 1880 tile_missing, |
1887 skips_draw, | 1881 skips_draw, |
1888 is_animating, | 1882 is_animating, |
1889 host_impl_->resource_provider())); | 1883 host_impl_->resource_provider())); |
1890 | 1884 |
1891 LayerTreeHostImpl::FrameData frame; | 1885 LayerTreeHostImpl::FrameData frame; |
1892 | 1886 |
1893 EXPECT_EQ(DrawSwapReadbackResult::DRAW_SUCCESS, | 1887 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame, gfx::Rect())); |
1894 host_impl_->PrepareToDraw(&frame, gfx::Rect())); | |
1895 host_impl_->DrawLayers(&frame, gfx::FrameTime::Now()); | 1888 host_impl_->DrawLayers(&frame, gfx::FrameTime::Now()); |
1896 host_impl_->DidDrawAllLayers(frame); | 1889 host_impl_->DidDrawAllLayers(frame); |
1897 } | 1890 } |
1898 | 1891 |
1899 TEST_F(LayerTreeHostImplTest, | 1892 TEST_F(LayerTreeHostImplTest, |
1900 PrepareToDrawSucceedsWithNonAnimatedMissingTexture) { | 1893 PrepareToDrawSucceedsWithNonAnimatedMissingTexture) { |
1901 // When a texture is missing and we're not animating, we draw as usual with | 1894 // When a texture is missing and we're not animating, we draw as usual with |
1902 // checkerboarding. | 1895 // checkerboarding. |
1903 host_impl_->active_tree()->SetRootLayer( | 1896 host_impl_->active_tree()->SetRootLayer( |
1904 DidDrawCheckLayer::Create(host_impl_->active_tree(), 3)); | 1897 DidDrawCheckLayer::Create(host_impl_->active_tree(), 3)); |
1905 DidDrawCheckLayer* root = | 1898 DidDrawCheckLayer* root = |
1906 static_cast<DidDrawCheckLayer*>(host_impl_->active_tree()->root_layer()); | 1899 static_cast<DidDrawCheckLayer*>(host_impl_->active_tree()->root_layer()); |
1907 | 1900 |
1908 bool tile_missing = true; | 1901 bool tile_missing = true; |
1909 bool skips_draw = false; | 1902 bool skips_draw = false; |
1910 bool is_animating = false; | 1903 bool is_animating = false; |
1911 root->AddChild( | 1904 root->AddChild( |
1912 MissingTextureAnimatingLayer::Create(host_impl_->active_tree(), | 1905 MissingTextureAnimatingLayer::Create(host_impl_->active_tree(), |
1913 4, | 1906 4, |
1914 tile_missing, | 1907 tile_missing, |
1915 skips_draw, | 1908 skips_draw, |
1916 is_animating, | 1909 is_animating, |
1917 host_impl_->resource_provider())); | 1910 host_impl_->resource_provider())); |
1918 LayerTreeHostImpl::FrameData frame; | 1911 LayerTreeHostImpl::FrameData frame; |
1919 EXPECT_EQ(DrawSwapReadbackResult::DRAW_SUCCESS, | 1912 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame, gfx::Rect())); |
1920 host_impl_->PrepareToDraw(&frame, gfx::Rect())); | |
1921 host_impl_->DrawLayers(&frame, gfx::FrameTime::Now()); | 1913 host_impl_->DrawLayers(&frame, gfx::FrameTime::Now()); |
1922 host_impl_->DidDrawAllLayers(frame); | 1914 host_impl_->DidDrawAllLayers(frame); |
1923 } | 1915 } |
1924 | 1916 |
1925 TEST_F(LayerTreeHostImplTest, PrepareToDrawFailsWhenAnimationUsesCheckerboard) { | 1917 TEST_F(LayerTreeHostImplTest, PrepareToDrawFailsWhenAnimationUsesCheckerboard) { |
1926 // When a texture is missing and we're animating, we don't want to draw | 1918 // When a texture is missing and we're animating, we don't want to draw |
1927 // anything. | 1919 // anything. |
1928 host_impl_->active_tree()->SetRootLayer( | 1920 host_impl_->active_tree()->SetRootLayer( |
1929 DidDrawCheckLayer::Create(host_impl_->active_tree(), 5)); | 1921 DidDrawCheckLayer::Create(host_impl_->active_tree(), 5)); |
1930 DidDrawCheckLayer* root = | 1922 DidDrawCheckLayer* root = |
1931 static_cast<DidDrawCheckLayer*>(host_impl_->active_tree()->root_layer()); | 1923 static_cast<DidDrawCheckLayer*>(host_impl_->active_tree()->root_layer()); |
1932 bool tile_missing = true; | 1924 bool tile_missing = true; |
1933 bool skips_draw = false; | 1925 bool skips_draw = false; |
1934 bool is_animating = true; | 1926 bool is_animating = true; |
1935 root->AddChild( | 1927 root->AddChild( |
1936 MissingTextureAnimatingLayer::Create(host_impl_->active_tree(), | 1928 MissingTextureAnimatingLayer::Create(host_impl_->active_tree(), |
1937 6, | 1929 6, |
1938 tile_missing, | 1930 tile_missing, |
1939 skips_draw, | 1931 skips_draw, |
1940 is_animating, | 1932 is_animating, |
1941 host_impl_->resource_provider())); | 1933 host_impl_->resource_provider())); |
1942 LayerTreeHostImpl::FrameData frame; | 1934 LayerTreeHostImpl::FrameData frame; |
1943 EXPECT_EQ(DrawSwapReadbackResult::DRAW_ABORTED_CHECKERBOARD_ANIMATIONS, | 1935 EXPECT_EQ(DRAW_ABORTED_CHECKERBOARD_ANIMATIONS, |
1944 host_impl_->PrepareToDraw(&frame, gfx::Rect())); | 1936 host_impl_->PrepareToDraw(&frame, gfx::Rect())); |
1945 host_impl_->DrawLayers(&frame, gfx::FrameTime::Now()); | 1937 host_impl_->DrawLayers(&frame, gfx::FrameTime::Now()); |
1946 host_impl_->DidDrawAllLayers(frame); | 1938 host_impl_->DidDrawAllLayers(frame); |
1947 } | 1939 } |
1948 | 1940 |
1949 TEST_F(LayerTreeHostImplTest, | 1941 TEST_F(LayerTreeHostImplTest, |
1950 PrepareToDrawSucceedsWithMissingSkippedAnimatedLayer) { | 1942 PrepareToDrawSucceedsWithMissingSkippedAnimatedLayer) { |
1951 // When the layer skips draw and we're animating, we still draw the frame. | 1943 // When the layer skips draw and we're animating, we still draw the frame. |
1952 host_impl_->active_tree()->SetRootLayer( | 1944 host_impl_->active_tree()->SetRootLayer( |
1953 DidDrawCheckLayer::Create(host_impl_->active_tree(), 7)); | 1945 DidDrawCheckLayer::Create(host_impl_->active_tree(), 7)); |
1954 DidDrawCheckLayer* root = | 1946 DidDrawCheckLayer* root = |
1955 static_cast<DidDrawCheckLayer*>(host_impl_->active_tree()->root_layer()); | 1947 static_cast<DidDrawCheckLayer*>(host_impl_->active_tree()->root_layer()); |
1956 bool tile_missing = false; | 1948 bool tile_missing = false; |
1957 bool skips_draw = true; | 1949 bool skips_draw = true; |
1958 bool is_animating = true; | 1950 bool is_animating = true; |
1959 root->AddChild( | 1951 root->AddChild( |
1960 MissingTextureAnimatingLayer::Create(host_impl_->active_tree(), | 1952 MissingTextureAnimatingLayer::Create(host_impl_->active_tree(), |
1961 8, | 1953 8, |
1962 tile_missing, | 1954 tile_missing, |
1963 skips_draw, | 1955 skips_draw, |
1964 is_animating, | 1956 is_animating, |
1965 host_impl_->resource_provider())); | 1957 host_impl_->resource_provider())); |
1966 LayerTreeHostImpl::FrameData frame; | 1958 LayerTreeHostImpl::FrameData frame; |
1967 EXPECT_EQ(host_impl_->PrepareToDraw(&frame, gfx::Rect()), | 1959 EXPECT_EQ(host_impl_->PrepareToDraw(&frame, gfx::Rect()), DRAW_SUCCESS); |
1968 DrawSwapReadbackResult::DRAW_SUCCESS); | |
1969 host_impl_->DrawLayers(&frame, gfx::FrameTime::Now()); | 1960 host_impl_->DrawLayers(&frame, gfx::FrameTime::Now()); |
1970 host_impl_->DidDrawAllLayers(frame); | 1961 host_impl_->DidDrawAllLayers(frame); |
1971 } | 1962 } |
1972 | 1963 |
1973 TEST_F(LayerTreeHostImplTest, | 1964 TEST_F(LayerTreeHostImplTest, |
1974 PrepareToDrawSucceedsWhenHighResRequiredButNoMissingTextures) { | 1965 PrepareToDrawSucceedsWhenHighResRequiredButNoMissingTextures) { |
1975 // When the layer skips draw and we're animating, we still draw the frame. | 1966 // When the layer skips draw and we're animating, we still draw the frame. |
1976 host_impl_->active_tree()->SetRootLayer( | 1967 host_impl_->active_tree()->SetRootLayer( |
1977 DidDrawCheckLayer::Create(host_impl_->active_tree(), 7)); | 1968 DidDrawCheckLayer::Create(host_impl_->active_tree(), 7)); |
1978 DidDrawCheckLayer* root = | 1969 DidDrawCheckLayer* root = |
1979 static_cast<DidDrawCheckLayer*>(host_impl_->active_tree()->root_layer()); | 1970 static_cast<DidDrawCheckLayer*>(host_impl_->active_tree()->root_layer()); |
1980 bool tile_missing = false; | 1971 bool tile_missing = false; |
1981 bool skips_draw = false; | 1972 bool skips_draw = false; |
1982 bool is_animating = false; | 1973 bool is_animating = false; |
1983 root->AddChild( | 1974 root->AddChild( |
1984 MissingTextureAnimatingLayer::Create(host_impl_->active_tree(), | 1975 MissingTextureAnimatingLayer::Create(host_impl_->active_tree(), |
1985 8, | 1976 8, |
1986 tile_missing, | 1977 tile_missing, |
1987 skips_draw, | 1978 skips_draw, |
1988 is_animating, | 1979 is_animating, |
1989 host_impl_->resource_provider())); | 1980 host_impl_->resource_provider())); |
1990 host_impl_->active_tree()->SetRequiresHighResToDraw(); | 1981 host_impl_->active_tree()->SetRequiresHighResToDraw(); |
1991 LayerTreeHostImpl::FrameData frame; | 1982 LayerTreeHostImpl::FrameData frame; |
1992 EXPECT_EQ(host_impl_->PrepareToDraw(&frame, gfx::Rect()), | 1983 EXPECT_EQ(host_impl_->PrepareToDraw(&frame, gfx::Rect()), DRAW_SUCCESS); |
1993 DrawSwapReadbackResult::DRAW_SUCCESS); | |
1994 host_impl_->DrawLayers(&frame, gfx::FrameTime::Now()); | 1984 host_impl_->DrawLayers(&frame, gfx::FrameTime::Now()); |
1995 host_impl_->DidDrawAllLayers(frame); | 1985 host_impl_->DidDrawAllLayers(frame); |
1996 } | 1986 } |
1997 | 1987 |
1998 TEST_F(LayerTreeHostImplTest, | 1988 TEST_F(LayerTreeHostImplTest, |
1999 PrepareToDrawFailsWhenHighResRequiredAndMissingTextures) { | 1989 PrepareToDrawFailsWhenHighResRequiredAndMissingTextures) { |
2000 // When the layer skips draw and we're animating, we still draw the frame. | 1990 // When the layer skips draw and we're animating, we still draw the frame. |
2001 host_impl_->active_tree()->SetRootLayer( | 1991 host_impl_->active_tree()->SetRootLayer( |
2002 DidDrawCheckLayer::Create(host_impl_->active_tree(), 7)); | 1992 DidDrawCheckLayer::Create(host_impl_->active_tree(), 7)); |
2003 DidDrawCheckLayer* root = | 1993 DidDrawCheckLayer* root = |
2004 static_cast<DidDrawCheckLayer*>(host_impl_->active_tree()->root_layer()); | 1994 static_cast<DidDrawCheckLayer*>(host_impl_->active_tree()->root_layer()); |
2005 bool tile_missing = true; | 1995 bool tile_missing = true; |
2006 bool skips_draw = false; | 1996 bool skips_draw = false; |
2007 bool is_animating = false; | 1997 bool is_animating = false; |
2008 root->AddChild( | 1998 root->AddChild( |
2009 MissingTextureAnimatingLayer::Create(host_impl_->active_tree(), | 1999 MissingTextureAnimatingLayer::Create(host_impl_->active_tree(), |
2010 8, | 2000 8, |
2011 tile_missing, | 2001 tile_missing, |
2012 skips_draw, | 2002 skips_draw, |
2013 is_animating, | 2003 is_animating, |
2014 host_impl_->resource_provider())); | 2004 host_impl_->resource_provider())); |
2015 host_impl_->active_tree()->SetRequiresHighResToDraw(); | 2005 host_impl_->active_tree()->SetRequiresHighResToDraw(); |
2016 LayerTreeHostImpl::FrameData frame; | 2006 LayerTreeHostImpl::FrameData frame; |
2017 EXPECT_EQ(host_impl_->PrepareToDraw(&frame, gfx::Rect()), | 2007 EXPECT_EQ(host_impl_->PrepareToDraw(&frame, gfx::Rect()), |
2018 DrawSwapReadbackResult::DRAW_ABORTED_MISSING_HIGH_RES_CONTENT); | 2008 DRAW_ABORTED_MISSING_HIGH_RES_CONTENT); |
2019 host_impl_->DrawLayers(&frame, gfx::FrameTime::Now()); | 2009 host_impl_->DrawLayers(&frame, gfx::FrameTime::Now()); |
2020 host_impl_->DidDrawAllLayers(frame); | 2010 host_impl_->DidDrawAllLayers(frame); |
2021 } | 2011 } |
2022 | 2012 |
2023 TEST_F(LayerTreeHostImplTest, ScrollRootIgnored) { | 2013 TEST_F(LayerTreeHostImplTest, ScrollRootIgnored) { |
2024 scoped_ptr<LayerImpl> root = LayerImpl::Create(host_impl_->active_tree(), 1); | 2014 scoped_ptr<LayerImpl> root = LayerImpl::Create(host_impl_->active_tree(), 1); |
2025 root->SetScrollClipLayer(Layer::INVALID_ID); | 2015 root->SetScrollClipLayer(Layer::INVALID_ID); |
2026 host_impl_->active_tree()->SetRootLayer(root.Pass()); | 2016 host_impl_->active_tree()->SetRootLayer(root.Pass()); |
2027 DrawFrame(); | 2017 DrawFrame(); |
2028 | 2018 |
(...skipping 431 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2460 EXPECT_EQ(1.f, scroll->contents_scale_x()); | 2450 EXPECT_EQ(1.f, scroll->contents_scale_x()); |
2461 EXPECT_EQ(1.f, scroll->contents_scale_y()); | 2451 EXPECT_EQ(1.f, scroll->contents_scale_y()); |
2462 EXPECT_EQ(1.f, child->contents_scale_x()); | 2452 EXPECT_EQ(1.f, child->contents_scale_x()); |
2463 EXPECT_EQ(1.f, child->contents_scale_y()); | 2453 EXPECT_EQ(1.f, child->contents_scale_y()); |
2464 EXPECT_EQ(1.f, grand_child->contents_scale_x()); | 2454 EXPECT_EQ(1.f, grand_child->contents_scale_x()); |
2465 EXPECT_EQ(1.f, grand_child->contents_scale_y()); | 2455 EXPECT_EQ(1.f, grand_child->contents_scale_y()); |
2466 | 2456 |
2467 // Make sure all the layers are drawn with the page scale delta applied, i.e., | 2457 // Make sure all the layers are drawn with the page scale delta applied, i.e., |
2468 // the page scale delta on the root layer is applied hierarchically. | 2458 // the page scale delta on the root layer is applied hierarchically. |
2469 LayerTreeHostImpl::FrameData frame; | 2459 LayerTreeHostImpl::FrameData frame; |
2470 EXPECT_EQ(DrawSwapReadbackResult::DRAW_SUCCESS, | 2460 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame, gfx::Rect())); |
2471 host_impl_->PrepareToDraw(&frame, gfx::Rect())); | |
2472 host_impl_->DrawLayers(&frame, gfx::FrameTime::Now()); | 2461 host_impl_->DrawLayers(&frame, gfx::FrameTime::Now()); |
2473 host_impl_->DidDrawAllLayers(frame); | 2462 host_impl_->DidDrawAllLayers(frame); |
2474 | 2463 |
2475 EXPECT_EQ(1.f, root->draw_transform().matrix().getDouble(0, 0)); | 2464 EXPECT_EQ(1.f, root->draw_transform().matrix().getDouble(0, 0)); |
2476 EXPECT_EQ(1.f, root->draw_transform().matrix().getDouble(1, 1)); | 2465 EXPECT_EQ(1.f, root->draw_transform().matrix().getDouble(1, 1)); |
2477 EXPECT_EQ(new_page_scale, scroll->draw_transform().matrix().getDouble(0, 0)); | 2466 EXPECT_EQ(new_page_scale, scroll->draw_transform().matrix().getDouble(0, 0)); |
2478 EXPECT_EQ(new_page_scale, scroll->draw_transform().matrix().getDouble(1, 1)); | 2467 EXPECT_EQ(new_page_scale, scroll->draw_transform().matrix().getDouble(1, 1)); |
2479 EXPECT_EQ(new_page_scale, child->draw_transform().matrix().getDouble(0, 0)); | 2468 EXPECT_EQ(new_page_scale, child->draw_transform().matrix().getDouble(0, 0)); |
2480 EXPECT_EQ(new_page_scale, child->draw_transform().matrix().getDouble(1, 1)); | 2469 EXPECT_EQ(new_page_scale, child->draw_transform().matrix().getDouble(1, 1)); |
2481 EXPECT_EQ(new_page_scale, | 2470 EXPECT_EQ(new_page_scale, |
(...skipping 967 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3449 BlendStateCheckLayer* layer1 = | 3438 BlendStateCheckLayer* layer1 = |
3450 static_cast<BlendStateCheckLayer*>(root->children()[0]); | 3439 static_cast<BlendStateCheckLayer*>(root->children()[0]); |
3451 layer1->SetPosition(gfx::PointF(2.f, 2.f)); | 3440 layer1->SetPosition(gfx::PointF(2.f, 2.f)); |
3452 | 3441 |
3453 LayerTreeHostImpl::FrameData frame; | 3442 LayerTreeHostImpl::FrameData frame; |
3454 | 3443 |
3455 // Opaque layer, drawn without blending. | 3444 // Opaque layer, drawn without blending. |
3456 layer1->SetContentsOpaque(true); | 3445 layer1->SetContentsOpaque(true); |
3457 layer1->SetExpectation(false, false); | 3446 layer1->SetExpectation(false, false); |
3458 layer1->SetUpdateRect(gfx::RectF(layer1->content_bounds())); | 3447 layer1->SetUpdateRect(gfx::RectF(layer1->content_bounds())); |
3459 EXPECT_EQ(DrawSwapReadbackResult::DRAW_SUCCESS, | 3448 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame, gfx::Rect())); |
3460 host_impl_->PrepareToDraw(&frame, gfx::Rect())); | |
3461 host_impl_->DrawLayers(&frame, gfx::FrameTime::Now()); | 3449 host_impl_->DrawLayers(&frame, gfx::FrameTime::Now()); |
3462 EXPECT_TRUE(layer1->quads_appended()); | 3450 EXPECT_TRUE(layer1->quads_appended()); |
3463 host_impl_->DidDrawAllLayers(frame); | 3451 host_impl_->DidDrawAllLayers(frame); |
3464 | 3452 |
3465 // Layer with translucent content and painting, so drawn with blending. | 3453 // Layer with translucent content and painting, so drawn with blending. |
3466 layer1->SetContentsOpaque(false); | 3454 layer1->SetContentsOpaque(false); |
3467 layer1->SetExpectation(true, false); | 3455 layer1->SetExpectation(true, false); |
3468 layer1->SetUpdateRect(gfx::RectF(layer1->content_bounds())); | 3456 layer1->SetUpdateRect(gfx::RectF(layer1->content_bounds())); |
3469 EXPECT_EQ(DrawSwapReadbackResult::DRAW_SUCCESS, | 3457 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame, gfx::Rect())); |
3470 host_impl_->PrepareToDraw(&frame, gfx::Rect())); | |
3471 host_impl_->DrawLayers(&frame, gfx::FrameTime::Now()); | 3458 host_impl_->DrawLayers(&frame, gfx::FrameTime::Now()); |
3472 EXPECT_TRUE(layer1->quads_appended()); | 3459 EXPECT_TRUE(layer1->quads_appended()); |
3473 host_impl_->DidDrawAllLayers(frame); | 3460 host_impl_->DidDrawAllLayers(frame); |
3474 | 3461 |
3475 // Layer with translucent opacity, drawn with blending. | 3462 // Layer with translucent opacity, drawn with blending. |
3476 layer1->SetContentsOpaque(true); | 3463 layer1->SetContentsOpaque(true); |
3477 layer1->SetOpacity(0.5f); | 3464 layer1->SetOpacity(0.5f); |
3478 layer1->SetExpectation(true, false); | 3465 layer1->SetExpectation(true, false); |
3479 layer1->SetUpdateRect(gfx::RectF(layer1->content_bounds())); | 3466 layer1->SetUpdateRect(gfx::RectF(layer1->content_bounds())); |
3480 EXPECT_EQ(DrawSwapReadbackResult::DRAW_SUCCESS, | 3467 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame, gfx::Rect())); |
3481 host_impl_->PrepareToDraw(&frame, gfx::Rect())); | |
3482 host_impl_->DrawLayers(&frame, gfx::FrameTime::Now()); | 3468 host_impl_->DrawLayers(&frame, gfx::FrameTime::Now()); |
3483 EXPECT_TRUE(layer1->quads_appended()); | 3469 EXPECT_TRUE(layer1->quads_appended()); |
3484 host_impl_->DidDrawAllLayers(frame); | 3470 host_impl_->DidDrawAllLayers(frame); |
3485 | 3471 |
3486 // Layer with translucent opacity and painting, drawn with blending. | 3472 // Layer with translucent opacity and painting, drawn with blending. |
3487 layer1->SetContentsOpaque(true); | 3473 layer1->SetContentsOpaque(true); |
3488 layer1->SetOpacity(0.5f); | 3474 layer1->SetOpacity(0.5f); |
3489 layer1->SetExpectation(true, false); | 3475 layer1->SetExpectation(true, false); |
3490 layer1->SetUpdateRect(gfx::RectF(layer1->content_bounds())); | 3476 layer1->SetUpdateRect(gfx::RectF(layer1->content_bounds())); |
3491 EXPECT_EQ(DrawSwapReadbackResult::DRAW_SUCCESS, | 3477 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame, gfx::Rect())); |
3492 host_impl_->PrepareToDraw(&frame, gfx::Rect())); | |
3493 host_impl_->DrawLayers(&frame, gfx::FrameTime::Now()); | 3478 host_impl_->DrawLayers(&frame, gfx::FrameTime::Now()); |
3494 EXPECT_TRUE(layer1->quads_appended()); | 3479 EXPECT_TRUE(layer1->quads_appended()); |
3495 host_impl_->DidDrawAllLayers(frame); | 3480 host_impl_->DidDrawAllLayers(frame); |
3496 | 3481 |
3497 layer1->AddChild( | 3482 layer1->AddChild( |
3498 BlendStateCheckLayer::Create(host_impl_->active_tree(), | 3483 BlendStateCheckLayer::Create(host_impl_->active_tree(), |
3499 3, | 3484 3, |
3500 host_impl_->resource_provider())); | 3485 host_impl_->resource_provider())); |
3501 BlendStateCheckLayer* layer2 = | 3486 BlendStateCheckLayer* layer2 = |
3502 static_cast<BlendStateCheckLayer*>(layer1->children()[0]); | 3487 static_cast<BlendStateCheckLayer*>(layer1->children()[0]); |
3503 layer2->SetPosition(gfx::PointF(4.f, 4.f)); | 3488 layer2->SetPosition(gfx::PointF(4.f, 4.f)); |
3504 | 3489 |
3505 // 2 opaque layers, drawn without blending. | 3490 // 2 opaque layers, drawn without blending. |
3506 layer1->SetContentsOpaque(true); | 3491 layer1->SetContentsOpaque(true); |
3507 layer1->SetOpacity(1.f); | 3492 layer1->SetOpacity(1.f); |
3508 layer1->SetExpectation(false, false); | 3493 layer1->SetExpectation(false, false); |
3509 layer1->SetUpdateRect(gfx::RectF(layer1->content_bounds())); | 3494 layer1->SetUpdateRect(gfx::RectF(layer1->content_bounds())); |
3510 layer2->SetContentsOpaque(true); | 3495 layer2->SetContentsOpaque(true); |
3511 layer2->SetOpacity(1.f); | 3496 layer2->SetOpacity(1.f); |
3512 layer2->SetExpectation(false, false); | 3497 layer2->SetExpectation(false, false); |
3513 layer2->SetUpdateRect(gfx::RectF(layer1->content_bounds())); | 3498 layer2->SetUpdateRect(gfx::RectF(layer1->content_bounds())); |
3514 EXPECT_EQ(DrawSwapReadbackResult::DRAW_SUCCESS, | 3499 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame, gfx::Rect())); |
3515 host_impl_->PrepareToDraw(&frame, gfx::Rect())); | |
3516 host_impl_->DrawLayers(&frame, gfx::FrameTime::Now()); | 3500 host_impl_->DrawLayers(&frame, gfx::FrameTime::Now()); |
3517 EXPECT_TRUE(layer1->quads_appended()); | 3501 EXPECT_TRUE(layer1->quads_appended()); |
3518 EXPECT_TRUE(layer2->quads_appended()); | 3502 EXPECT_TRUE(layer2->quads_appended()); |
3519 host_impl_->DidDrawAllLayers(frame); | 3503 host_impl_->DidDrawAllLayers(frame); |
3520 | 3504 |
3521 // Parent layer with translucent content, drawn with blending. | 3505 // Parent layer with translucent content, drawn with blending. |
3522 // Child layer with opaque content, drawn without blending. | 3506 // Child layer with opaque content, drawn without blending. |
3523 layer1->SetContentsOpaque(false); | 3507 layer1->SetContentsOpaque(false); |
3524 layer1->SetExpectation(true, false); | 3508 layer1->SetExpectation(true, false); |
3525 layer1->SetUpdateRect(gfx::RectF(layer1->content_bounds())); | 3509 layer1->SetUpdateRect(gfx::RectF(layer1->content_bounds())); |
3526 layer2->SetExpectation(false, false); | 3510 layer2->SetExpectation(false, false); |
3527 layer2->SetUpdateRect(gfx::RectF(layer1->content_bounds())); | 3511 layer2->SetUpdateRect(gfx::RectF(layer1->content_bounds())); |
3528 EXPECT_EQ(DrawSwapReadbackResult::DRAW_SUCCESS, | 3512 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame, gfx::Rect())); |
3529 host_impl_->PrepareToDraw(&frame, gfx::Rect())); | |
3530 host_impl_->DrawLayers(&frame, gfx::FrameTime::Now()); | 3513 host_impl_->DrawLayers(&frame, gfx::FrameTime::Now()); |
3531 EXPECT_TRUE(layer1->quads_appended()); | 3514 EXPECT_TRUE(layer1->quads_appended()); |
3532 EXPECT_TRUE(layer2->quads_appended()); | 3515 EXPECT_TRUE(layer2->quads_appended()); |
3533 host_impl_->DidDrawAllLayers(frame); | 3516 host_impl_->DidDrawAllLayers(frame); |
3534 | 3517 |
3535 // Parent layer with translucent content but opaque painting, drawn without | 3518 // Parent layer with translucent content but opaque painting, drawn without |
3536 // blending. | 3519 // blending. |
3537 // Child layer with opaque content, drawn without blending. | 3520 // Child layer with opaque content, drawn without blending. |
3538 layer1->SetContentsOpaque(true); | 3521 layer1->SetContentsOpaque(true); |
3539 layer1->SetExpectation(false, false); | 3522 layer1->SetExpectation(false, false); |
3540 layer1->SetUpdateRect(gfx::RectF(layer1->content_bounds())); | 3523 layer1->SetUpdateRect(gfx::RectF(layer1->content_bounds())); |
3541 layer2->SetExpectation(false, false); | 3524 layer2->SetExpectation(false, false); |
3542 layer2->SetUpdateRect(gfx::RectF(layer1->content_bounds())); | 3525 layer2->SetUpdateRect(gfx::RectF(layer1->content_bounds())); |
3543 EXPECT_EQ(DrawSwapReadbackResult::DRAW_SUCCESS, | 3526 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame, gfx::Rect())); |
3544 host_impl_->PrepareToDraw(&frame, gfx::Rect())); | |
3545 host_impl_->DrawLayers(&frame, gfx::FrameTime::Now()); | 3527 host_impl_->DrawLayers(&frame, gfx::FrameTime::Now()); |
3546 EXPECT_TRUE(layer1->quads_appended()); | 3528 EXPECT_TRUE(layer1->quads_appended()); |
3547 EXPECT_TRUE(layer2->quads_appended()); | 3529 EXPECT_TRUE(layer2->quads_appended()); |
3548 host_impl_->DidDrawAllLayers(frame); | 3530 host_impl_->DidDrawAllLayers(frame); |
3549 | 3531 |
3550 // Parent layer with translucent opacity and opaque content. Since it has a | 3532 // Parent layer with translucent opacity and opaque content. Since it has a |
3551 // drawing child, it's drawn to a render surface which carries the opacity, | 3533 // drawing child, it's drawn to a render surface which carries the opacity, |
3552 // so it's itself drawn without blending. | 3534 // so it's itself drawn without blending. |
3553 // Child layer with opaque content, drawn without blending (parent surface | 3535 // Child layer with opaque content, drawn without blending (parent surface |
3554 // carries the inherited opacity). | 3536 // carries the inherited opacity). |
3555 layer1->SetContentsOpaque(true); | 3537 layer1->SetContentsOpaque(true); |
3556 layer1->SetOpacity(0.5f); | 3538 layer1->SetOpacity(0.5f); |
3557 layer1->SetExpectation(false, true); | 3539 layer1->SetExpectation(false, true); |
3558 layer1->SetUpdateRect(gfx::RectF(layer1->content_bounds())); | 3540 layer1->SetUpdateRect(gfx::RectF(layer1->content_bounds())); |
3559 layer2->SetExpectation(false, false); | 3541 layer2->SetExpectation(false, false); |
3560 layer2->SetUpdateRect(gfx::RectF(layer1->content_bounds())); | 3542 layer2->SetUpdateRect(gfx::RectF(layer1->content_bounds())); |
3561 EXPECT_EQ(DrawSwapReadbackResult::DRAW_SUCCESS, | 3543 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame, gfx::Rect())); |
3562 host_impl_->PrepareToDraw(&frame, gfx::Rect())); | |
3563 host_impl_->DrawLayers(&frame, gfx::FrameTime::Now()); | 3544 host_impl_->DrawLayers(&frame, gfx::FrameTime::Now()); |
3564 EXPECT_TRUE(layer1->quads_appended()); | 3545 EXPECT_TRUE(layer1->quads_appended()); |
3565 EXPECT_TRUE(layer2->quads_appended()); | 3546 EXPECT_TRUE(layer2->quads_appended()); |
3566 host_impl_->DidDrawAllLayers(frame); | 3547 host_impl_->DidDrawAllLayers(frame); |
3567 | 3548 |
3568 // Draw again, but with child non-opaque, to make sure | 3549 // Draw again, but with child non-opaque, to make sure |
3569 // layer1 not culled. | 3550 // layer1 not culled. |
3570 layer1->SetContentsOpaque(true); | 3551 layer1->SetContentsOpaque(true); |
3571 layer1->SetOpacity(1.f); | 3552 layer1->SetOpacity(1.f); |
3572 layer1->SetExpectation(false, false); | 3553 layer1->SetExpectation(false, false); |
3573 layer1->SetUpdateRect(gfx::RectF(layer1->content_bounds())); | 3554 layer1->SetUpdateRect(gfx::RectF(layer1->content_bounds())); |
3574 layer2->SetContentsOpaque(true); | 3555 layer2->SetContentsOpaque(true); |
3575 layer2->SetOpacity(0.5f); | 3556 layer2->SetOpacity(0.5f); |
3576 layer2->SetExpectation(true, false); | 3557 layer2->SetExpectation(true, false); |
3577 layer2->SetUpdateRect(gfx::RectF(layer1->content_bounds())); | 3558 layer2->SetUpdateRect(gfx::RectF(layer1->content_bounds())); |
3578 EXPECT_EQ(DrawSwapReadbackResult::DRAW_SUCCESS, | 3559 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame, gfx::Rect())); |
3579 host_impl_->PrepareToDraw(&frame, gfx::Rect())); | |
3580 host_impl_->DrawLayers(&frame, gfx::FrameTime::Now()); | 3560 host_impl_->DrawLayers(&frame, gfx::FrameTime::Now()); |
3581 EXPECT_TRUE(layer1->quads_appended()); | 3561 EXPECT_TRUE(layer1->quads_appended()); |
3582 EXPECT_TRUE(layer2->quads_appended()); | 3562 EXPECT_TRUE(layer2->quads_appended()); |
3583 host_impl_->DidDrawAllLayers(frame); | 3563 host_impl_->DidDrawAllLayers(frame); |
3584 | 3564 |
3585 // A second way of making the child non-opaque. | 3565 // A second way of making the child non-opaque. |
3586 layer1->SetContentsOpaque(true); | 3566 layer1->SetContentsOpaque(true); |
3587 layer1->SetOpacity(1.f); | 3567 layer1->SetOpacity(1.f); |
3588 layer1->SetExpectation(false, false); | 3568 layer1->SetExpectation(false, false); |
3589 layer1->SetUpdateRect(gfx::RectF(layer1->content_bounds())); | 3569 layer1->SetUpdateRect(gfx::RectF(layer1->content_bounds())); |
3590 layer2->SetContentsOpaque(false); | 3570 layer2->SetContentsOpaque(false); |
3591 layer2->SetOpacity(1.f); | 3571 layer2->SetOpacity(1.f); |
3592 layer2->SetExpectation(true, false); | 3572 layer2->SetExpectation(true, false); |
3593 layer2->SetUpdateRect(gfx::RectF(layer1->content_bounds())); | 3573 layer2->SetUpdateRect(gfx::RectF(layer1->content_bounds())); |
3594 EXPECT_EQ(DrawSwapReadbackResult::DRAW_SUCCESS, | 3574 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame, gfx::Rect())); |
3595 host_impl_->PrepareToDraw(&frame, gfx::Rect())); | |
3596 host_impl_->DrawLayers(&frame, gfx::FrameTime::Now()); | 3575 host_impl_->DrawLayers(&frame, gfx::FrameTime::Now()); |
3597 EXPECT_TRUE(layer1->quads_appended()); | 3576 EXPECT_TRUE(layer1->quads_appended()); |
3598 EXPECT_TRUE(layer2->quads_appended()); | 3577 EXPECT_TRUE(layer2->quads_appended()); |
3599 host_impl_->DidDrawAllLayers(frame); | 3578 host_impl_->DidDrawAllLayers(frame); |
3600 | 3579 |
3601 // And when the layer says its not opaque but is painted opaque, it is not | 3580 // And when the layer says its not opaque but is painted opaque, it is not |
3602 // blended. | 3581 // blended. |
3603 layer1->SetContentsOpaque(true); | 3582 layer1->SetContentsOpaque(true); |
3604 layer1->SetOpacity(1.f); | 3583 layer1->SetOpacity(1.f); |
3605 layer1->SetExpectation(false, false); | 3584 layer1->SetExpectation(false, false); |
3606 layer1->SetUpdateRect(gfx::RectF(layer1->content_bounds())); | 3585 layer1->SetUpdateRect(gfx::RectF(layer1->content_bounds())); |
3607 layer2->SetContentsOpaque(true); | 3586 layer2->SetContentsOpaque(true); |
3608 layer2->SetOpacity(1.f); | 3587 layer2->SetOpacity(1.f); |
3609 layer2->SetExpectation(false, false); | 3588 layer2->SetExpectation(false, false); |
3610 layer2->SetUpdateRect(gfx::RectF(layer1->content_bounds())); | 3589 layer2->SetUpdateRect(gfx::RectF(layer1->content_bounds())); |
3611 EXPECT_EQ(DrawSwapReadbackResult::DRAW_SUCCESS, | 3590 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame, gfx::Rect())); |
3612 host_impl_->PrepareToDraw(&frame, gfx::Rect())); | |
3613 host_impl_->DrawLayers(&frame, gfx::FrameTime::Now()); | 3591 host_impl_->DrawLayers(&frame, gfx::FrameTime::Now()); |
3614 EXPECT_TRUE(layer1->quads_appended()); | 3592 EXPECT_TRUE(layer1->quads_appended()); |
3615 EXPECT_TRUE(layer2->quads_appended()); | 3593 EXPECT_TRUE(layer2->quads_appended()); |
3616 host_impl_->DidDrawAllLayers(frame); | 3594 host_impl_->DidDrawAllLayers(frame); |
3617 | 3595 |
3618 // Layer with partially opaque contents, drawn with blending. | 3596 // Layer with partially opaque contents, drawn with blending. |
3619 layer1->SetContentsOpaque(false); | 3597 layer1->SetContentsOpaque(false); |
3620 layer1->SetQuadRect(gfx::Rect(5, 5, 5, 5)); | 3598 layer1->SetQuadRect(gfx::Rect(5, 5, 5, 5)); |
3621 layer1->SetQuadVisibleRect(gfx::Rect(5, 5, 5, 5)); | 3599 layer1->SetQuadVisibleRect(gfx::Rect(5, 5, 5, 5)); |
3622 layer1->SetOpaqueContentRect(gfx::Rect(5, 5, 2, 5)); | 3600 layer1->SetOpaqueContentRect(gfx::Rect(5, 5, 2, 5)); |
3623 layer1->SetExpectation(true, false); | 3601 layer1->SetExpectation(true, false); |
3624 layer1->SetUpdateRect(gfx::RectF(layer1->content_bounds())); | 3602 layer1->SetUpdateRect(gfx::RectF(layer1->content_bounds())); |
3625 EXPECT_EQ(DrawSwapReadbackResult::DRAW_SUCCESS, | 3603 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame, gfx::Rect())); |
3626 host_impl_->PrepareToDraw(&frame, gfx::Rect())); | |
3627 host_impl_->DrawLayers(&frame, gfx::FrameTime::Now()); | 3604 host_impl_->DrawLayers(&frame, gfx::FrameTime::Now()); |
3628 EXPECT_TRUE(layer1->quads_appended()); | 3605 EXPECT_TRUE(layer1->quads_appended()); |
3629 host_impl_->DidDrawAllLayers(frame); | 3606 host_impl_->DidDrawAllLayers(frame); |
3630 | 3607 |
3631 // Layer with partially opaque contents partially culled, drawn with blending. | 3608 // Layer with partially opaque contents partially culled, drawn with blending. |
3632 layer1->SetContentsOpaque(false); | 3609 layer1->SetContentsOpaque(false); |
3633 layer1->SetQuadRect(gfx::Rect(5, 5, 5, 5)); | 3610 layer1->SetQuadRect(gfx::Rect(5, 5, 5, 5)); |
3634 layer1->SetQuadVisibleRect(gfx::Rect(5, 5, 5, 2)); | 3611 layer1->SetQuadVisibleRect(gfx::Rect(5, 5, 5, 2)); |
3635 layer1->SetOpaqueContentRect(gfx::Rect(5, 5, 2, 5)); | 3612 layer1->SetOpaqueContentRect(gfx::Rect(5, 5, 2, 5)); |
3636 layer1->SetExpectation(true, false); | 3613 layer1->SetExpectation(true, false); |
3637 layer1->SetUpdateRect(gfx::RectF(layer1->content_bounds())); | 3614 layer1->SetUpdateRect(gfx::RectF(layer1->content_bounds())); |
3638 EXPECT_EQ(DrawSwapReadbackResult::DRAW_SUCCESS, | 3615 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame, gfx::Rect())); |
3639 host_impl_->PrepareToDraw(&frame, gfx::Rect())); | |
3640 host_impl_->DrawLayers(&frame, gfx::FrameTime::Now()); | 3616 host_impl_->DrawLayers(&frame, gfx::FrameTime::Now()); |
3641 EXPECT_TRUE(layer1->quads_appended()); | 3617 EXPECT_TRUE(layer1->quads_appended()); |
3642 host_impl_->DidDrawAllLayers(frame); | 3618 host_impl_->DidDrawAllLayers(frame); |
3643 | 3619 |
3644 // Layer with partially opaque contents culled, drawn with blending. | 3620 // Layer with partially opaque contents culled, drawn with blending. |
3645 layer1->SetContentsOpaque(false); | 3621 layer1->SetContentsOpaque(false); |
3646 layer1->SetQuadRect(gfx::Rect(5, 5, 5, 5)); | 3622 layer1->SetQuadRect(gfx::Rect(5, 5, 5, 5)); |
3647 layer1->SetQuadVisibleRect(gfx::Rect(7, 5, 3, 5)); | 3623 layer1->SetQuadVisibleRect(gfx::Rect(7, 5, 3, 5)); |
3648 layer1->SetOpaqueContentRect(gfx::Rect(5, 5, 2, 5)); | 3624 layer1->SetOpaqueContentRect(gfx::Rect(5, 5, 2, 5)); |
3649 layer1->SetExpectation(true, false); | 3625 layer1->SetExpectation(true, false); |
3650 layer1->SetUpdateRect(gfx::RectF(layer1->content_bounds())); | 3626 layer1->SetUpdateRect(gfx::RectF(layer1->content_bounds())); |
3651 EXPECT_EQ(DrawSwapReadbackResult::DRAW_SUCCESS, | 3627 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame, gfx::Rect())); |
3652 host_impl_->PrepareToDraw(&frame, gfx::Rect())); | |
3653 host_impl_->DrawLayers(&frame, gfx::FrameTime::Now()); | 3628 host_impl_->DrawLayers(&frame, gfx::FrameTime::Now()); |
3654 EXPECT_TRUE(layer1->quads_appended()); | 3629 EXPECT_TRUE(layer1->quads_appended()); |
3655 host_impl_->DidDrawAllLayers(frame); | 3630 host_impl_->DidDrawAllLayers(frame); |
3656 | 3631 |
3657 // Layer with partially opaque contents and translucent contents culled, drawn | 3632 // Layer with partially opaque contents and translucent contents culled, drawn |
3658 // without blending. | 3633 // without blending. |
3659 layer1->SetContentsOpaque(false); | 3634 layer1->SetContentsOpaque(false); |
3660 layer1->SetQuadRect(gfx::Rect(5, 5, 5, 5)); | 3635 layer1->SetQuadRect(gfx::Rect(5, 5, 5, 5)); |
3661 layer1->SetQuadVisibleRect(gfx::Rect(5, 5, 2, 5)); | 3636 layer1->SetQuadVisibleRect(gfx::Rect(5, 5, 2, 5)); |
3662 layer1->SetOpaqueContentRect(gfx::Rect(5, 5, 2, 5)); | 3637 layer1->SetOpaqueContentRect(gfx::Rect(5, 5, 2, 5)); |
3663 layer1->SetExpectation(false, false); | 3638 layer1->SetExpectation(false, false); |
3664 layer1->SetUpdateRect(gfx::RectF(layer1->content_bounds())); | 3639 layer1->SetUpdateRect(gfx::RectF(layer1->content_bounds())); |
3665 EXPECT_EQ(DrawSwapReadbackResult::DRAW_SUCCESS, | 3640 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame, gfx::Rect())); |
3666 host_impl_->PrepareToDraw(&frame, gfx::Rect())); | |
3667 host_impl_->DrawLayers(&frame, gfx::FrameTime::Now()); | 3641 host_impl_->DrawLayers(&frame, gfx::FrameTime::Now()); |
3668 EXPECT_TRUE(layer1->quads_appended()); | 3642 EXPECT_TRUE(layer1->quads_appended()); |
3669 host_impl_->DidDrawAllLayers(frame); | 3643 host_impl_->DidDrawAllLayers(frame); |
3670 } | 3644 } |
3671 | 3645 |
3672 class LayerTreeHostImplViewportCoveredTest : public LayerTreeHostImplTest { | 3646 class LayerTreeHostImplViewportCoveredTest : public LayerTreeHostImplTest { |
3673 protected: | 3647 protected: |
3674 LayerTreeHostImplViewportCoveredTest() : | 3648 LayerTreeHostImplViewportCoveredTest() : |
3675 gutter_quad_material_(DrawQuad::SOLID_COLOR), | 3649 gutter_quad_material_(DrawQuad::SOLID_COLOR), |
3676 child_(NULL), | 3650 child_(NULL), |
(...skipping 24 matching lines...) Expand all Loading... |
3701 // Expect no gutter rects. | 3675 // Expect no gutter rects. |
3702 void TestLayerCoversFullViewport() { | 3676 void TestLayerCoversFullViewport() { |
3703 gfx::Rect layer_rect(viewport_size_); | 3677 gfx::Rect layer_rect(viewport_size_); |
3704 child_->SetPosition(layer_rect.origin()); | 3678 child_->SetPosition(layer_rect.origin()); |
3705 child_->SetBounds(layer_rect.size()); | 3679 child_->SetBounds(layer_rect.size()); |
3706 child_->SetContentBounds(layer_rect.size()); | 3680 child_->SetContentBounds(layer_rect.size()); |
3707 child_->SetQuadRect(gfx::Rect(layer_rect.size())); | 3681 child_->SetQuadRect(gfx::Rect(layer_rect.size())); |
3708 child_->SetQuadVisibleRect(gfx::Rect(layer_rect.size())); | 3682 child_->SetQuadVisibleRect(gfx::Rect(layer_rect.size())); |
3709 | 3683 |
3710 LayerTreeHostImpl::FrameData frame; | 3684 LayerTreeHostImpl::FrameData frame; |
3711 EXPECT_EQ(DrawSwapReadbackResult::DRAW_SUCCESS, | 3685 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame, gfx::Rect())); |
3712 host_impl_->PrepareToDraw(&frame, gfx::Rect())); | |
3713 ASSERT_EQ(1u, frame.render_passes.size()); | 3686 ASSERT_EQ(1u, frame.render_passes.size()); |
3714 | 3687 |
3715 EXPECT_EQ(0u, CountGutterQuads(frame.render_passes[0]->quad_list)); | 3688 EXPECT_EQ(0u, CountGutterQuads(frame.render_passes[0]->quad_list)); |
3716 EXPECT_EQ(1u, frame.render_passes[0]->quad_list.size()); | 3689 EXPECT_EQ(1u, frame.render_passes[0]->quad_list.size()); |
3717 ValidateTextureDrawQuads(frame.render_passes[0]->quad_list); | 3690 ValidateTextureDrawQuads(frame.render_passes[0]->quad_list); |
3718 | 3691 |
3719 VerifyQuadsExactlyCoverViewport(frame.render_passes[0]->quad_list); | 3692 VerifyQuadsExactlyCoverViewport(frame.render_passes[0]->quad_list); |
3720 host_impl_->DidDrawAllLayers(frame); | 3693 host_impl_->DidDrawAllLayers(frame); |
3721 } | 3694 } |
3722 | 3695 |
3723 // Expect fullscreen gutter rect. | 3696 // Expect fullscreen gutter rect. |
3724 void TestEmptyLayer() { | 3697 void TestEmptyLayer() { |
3725 gfx::Rect layer_rect(0, 0, 0, 0); | 3698 gfx::Rect layer_rect(0, 0, 0, 0); |
3726 child_->SetPosition(layer_rect.origin()); | 3699 child_->SetPosition(layer_rect.origin()); |
3727 child_->SetBounds(layer_rect.size()); | 3700 child_->SetBounds(layer_rect.size()); |
3728 child_->SetContentBounds(layer_rect.size()); | 3701 child_->SetContentBounds(layer_rect.size()); |
3729 child_->SetQuadRect(gfx::Rect(layer_rect.size())); | 3702 child_->SetQuadRect(gfx::Rect(layer_rect.size())); |
3730 child_->SetQuadVisibleRect(gfx::Rect(layer_rect.size())); | 3703 child_->SetQuadVisibleRect(gfx::Rect(layer_rect.size())); |
3731 | 3704 |
3732 LayerTreeHostImpl::FrameData frame; | 3705 LayerTreeHostImpl::FrameData frame; |
3733 EXPECT_EQ(DrawSwapReadbackResult::DRAW_SUCCESS, | 3706 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame, gfx::Rect())); |
3734 host_impl_->PrepareToDraw(&frame, gfx::Rect())); | |
3735 ASSERT_EQ(1u, frame.render_passes.size()); | 3707 ASSERT_EQ(1u, frame.render_passes.size()); |
3736 | 3708 |
3737 EXPECT_EQ(1u, CountGutterQuads(frame.render_passes[0]->quad_list)); | 3709 EXPECT_EQ(1u, CountGutterQuads(frame.render_passes[0]->quad_list)); |
3738 EXPECT_EQ(1u, frame.render_passes[0]->quad_list.size()); | 3710 EXPECT_EQ(1u, frame.render_passes[0]->quad_list.size()); |
3739 ValidateTextureDrawQuads(frame.render_passes[0]->quad_list); | 3711 ValidateTextureDrawQuads(frame.render_passes[0]->quad_list); |
3740 | 3712 |
3741 VerifyQuadsExactlyCoverViewport(frame.render_passes[0]->quad_list); | 3713 VerifyQuadsExactlyCoverViewport(frame.render_passes[0]->quad_list); |
3742 host_impl_->DidDrawAllLayers(frame); | 3714 host_impl_->DidDrawAllLayers(frame); |
3743 } | 3715 } |
3744 | 3716 |
3745 // Expect four surrounding gutter rects. | 3717 // Expect four surrounding gutter rects. |
3746 void TestLayerInMiddleOfViewport() { | 3718 void TestLayerInMiddleOfViewport() { |
3747 gfx::Rect layer_rect(500, 500, 200, 200); | 3719 gfx::Rect layer_rect(500, 500, 200, 200); |
3748 child_->SetPosition(layer_rect.origin()); | 3720 child_->SetPosition(layer_rect.origin()); |
3749 child_->SetBounds(layer_rect.size()); | 3721 child_->SetBounds(layer_rect.size()); |
3750 child_->SetContentBounds(layer_rect.size()); | 3722 child_->SetContentBounds(layer_rect.size()); |
3751 child_->SetQuadRect(gfx::Rect(layer_rect.size())); | 3723 child_->SetQuadRect(gfx::Rect(layer_rect.size())); |
3752 child_->SetQuadVisibleRect(gfx::Rect(layer_rect.size())); | 3724 child_->SetQuadVisibleRect(gfx::Rect(layer_rect.size())); |
3753 | 3725 |
3754 LayerTreeHostImpl::FrameData frame; | 3726 LayerTreeHostImpl::FrameData frame; |
3755 EXPECT_EQ(DrawSwapReadbackResult::DRAW_SUCCESS, | 3727 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame, gfx::Rect())); |
3756 host_impl_->PrepareToDraw(&frame, gfx::Rect())); | |
3757 ASSERT_EQ(1u, frame.render_passes.size()); | 3728 ASSERT_EQ(1u, frame.render_passes.size()); |
3758 | 3729 |
3759 EXPECT_EQ(4u, CountGutterQuads(frame.render_passes[0]->quad_list)); | 3730 EXPECT_EQ(4u, CountGutterQuads(frame.render_passes[0]->quad_list)); |
3760 EXPECT_EQ(5u, frame.render_passes[0]->quad_list.size()); | 3731 EXPECT_EQ(5u, frame.render_passes[0]->quad_list.size()); |
3761 ValidateTextureDrawQuads(frame.render_passes[0]->quad_list); | 3732 ValidateTextureDrawQuads(frame.render_passes[0]->quad_list); |
3762 | 3733 |
3763 VerifyQuadsExactlyCoverViewport(frame.render_passes[0]->quad_list); | 3734 VerifyQuadsExactlyCoverViewport(frame.render_passes[0]->quad_list); |
3764 host_impl_->DidDrawAllLayers(frame); | 3735 host_impl_->DidDrawAllLayers(frame); |
3765 } | 3736 } |
3766 | 3737 |
3767 // Expect no gutter rects. | 3738 // Expect no gutter rects. |
3768 void TestLayerIsLargerThanViewport() { | 3739 void TestLayerIsLargerThanViewport() { |
3769 gfx::Rect layer_rect(viewport_size_.width() + 10, | 3740 gfx::Rect layer_rect(viewport_size_.width() + 10, |
3770 viewport_size_.height() + 10); | 3741 viewport_size_.height() + 10); |
3771 child_->SetPosition(layer_rect.origin()); | 3742 child_->SetPosition(layer_rect.origin()); |
3772 child_->SetBounds(layer_rect.size()); | 3743 child_->SetBounds(layer_rect.size()); |
3773 child_->SetContentBounds(layer_rect.size()); | 3744 child_->SetContentBounds(layer_rect.size()); |
3774 child_->SetQuadRect(gfx::Rect(layer_rect.size())); | 3745 child_->SetQuadRect(gfx::Rect(layer_rect.size())); |
3775 child_->SetQuadVisibleRect(gfx::Rect(layer_rect.size())); | 3746 child_->SetQuadVisibleRect(gfx::Rect(layer_rect.size())); |
3776 | 3747 |
3777 LayerTreeHostImpl::FrameData frame; | 3748 LayerTreeHostImpl::FrameData frame; |
3778 EXPECT_EQ(DrawSwapReadbackResult::DRAW_SUCCESS, | 3749 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame, gfx::Rect())); |
3779 host_impl_->PrepareToDraw(&frame, gfx::Rect())); | |
3780 ASSERT_EQ(1u, frame.render_passes.size()); | 3750 ASSERT_EQ(1u, frame.render_passes.size()); |
3781 | 3751 |
3782 EXPECT_EQ(0u, CountGutterQuads(frame.render_passes[0]->quad_list)); | 3752 EXPECT_EQ(0u, CountGutterQuads(frame.render_passes[0]->quad_list)); |
3783 EXPECT_EQ(1u, frame.render_passes[0]->quad_list.size()); | 3753 EXPECT_EQ(1u, frame.render_passes[0]->quad_list.size()); |
3784 ValidateTextureDrawQuads(frame.render_passes[0]->quad_list); | 3754 ValidateTextureDrawQuads(frame.render_passes[0]->quad_list); |
3785 | 3755 |
3786 host_impl_->DidDrawAllLayers(frame); | 3756 host_impl_->DidDrawAllLayers(frame); |
3787 } | 3757 } |
3788 | 3758 |
3789 virtual void DidActivatePendingTree() OVERRIDE { | 3759 virtual void DidActivatePendingTree() OVERRIDE { |
(...skipping 194 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3984 root->SetBounds(gfx::Size(10, 10)); | 3954 root->SetBounds(gfx::Size(10, 10)); |
3985 root->SetContentBounds(gfx::Size(10, 10)); | 3955 root->SetContentBounds(gfx::Size(10, 10)); |
3986 root->SetDrawsContent(true); | 3956 root->SetDrawsContent(true); |
3987 host_impl_->active_tree()->SetRootLayer(root.Pass()); | 3957 host_impl_->active_tree()->SetRootLayer(root.Pass()); |
3988 EXPECT_FALSE(provider->TestContext3d()->reshape_called()); | 3958 EXPECT_FALSE(provider->TestContext3d()->reshape_called()); |
3989 provider->TestContext3d()->clear_reshape_called(); | 3959 provider->TestContext3d()->clear_reshape_called(); |
3990 | 3960 |
3991 LayerTreeHostImpl::FrameData frame; | 3961 LayerTreeHostImpl::FrameData frame; |
3992 host_impl_->SetViewportSize(gfx::Size(10, 10)); | 3962 host_impl_->SetViewportSize(gfx::Size(10, 10)); |
3993 host_impl_->SetDeviceScaleFactor(1.f); | 3963 host_impl_->SetDeviceScaleFactor(1.f); |
3994 EXPECT_EQ(DrawSwapReadbackResult::DRAW_SUCCESS, | 3964 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame, gfx::Rect())); |
3995 host_impl_->PrepareToDraw(&frame, gfx::Rect())); | |
3996 host_impl_->DrawLayers(&frame, gfx::FrameTime::Now()); | 3965 host_impl_->DrawLayers(&frame, gfx::FrameTime::Now()); |
3997 EXPECT_TRUE(provider->TestContext3d()->reshape_called()); | 3966 EXPECT_TRUE(provider->TestContext3d()->reshape_called()); |
3998 EXPECT_EQ(provider->TestContext3d()->width(), 10); | 3967 EXPECT_EQ(provider->TestContext3d()->width(), 10); |
3999 EXPECT_EQ(provider->TestContext3d()->height(), 10); | 3968 EXPECT_EQ(provider->TestContext3d()->height(), 10); |
4000 EXPECT_EQ(provider->TestContext3d()->scale_factor(), 1.f); | 3969 EXPECT_EQ(provider->TestContext3d()->scale_factor(), 1.f); |
4001 host_impl_->DidDrawAllLayers(frame); | 3970 host_impl_->DidDrawAllLayers(frame); |
4002 provider->TestContext3d()->clear_reshape_called(); | 3971 provider->TestContext3d()->clear_reshape_called(); |
4003 | 3972 |
4004 host_impl_->SetViewportSize(gfx::Size(20, 30)); | 3973 host_impl_->SetViewportSize(gfx::Size(20, 30)); |
4005 EXPECT_EQ(DrawSwapReadbackResult::DRAW_SUCCESS, | 3974 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame, gfx::Rect())); |
4006 host_impl_->PrepareToDraw(&frame, gfx::Rect())); | |
4007 host_impl_->DrawLayers(&frame, gfx::FrameTime::Now()); | 3975 host_impl_->DrawLayers(&frame, gfx::FrameTime::Now()); |
4008 EXPECT_TRUE(provider->TestContext3d()->reshape_called()); | 3976 EXPECT_TRUE(provider->TestContext3d()->reshape_called()); |
4009 EXPECT_EQ(provider->TestContext3d()->width(), 20); | 3977 EXPECT_EQ(provider->TestContext3d()->width(), 20); |
4010 EXPECT_EQ(provider->TestContext3d()->height(), 30); | 3978 EXPECT_EQ(provider->TestContext3d()->height(), 30); |
4011 EXPECT_EQ(provider->TestContext3d()->scale_factor(), 1.f); | 3979 EXPECT_EQ(provider->TestContext3d()->scale_factor(), 1.f); |
4012 host_impl_->DidDrawAllLayers(frame); | 3980 host_impl_->DidDrawAllLayers(frame); |
4013 provider->TestContext3d()->clear_reshape_called(); | 3981 provider->TestContext3d()->clear_reshape_called(); |
4014 | 3982 |
4015 host_impl_->SetDeviceScaleFactor(2.f); | 3983 host_impl_->SetDeviceScaleFactor(2.f); |
4016 EXPECT_EQ(DrawSwapReadbackResult::DRAW_SUCCESS, | 3984 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame, gfx::Rect())); |
4017 host_impl_->PrepareToDraw(&frame, gfx::Rect())); | |
4018 host_impl_->DrawLayers(&frame, gfx::FrameTime::Now()); | 3985 host_impl_->DrawLayers(&frame, gfx::FrameTime::Now()); |
4019 EXPECT_TRUE(provider->TestContext3d()->reshape_called()); | 3986 EXPECT_TRUE(provider->TestContext3d()->reshape_called()); |
4020 EXPECT_EQ(provider->TestContext3d()->width(), 20); | 3987 EXPECT_EQ(provider->TestContext3d()->width(), 20); |
4021 EXPECT_EQ(provider->TestContext3d()->height(), 30); | 3988 EXPECT_EQ(provider->TestContext3d()->height(), 30); |
4022 EXPECT_EQ(provider->TestContext3d()->scale_factor(), 2.f); | 3989 EXPECT_EQ(provider->TestContext3d()->scale_factor(), 2.f); |
4023 host_impl_->DidDrawAllLayers(frame); | 3990 host_impl_->DidDrawAllLayers(frame); |
4024 provider->TestContext3d()->clear_reshape_called(); | 3991 provider->TestContext3d()->clear_reshape_called(); |
4025 } | 3992 } |
4026 | 3993 |
4027 // Make sure damage tracking propagates all the way to the graphics context, | 3994 // Make sure damage tracking propagates all the way to the graphics context, |
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4063 root->SetAnchorPoint(gfx::PointF()); | 4030 root->SetAnchorPoint(gfx::PointF()); |
4064 root->SetBounds(gfx::Size(500, 500)); | 4031 root->SetBounds(gfx::Size(500, 500)); |
4065 root->SetContentBounds(gfx::Size(500, 500)); | 4032 root->SetContentBounds(gfx::Size(500, 500)); |
4066 root->SetDrawsContent(true); | 4033 root->SetDrawsContent(true); |
4067 root->AddChild(child.Pass()); | 4034 root->AddChild(child.Pass()); |
4068 layer_tree_host_impl->active_tree()->SetRootLayer(root.Pass()); | 4035 layer_tree_host_impl->active_tree()->SetRootLayer(root.Pass()); |
4069 | 4036 |
4070 LayerTreeHostImpl::FrameData frame; | 4037 LayerTreeHostImpl::FrameData frame; |
4071 | 4038 |
4072 // First frame, the entire screen should get swapped. | 4039 // First frame, the entire screen should get swapped. |
4073 EXPECT_EQ(DrawSwapReadbackResult::DRAW_SUCCESS, | 4040 EXPECT_EQ(DRAW_SUCCESS, |
4074 layer_tree_host_impl->PrepareToDraw(&frame, gfx::Rect())); | 4041 layer_tree_host_impl->PrepareToDraw(&frame, gfx::Rect())); |
4075 layer_tree_host_impl->DrawLayers(&frame, gfx::FrameTime::Now()); | 4042 layer_tree_host_impl->DrawLayers(&frame, gfx::FrameTime::Now()); |
4076 layer_tree_host_impl->DidDrawAllLayers(frame); | 4043 layer_tree_host_impl->DidDrawAllLayers(frame); |
4077 layer_tree_host_impl->SwapBuffers(frame); | 4044 layer_tree_host_impl->SwapBuffers(frame); |
4078 EXPECT_EQ(TestContextSupport::SWAP, | 4045 EXPECT_EQ(TestContextSupport::SWAP, |
4079 context_provider->support()->last_swap_type()); | 4046 context_provider->support()->last_swap_type()); |
4080 | 4047 |
4081 // Second frame, only the damaged area should get swapped. Damage should be | 4048 // Second frame, only the damaged area should get swapped. Damage should be |
4082 // the union of old and new child rects. | 4049 // the union of old and new child rects. |
4083 // expected damage rect: gfx::Rect(26, 28); | 4050 // expected damage rect: gfx::Rect(26, 28); |
4084 // expected swap rect: vertically flipped, with origin at bottom left corner. | 4051 // expected swap rect: vertically flipped, with origin at bottom left corner. |
4085 layer_tree_host_impl->active_tree()->root_layer()->children()[0]->SetPosition( | 4052 layer_tree_host_impl->active_tree()->root_layer()->children()[0]->SetPosition( |
4086 gfx::PointF()); | 4053 gfx::PointF()); |
4087 EXPECT_EQ(DrawSwapReadbackResult::DRAW_SUCCESS, | 4054 EXPECT_EQ(DRAW_SUCCESS, |
4088 layer_tree_host_impl->PrepareToDraw(&frame, gfx::Rect())); | 4055 layer_tree_host_impl->PrepareToDraw(&frame, gfx::Rect())); |
4089 layer_tree_host_impl->DrawLayers(&frame, gfx::FrameTime::Now()); | 4056 layer_tree_host_impl->DrawLayers(&frame, gfx::FrameTime::Now()); |
4090 host_impl_->DidDrawAllLayers(frame); | 4057 host_impl_->DidDrawAllLayers(frame); |
4091 layer_tree_host_impl->SwapBuffers(frame); | 4058 layer_tree_host_impl->SwapBuffers(frame); |
4092 | 4059 |
4093 // Make sure that partial swap is constrained to the viewport dimensions | 4060 // Make sure that partial swap is constrained to the viewport dimensions |
4094 // expected damage rect: gfx::Rect(500, 500); | 4061 // expected damage rect: gfx::Rect(500, 500); |
4095 // expected swap rect: flipped damage rect, but also clamped to viewport | 4062 // expected swap rect: flipped damage rect, but also clamped to viewport |
4096 EXPECT_EQ(TestContextSupport::PARTIAL_SWAP, | 4063 EXPECT_EQ(TestContextSupport::PARTIAL_SWAP, |
4097 context_provider->support()->last_swap_type()); | 4064 context_provider->support()->last_swap_type()); |
4098 gfx::Rect expected_swap_rect(0, 500-28, 26, 28); | 4065 gfx::Rect expected_swap_rect(0, 500-28, 26, 28); |
4099 EXPECT_EQ(expected_swap_rect.ToString(), | 4066 EXPECT_EQ(expected_swap_rect.ToString(), |
4100 context_provider->support()-> | 4067 context_provider->support()-> |
4101 last_partial_swap_rect().ToString()); | 4068 last_partial_swap_rect().ToString()); |
4102 | 4069 |
4103 layer_tree_host_impl->SetViewportSize(gfx::Size(10, 10)); | 4070 layer_tree_host_impl->SetViewportSize(gfx::Size(10, 10)); |
4104 // This will damage everything. | 4071 // This will damage everything. |
4105 layer_tree_host_impl->active_tree()->root_layer()->SetBackgroundColor( | 4072 layer_tree_host_impl->active_tree()->root_layer()->SetBackgroundColor( |
4106 SK_ColorBLACK); | 4073 SK_ColorBLACK); |
4107 EXPECT_EQ(DrawSwapReadbackResult::DRAW_SUCCESS, | 4074 EXPECT_EQ(DRAW_SUCCESS, |
4108 layer_tree_host_impl->PrepareToDraw(&frame, gfx::Rect())); | 4075 layer_tree_host_impl->PrepareToDraw(&frame, gfx::Rect())); |
4109 layer_tree_host_impl->DrawLayers(&frame, gfx::FrameTime::Now()); | 4076 layer_tree_host_impl->DrawLayers(&frame, gfx::FrameTime::Now()); |
4110 host_impl_->DidDrawAllLayers(frame); | 4077 host_impl_->DidDrawAllLayers(frame); |
4111 layer_tree_host_impl->SwapBuffers(frame); | 4078 layer_tree_host_impl->SwapBuffers(frame); |
4112 | 4079 |
4113 EXPECT_EQ(TestContextSupport::SWAP, | 4080 EXPECT_EQ(TestContextSupport::SWAP, |
4114 context_provider->support()->last_swap_type()); | 4081 context_provider->support()->last_swap_type()); |
4115 } | 4082 } |
4116 | 4083 |
4117 TEST_F(LayerTreeHostImplTest, RootLayerDoesntCreateExtraSurface) { | 4084 TEST_F(LayerTreeHostImplTest, RootLayerDoesntCreateExtraSurface) { |
4118 scoped_ptr<LayerImpl> root = | 4085 scoped_ptr<LayerImpl> root = |
4119 FakeDrawableLayerImpl::Create(host_impl_->active_tree(), 1); | 4086 FakeDrawableLayerImpl::Create(host_impl_->active_tree(), 1); |
4120 scoped_ptr<LayerImpl> child = | 4087 scoped_ptr<LayerImpl> child = |
4121 FakeDrawableLayerImpl::Create(host_impl_->active_tree(), 2); | 4088 FakeDrawableLayerImpl::Create(host_impl_->active_tree(), 2); |
4122 child->SetAnchorPoint(gfx::PointF()); | 4089 child->SetAnchorPoint(gfx::PointF()); |
4123 child->SetBounds(gfx::Size(10, 10)); | 4090 child->SetBounds(gfx::Size(10, 10)); |
4124 child->SetContentBounds(gfx::Size(10, 10)); | 4091 child->SetContentBounds(gfx::Size(10, 10)); |
4125 child->SetDrawsContent(true); | 4092 child->SetDrawsContent(true); |
4126 root->SetAnchorPoint(gfx::PointF()); | 4093 root->SetAnchorPoint(gfx::PointF()); |
4127 root->SetBounds(gfx::Size(10, 10)); | 4094 root->SetBounds(gfx::Size(10, 10)); |
4128 root->SetContentBounds(gfx::Size(10, 10)); | 4095 root->SetContentBounds(gfx::Size(10, 10)); |
4129 root->SetDrawsContent(true); | 4096 root->SetDrawsContent(true); |
4130 root->SetForceRenderSurface(true); | 4097 root->SetForceRenderSurface(true); |
4131 root->AddChild(child.Pass()); | 4098 root->AddChild(child.Pass()); |
4132 | 4099 |
4133 host_impl_->active_tree()->SetRootLayer(root.Pass()); | 4100 host_impl_->active_tree()->SetRootLayer(root.Pass()); |
4134 | 4101 |
4135 LayerTreeHostImpl::FrameData frame; | 4102 LayerTreeHostImpl::FrameData frame; |
4136 | 4103 |
4137 EXPECT_EQ(DrawSwapReadbackResult::DRAW_SUCCESS, | 4104 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame, gfx::Rect())); |
4138 host_impl_->PrepareToDraw(&frame, gfx::Rect())); | |
4139 EXPECT_EQ(1u, frame.render_surface_layer_list->size()); | 4105 EXPECT_EQ(1u, frame.render_surface_layer_list->size()); |
4140 EXPECT_EQ(1u, frame.render_passes.size()); | 4106 EXPECT_EQ(1u, frame.render_passes.size()); |
4141 host_impl_->DidDrawAllLayers(frame); | 4107 host_impl_->DidDrawAllLayers(frame); |
4142 } | 4108 } |
4143 | 4109 |
4144 class FakeLayerWithQuads : public LayerImpl { | 4110 class FakeLayerWithQuads : public LayerImpl { |
4145 public: | 4111 public: |
4146 static scoped_ptr<LayerImpl> Create(LayerTreeImpl* tree_impl, int id) { | 4112 static scoped_ptr<LayerImpl> Create(LayerTreeImpl* tree_impl, int id) { |
4147 return scoped_ptr<LayerImpl>(new FakeLayerWithQuads(tree_impl, id)); | 4113 return scoped_ptr<LayerImpl>(new FakeLayerWithQuads(tree_impl, id)); |
4148 } | 4114 } |
(...skipping 116 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4265 LayerTreeSettings settings = DefaultSettings(); | 4231 LayerTreeSettings settings = DefaultSettings(); |
4266 settings.partial_swap_enabled = false; | 4232 settings.partial_swap_enabled = false; |
4267 CreateHostImpl(settings, output_surface.Pass()); | 4233 CreateHostImpl(settings, output_surface.Pass()); |
4268 SetupRootLayerImpl(FakeLayerWithQuads::Create(host_impl_->active_tree(), 1)); | 4234 SetupRootLayerImpl(FakeLayerWithQuads::Create(host_impl_->active_tree(), 1)); |
4269 | 4235 |
4270 // Without partial swap, and no clipping, no scissor is set. | 4236 // Without partial swap, and no clipping, no scissor is set. |
4271 harness.MustDrawSolidQuad(); | 4237 harness.MustDrawSolidQuad(); |
4272 harness.MustSetNoScissor(); | 4238 harness.MustSetNoScissor(); |
4273 { | 4239 { |
4274 LayerTreeHostImpl::FrameData frame; | 4240 LayerTreeHostImpl::FrameData frame; |
4275 EXPECT_EQ(DrawSwapReadbackResult::DRAW_SUCCESS, | 4241 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame, gfx::Rect())); |
4276 host_impl_->PrepareToDraw(&frame, gfx::Rect())); | |
4277 host_impl_->DrawLayers(&frame, gfx::FrameTime::Now()); | 4242 host_impl_->DrawLayers(&frame, gfx::FrameTime::Now()); |
4278 host_impl_->DidDrawAllLayers(frame); | 4243 host_impl_->DidDrawAllLayers(frame); |
4279 } | 4244 } |
4280 Mock::VerifyAndClearExpectations(&mock_context); | 4245 Mock::VerifyAndClearExpectations(&mock_context); |
4281 | 4246 |
4282 // Without partial swap, but a layer does clip its subtree, one scissor is | 4247 // Without partial swap, but a layer does clip its subtree, one scissor is |
4283 // set. | 4248 // set. |
4284 host_impl_->active_tree()->root_layer()->SetMasksToBounds(true); | 4249 host_impl_->active_tree()->root_layer()->SetMasksToBounds(true); |
4285 harness.MustDrawSolidQuad(); | 4250 harness.MustDrawSolidQuad(); |
4286 harness.MustSetScissor(0, 0, 10, 10); | 4251 harness.MustSetScissor(0, 0, 10, 10); |
4287 { | 4252 { |
4288 LayerTreeHostImpl::FrameData frame; | 4253 LayerTreeHostImpl::FrameData frame; |
4289 EXPECT_EQ(DrawSwapReadbackResult::DRAW_SUCCESS, | 4254 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame, gfx::Rect())); |
4290 host_impl_->PrepareToDraw(&frame, gfx::Rect())); | |
4291 host_impl_->DrawLayers(&frame, gfx::FrameTime::Now()); | 4255 host_impl_->DrawLayers(&frame, gfx::FrameTime::Now()); |
4292 host_impl_->DidDrawAllLayers(frame); | 4256 host_impl_->DidDrawAllLayers(frame); |
4293 } | 4257 } |
4294 Mock::VerifyAndClearExpectations(&mock_context); | 4258 Mock::VerifyAndClearExpectations(&mock_context); |
4295 } | 4259 } |
4296 | 4260 |
4297 TEST_F(LayerTreeHostImplTest, PartialSwap) { | 4261 TEST_F(LayerTreeHostImplTest, PartialSwap) { |
4298 scoped_ptr<MockContext> context_owned(new MockContext); | 4262 scoped_ptr<MockContext> context_owned(new MockContext); |
4299 MockContext* mock_context = context_owned.get(); | 4263 MockContext* mock_context = context_owned.get(); |
4300 scoped_ptr<OutputSurface> output_surface(FakeOutputSurface::Create3d( | 4264 scoped_ptr<OutputSurface> output_surface(FakeOutputSurface::Create3d( |
4301 context_owned.PassAs<TestWebGraphicsContext3D>())); | 4265 context_owned.PassAs<TestWebGraphicsContext3D>())); |
4302 MockContextHarness harness(mock_context); | 4266 MockContextHarness harness(mock_context); |
4303 | 4267 |
4304 LayerTreeSettings settings = DefaultSettings(); | 4268 LayerTreeSettings settings = DefaultSettings(); |
4305 settings.partial_swap_enabled = true; | 4269 settings.partial_swap_enabled = true; |
4306 CreateHostImpl(settings, output_surface.Pass()); | 4270 CreateHostImpl(settings, output_surface.Pass()); |
4307 SetupRootLayerImpl(FakeLayerWithQuads::Create(host_impl_->active_tree(), 1)); | 4271 SetupRootLayerImpl(FakeLayerWithQuads::Create(host_impl_->active_tree(), 1)); |
4308 | 4272 |
4309 // The first frame is not a partially-swapped one. | 4273 // The first frame is not a partially-swapped one. |
4310 harness.MustSetScissor(0, 0, 10, 10); | 4274 harness.MustSetScissor(0, 0, 10, 10); |
4311 harness.MustDrawSolidQuad(); | 4275 harness.MustDrawSolidQuad(); |
4312 { | 4276 { |
4313 LayerTreeHostImpl::FrameData frame; | 4277 LayerTreeHostImpl::FrameData frame; |
4314 EXPECT_EQ(DrawSwapReadbackResult::DRAW_SUCCESS, | 4278 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame, gfx::Rect())); |
4315 host_impl_->PrepareToDraw(&frame, gfx::Rect())); | |
4316 host_impl_->DrawLayers(&frame, gfx::FrameTime::Now()); | 4279 host_impl_->DrawLayers(&frame, gfx::FrameTime::Now()); |
4317 host_impl_->DidDrawAllLayers(frame); | 4280 host_impl_->DidDrawAllLayers(frame); |
4318 } | 4281 } |
4319 Mock::VerifyAndClearExpectations(&mock_context); | 4282 Mock::VerifyAndClearExpectations(&mock_context); |
4320 | 4283 |
4321 // Damage a portion of the frame. | 4284 // Damage a portion of the frame. |
4322 host_impl_->active_tree()->root_layer()->SetUpdateRect( | 4285 host_impl_->active_tree()->root_layer()->SetUpdateRect( |
4323 gfx::Rect(0, 0, 2, 3)); | 4286 gfx::Rect(0, 0, 2, 3)); |
4324 | 4287 |
4325 // The second frame will be partially-swapped (the y coordinates are flipped). | 4288 // The second frame will be partially-swapped (the y coordinates are flipped). |
4326 harness.MustSetScissor(0, 7, 2, 3); | 4289 harness.MustSetScissor(0, 7, 2, 3); |
4327 harness.MustDrawSolidQuad(); | 4290 harness.MustDrawSolidQuad(); |
4328 { | 4291 { |
4329 LayerTreeHostImpl::FrameData frame; | 4292 LayerTreeHostImpl::FrameData frame; |
4330 EXPECT_EQ(DrawSwapReadbackResult::DRAW_SUCCESS, | 4293 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame, gfx::Rect())); |
4331 host_impl_->PrepareToDraw(&frame, gfx::Rect())); | |
4332 host_impl_->DrawLayers(&frame, gfx::FrameTime::Now()); | 4294 host_impl_->DrawLayers(&frame, gfx::FrameTime::Now()); |
4333 host_impl_->DidDrawAllLayers(frame); | 4295 host_impl_->DidDrawAllLayers(frame); |
4334 } | 4296 } |
4335 Mock::VerifyAndClearExpectations(&mock_context); | 4297 Mock::VerifyAndClearExpectations(&mock_context); |
4336 } | 4298 } |
4337 | 4299 |
4338 static scoped_ptr<LayerTreeHostImpl> SetupLayersForOpacity( | 4300 static scoped_ptr<LayerTreeHostImpl> SetupLayersForOpacity( |
4339 bool partial_swap, | 4301 bool partial_swap, |
4340 LayerTreeHostImplClient* client, | 4302 LayerTreeHostImplClient* client, |
4341 Proxy* proxy, | 4303 Proxy* proxy, |
(...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4419 scoped_ptr<SharedBitmapManager> shared_bitmap_manager( | 4381 scoped_ptr<SharedBitmapManager> shared_bitmap_manager( |
4420 new TestSharedBitmapManager()); | 4382 new TestSharedBitmapManager()); |
4421 scoped_ptr<LayerTreeHostImpl> my_host_impl = | 4383 scoped_ptr<LayerTreeHostImpl> my_host_impl = |
4422 SetupLayersForOpacity(true, | 4384 SetupLayersForOpacity(true, |
4423 this, | 4385 this, |
4424 &proxy_, | 4386 &proxy_, |
4425 shared_bitmap_manager.get(), | 4387 shared_bitmap_manager.get(), |
4426 &stats_instrumentation_); | 4388 &stats_instrumentation_); |
4427 { | 4389 { |
4428 LayerTreeHostImpl::FrameData frame; | 4390 LayerTreeHostImpl::FrameData frame; |
4429 EXPECT_EQ(DrawSwapReadbackResult::DRAW_SUCCESS, | 4391 EXPECT_EQ(DRAW_SUCCESS, my_host_impl->PrepareToDraw(&frame, gfx::Rect())); |
4430 my_host_impl->PrepareToDraw(&frame, gfx::Rect())); | |
4431 | 4392 |
4432 // Verify all quads have been computed | 4393 // Verify all quads have been computed |
4433 ASSERT_EQ(2U, frame.render_passes.size()); | 4394 ASSERT_EQ(2U, frame.render_passes.size()); |
4434 ASSERT_EQ(1U, frame.render_passes[0]->quad_list.size()); | 4395 ASSERT_EQ(1U, frame.render_passes[0]->quad_list.size()); |
4435 ASSERT_EQ(1U, frame.render_passes[1]->quad_list.size()); | 4396 ASSERT_EQ(1U, frame.render_passes[1]->quad_list.size()); |
4436 EXPECT_EQ(DrawQuad::SOLID_COLOR, | 4397 EXPECT_EQ(DrawQuad::SOLID_COLOR, |
4437 frame.render_passes[0]->quad_list[0]->material); | 4398 frame.render_passes[0]->quad_list[0]->material); |
4438 EXPECT_EQ(DrawQuad::RENDER_PASS, | 4399 EXPECT_EQ(DrawQuad::RENDER_PASS, |
4439 frame.render_passes[1]->quad_list[0]->material); | 4400 frame.render_passes[1]->quad_list[0]->material); |
4440 | 4401 |
4441 my_host_impl->DrawLayers(&frame, gfx::FrameTime::Now()); | 4402 my_host_impl->DrawLayers(&frame, gfx::FrameTime::Now()); |
4442 my_host_impl->DidDrawAllLayers(frame); | 4403 my_host_impl->DidDrawAllLayers(frame); |
4443 } | 4404 } |
4444 } | 4405 } |
4445 | 4406 |
4446 TEST_F(LayerTreeHostImplTest, ContributingLayerEmptyScissorNoPartialSwap) { | 4407 TEST_F(LayerTreeHostImplTest, ContributingLayerEmptyScissorNoPartialSwap) { |
4447 scoped_ptr<SharedBitmapManager> shared_bitmap_manager( | 4408 scoped_ptr<SharedBitmapManager> shared_bitmap_manager( |
4448 new TestSharedBitmapManager()); | 4409 new TestSharedBitmapManager()); |
4449 scoped_ptr<LayerTreeHostImpl> my_host_impl = | 4410 scoped_ptr<LayerTreeHostImpl> my_host_impl = |
4450 SetupLayersForOpacity(false, | 4411 SetupLayersForOpacity(false, |
4451 this, | 4412 this, |
4452 &proxy_, | 4413 &proxy_, |
4453 shared_bitmap_manager.get(), | 4414 shared_bitmap_manager.get(), |
4454 &stats_instrumentation_); | 4415 &stats_instrumentation_); |
4455 { | 4416 { |
4456 LayerTreeHostImpl::FrameData frame; | 4417 LayerTreeHostImpl::FrameData frame; |
4457 EXPECT_EQ(DrawSwapReadbackResult::DRAW_SUCCESS, | 4418 EXPECT_EQ(DRAW_SUCCESS, my_host_impl->PrepareToDraw(&frame, gfx::Rect())); |
4458 my_host_impl->PrepareToDraw(&frame, gfx::Rect())); | |
4459 | 4419 |
4460 // Verify all quads have been computed | 4420 // Verify all quads have been computed |
4461 ASSERT_EQ(2U, frame.render_passes.size()); | 4421 ASSERT_EQ(2U, frame.render_passes.size()); |
4462 ASSERT_EQ(1U, frame.render_passes[0]->quad_list.size()); | 4422 ASSERT_EQ(1U, frame.render_passes[0]->quad_list.size()); |
4463 ASSERT_EQ(1U, frame.render_passes[1]->quad_list.size()); | 4423 ASSERT_EQ(1U, frame.render_passes[1]->quad_list.size()); |
4464 EXPECT_EQ(DrawQuad::SOLID_COLOR, | 4424 EXPECT_EQ(DrawQuad::SOLID_COLOR, |
4465 frame.render_passes[0]->quad_list[0]->material); | 4425 frame.render_passes[0]->quad_list[0]->material); |
4466 EXPECT_EQ(DrawQuad::RENDER_PASS, | 4426 EXPECT_EQ(DrawQuad::RENDER_PASS, |
4467 frame.render_passes[1]->quad_list[0]->material); | 4427 frame.render_passes[1]->quad_list[0]->material); |
4468 | 4428 |
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4504 io_surface_layer->SetContentBounds(gfx::Size(10, 10)); | 4464 io_surface_layer->SetContentBounds(gfx::Size(10, 10)); |
4505 io_surface_layer->SetDrawsContent(true); | 4465 io_surface_layer->SetDrawsContent(true); |
4506 io_surface_layer->SetIOSurfaceProperties(1, gfx::Size(10, 10)); | 4466 io_surface_layer->SetIOSurfaceProperties(1, gfx::Size(10, 10)); |
4507 root_layer->AddChild(io_surface_layer.PassAs<LayerImpl>()); | 4467 root_layer->AddChild(io_surface_layer.PassAs<LayerImpl>()); |
4508 | 4468 |
4509 host_impl_->active_tree()->SetRootLayer(root_layer.Pass()); | 4469 host_impl_->active_tree()->SetRootLayer(root_layer.Pass()); |
4510 | 4470 |
4511 EXPECT_EQ(0u, context3d->NumTextures()); | 4471 EXPECT_EQ(0u, context3d->NumTextures()); |
4512 | 4472 |
4513 LayerTreeHostImpl::FrameData frame; | 4473 LayerTreeHostImpl::FrameData frame; |
4514 EXPECT_EQ(DrawSwapReadbackResult::DRAW_SUCCESS, | 4474 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame, gfx::Rect())); |
4515 host_impl_->PrepareToDraw(&frame, gfx::Rect())); | |
4516 host_impl_->DrawLayers(&frame, gfx::FrameTime::Now()); | 4475 host_impl_->DrawLayers(&frame, gfx::FrameTime::Now()); |
4517 host_impl_->DidDrawAllLayers(frame); | 4476 host_impl_->DidDrawAllLayers(frame); |
4518 host_impl_->SwapBuffers(frame); | 4477 host_impl_->SwapBuffers(frame); |
4519 | 4478 |
4520 EXPECT_GT(context3d->NumTextures(), 0u); | 4479 EXPECT_GT(context3d->NumTextures(), 0u); |
4521 | 4480 |
4522 // Kill the layer tree. | 4481 // Kill the layer tree. |
4523 host_impl_->active_tree()->SetRootLayer( | 4482 host_impl_->active_tree()->SetRootLayer( |
4524 LayerImpl::Create(host_impl_->active_tree(), 100)); | 4483 LayerImpl::Create(host_impl_->active_tree(), 100)); |
4525 // There should be no textures left in use after. | 4484 // There should be no textures left in use after. |
(...skipping 24 matching lines...) Expand all Loading... |
4550 SetupRootLayerImpl(LayerImpl::Create(host_impl_->active_tree(), 1)); | 4509 SetupRootLayerImpl(LayerImpl::Create(host_impl_->active_tree(), 1)); |
4551 host_impl_->active_tree()->set_background_color(SK_ColorWHITE); | 4510 host_impl_->active_tree()->set_background_color(SK_ColorWHITE); |
4552 | 4511 |
4553 // Verify one quad is drawn when transparent background set is not set. | 4512 // Verify one quad is drawn when transparent background set is not set. |
4554 host_impl_->active_tree()->set_has_transparent_background(false); | 4513 host_impl_->active_tree()->set_has_transparent_background(false); |
4555 EXPECT_CALL(*mock_context, useProgram(_)) | 4514 EXPECT_CALL(*mock_context, useProgram(_)) |
4556 .Times(1); | 4515 .Times(1); |
4557 EXPECT_CALL(*mock_context, drawElements(_, _, _, _)) | 4516 EXPECT_CALL(*mock_context, drawElements(_, _, _, _)) |
4558 .Times(1); | 4517 .Times(1); |
4559 LayerTreeHostImpl::FrameData frame; | 4518 LayerTreeHostImpl::FrameData frame; |
4560 EXPECT_EQ(DrawSwapReadbackResult::DRAW_SUCCESS, | 4519 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame, gfx::Rect())); |
4561 host_impl_->PrepareToDraw(&frame, gfx::Rect())); | |
4562 host_impl_->DrawLayers(&frame, gfx::FrameTime::Now()); | 4520 host_impl_->DrawLayers(&frame, gfx::FrameTime::Now()); |
4563 host_impl_->DidDrawAllLayers(frame); | 4521 host_impl_->DidDrawAllLayers(frame); |
4564 Mock::VerifyAndClearExpectations(&mock_context); | 4522 Mock::VerifyAndClearExpectations(&mock_context); |
4565 | 4523 |
4566 // Verify no quads are drawn when transparent background is set. | 4524 // Verify no quads are drawn when transparent background is set. |
4567 host_impl_->active_tree()->set_has_transparent_background(true); | 4525 host_impl_->active_tree()->set_has_transparent_background(true); |
4568 host_impl_->SetFullRootLayerDamage(); | 4526 host_impl_->SetFullRootLayerDamage(); |
4569 EXPECT_EQ(DrawSwapReadbackResult::DRAW_SUCCESS, | 4527 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame, gfx::Rect())); |
4570 host_impl_->PrepareToDraw(&frame, gfx::Rect())); | |
4571 host_impl_->DrawLayers(&frame, gfx::FrameTime::Now()); | 4528 host_impl_->DrawLayers(&frame, gfx::FrameTime::Now()); |
4572 host_impl_->DidDrawAllLayers(frame); | 4529 host_impl_->DidDrawAllLayers(frame); |
4573 Mock::VerifyAndClearExpectations(&mock_context); | 4530 Mock::VerifyAndClearExpectations(&mock_context); |
4574 } | 4531 } |
4575 | 4532 |
4576 TEST_F(LayerTreeHostImplTest, ReleaseContentsTextureShouldTriggerCommit) { | 4533 TEST_F(LayerTreeHostImplTest, ReleaseContentsTextureShouldTriggerCommit) { |
4577 set_reduce_memory_result(false); | 4534 set_reduce_memory_result(false); |
4578 | 4535 |
4579 // If changing the memory limit wouldn't result in changing what was | 4536 // If changing the memory limit wouldn't result in changing what was |
4580 // committed, then no commit should be requested. | 4537 // committed, then no commit should be requested. |
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4617 : public LayerTreeHostImplTest { | 4574 : public LayerTreeHostImplTest { |
4618 protected: | 4575 protected: |
4619 virtual scoped_ptr<OutputSurface> CreateOutputSurface() OVERRIDE { | 4576 virtual scoped_ptr<OutputSurface> CreateOutputSurface() OVERRIDE { |
4620 return FakeOutputSurface::CreateDelegating3d().PassAs<OutputSurface>(); | 4577 return FakeOutputSurface::CreateDelegating3d().PassAs<OutputSurface>(); |
4621 } | 4578 } |
4622 | 4579 |
4623 void DrawFrameAndTestDamage(const gfx::RectF& expected_damage) { | 4580 void DrawFrameAndTestDamage(const gfx::RectF& expected_damage) { |
4624 bool expect_to_draw = !expected_damage.IsEmpty(); | 4581 bool expect_to_draw = !expected_damage.IsEmpty(); |
4625 | 4582 |
4626 LayerTreeHostImpl::FrameData frame; | 4583 LayerTreeHostImpl::FrameData frame; |
4627 EXPECT_EQ(DrawSwapReadbackResult::DRAW_SUCCESS, | 4584 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame, gfx::Rect())); |
4628 host_impl_->PrepareToDraw(&frame, gfx::Rect())); | |
4629 | 4585 |
4630 if (!expect_to_draw) { | 4586 if (!expect_to_draw) { |
4631 // With no damage, we don't draw, and no quads are created. | 4587 // With no damage, we don't draw, and no quads are created. |
4632 ASSERT_EQ(0u, frame.render_passes.size()); | 4588 ASSERT_EQ(0u, frame.render_passes.size()); |
4633 } else { | 4589 } else { |
4634 ASSERT_EQ(1u, frame.render_passes.size()); | 4590 ASSERT_EQ(1u, frame.render_passes.size()); |
4635 | 4591 |
4636 // Verify the damage rect for the root render pass. | 4592 // Verify the damage rect for the root render pass. |
4637 const RenderPass* root_render_pass = frame.render_passes.back(); | 4593 const RenderPass* root_render_pass = frame.render_passes.back(); |
4638 EXPECT_RECT_EQ(expected_damage, root_render_pass->damage_rect); | 4594 EXPECT_RECT_EQ(expected_damage, root_render_pass->damage_rect); |
(...skipping 138 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4777 mask_layer->SetDrawsContent(true); | 4733 mask_layer->SetDrawsContent(true); |
4778 | 4734 |
4779 | 4735 |
4780 // Check that the tree scaling is correctly taken into account for the mask, | 4736 // Check that the tree scaling is correctly taken into account for the mask, |
4781 // that should fully map onto the quad. | 4737 // that should fully map onto the quad. |
4782 float device_scale_factor = 1.f; | 4738 float device_scale_factor = 1.f; |
4783 host_impl_->SetViewportSize(root_size); | 4739 host_impl_->SetViewportSize(root_size); |
4784 host_impl_->SetDeviceScaleFactor(device_scale_factor); | 4740 host_impl_->SetDeviceScaleFactor(device_scale_factor); |
4785 { | 4741 { |
4786 LayerTreeHostImpl::FrameData frame; | 4742 LayerTreeHostImpl::FrameData frame; |
4787 EXPECT_EQ(DrawSwapReadbackResult::DRAW_SUCCESS, | 4743 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame, gfx::Rect())); |
4788 host_impl_->PrepareToDraw(&frame, gfx::Rect())); | |
4789 | 4744 |
4790 ASSERT_EQ(1u, frame.render_passes.size()); | 4745 ASSERT_EQ(1u, frame.render_passes.size()); |
4791 ASSERT_EQ(1u, frame.render_passes[0]->quad_list.size()); | 4746 ASSERT_EQ(1u, frame.render_passes[0]->quad_list.size()); |
4792 ASSERT_EQ(DrawQuad::RENDER_PASS, | 4747 ASSERT_EQ(DrawQuad::RENDER_PASS, |
4793 frame.render_passes[0]->quad_list[0]->material); | 4748 frame.render_passes[0]->quad_list[0]->material); |
4794 const RenderPassDrawQuad* render_pass_quad = | 4749 const RenderPassDrawQuad* render_pass_quad = |
4795 RenderPassDrawQuad::MaterialCast(frame.render_passes[0]->quad_list[0]); | 4750 RenderPassDrawQuad::MaterialCast(frame.render_passes[0]->quad_list[0]); |
4796 EXPECT_EQ(gfx::Rect(0, 0, 100, 100).ToString(), | 4751 EXPECT_EQ(gfx::Rect(0, 0, 100, 100).ToString(), |
4797 render_pass_quad->rect.ToString()); | 4752 render_pass_quad->rect.ToString()); |
4798 EXPECT_EQ(gfx::RectF(0.f, 0.f, 1.f, 1.f).ToString(), | 4753 EXPECT_EQ(gfx::RectF(0.f, 0.f, 1.f, 1.f).ToString(), |
4799 render_pass_quad->mask_uv_rect.ToString()); | 4754 render_pass_quad->mask_uv_rect.ToString()); |
4800 | 4755 |
4801 host_impl_->DrawLayers(&frame, gfx::FrameTime::Now()); | 4756 host_impl_->DrawLayers(&frame, gfx::FrameTime::Now()); |
4802 host_impl_->DidDrawAllLayers(frame); | 4757 host_impl_->DidDrawAllLayers(frame); |
4803 } | 4758 } |
4804 | 4759 |
4805 | 4760 |
4806 // Applying a DSF should change the render surface size, but won't affect | 4761 // Applying a DSF should change the render surface size, but won't affect |
4807 // which part of the mask is used. | 4762 // which part of the mask is used. |
4808 device_scale_factor = 2.f; | 4763 device_scale_factor = 2.f; |
4809 gfx::Size device_viewport = | 4764 gfx::Size device_viewport = |
4810 gfx::ToFlooredSize(gfx::ScaleSize(root_size, device_scale_factor)); | 4765 gfx::ToFlooredSize(gfx::ScaleSize(root_size, device_scale_factor)); |
4811 host_impl_->SetViewportSize(device_viewport); | 4766 host_impl_->SetViewportSize(device_viewport); |
4812 host_impl_->SetDeviceScaleFactor(device_scale_factor); | 4767 host_impl_->SetDeviceScaleFactor(device_scale_factor); |
4813 host_impl_->active_tree()->set_needs_update_draw_properties(); | 4768 host_impl_->active_tree()->set_needs_update_draw_properties(); |
4814 { | 4769 { |
4815 LayerTreeHostImpl::FrameData frame; | 4770 LayerTreeHostImpl::FrameData frame; |
4816 EXPECT_EQ(DrawSwapReadbackResult::DRAW_SUCCESS, | 4771 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame, gfx::Rect())); |
4817 host_impl_->PrepareToDraw(&frame, gfx::Rect())); | |
4818 | 4772 |
4819 ASSERT_EQ(1u, frame.render_passes.size()); | 4773 ASSERT_EQ(1u, frame.render_passes.size()); |
4820 ASSERT_EQ(1u, frame.render_passes[0]->quad_list.size()); | 4774 ASSERT_EQ(1u, frame.render_passes[0]->quad_list.size()); |
4821 ASSERT_EQ(DrawQuad::RENDER_PASS, | 4775 ASSERT_EQ(DrawQuad::RENDER_PASS, |
4822 frame.render_passes[0]->quad_list[0]->material); | 4776 frame.render_passes[0]->quad_list[0]->material); |
4823 const RenderPassDrawQuad* render_pass_quad = | 4777 const RenderPassDrawQuad* render_pass_quad = |
4824 RenderPassDrawQuad::MaterialCast(frame.render_passes[0]->quad_list[0]); | 4778 RenderPassDrawQuad::MaterialCast(frame.render_passes[0]->quad_list[0]); |
4825 EXPECT_EQ(gfx::Rect(0, 0, 200, 200).ToString(), | 4779 EXPECT_EQ(gfx::Rect(0, 0, 200, 200).ToString(), |
4826 render_pass_quad->rect.ToString()); | 4780 render_pass_quad->rect.ToString()); |
4827 EXPECT_EQ(gfx::RectF(0.f, 0.f, 1.f, 1.f).ToString(), | 4781 EXPECT_EQ(gfx::RectF(0.f, 0.f, 1.f, 1.f).ToString(), |
4828 render_pass_quad->mask_uv_rect.ToString()); | 4782 render_pass_quad->mask_uv_rect.ToString()); |
4829 | 4783 |
4830 host_impl_->DrawLayers(&frame, gfx::FrameTime::Now()); | 4784 host_impl_->DrawLayers(&frame, gfx::FrameTime::Now()); |
4831 host_impl_->DidDrawAllLayers(frame); | 4785 host_impl_->DidDrawAllLayers(frame); |
4832 } | 4786 } |
4833 | 4787 |
4834 | 4788 |
4835 // Applying an equivalent content scale on the content layer and the mask | 4789 // Applying an equivalent content scale on the content layer and the mask |
4836 // should still result in the same part of the mask being used. | 4790 // should still result in the same part of the mask being used. |
4837 gfx::Size content_bounds = | 4791 gfx::Size content_bounds = |
4838 gfx::ToRoundedSize(gfx::ScaleSize(scaling_layer_size, | 4792 gfx::ToRoundedSize(gfx::ScaleSize(scaling_layer_size, |
4839 device_scale_factor)); | 4793 device_scale_factor)); |
4840 content_layer->SetContentBounds(content_bounds); | 4794 content_layer->SetContentBounds(content_bounds); |
4841 content_layer->SetContentsScale(device_scale_factor, device_scale_factor); | 4795 content_layer->SetContentsScale(device_scale_factor, device_scale_factor); |
4842 mask_layer->SetContentBounds(content_bounds); | 4796 mask_layer->SetContentBounds(content_bounds); |
4843 mask_layer->SetContentsScale(device_scale_factor, device_scale_factor); | 4797 mask_layer->SetContentsScale(device_scale_factor, device_scale_factor); |
4844 host_impl_->active_tree()->set_needs_update_draw_properties(); | 4798 host_impl_->active_tree()->set_needs_update_draw_properties(); |
4845 { | 4799 { |
4846 LayerTreeHostImpl::FrameData frame; | 4800 LayerTreeHostImpl::FrameData frame; |
4847 EXPECT_EQ(DrawSwapReadbackResult::DRAW_SUCCESS, | 4801 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame, gfx::Rect())); |
4848 host_impl_->PrepareToDraw(&frame, gfx::Rect())); | |
4849 | 4802 |
4850 ASSERT_EQ(1u, frame.render_passes.size()); | 4803 ASSERT_EQ(1u, frame.render_passes.size()); |
4851 ASSERT_EQ(1u, frame.render_passes[0]->quad_list.size()); | 4804 ASSERT_EQ(1u, frame.render_passes[0]->quad_list.size()); |
4852 ASSERT_EQ(DrawQuad::RENDER_PASS, | 4805 ASSERT_EQ(DrawQuad::RENDER_PASS, |
4853 frame.render_passes[0]->quad_list[0]->material); | 4806 frame.render_passes[0]->quad_list[0]->material); |
4854 const RenderPassDrawQuad* render_pass_quad = | 4807 const RenderPassDrawQuad* render_pass_quad = |
4855 RenderPassDrawQuad::MaterialCast(frame.render_passes[0]->quad_list[0]); | 4808 RenderPassDrawQuad::MaterialCast(frame.render_passes[0]->quad_list[0]); |
4856 EXPECT_EQ(gfx::Rect(0, 0, 200, 200).ToString(), | 4809 EXPECT_EQ(gfx::Rect(0, 0, 200, 200).ToString(), |
4857 render_pass_quad->rect.ToString()); | 4810 render_pass_quad->rect.ToString()); |
4858 EXPECT_EQ(gfx::RectF(0.f, 0.f, 1.f, 1.f).ToString(), | 4811 EXPECT_EQ(gfx::RectF(0.f, 0.f, 1.f, 1.f).ToString(), |
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4901 mask_layer->SetPosition(gfx::PointF()); | 4854 mask_layer->SetPosition(gfx::PointF()); |
4902 mask_layer->SetAnchorPoint(gfx::PointF()); | 4855 mask_layer->SetAnchorPoint(gfx::PointF()); |
4903 mask_layer->SetDrawsContent(true); | 4856 mask_layer->SetDrawsContent(true); |
4904 | 4857 |
4905 // Check that the mask fills the surface. | 4858 // Check that the mask fills the surface. |
4906 float device_scale_factor = 1.f; | 4859 float device_scale_factor = 1.f; |
4907 host_impl_->SetViewportSize(root_size); | 4860 host_impl_->SetViewportSize(root_size); |
4908 host_impl_->SetDeviceScaleFactor(device_scale_factor); | 4861 host_impl_->SetDeviceScaleFactor(device_scale_factor); |
4909 { | 4862 { |
4910 LayerTreeHostImpl::FrameData frame; | 4863 LayerTreeHostImpl::FrameData frame; |
4911 EXPECT_EQ(DrawSwapReadbackResult::DRAW_SUCCESS, | 4864 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame, gfx::Rect())); |
4912 host_impl_->PrepareToDraw(&frame, gfx::Rect())); | |
4913 | 4865 |
4914 ASSERT_EQ(1u, frame.render_passes.size()); | 4866 ASSERT_EQ(1u, frame.render_passes.size()); |
4915 ASSERT_EQ(1u, frame.render_passes[0]->quad_list.size()); | 4867 ASSERT_EQ(1u, frame.render_passes[0]->quad_list.size()); |
4916 ASSERT_EQ(DrawQuad::RENDER_PASS, | 4868 ASSERT_EQ(DrawQuad::RENDER_PASS, |
4917 frame.render_passes[0]->quad_list[0]->material); | 4869 frame.render_passes[0]->quad_list[0]->material); |
4918 const RenderPassDrawQuad* render_pass_quad = | 4870 const RenderPassDrawQuad* render_pass_quad = |
4919 RenderPassDrawQuad::MaterialCast(frame.render_passes[0]->quad_list[0]); | 4871 RenderPassDrawQuad::MaterialCast(frame.render_passes[0]->quad_list[0]); |
4920 EXPECT_EQ(gfx::Rect(0, 0, 50, 50).ToString(), | 4872 EXPECT_EQ(gfx::Rect(0, 0, 50, 50).ToString(), |
4921 render_pass_quad->rect.ToString()); | 4873 render_pass_quad->rect.ToString()); |
4922 EXPECT_EQ(gfx::RectF(0.f, 0.f, 1.f, 1.f).ToString(), | 4874 EXPECT_EQ(gfx::RectF(0.f, 0.f, 1.f, 1.f).ToString(), |
4923 render_pass_quad->mask_uv_rect.ToString()); | 4875 render_pass_quad->mask_uv_rect.ToString()); |
4924 | 4876 |
4925 host_impl_->DrawLayers(&frame, gfx::FrameTime::Now()); | 4877 host_impl_->DrawLayers(&frame, gfx::FrameTime::Now()); |
4926 host_impl_->DidDrawAllLayers(frame); | 4878 host_impl_->DidDrawAllLayers(frame); |
4927 } | 4879 } |
4928 | 4880 |
4929 // Applying a DSF should change the render surface size, but won't affect | 4881 // Applying a DSF should change the render surface size, but won't affect |
4930 // which part of the mask is used. | 4882 // which part of the mask is used. |
4931 device_scale_factor = 2.f; | 4883 device_scale_factor = 2.f; |
4932 gfx::Size device_viewport = | 4884 gfx::Size device_viewport = |
4933 gfx::ToFlooredSize(gfx::ScaleSize(root_size, device_scale_factor)); | 4885 gfx::ToFlooredSize(gfx::ScaleSize(root_size, device_scale_factor)); |
4934 host_impl_->SetViewportSize(device_viewport); | 4886 host_impl_->SetViewportSize(device_viewport); |
4935 host_impl_->SetDeviceScaleFactor(device_scale_factor); | 4887 host_impl_->SetDeviceScaleFactor(device_scale_factor); |
4936 host_impl_->active_tree()->set_needs_update_draw_properties(); | 4888 host_impl_->active_tree()->set_needs_update_draw_properties(); |
4937 { | 4889 { |
4938 LayerTreeHostImpl::FrameData frame; | 4890 LayerTreeHostImpl::FrameData frame; |
4939 EXPECT_EQ(DrawSwapReadbackResult::DRAW_SUCCESS, | 4891 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame, gfx::Rect())); |
4940 host_impl_->PrepareToDraw(&frame, gfx::Rect())); | |
4941 | 4892 |
4942 ASSERT_EQ(1u, frame.render_passes.size()); | 4893 ASSERT_EQ(1u, frame.render_passes.size()); |
4943 ASSERT_EQ(1u, frame.render_passes[0]->quad_list.size()); | 4894 ASSERT_EQ(1u, frame.render_passes[0]->quad_list.size()); |
4944 ASSERT_EQ(DrawQuad::RENDER_PASS, | 4895 ASSERT_EQ(DrawQuad::RENDER_PASS, |
4945 frame.render_passes[0]->quad_list[0]->material); | 4896 frame.render_passes[0]->quad_list[0]->material); |
4946 const RenderPassDrawQuad* render_pass_quad = | 4897 const RenderPassDrawQuad* render_pass_quad = |
4947 RenderPassDrawQuad::MaterialCast(frame.render_passes[0]->quad_list[0]); | 4898 RenderPassDrawQuad::MaterialCast(frame.render_passes[0]->quad_list[0]); |
4948 EXPECT_EQ(gfx::Rect(0, 0, 100, 100).ToString(), | 4899 EXPECT_EQ(gfx::Rect(0, 0, 100, 100).ToString(), |
4949 render_pass_quad->rect.ToString()); | 4900 render_pass_quad->rect.ToString()); |
4950 EXPECT_EQ(gfx::RectF(0.f, 0.f, 1.f, 1.f).ToString(), | 4901 EXPECT_EQ(gfx::RectF(0.f, 0.f, 1.f, 1.f).ToString(), |
4951 render_pass_quad->mask_uv_rect.ToString()); | 4902 render_pass_quad->mask_uv_rect.ToString()); |
4952 | 4903 |
4953 host_impl_->DrawLayers(&frame, gfx::FrameTime::Now()); | 4904 host_impl_->DrawLayers(&frame, gfx::FrameTime::Now()); |
4954 host_impl_->DidDrawAllLayers(frame); | 4905 host_impl_->DidDrawAllLayers(frame); |
4955 } | 4906 } |
4956 | 4907 |
4957 // Applying an equivalent content scale on the content layer and the mask | 4908 // Applying an equivalent content scale on the content layer and the mask |
4958 // should still result in the same part of the mask being used. | 4909 // should still result in the same part of the mask being used. |
4959 gfx::Size layer_size_large = | 4910 gfx::Size layer_size_large = |
4960 gfx::ToRoundedSize(gfx::ScaleSize(layer_size, device_scale_factor)); | 4911 gfx::ToRoundedSize(gfx::ScaleSize(layer_size, device_scale_factor)); |
4961 content_layer->SetContentBounds(layer_size_large); | 4912 content_layer->SetContentBounds(layer_size_large); |
4962 content_layer->SetContentsScale(device_scale_factor, device_scale_factor); | 4913 content_layer->SetContentsScale(device_scale_factor, device_scale_factor); |
4963 gfx::Size mask_size_large = | 4914 gfx::Size mask_size_large = |
4964 gfx::ToRoundedSize(gfx::ScaleSize(mask_size, device_scale_factor)); | 4915 gfx::ToRoundedSize(gfx::ScaleSize(mask_size, device_scale_factor)); |
4965 mask_layer->SetContentBounds(mask_size_large); | 4916 mask_layer->SetContentBounds(mask_size_large); |
4966 mask_layer->SetContentsScale(device_scale_factor, device_scale_factor); | 4917 mask_layer->SetContentsScale(device_scale_factor, device_scale_factor); |
4967 host_impl_->active_tree()->set_needs_update_draw_properties(); | 4918 host_impl_->active_tree()->set_needs_update_draw_properties(); |
4968 { | 4919 { |
4969 LayerTreeHostImpl::FrameData frame; | 4920 LayerTreeHostImpl::FrameData frame; |
4970 EXPECT_EQ(DrawSwapReadbackResult::DRAW_SUCCESS, | 4921 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame, gfx::Rect())); |
4971 host_impl_->PrepareToDraw(&frame, gfx::Rect())); | |
4972 | 4922 |
4973 ASSERT_EQ(1u, frame.render_passes.size()); | 4923 ASSERT_EQ(1u, frame.render_passes.size()); |
4974 ASSERT_EQ(1u, frame.render_passes[0]->quad_list.size()); | 4924 ASSERT_EQ(1u, frame.render_passes[0]->quad_list.size()); |
4975 ASSERT_EQ(DrawQuad::RENDER_PASS, | 4925 ASSERT_EQ(DrawQuad::RENDER_PASS, |
4976 frame.render_passes[0]->quad_list[0]->material); | 4926 frame.render_passes[0]->quad_list[0]->material); |
4977 const RenderPassDrawQuad* render_pass_quad = | 4927 const RenderPassDrawQuad* render_pass_quad = |
4978 RenderPassDrawQuad::MaterialCast(frame.render_passes[0]->quad_list[0]); | 4928 RenderPassDrawQuad::MaterialCast(frame.render_passes[0]->quad_list[0]); |
4979 EXPECT_EQ(gfx::Rect(0, 0, 100, 100).ToString(), | 4929 EXPECT_EQ(gfx::Rect(0, 0, 100, 100).ToString(), |
4980 render_pass_quad->rect.ToString()); | 4930 render_pass_quad->rect.ToString()); |
4981 EXPECT_EQ(gfx::RectF(0.f, 0.f, 1.f, 1.f).ToString(), | 4931 EXPECT_EQ(gfx::RectF(0.f, 0.f, 1.f, 1.f).ToString(), |
4982 render_pass_quad->mask_uv_rect.ToString()); | 4932 render_pass_quad->mask_uv_rect.ToString()); |
4983 | 4933 |
4984 host_impl_->DrawLayers(&frame, gfx::FrameTime::Now()); | 4934 host_impl_->DrawLayers(&frame, gfx::FrameTime::Now()); |
4985 host_impl_->DidDrawAllLayers(frame); | 4935 host_impl_->DidDrawAllLayers(frame); |
4986 } | 4936 } |
4987 | 4937 |
4988 // Applying a different contents scale to the mask layer means it will have | 4938 // Applying a different contents scale to the mask layer means it will have |
4989 // a larger texture, but it should use the same tex coords to cover the | 4939 // a larger texture, but it should use the same tex coords to cover the |
4990 // layer it masks. | 4940 // layer it masks. |
4991 mask_layer->SetContentBounds(mask_size); | 4941 mask_layer->SetContentBounds(mask_size); |
4992 mask_layer->SetContentsScale(1.f, 1.f); | 4942 mask_layer->SetContentsScale(1.f, 1.f); |
4993 host_impl_->active_tree()->set_needs_update_draw_properties(); | 4943 host_impl_->active_tree()->set_needs_update_draw_properties(); |
4994 { | 4944 { |
4995 LayerTreeHostImpl::FrameData frame; | 4945 LayerTreeHostImpl::FrameData frame; |
4996 EXPECT_EQ(DrawSwapReadbackResult::DRAW_SUCCESS, | 4946 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame, gfx::Rect())); |
4997 host_impl_->PrepareToDraw(&frame, gfx::Rect())); | |
4998 | 4947 |
4999 ASSERT_EQ(1u, frame.render_passes.size()); | 4948 ASSERT_EQ(1u, frame.render_passes.size()); |
5000 ASSERT_EQ(1u, frame.render_passes[0]->quad_list.size()); | 4949 ASSERT_EQ(1u, frame.render_passes[0]->quad_list.size()); |
5001 ASSERT_EQ(DrawQuad::RENDER_PASS, | 4950 ASSERT_EQ(DrawQuad::RENDER_PASS, |
5002 frame.render_passes[0]->quad_list[0]->material); | 4951 frame.render_passes[0]->quad_list[0]->material); |
5003 const RenderPassDrawQuad* render_pass_quad = | 4952 const RenderPassDrawQuad* render_pass_quad = |
5004 RenderPassDrawQuad::MaterialCast(frame.render_passes[0]->quad_list[0]); | 4953 RenderPassDrawQuad::MaterialCast(frame.render_passes[0]->quad_list[0]); |
5005 EXPECT_EQ(gfx::Rect(0, 0, 100, 100).ToString(), | 4954 EXPECT_EQ(gfx::Rect(0, 0, 100, 100).ToString(), |
5006 render_pass_quad->rect.ToString()); | 4955 render_pass_quad->rect.ToString()); |
5007 EXPECT_EQ(gfx::RectF(0.f, 0.f, 1.f, 1.f).ToString(), | 4956 EXPECT_EQ(gfx::RectF(0.f, 0.f, 1.f, 1.f).ToString(), |
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
5055 mask_layer->SetPosition(gfx::PointF()); | 5004 mask_layer->SetPosition(gfx::PointF()); |
5056 mask_layer->SetAnchorPoint(gfx::PointF()); | 5005 mask_layer->SetAnchorPoint(gfx::PointF()); |
5057 mask_layer->SetDrawsContent(true); | 5006 mask_layer->SetDrawsContent(true); |
5058 | 5007 |
5059 // Check that the mask fills the surface. | 5008 // Check that the mask fills the surface. |
5060 float device_scale_factor = 1.f; | 5009 float device_scale_factor = 1.f; |
5061 host_impl_->SetViewportSize(root_size); | 5010 host_impl_->SetViewportSize(root_size); |
5062 host_impl_->SetDeviceScaleFactor(device_scale_factor); | 5011 host_impl_->SetDeviceScaleFactor(device_scale_factor); |
5063 { | 5012 { |
5064 LayerTreeHostImpl::FrameData frame; | 5013 LayerTreeHostImpl::FrameData frame; |
5065 EXPECT_EQ(DrawSwapReadbackResult::DRAW_SUCCESS, | 5014 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame, gfx::Rect())); |
5066 host_impl_->PrepareToDraw(&frame, gfx::Rect())); | |
5067 | 5015 |
5068 ASSERT_EQ(1u, frame.render_passes.size()); | 5016 ASSERT_EQ(1u, frame.render_passes.size()); |
5069 ASSERT_EQ(2u, frame.render_passes[0]->quad_list.size()); | 5017 ASSERT_EQ(2u, frame.render_passes[0]->quad_list.size()); |
5070 ASSERT_EQ(DrawQuad::RENDER_PASS, | 5018 ASSERT_EQ(DrawQuad::RENDER_PASS, |
5071 frame.render_passes[0]->quad_list[1]->material); | 5019 frame.render_passes[0]->quad_list[1]->material); |
5072 const RenderPassDrawQuad* replica_quad = | 5020 const RenderPassDrawQuad* replica_quad = |
5073 RenderPassDrawQuad::MaterialCast(frame.render_passes[0]->quad_list[1]); | 5021 RenderPassDrawQuad::MaterialCast(frame.render_passes[0]->quad_list[1]); |
5074 EXPECT_TRUE(replica_quad->is_replica); | 5022 EXPECT_TRUE(replica_quad->is_replica); |
5075 EXPECT_EQ(gfx::Rect(0, 0, 50, 50).ToString(), | 5023 EXPECT_EQ(gfx::Rect(0, 0, 50, 50).ToString(), |
5076 replica_quad->rect.ToString()); | 5024 replica_quad->rect.ToString()); |
5077 EXPECT_EQ(gfx::RectF(0.f, 0.f, 1.f, 1.f).ToString(), | 5025 EXPECT_EQ(gfx::RectF(0.f, 0.f, 1.f, 1.f).ToString(), |
5078 replica_quad->mask_uv_rect.ToString()); | 5026 replica_quad->mask_uv_rect.ToString()); |
5079 | 5027 |
5080 host_impl_->DrawLayers(&frame, gfx::FrameTime::Now()); | 5028 host_impl_->DrawLayers(&frame, gfx::FrameTime::Now()); |
5081 host_impl_->DidDrawAllLayers(frame); | 5029 host_impl_->DidDrawAllLayers(frame); |
5082 } | 5030 } |
5083 | 5031 |
5084 // Applying a DSF should change the render surface size, but won't affect | 5032 // Applying a DSF should change the render surface size, but won't affect |
5085 // which part of the mask is used. | 5033 // which part of the mask is used. |
5086 device_scale_factor = 2.f; | 5034 device_scale_factor = 2.f; |
5087 gfx::Size device_viewport = | 5035 gfx::Size device_viewport = |
5088 gfx::ToFlooredSize(gfx::ScaleSize(root_size, device_scale_factor)); | 5036 gfx::ToFlooredSize(gfx::ScaleSize(root_size, device_scale_factor)); |
5089 host_impl_->SetViewportSize(device_viewport); | 5037 host_impl_->SetViewportSize(device_viewport); |
5090 host_impl_->SetDeviceScaleFactor(device_scale_factor); | 5038 host_impl_->SetDeviceScaleFactor(device_scale_factor); |
5091 host_impl_->active_tree()->set_needs_update_draw_properties(); | 5039 host_impl_->active_tree()->set_needs_update_draw_properties(); |
5092 { | 5040 { |
5093 LayerTreeHostImpl::FrameData frame; | 5041 LayerTreeHostImpl::FrameData frame; |
5094 EXPECT_EQ(DrawSwapReadbackResult::DRAW_SUCCESS, | 5042 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame, gfx::Rect())); |
5095 host_impl_->PrepareToDraw(&frame, gfx::Rect())); | |
5096 | 5043 |
5097 ASSERT_EQ(1u, frame.render_passes.size()); | 5044 ASSERT_EQ(1u, frame.render_passes.size()); |
5098 ASSERT_EQ(2u, frame.render_passes[0]->quad_list.size()); | 5045 ASSERT_EQ(2u, frame.render_passes[0]->quad_list.size()); |
5099 ASSERT_EQ(DrawQuad::RENDER_PASS, | 5046 ASSERT_EQ(DrawQuad::RENDER_PASS, |
5100 frame.render_passes[0]->quad_list[1]->material); | 5047 frame.render_passes[0]->quad_list[1]->material); |
5101 const RenderPassDrawQuad* replica_quad = | 5048 const RenderPassDrawQuad* replica_quad = |
5102 RenderPassDrawQuad::MaterialCast(frame.render_passes[0]->quad_list[1]); | 5049 RenderPassDrawQuad::MaterialCast(frame.render_passes[0]->quad_list[1]); |
5103 EXPECT_TRUE(replica_quad->is_replica); | 5050 EXPECT_TRUE(replica_quad->is_replica); |
5104 EXPECT_EQ(gfx::Rect(0, 0, 100, 100).ToString(), | 5051 EXPECT_EQ(gfx::Rect(0, 0, 100, 100).ToString(), |
5105 replica_quad->rect.ToString()); | 5052 replica_quad->rect.ToString()); |
(...skipping 10 matching lines...) Expand all Loading... |
5116 gfx::ToRoundedSize(gfx::ScaleSize(layer_size, device_scale_factor)); | 5063 gfx::ToRoundedSize(gfx::ScaleSize(layer_size, device_scale_factor)); |
5117 content_layer->SetContentBounds(layer_size_large); | 5064 content_layer->SetContentBounds(layer_size_large); |
5118 content_layer->SetContentsScale(device_scale_factor, device_scale_factor); | 5065 content_layer->SetContentsScale(device_scale_factor, device_scale_factor); |
5119 gfx::Size mask_size_large = | 5066 gfx::Size mask_size_large = |
5120 gfx::ToRoundedSize(gfx::ScaleSize(mask_size, device_scale_factor)); | 5067 gfx::ToRoundedSize(gfx::ScaleSize(mask_size, device_scale_factor)); |
5121 mask_layer->SetContentBounds(mask_size_large); | 5068 mask_layer->SetContentBounds(mask_size_large); |
5122 mask_layer->SetContentsScale(device_scale_factor, device_scale_factor); | 5069 mask_layer->SetContentsScale(device_scale_factor, device_scale_factor); |
5123 host_impl_->active_tree()->set_needs_update_draw_properties(); | 5070 host_impl_->active_tree()->set_needs_update_draw_properties(); |
5124 { | 5071 { |
5125 LayerTreeHostImpl::FrameData frame; | 5072 LayerTreeHostImpl::FrameData frame; |
5126 EXPECT_EQ(DrawSwapReadbackResult::DRAW_SUCCESS, | 5073 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame, gfx::Rect())); |
5127 host_impl_->PrepareToDraw(&frame, gfx::Rect())); | |
5128 | 5074 |
5129 ASSERT_EQ(1u, frame.render_passes.size()); | 5075 ASSERT_EQ(1u, frame.render_passes.size()); |
5130 ASSERT_EQ(2u, frame.render_passes[0]->quad_list.size()); | 5076 ASSERT_EQ(2u, frame.render_passes[0]->quad_list.size()); |
5131 ASSERT_EQ(DrawQuad::RENDER_PASS, | 5077 ASSERT_EQ(DrawQuad::RENDER_PASS, |
5132 frame.render_passes[0]->quad_list[1]->material); | 5078 frame.render_passes[0]->quad_list[1]->material); |
5133 const RenderPassDrawQuad* replica_quad = | 5079 const RenderPassDrawQuad* replica_quad = |
5134 RenderPassDrawQuad::MaterialCast(frame.render_passes[0]->quad_list[1]); | 5080 RenderPassDrawQuad::MaterialCast(frame.render_passes[0]->quad_list[1]); |
5135 EXPECT_TRUE(replica_quad->is_replica); | 5081 EXPECT_TRUE(replica_quad->is_replica); |
5136 EXPECT_EQ(gfx::Rect(0, 0, 100, 100).ToString(), | 5082 EXPECT_EQ(gfx::Rect(0, 0, 100, 100).ToString(), |
5137 replica_quad->rect.ToString()); | 5083 replica_quad->rect.ToString()); |
5138 EXPECT_EQ(gfx::RectF(0.f, 0.f, 1.f, 1.f).ToString(), | 5084 EXPECT_EQ(gfx::RectF(0.f, 0.f, 1.f, 1.f).ToString(), |
5139 replica_quad->mask_uv_rect.ToString()); | 5085 replica_quad->mask_uv_rect.ToString()); |
5140 | 5086 |
5141 host_impl_->DrawLayers(&frame, gfx::FrameTime::Now()); | 5087 host_impl_->DrawLayers(&frame, gfx::FrameTime::Now()); |
5142 host_impl_->DidDrawAllLayers(frame); | 5088 host_impl_->DidDrawAllLayers(frame); |
5143 } | 5089 } |
5144 | 5090 |
5145 // Applying a different contents scale to the mask layer means it will have | 5091 // Applying a different contents scale to the mask layer means it will have |
5146 // a larger texture, but it should use the same tex coords to cover the | 5092 // a larger texture, but it should use the same tex coords to cover the |
5147 // layer it masks. | 5093 // layer it masks. |
5148 mask_layer->SetContentBounds(mask_size); | 5094 mask_layer->SetContentBounds(mask_size); |
5149 mask_layer->SetContentsScale(1.f, 1.f); | 5095 mask_layer->SetContentsScale(1.f, 1.f); |
5150 host_impl_->active_tree()->set_needs_update_draw_properties(); | 5096 host_impl_->active_tree()->set_needs_update_draw_properties(); |
5151 { | 5097 { |
5152 LayerTreeHostImpl::FrameData frame; | 5098 LayerTreeHostImpl::FrameData frame; |
5153 EXPECT_EQ(DrawSwapReadbackResult::DRAW_SUCCESS, | 5099 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame, gfx::Rect())); |
5154 host_impl_->PrepareToDraw(&frame, gfx::Rect())); | |
5155 | 5100 |
5156 ASSERT_EQ(1u, frame.render_passes.size()); | 5101 ASSERT_EQ(1u, frame.render_passes.size()); |
5157 ASSERT_EQ(2u, frame.render_passes[0]->quad_list.size()); | 5102 ASSERT_EQ(2u, frame.render_passes[0]->quad_list.size()); |
5158 ASSERT_EQ(DrawQuad::RENDER_PASS, | 5103 ASSERT_EQ(DrawQuad::RENDER_PASS, |
5159 frame.render_passes[0]->quad_list[1]->material); | 5104 frame.render_passes[0]->quad_list[1]->material); |
5160 const RenderPassDrawQuad* replica_quad = | 5105 const RenderPassDrawQuad* replica_quad = |
5161 RenderPassDrawQuad::MaterialCast(frame.render_passes[0]->quad_list[1]); | 5106 RenderPassDrawQuad::MaterialCast(frame.render_passes[0]->quad_list[1]); |
5162 EXPECT_TRUE(replica_quad->is_replica); | 5107 EXPECT_TRUE(replica_quad->is_replica); |
5163 EXPECT_EQ(gfx::Rect(0, 0, 100, 100).ToString(), | 5108 EXPECT_EQ(gfx::Rect(0, 0, 100, 100).ToString(), |
5164 replica_quad->rect.ToString()); | 5109 replica_quad->rect.ToString()); |
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
5224 mask_layer->SetContentBounds(mask_size); | 5169 mask_layer->SetContentBounds(mask_size); |
5225 mask_layer->SetPosition(gfx::PointF()); | 5170 mask_layer->SetPosition(gfx::PointF()); |
5226 mask_layer->SetAnchorPoint(gfx::PointF()); | 5171 mask_layer->SetAnchorPoint(gfx::PointF()); |
5227 mask_layer->SetDrawsContent(true); | 5172 mask_layer->SetDrawsContent(true); |
5228 | 5173 |
5229 float device_scale_factor = 1.f; | 5174 float device_scale_factor = 1.f; |
5230 host_impl_->SetViewportSize(root_size); | 5175 host_impl_->SetViewportSize(root_size); |
5231 host_impl_->SetDeviceScaleFactor(device_scale_factor); | 5176 host_impl_->SetDeviceScaleFactor(device_scale_factor); |
5232 { | 5177 { |
5233 LayerTreeHostImpl::FrameData frame; | 5178 LayerTreeHostImpl::FrameData frame; |
5234 EXPECT_EQ(DrawSwapReadbackResult::DRAW_SUCCESS, | 5179 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame, gfx::Rect())); |
5235 host_impl_->PrepareToDraw(&frame, gfx::Rect())); | |
5236 | 5180 |
5237 ASSERT_EQ(1u, frame.render_passes.size()); | 5181 ASSERT_EQ(1u, frame.render_passes.size()); |
5238 ASSERT_EQ(2u, frame.render_passes[0]->quad_list.size()); | 5182 ASSERT_EQ(2u, frame.render_passes[0]->quad_list.size()); |
5239 | 5183 |
5240 // The surface is 100x50. | 5184 // The surface is 100x50. |
5241 ASSERT_EQ(DrawQuad::RENDER_PASS, | 5185 ASSERT_EQ(DrawQuad::RENDER_PASS, |
5242 frame.render_passes[0]->quad_list[0]->material); | 5186 frame.render_passes[0]->quad_list[0]->material); |
5243 const RenderPassDrawQuad* render_pass_quad = | 5187 const RenderPassDrawQuad* render_pass_quad = |
5244 RenderPassDrawQuad::MaterialCast(frame.render_passes[0]->quad_list[0]); | 5188 RenderPassDrawQuad::MaterialCast(frame.render_passes[0]->quad_list[0]); |
5245 EXPECT_FALSE(render_pass_quad->is_replica); | 5189 EXPECT_FALSE(render_pass_quad->is_replica); |
(...skipping 13 matching lines...) Expand all Loading... |
5259 | 5203 |
5260 host_impl_->DrawLayers(&frame, gfx::FrameTime::Now()); | 5204 host_impl_->DrawLayers(&frame, gfx::FrameTime::Now()); |
5261 host_impl_->DidDrawAllLayers(frame); | 5205 host_impl_->DidDrawAllLayers(frame); |
5262 } | 5206 } |
5263 | 5207 |
5264 // Move the child to (-50, 0) instead. Now the mask should be moved to still | 5208 // Move the child to (-50, 0) instead. Now the mask should be moved to still |
5265 // cover the layer being replicated. | 5209 // cover the layer being replicated. |
5266 content_child_layer->SetPosition(gfx::Point(-50, 0)); | 5210 content_child_layer->SetPosition(gfx::Point(-50, 0)); |
5267 { | 5211 { |
5268 LayerTreeHostImpl::FrameData frame; | 5212 LayerTreeHostImpl::FrameData frame; |
5269 EXPECT_EQ(DrawSwapReadbackResult::DRAW_SUCCESS, | 5213 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame, gfx::Rect())); |
5270 host_impl_->PrepareToDraw(&frame, gfx::Rect())); | |
5271 | 5214 |
5272 ASSERT_EQ(1u, frame.render_passes.size()); | 5215 ASSERT_EQ(1u, frame.render_passes.size()); |
5273 ASSERT_EQ(2u, frame.render_passes[0]->quad_list.size()); | 5216 ASSERT_EQ(2u, frame.render_passes[0]->quad_list.size()); |
5274 | 5217 |
5275 // The surface is 100x50 with its origin at (-50, 0). | 5218 // The surface is 100x50 with its origin at (-50, 0). |
5276 ASSERT_EQ(DrawQuad::RENDER_PASS, | 5219 ASSERT_EQ(DrawQuad::RENDER_PASS, |
5277 frame.render_passes[0]->quad_list[0]->material); | 5220 frame.render_passes[0]->quad_list[0]->material); |
5278 const RenderPassDrawQuad* render_pass_quad = | 5221 const RenderPassDrawQuad* render_pass_quad = |
5279 RenderPassDrawQuad::MaterialCast(frame.render_passes[0]->quad_list[0]); | 5222 RenderPassDrawQuad::MaterialCast(frame.render_passes[0]->quad_list[0]); |
5280 EXPECT_FALSE(render_pass_quad->is_replica); | 5223 EXPECT_FALSE(render_pass_quad->is_replica); |
(...skipping 78 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
5359 mask_layer->SetContentBounds(mask_size); | 5302 mask_layer->SetContentBounds(mask_size); |
5360 mask_layer->SetPosition(gfx::PointF()); | 5303 mask_layer->SetPosition(gfx::PointF()); |
5361 mask_layer->SetAnchorPoint(gfx::PointF()); | 5304 mask_layer->SetAnchorPoint(gfx::PointF()); |
5362 mask_layer->SetDrawsContent(true); | 5305 mask_layer->SetDrawsContent(true); |
5363 | 5306 |
5364 float device_scale_factor = 1.f; | 5307 float device_scale_factor = 1.f; |
5365 host_impl_->SetViewportSize(root_size); | 5308 host_impl_->SetViewportSize(root_size); |
5366 host_impl_->SetDeviceScaleFactor(device_scale_factor); | 5309 host_impl_->SetDeviceScaleFactor(device_scale_factor); |
5367 { | 5310 { |
5368 LayerTreeHostImpl::FrameData frame; | 5311 LayerTreeHostImpl::FrameData frame; |
5369 EXPECT_EQ(DrawSwapReadbackResult::DRAW_SUCCESS, | 5312 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame, gfx::Rect())); |
5370 host_impl_->PrepareToDraw(&frame, gfx::Rect())); | |
5371 | 5313 |
5372 ASSERT_EQ(1u, frame.render_passes.size()); | 5314 ASSERT_EQ(1u, frame.render_passes.size()); |
5373 ASSERT_EQ(1u, frame.render_passes[0]->quad_list.size()); | 5315 ASSERT_EQ(1u, frame.render_passes[0]->quad_list.size()); |
5374 | 5316 |
5375 // The surface is clipped to 10x20. | 5317 // The surface is clipped to 10x20. |
5376 ASSERT_EQ(DrawQuad::RENDER_PASS, | 5318 ASSERT_EQ(DrawQuad::RENDER_PASS, |
5377 frame.render_passes[0]->quad_list[0]->material); | 5319 frame.render_passes[0]->quad_list[0]->material); |
5378 const RenderPassDrawQuad* render_pass_quad = | 5320 const RenderPassDrawQuad* render_pass_quad = |
5379 RenderPassDrawQuad::MaterialCast(frame.render_passes[0]->quad_list[0]); | 5321 RenderPassDrawQuad::MaterialCast(frame.render_passes[0]->quad_list[0]); |
5380 EXPECT_FALSE(render_pass_quad->is_replica); | 5322 EXPECT_FALSE(render_pass_quad->is_replica); |
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
5441 gfx::Vector2d scroll_offset(100000, 0); | 5383 gfx::Vector2d scroll_offset(100000, 0); |
5442 scrolling_layer->SetScrollClipLayer(root->id()); | 5384 scrolling_layer->SetScrollClipLayer(root->id()); |
5443 scrolling_layer->SetScrollOffset(scroll_offset); | 5385 scrolling_layer->SetScrollOffset(scroll_offset); |
5444 | 5386 |
5445 host_impl_->ActivatePendingTree(); | 5387 host_impl_->ActivatePendingTree(); |
5446 | 5388 |
5447 host_impl_->active_tree()->UpdateDrawProperties(); | 5389 host_impl_->active_tree()->UpdateDrawProperties(); |
5448 ASSERT_EQ(1u, host_impl_->active_tree()->RenderSurfaceLayerList().size()); | 5390 ASSERT_EQ(1u, host_impl_->active_tree()->RenderSurfaceLayerList().size()); |
5449 | 5391 |
5450 LayerTreeHostImpl::FrameData frame; | 5392 LayerTreeHostImpl::FrameData frame; |
5451 EXPECT_EQ(DrawSwapReadbackResult::DRAW_SUCCESS, | 5393 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame, gfx::Rect())); |
5452 host_impl_->PrepareToDraw(&frame, gfx::Rect())); | |
5453 | 5394 |
5454 ASSERT_EQ(1u, frame.render_passes.size()); | 5395 ASSERT_EQ(1u, frame.render_passes.size()); |
5455 ASSERT_LE(1u, frame.render_passes[0]->quad_list.size()); | 5396 ASSERT_LE(1u, frame.render_passes[0]->quad_list.size()); |
5456 const DrawQuad* quad = frame.render_passes[0]->quad_list[0]; | 5397 const DrawQuad* quad = frame.render_passes[0]->quad_list[0]; |
5457 | 5398 |
5458 float edge[24]; | 5399 float edge[24]; |
5459 gfx::QuadF device_layer_quad; | 5400 gfx::QuadF device_layer_quad; |
5460 bool antialiased = | 5401 bool antialiased = |
5461 GLRendererWithSetupQuadForAntialiasing::SetupQuadForAntialiasing( | 5402 GLRendererWithSetupQuadForAntialiasing::SetupQuadForAntialiasing( |
5462 quad->quadTransform(), quad, &device_layer_quad, edge); | 5403 quad->quadTransform(), quad, &device_layer_quad, edge); |
(...skipping 13 matching lines...) Expand all Loading... |
5476 swap_buffers_complete_++; | 5417 swap_buffers_complete_++; |
5477 } | 5418 } |
5478 | 5419 |
5479 int swap_buffers_complete_; | 5420 int swap_buffers_complete_; |
5480 }; | 5421 }; |
5481 | 5422 |
5482 TEST_F(CompositorFrameMetadataTest, CompositorFrameAckCountsAsSwapComplete) { | 5423 TEST_F(CompositorFrameMetadataTest, CompositorFrameAckCountsAsSwapComplete) { |
5483 SetupRootLayerImpl(FakeLayerWithQuads::Create(host_impl_->active_tree(), 1)); | 5424 SetupRootLayerImpl(FakeLayerWithQuads::Create(host_impl_->active_tree(), 1)); |
5484 { | 5425 { |
5485 LayerTreeHostImpl::FrameData frame; | 5426 LayerTreeHostImpl::FrameData frame; |
5486 EXPECT_EQ(DrawSwapReadbackResult::DRAW_SUCCESS, | 5427 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame, gfx::Rect())); |
5487 host_impl_->PrepareToDraw(&frame, gfx::Rect())); | |
5488 host_impl_->DrawLayers(&frame, base::TimeTicks()); | 5428 host_impl_->DrawLayers(&frame, base::TimeTicks()); |
5489 host_impl_->DidDrawAllLayers(frame); | 5429 host_impl_->DidDrawAllLayers(frame); |
5490 } | 5430 } |
5491 CompositorFrameAck ack; | 5431 CompositorFrameAck ack; |
5492 host_impl_->ReclaimResources(&ack); | 5432 host_impl_->ReclaimResources(&ack); |
5493 host_impl_->DidSwapBuffersComplete(); | 5433 host_impl_->DidSwapBuffersComplete(); |
5494 EXPECT_EQ(swap_buffers_complete_, 1); | 5434 EXPECT_EQ(swap_buffers_complete_, 1); |
5495 } | 5435 } |
5496 | 5436 |
5497 class CountingSoftwareDevice : public SoftwareOutputDevice { | 5437 class CountingSoftwareDevice : public SoftwareOutputDevice { |
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
5557 FakeVideoFrameProvider provider; | 5497 FakeVideoFrameProvider provider; |
5558 scoped_ptr<VideoLayerImpl> video_layer = | 5498 scoped_ptr<VideoLayerImpl> video_layer = |
5559 VideoLayerImpl::Create(host_impl_->active_tree(), 2, &provider); | 5499 VideoLayerImpl::Create(host_impl_->active_tree(), 2, &provider); |
5560 video_layer->SetBounds(gfx::Size(10, 10)); | 5500 video_layer->SetBounds(gfx::Size(10, 10)); |
5561 video_layer->SetContentBounds(gfx::Size(10, 10)); | 5501 video_layer->SetContentBounds(gfx::Size(10, 10)); |
5562 video_layer->SetDrawsContent(true); | 5502 video_layer->SetDrawsContent(true); |
5563 root_layer->AddChild(video_layer.PassAs<LayerImpl>()); | 5503 root_layer->AddChild(video_layer.PassAs<LayerImpl>()); |
5564 SetupRootLayerImpl(root_layer.PassAs<LayerImpl>()); | 5504 SetupRootLayerImpl(root_layer.PassAs<LayerImpl>()); |
5565 | 5505 |
5566 LayerTreeHostImpl::FrameData frame; | 5506 LayerTreeHostImpl::FrameData frame; |
5567 EXPECT_EQ(DrawSwapReadbackResult::DRAW_SUCCESS, | 5507 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame, gfx::Rect())); |
5568 host_impl_->PrepareToDraw(&frame, gfx::Rect())); | |
5569 host_impl_->DrawLayers(&frame, gfx::FrameTime::Now()); | 5508 host_impl_->DrawLayers(&frame, gfx::FrameTime::Now()); |
5570 host_impl_->DidDrawAllLayers(frame); | 5509 host_impl_->DidDrawAllLayers(frame); |
5571 | 5510 |
5572 EXPECT_EQ(1u, frame.will_draw_layers.size()); | 5511 EXPECT_EQ(1u, frame.will_draw_layers.size()); |
5573 EXPECT_EQ(host_impl_->active_tree()->root_layer(), frame.will_draw_layers[0]); | 5512 EXPECT_EQ(host_impl_->active_tree()->root_layer(), frame.will_draw_layers[0]); |
5574 } | 5513 } |
5575 | 5514 |
5576 class LayerTreeHostImplTestDeferredInitialize : public LayerTreeHostImplTest { | 5515 class LayerTreeHostImplTestDeferredInitialize : public LayerTreeHostImplTest { |
5577 protected: | 5516 protected: |
5578 virtual void SetUp() OVERRIDE { | 5517 virtual void SetUp() OVERRIDE { |
(...skipping 243 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
5822 | 5761 |
5823 SetupRootLayerImpl(LayerImpl::Create(host_impl_->active_tree(), 1)); | 5762 SetupRootLayerImpl(LayerImpl::Create(host_impl_->active_tree(), 1)); |
5824 | 5763 |
5825 ScopedPtrVector<CopyOutputRequest> requests; | 5764 ScopedPtrVector<CopyOutputRequest> requests; |
5826 requests.push_back(CopyOutputRequest::CreateRequest( | 5765 requests.push_back(CopyOutputRequest::CreateRequest( |
5827 base::Bind(&ShutdownReleasesContext_Callback))); | 5766 base::Bind(&ShutdownReleasesContext_Callback))); |
5828 | 5767 |
5829 host_impl_->active_tree()->root_layer()->PassCopyRequests(&requests); | 5768 host_impl_->active_tree()->root_layer()->PassCopyRequests(&requests); |
5830 | 5769 |
5831 LayerTreeHostImpl::FrameData frame; | 5770 LayerTreeHostImpl::FrameData frame; |
5832 EXPECT_EQ(DrawSwapReadbackResult::DRAW_SUCCESS, | 5771 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame, gfx::Rect())); |
5833 host_impl_->PrepareToDraw(&frame, gfx::Rect())); | |
5834 host_impl_->DrawLayers(&frame, gfx::FrameTime::Now()); | 5772 host_impl_->DrawLayers(&frame, gfx::FrameTime::Now()); |
5835 host_impl_->DidDrawAllLayers(frame); | 5773 host_impl_->DidDrawAllLayers(frame); |
5836 | 5774 |
5837 // The CopyOutputResult's callback has a ref on the ContextProvider and a | 5775 // The CopyOutputResult's callback has a ref on the ContextProvider and a |
5838 // texture in a texture mailbox. | 5776 // texture in a texture mailbox. |
5839 EXPECT_FALSE(context_provider->HasOneRef()); | 5777 EXPECT_FALSE(context_provider->HasOneRef()); |
5840 EXPECT_EQ(1u, context_provider->TestContext3d()->NumTextures()); | 5778 EXPECT_EQ(1u, context_provider->TestContext3d()->NumTextures()); |
5841 | 5779 |
5842 host_impl_.reset(); | 5780 host_impl_.reset(); |
5843 | 5781 |
(...skipping 254 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
6098 ui::LatencyInfo latency_info; | 6036 ui::LatencyInfo latency_info; |
6099 latency_info.AddLatencyNumber( | 6037 latency_info.AddLatencyNumber( |
6100 ui::INPUT_EVENT_LATENCY_BEGIN_RWH_COMPONENT, 0, 0); | 6038 ui::INPUT_EVENT_LATENCY_BEGIN_RWH_COMPONENT, 0, 0); |
6101 scoped_ptr<SwapPromise> swap_promise( | 6039 scoped_ptr<SwapPromise> swap_promise( |
6102 new LatencyInfoSwapPromise(latency_info)); | 6040 new LatencyInfoSwapPromise(latency_info)); |
6103 host_impl_->active_tree()->QueueSwapPromise(swap_promise.Pass()); | 6041 host_impl_->active_tree()->QueueSwapPromise(swap_promise.Pass()); |
6104 host_impl_->SetNeedsRedraw(); | 6042 host_impl_->SetNeedsRedraw(); |
6105 | 6043 |
6106 gfx::Rect full_frame_damage(host_impl_->DrawViewportSize()); | 6044 gfx::Rect full_frame_damage(host_impl_->DrawViewportSize()); |
6107 LayerTreeHostImpl::FrameData frame; | 6045 LayerTreeHostImpl::FrameData frame; |
6108 EXPECT_EQ(DrawSwapReadbackResult::DRAW_SUCCESS, | 6046 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame, gfx::Rect())); |
6109 host_impl_->PrepareToDraw(&frame, gfx::Rect())); | |
6110 host_impl_->DrawLayers(&frame, gfx::FrameTime::Now()); | 6047 host_impl_->DrawLayers(&frame, gfx::FrameTime::Now()); |
6111 host_impl_->DidDrawAllLayers(frame); | 6048 host_impl_->DidDrawAllLayers(frame); |
6112 EXPECT_TRUE(host_impl_->SwapBuffers(frame)); | 6049 EXPECT_TRUE(host_impl_->SwapBuffers(frame)); |
6113 | 6050 |
6114 const std::vector<ui::LatencyInfo>& metadata_latency_after = | 6051 const std::vector<ui::LatencyInfo>& metadata_latency_after = |
6115 fake_output_surface->last_sent_frame().metadata.latency_info; | 6052 fake_output_surface->last_sent_frame().metadata.latency_info; |
6116 EXPECT_EQ(1u, metadata_latency_after.size()); | 6053 EXPECT_EQ(1u, metadata_latency_after.size()); |
6117 EXPECT_TRUE(metadata_latency_after[0].FindLatency( | 6054 EXPECT_TRUE(metadata_latency_after[0].FindLatency( |
6118 ui::INPUT_EVENT_LATENCY_BEGIN_RWH_COMPONENT, 0, NULL)); | 6055 ui::INPUT_EVENT_LATENCY_BEGIN_RWH_COMPONENT, 0, NULL)); |
6119 } | 6056 } |
(...skipping 276 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
6396 EXPECT_EQ(host_impl_->global_tile_state().hard_memory_limit_in_bytes, | 6333 EXPECT_EQ(host_impl_->global_tile_state().hard_memory_limit_in_bytes, |
6397 300u * 1024u * 1024u); | 6334 300u * 1024u * 1024u); |
6398 EXPECT_EQ(host_impl_->global_tile_state().soft_memory_limit_in_bytes, | 6335 EXPECT_EQ(host_impl_->global_tile_state().soft_memory_limit_in_bytes, |
6399 150u * 1024u * 1024u); | 6336 150u * 1024u * 1024u); |
6400 EXPECT_EQ(host_impl_->global_tile_state().unused_memory_limit_in_bytes, | 6337 EXPECT_EQ(host_impl_->global_tile_state().unused_memory_limit_in_bytes, |
6401 75u * 1024u * 1024u); | 6338 75u * 1024u * 1024u); |
6402 } | 6339 } |
6403 | 6340 |
6404 } // namespace | 6341 } // namespace |
6405 } // namespace cc | 6342 } // namespace cc |
OLD | NEW |