| 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 279 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 290 layer->SetDrawsContent(true); | 290 layer->SetDrawsContent(true); |
| 291 layer->SetBounds(size); | 291 layer->SetBounds(size); |
| 292 layer->SetContentBounds(size); | 292 layer->SetContentBounds(size); |
| 293 clip_layer->SetBounds(gfx::Size(size.width() / 2, size.height() / 2)); | 293 clip_layer->SetBounds(gfx::Size(size.width() / 2, size.height() / 2)); |
| 294 return layer.Pass(); | 294 return layer.Pass(); |
| 295 } | 295 } |
| 296 | 296 |
| 297 void DrawFrame() { | 297 void DrawFrame() { |
| 298 LayerTreeHostImpl::FrameData frame; | 298 LayerTreeHostImpl::FrameData frame; |
| 299 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame)); | 299 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame)); |
| 300 host_impl_->DrawLayers(&frame, gfx::FrameTime::Now()); | 300 host_impl_->DrawLayers(&frame); |
| 301 host_impl_->DidDrawAllLayers(frame); | 301 host_impl_->DidDrawAllLayers(frame); |
| 302 } | 302 } |
| 303 | 303 |
| 304 void pinch_zoom_pan_viewport_forces_commit_redraw(float device_scale_factor); | 304 void pinch_zoom_pan_viewport_forces_commit_redraw(float device_scale_factor); |
| 305 void pinch_zoom_pan_viewport_test(float device_scale_factor); | 305 void pinch_zoom_pan_viewport_test(float device_scale_factor); |
| 306 void pinch_zoom_pan_viewport_and_scroll_test(float device_scale_factor); | 306 void pinch_zoom_pan_viewport_and_scroll_test(float device_scale_factor); |
| 307 void pinch_zoom_pan_viewport_and_scroll_boundary_test( | 307 void pinch_zoom_pan_viewport_and_scroll_boundary_test( |
| 308 float device_scale_factor); | 308 float device_scale_factor); |
| 309 | 309 |
| 310 void CheckNotifyCalledIfCanDrawChanged(bool always_draw) { | 310 void CheckNotifyCalledIfCanDrawChanged(bool always_draw) { |
| (...skipping 1392 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1703 DidDrawCheckLayer* root = static_cast<DidDrawCheckLayer*>( | 1703 DidDrawCheckLayer* root = static_cast<DidDrawCheckLayer*>( |
| 1704 host_impl_->active_tree()->root_layer()); | 1704 host_impl_->active_tree()->root_layer()); |
| 1705 | 1705 |
| 1706 root->AddChild(DidDrawCheckLayer::Create(host_impl_->active_tree(), 2)); | 1706 root->AddChild(DidDrawCheckLayer::Create(host_impl_->active_tree(), 2)); |
| 1707 DidDrawCheckLayer* layer = | 1707 DidDrawCheckLayer* layer = |
| 1708 static_cast<DidDrawCheckLayer*>(root->children()[0]); | 1708 static_cast<DidDrawCheckLayer*>(root->children()[0]); |
| 1709 | 1709 |
| 1710 { | 1710 { |
| 1711 LayerTreeHostImpl::FrameData frame; | 1711 LayerTreeHostImpl::FrameData frame; |
| 1712 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame)); | 1712 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame)); |
| 1713 host_impl_->DrawLayers(&frame, gfx::FrameTime::Now()); | 1713 host_impl_->DrawLayers(&frame); |
| 1714 host_impl_->DidDrawAllLayers(frame); | 1714 host_impl_->DidDrawAllLayers(frame); |
| 1715 | 1715 |
| 1716 EXPECT_TRUE(layer->will_draw_called()); | 1716 EXPECT_TRUE(layer->will_draw_called()); |
| 1717 EXPECT_TRUE(layer->append_quads_called()); | 1717 EXPECT_TRUE(layer->append_quads_called()); |
| 1718 EXPECT_TRUE(layer->did_draw_called()); | 1718 EXPECT_TRUE(layer->did_draw_called()); |
| 1719 } | 1719 } |
| 1720 | 1720 |
| 1721 host_impl_->SetViewportDamage(gfx::Rect(10, 10)); | 1721 host_impl_->SetViewportDamage(gfx::Rect(10, 10)); |
| 1722 | 1722 |
| 1723 { | 1723 { |
| 1724 LayerTreeHostImpl::FrameData frame; | 1724 LayerTreeHostImpl::FrameData frame; |
| 1725 | 1725 |
| 1726 layer->set_will_draw_returns_false(); | 1726 layer->set_will_draw_returns_false(); |
| 1727 layer->ClearDidDrawCheck(); | 1727 layer->ClearDidDrawCheck(); |
| 1728 | 1728 |
| 1729 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame)); | 1729 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame)); |
| 1730 host_impl_->DrawLayers(&frame, gfx::FrameTime::Now()); | 1730 host_impl_->DrawLayers(&frame); |
| 1731 host_impl_->DidDrawAllLayers(frame); | 1731 host_impl_->DidDrawAllLayers(frame); |
| 1732 | 1732 |
| 1733 EXPECT_TRUE(layer->will_draw_called()); | 1733 EXPECT_TRUE(layer->will_draw_called()); |
| 1734 EXPECT_FALSE(layer->append_quads_called()); | 1734 EXPECT_FALSE(layer->append_quads_called()); |
| 1735 EXPECT_FALSE(layer->did_draw_called()); | 1735 EXPECT_FALSE(layer->did_draw_called()); |
| 1736 } | 1736 } |
| 1737 } | 1737 } |
| 1738 | 1738 |
| 1739 TEST_F(LayerTreeHostImplTest, DidDrawNotCalledOnHiddenLayer) { | 1739 TEST_F(LayerTreeHostImplTest, DidDrawNotCalledOnHiddenLayer) { |
| 1740 // The root layer is always drawn, so run this test on a child layer that | 1740 // The root layer is always drawn, so run this test on a child layer that |
| (...skipping 11 matching lines...) Expand all Loading... |
| 1752 layer->SetPosition(gfx::PointF(100.f, 100.f)); | 1752 layer->SetPosition(gfx::PointF(100.f, 100.f)); |
| 1753 layer->SetBounds(gfx::Size(10, 10)); | 1753 layer->SetBounds(gfx::Size(10, 10)); |
| 1754 layer->SetContentBounds(gfx::Size(10, 10)); | 1754 layer->SetContentBounds(gfx::Size(10, 10)); |
| 1755 | 1755 |
| 1756 LayerTreeHostImpl::FrameData frame; | 1756 LayerTreeHostImpl::FrameData frame; |
| 1757 | 1757 |
| 1758 EXPECT_FALSE(layer->will_draw_called()); | 1758 EXPECT_FALSE(layer->will_draw_called()); |
| 1759 EXPECT_FALSE(layer->did_draw_called()); | 1759 EXPECT_FALSE(layer->did_draw_called()); |
| 1760 | 1760 |
| 1761 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame)); | 1761 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame)); |
| 1762 host_impl_->DrawLayers(&frame, gfx::FrameTime::Now()); | 1762 host_impl_->DrawLayers(&frame); |
| 1763 host_impl_->DidDrawAllLayers(frame); | 1763 host_impl_->DidDrawAllLayers(frame); |
| 1764 | 1764 |
| 1765 EXPECT_FALSE(layer->will_draw_called()); | 1765 EXPECT_FALSE(layer->will_draw_called()); |
| 1766 EXPECT_FALSE(layer->did_draw_called()); | 1766 EXPECT_FALSE(layer->did_draw_called()); |
| 1767 | 1767 |
| 1768 EXPECT_TRUE(layer->visible_content_rect().IsEmpty()); | 1768 EXPECT_TRUE(layer->visible_content_rect().IsEmpty()); |
| 1769 | 1769 |
| 1770 // Ensure visible_content_rect for layer is not empty | 1770 // Ensure visible_content_rect for layer is not empty |
| 1771 layer->SetPosition(gfx::PointF()); | 1771 layer->SetPosition(gfx::PointF()); |
| 1772 | 1772 |
| 1773 EXPECT_FALSE(layer->will_draw_called()); | 1773 EXPECT_FALSE(layer->will_draw_called()); |
| 1774 EXPECT_FALSE(layer->did_draw_called()); | 1774 EXPECT_FALSE(layer->did_draw_called()); |
| 1775 | 1775 |
| 1776 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame)); | 1776 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame)); |
| 1777 host_impl_->DrawLayers(&frame, gfx::FrameTime::Now()); | 1777 host_impl_->DrawLayers(&frame); |
| 1778 host_impl_->DidDrawAllLayers(frame); | 1778 host_impl_->DidDrawAllLayers(frame); |
| 1779 | 1779 |
| 1780 EXPECT_TRUE(layer->will_draw_called()); | 1780 EXPECT_TRUE(layer->will_draw_called()); |
| 1781 EXPECT_TRUE(layer->did_draw_called()); | 1781 EXPECT_TRUE(layer->did_draw_called()); |
| 1782 | 1782 |
| 1783 EXPECT_FALSE(layer->visible_content_rect().IsEmpty()); | 1783 EXPECT_FALSE(layer->visible_content_rect().IsEmpty()); |
| 1784 } | 1784 } |
| 1785 | 1785 |
| 1786 TEST_F(LayerTreeHostImplTest, WillDrawNotCalledOnOccludedLayer) { | 1786 TEST_F(LayerTreeHostImplTest, WillDrawNotCalledOnOccludedLayer) { |
| 1787 gfx::Size big_size(1000, 1000); | 1787 gfx::Size big_size(1000, 1000); |
| (...skipping 18 matching lines...) Expand all Loading... |
| 1806 top_layer->SetContentsOpaque(true); | 1806 top_layer->SetContentsOpaque(true); |
| 1807 | 1807 |
| 1808 LayerTreeHostImpl::FrameData frame; | 1808 LayerTreeHostImpl::FrameData frame; |
| 1809 | 1809 |
| 1810 EXPECT_FALSE(occluded_layer->will_draw_called()); | 1810 EXPECT_FALSE(occluded_layer->will_draw_called()); |
| 1811 EXPECT_FALSE(occluded_layer->did_draw_called()); | 1811 EXPECT_FALSE(occluded_layer->did_draw_called()); |
| 1812 EXPECT_FALSE(top_layer->will_draw_called()); | 1812 EXPECT_FALSE(top_layer->will_draw_called()); |
| 1813 EXPECT_FALSE(top_layer->did_draw_called()); | 1813 EXPECT_FALSE(top_layer->did_draw_called()); |
| 1814 | 1814 |
| 1815 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame)); | 1815 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame)); |
| 1816 host_impl_->DrawLayers(&frame, gfx::FrameTime::Now()); | 1816 host_impl_->DrawLayers(&frame); |
| 1817 host_impl_->DidDrawAllLayers(frame); | 1817 host_impl_->DidDrawAllLayers(frame); |
| 1818 | 1818 |
| 1819 EXPECT_FALSE(occluded_layer->will_draw_called()); | 1819 EXPECT_FALSE(occluded_layer->will_draw_called()); |
| 1820 EXPECT_FALSE(occluded_layer->did_draw_called()); | 1820 EXPECT_FALSE(occluded_layer->did_draw_called()); |
| 1821 EXPECT_TRUE(top_layer->will_draw_called()); | 1821 EXPECT_TRUE(top_layer->will_draw_called()); |
| 1822 EXPECT_TRUE(top_layer->did_draw_called()); | 1822 EXPECT_TRUE(top_layer->did_draw_called()); |
| 1823 } | 1823 } |
| 1824 | 1824 |
| 1825 TEST_F(LayerTreeHostImplTest, DidDrawCalledOnAllLayers) { | 1825 TEST_F(LayerTreeHostImplTest, DidDrawCalledOnAllLayers) { |
| 1826 host_impl_->active_tree()->SetRootLayer( | 1826 host_impl_->active_tree()->SetRootLayer( |
| (...skipping 11 matching lines...) Expand all Loading... |
| 1838 | 1838 |
| 1839 layer1->SetOpacity(0.3f); | 1839 layer1->SetOpacity(0.3f); |
| 1840 layer1->SetShouldFlattenTransform(true); | 1840 layer1->SetShouldFlattenTransform(true); |
| 1841 | 1841 |
| 1842 EXPECT_FALSE(root->did_draw_called()); | 1842 EXPECT_FALSE(root->did_draw_called()); |
| 1843 EXPECT_FALSE(layer1->did_draw_called()); | 1843 EXPECT_FALSE(layer1->did_draw_called()); |
| 1844 EXPECT_FALSE(layer2->did_draw_called()); | 1844 EXPECT_FALSE(layer2->did_draw_called()); |
| 1845 | 1845 |
| 1846 LayerTreeHostImpl::FrameData frame; | 1846 LayerTreeHostImpl::FrameData frame; |
| 1847 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame)); | 1847 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame)); |
| 1848 host_impl_->DrawLayers(&frame, gfx::FrameTime::Now()); | 1848 host_impl_->DrawLayers(&frame); |
| 1849 host_impl_->DidDrawAllLayers(frame); | 1849 host_impl_->DidDrawAllLayers(frame); |
| 1850 | 1850 |
| 1851 EXPECT_TRUE(root->did_draw_called()); | 1851 EXPECT_TRUE(root->did_draw_called()); |
| 1852 EXPECT_TRUE(layer1->did_draw_called()); | 1852 EXPECT_TRUE(layer1->did_draw_called()); |
| 1853 EXPECT_TRUE(layer2->did_draw_called()); | 1853 EXPECT_TRUE(layer2->did_draw_called()); |
| 1854 | 1854 |
| 1855 EXPECT_NE(root->render_surface(), layer1->render_surface()); | 1855 EXPECT_NE(root->render_surface(), layer1->render_surface()); |
| 1856 EXPECT_TRUE(!!layer1->render_surface()); | 1856 EXPECT_TRUE(!!layer1->render_surface()); |
| 1857 } | 1857 } |
| 1858 | 1858 |
| (...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1914 MissingTextureAnimatingLayer::Create(host_impl_->active_tree(), | 1914 MissingTextureAnimatingLayer::Create(host_impl_->active_tree(), |
| 1915 2, | 1915 2, |
| 1916 tile_missing, | 1916 tile_missing, |
| 1917 had_incomplete_tile, | 1917 had_incomplete_tile, |
| 1918 is_animating, | 1918 is_animating, |
| 1919 host_impl_->resource_provider())); | 1919 host_impl_->resource_provider())); |
| 1920 | 1920 |
| 1921 LayerTreeHostImpl::FrameData frame; | 1921 LayerTreeHostImpl::FrameData frame; |
| 1922 | 1922 |
| 1923 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame)); | 1923 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame)); |
| 1924 host_impl_->DrawLayers(&frame, gfx::FrameTime::Now()); | 1924 host_impl_->DrawLayers(&frame); |
| 1925 host_impl_->DidDrawAllLayers(frame); | 1925 host_impl_->DidDrawAllLayers(frame); |
| 1926 } | 1926 } |
| 1927 | 1927 |
| 1928 TEST_F(LayerTreeHostImplTest, PrepareToDrawSucceedsWithAnimatedLayer) { | 1928 TEST_F(LayerTreeHostImplTest, PrepareToDrawSucceedsWithAnimatedLayer) { |
| 1929 host_impl_->active_tree()->SetRootLayer( | 1929 host_impl_->active_tree()->SetRootLayer( |
| 1930 DidDrawCheckLayer::Create(host_impl_->active_tree(), 1)); | 1930 DidDrawCheckLayer::Create(host_impl_->active_tree(), 1)); |
| 1931 DidDrawCheckLayer* root = | 1931 DidDrawCheckLayer* root = |
| 1932 static_cast<DidDrawCheckLayer*>(host_impl_->active_tree()->root_layer()); | 1932 static_cast<DidDrawCheckLayer*>(host_impl_->active_tree()->root_layer()); |
| 1933 bool tile_missing = false; | 1933 bool tile_missing = false; |
| 1934 bool had_incomplete_tile = false; | 1934 bool had_incomplete_tile = false; |
| 1935 bool is_animating = true; | 1935 bool is_animating = true; |
| 1936 root->AddChild( | 1936 root->AddChild( |
| 1937 MissingTextureAnimatingLayer::Create(host_impl_->active_tree(), | 1937 MissingTextureAnimatingLayer::Create(host_impl_->active_tree(), |
| 1938 2, | 1938 2, |
| 1939 tile_missing, | 1939 tile_missing, |
| 1940 had_incomplete_tile, | 1940 had_incomplete_tile, |
| 1941 is_animating, | 1941 is_animating, |
| 1942 host_impl_->resource_provider())); | 1942 host_impl_->resource_provider())); |
| 1943 | 1943 |
| 1944 LayerTreeHostImpl::FrameData frame; | 1944 LayerTreeHostImpl::FrameData frame; |
| 1945 | 1945 |
| 1946 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame)); | 1946 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame)); |
| 1947 host_impl_->DrawLayers(&frame, gfx::FrameTime::Now()); | 1947 host_impl_->DrawLayers(&frame); |
| 1948 host_impl_->DidDrawAllLayers(frame); | 1948 host_impl_->DidDrawAllLayers(frame); |
| 1949 } | 1949 } |
| 1950 | 1950 |
| 1951 TEST_F(LayerTreeHostImplTest, PrepareToDrawSucceedsWithMissingTiles) { | 1951 TEST_F(LayerTreeHostImplTest, PrepareToDrawSucceedsWithMissingTiles) { |
| 1952 host_impl_->active_tree()->SetRootLayer( | 1952 host_impl_->active_tree()->SetRootLayer( |
| 1953 DidDrawCheckLayer::Create(host_impl_->active_tree(), 3)); | 1953 DidDrawCheckLayer::Create(host_impl_->active_tree(), 3)); |
| 1954 DidDrawCheckLayer* root = | 1954 DidDrawCheckLayer* root = |
| 1955 static_cast<DidDrawCheckLayer*>(host_impl_->active_tree()->root_layer()); | 1955 static_cast<DidDrawCheckLayer*>(host_impl_->active_tree()->root_layer()); |
| 1956 | 1956 |
| 1957 bool tile_missing = true; | 1957 bool tile_missing = true; |
| 1958 bool had_incomplete_tile = false; | 1958 bool had_incomplete_tile = false; |
| 1959 bool is_animating = false; | 1959 bool is_animating = false; |
| 1960 root->AddChild( | 1960 root->AddChild( |
| 1961 MissingTextureAnimatingLayer::Create(host_impl_->active_tree(), | 1961 MissingTextureAnimatingLayer::Create(host_impl_->active_tree(), |
| 1962 4, | 1962 4, |
| 1963 tile_missing, | 1963 tile_missing, |
| 1964 had_incomplete_tile, | 1964 had_incomplete_tile, |
| 1965 is_animating, | 1965 is_animating, |
| 1966 host_impl_->resource_provider())); | 1966 host_impl_->resource_provider())); |
| 1967 LayerTreeHostImpl::FrameData frame; | 1967 LayerTreeHostImpl::FrameData frame; |
| 1968 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame)); | 1968 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame)); |
| 1969 host_impl_->DrawLayers(&frame, gfx::FrameTime::Now()); | 1969 host_impl_->DrawLayers(&frame); |
| 1970 host_impl_->DidDrawAllLayers(frame); | 1970 host_impl_->DidDrawAllLayers(frame); |
| 1971 } | 1971 } |
| 1972 | 1972 |
| 1973 TEST_F(LayerTreeHostImplTest, PrepareToDrawSucceedsWithIncompleteTile) { | 1973 TEST_F(LayerTreeHostImplTest, PrepareToDrawSucceedsWithIncompleteTile) { |
| 1974 host_impl_->active_tree()->SetRootLayer( | 1974 host_impl_->active_tree()->SetRootLayer( |
| 1975 DidDrawCheckLayer::Create(host_impl_->active_tree(), 3)); | 1975 DidDrawCheckLayer::Create(host_impl_->active_tree(), 3)); |
| 1976 DidDrawCheckLayer* root = | 1976 DidDrawCheckLayer* root = |
| 1977 static_cast<DidDrawCheckLayer*>(host_impl_->active_tree()->root_layer()); | 1977 static_cast<DidDrawCheckLayer*>(host_impl_->active_tree()->root_layer()); |
| 1978 | 1978 |
| 1979 bool tile_missing = false; | 1979 bool tile_missing = false; |
| 1980 bool had_incomplete_tile = true; | 1980 bool had_incomplete_tile = true; |
| 1981 bool is_animating = false; | 1981 bool is_animating = false; |
| 1982 root->AddChild( | 1982 root->AddChild( |
| 1983 MissingTextureAnimatingLayer::Create(host_impl_->active_tree(), | 1983 MissingTextureAnimatingLayer::Create(host_impl_->active_tree(), |
| 1984 4, | 1984 4, |
| 1985 tile_missing, | 1985 tile_missing, |
| 1986 had_incomplete_tile, | 1986 had_incomplete_tile, |
| 1987 is_animating, | 1987 is_animating, |
| 1988 host_impl_->resource_provider())); | 1988 host_impl_->resource_provider())); |
| 1989 LayerTreeHostImpl::FrameData frame; | 1989 LayerTreeHostImpl::FrameData frame; |
| 1990 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame)); | 1990 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame)); |
| 1991 host_impl_->DrawLayers(&frame, gfx::FrameTime::Now()); | 1991 host_impl_->DrawLayers(&frame); |
| 1992 host_impl_->DidDrawAllLayers(frame); | 1992 host_impl_->DidDrawAllLayers(frame); |
| 1993 } | 1993 } |
| 1994 | 1994 |
| 1995 TEST_F(LayerTreeHostImplTest, | 1995 TEST_F(LayerTreeHostImplTest, |
| 1996 PrepareToDrawFailsWithAnimationAndMissingTilesUsesCheckerboard) { | 1996 PrepareToDrawFailsWithAnimationAndMissingTilesUsesCheckerboard) { |
| 1997 host_impl_->active_tree()->SetRootLayer( | 1997 host_impl_->active_tree()->SetRootLayer( |
| 1998 DidDrawCheckLayer::Create(host_impl_->active_tree(), 5)); | 1998 DidDrawCheckLayer::Create(host_impl_->active_tree(), 5)); |
| 1999 DidDrawCheckLayer* root = | 1999 DidDrawCheckLayer* root = |
| 2000 static_cast<DidDrawCheckLayer*>(host_impl_->active_tree()->root_layer()); | 2000 static_cast<DidDrawCheckLayer*>(host_impl_->active_tree()->root_layer()); |
| 2001 bool tile_missing = true; | 2001 bool tile_missing = true; |
| 2002 bool had_incomplete_tile = false; | 2002 bool had_incomplete_tile = false; |
| 2003 bool is_animating = true; | 2003 bool is_animating = true; |
| 2004 root->AddChild( | 2004 root->AddChild( |
| 2005 MissingTextureAnimatingLayer::Create(host_impl_->active_tree(), | 2005 MissingTextureAnimatingLayer::Create(host_impl_->active_tree(), |
| 2006 6, | 2006 6, |
| 2007 tile_missing, | 2007 tile_missing, |
| 2008 had_incomplete_tile, | 2008 had_incomplete_tile, |
| 2009 is_animating, | 2009 is_animating, |
| 2010 host_impl_->resource_provider())); | 2010 host_impl_->resource_provider())); |
| 2011 LayerTreeHostImpl::FrameData frame; | 2011 LayerTreeHostImpl::FrameData frame; |
| 2012 EXPECT_EQ(DRAW_ABORTED_CHECKERBOARD_ANIMATIONS, | 2012 EXPECT_EQ(DRAW_ABORTED_CHECKERBOARD_ANIMATIONS, |
| 2013 host_impl_->PrepareToDraw(&frame)); | 2013 host_impl_->PrepareToDraw(&frame)); |
| 2014 host_impl_->DrawLayers(&frame, gfx::FrameTime::Now()); | 2014 host_impl_->DrawLayers(&frame); |
| 2015 host_impl_->DidDrawAllLayers(frame); | 2015 host_impl_->DidDrawAllLayers(frame); |
| 2016 } | 2016 } |
| 2017 | 2017 |
| 2018 TEST_F(LayerTreeHostImplTest, | 2018 TEST_F(LayerTreeHostImplTest, |
| 2019 PrepareToDrawSucceedsWithAnimationAndIncompleteTiles) { | 2019 PrepareToDrawSucceedsWithAnimationAndIncompleteTiles) { |
| 2020 host_impl_->active_tree()->SetRootLayer( | 2020 host_impl_->active_tree()->SetRootLayer( |
| 2021 DidDrawCheckLayer::Create(host_impl_->active_tree(), 5)); | 2021 DidDrawCheckLayer::Create(host_impl_->active_tree(), 5)); |
| 2022 DidDrawCheckLayer* root = | 2022 DidDrawCheckLayer* root = |
| 2023 static_cast<DidDrawCheckLayer*>(host_impl_->active_tree()->root_layer()); | 2023 static_cast<DidDrawCheckLayer*>(host_impl_->active_tree()->root_layer()); |
| 2024 bool tile_missing = false; | 2024 bool tile_missing = false; |
| 2025 bool had_incomplete_tile = true; | 2025 bool had_incomplete_tile = true; |
| 2026 bool is_animating = true; | 2026 bool is_animating = true; |
| 2027 root->AddChild( | 2027 root->AddChild( |
| 2028 MissingTextureAnimatingLayer::Create(host_impl_->active_tree(), | 2028 MissingTextureAnimatingLayer::Create(host_impl_->active_tree(), |
| 2029 6, | 2029 6, |
| 2030 tile_missing, | 2030 tile_missing, |
| 2031 had_incomplete_tile, | 2031 had_incomplete_tile, |
| 2032 is_animating, | 2032 is_animating, |
| 2033 host_impl_->resource_provider())); | 2033 host_impl_->resource_provider())); |
| 2034 LayerTreeHostImpl::FrameData frame; | 2034 LayerTreeHostImpl::FrameData frame; |
| 2035 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame)); | 2035 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame)); |
| 2036 host_impl_->DrawLayers(&frame, gfx::FrameTime::Now()); | 2036 host_impl_->DrawLayers(&frame); |
| 2037 host_impl_->DidDrawAllLayers(frame); | 2037 host_impl_->DidDrawAllLayers(frame); |
| 2038 } | 2038 } |
| 2039 | 2039 |
| 2040 TEST_F(LayerTreeHostImplTest, PrepareToDrawSucceedsWhenHighResRequired) { | 2040 TEST_F(LayerTreeHostImplTest, PrepareToDrawSucceedsWhenHighResRequired) { |
| 2041 host_impl_->active_tree()->SetRootLayer( | 2041 host_impl_->active_tree()->SetRootLayer( |
| 2042 DidDrawCheckLayer::Create(host_impl_->active_tree(), 7)); | 2042 DidDrawCheckLayer::Create(host_impl_->active_tree(), 7)); |
| 2043 DidDrawCheckLayer* root = | 2043 DidDrawCheckLayer* root = |
| 2044 static_cast<DidDrawCheckLayer*>(host_impl_->active_tree()->root_layer()); | 2044 static_cast<DidDrawCheckLayer*>(host_impl_->active_tree()->root_layer()); |
| 2045 bool tile_missing = false; | 2045 bool tile_missing = false; |
| 2046 bool had_incomplete_tile = false; | 2046 bool had_incomplete_tile = false; |
| 2047 bool is_animating = false; | 2047 bool is_animating = false; |
| 2048 root->AddChild( | 2048 root->AddChild( |
| 2049 MissingTextureAnimatingLayer::Create(host_impl_->active_tree(), | 2049 MissingTextureAnimatingLayer::Create(host_impl_->active_tree(), |
| 2050 8, | 2050 8, |
| 2051 tile_missing, | 2051 tile_missing, |
| 2052 had_incomplete_tile, | 2052 had_incomplete_tile, |
| 2053 is_animating, | 2053 is_animating, |
| 2054 host_impl_->resource_provider())); | 2054 host_impl_->resource_provider())); |
| 2055 host_impl_->active_tree()->SetRequiresHighResToDraw(); | 2055 host_impl_->active_tree()->SetRequiresHighResToDraw(); |
| 2056 LayerTreeHostImpl::FrameData frame; | 2056 LayerTreeHostImpl::FrameData frame; |
| 2057 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame)); | 2057 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame)); |
| 2058 host_impl_->DrawLayers(&frame, gfx::FrameTime::Now()); | 2058 host_impl_->DrawLayers(&frame); |
| 2059 host_impl_->DidDrawAllLayers(frame); | 2059 host_impl_->DidDrawAllLayers(frame); |
| 2060 } | 2060 } |
| 2061 | 2061 |
| 2062 TEST_F(LayerTreeHostImplTest, | 2062 TEST_F(LayerTreeHostImplTest, |
| 2063 PrepareToDrawFailsWhenHighResRequiredAndIncompleteTiles) { | 2063 PrepareToDrawFailsWhenHighResRequiredAndIncompleteTiles) { |
| 2064 host_impl_->active_tree()->SetRootLayer( | 2064 host_impl_->active_tree()->SetRootLayer( |
| 2065 DidDrawCheckLayer::Create(host_impl_->active_tree(), 7)); | 2065 DidDrawCheckLayer::Create(host_impl_->active_tree(), 7)); |
| 2066 DidDrawCheckLayer* root = | 2066 DidDrawCheckLayer* root = |
| 2067 static_cast<DidDrawCheckLayer*>(host_impl_->active_tree()->root_layer()); | 2067 static_cast<DidDrawCheckLayer*>(host_impl_->active_tree()->root_layer()); |
| 2068 bool tile_missing = false; | 2068 bool tile_missing = false; |
| 2069 bool had_incomplete_tile = true; | 2069 bool had_incomplete_tile = true; |
| 2070 bool is_animating = false; | 2070 bool is_animating = false; |
| 2071 root->AddChild( | 2071 root->AddChild( |
| 2072 MissingTextureAnimatingLayer::Create(host_impl_->active_tree(), | 2072 MissingTextureAnimatingLayer::Create(host_impl_->active_tree(), |
| 2073 8, | 2073 8, |
| 2074 tile_missing, | 2074 tile_missing, |
| 2075 had_incomplete_tile, | 2075 had_incomplete_tile, |
| 2076 is_animating, | 2076 is_animating, |
| 2077 host_impl_->resource_provider())); | 2077 host_impl_->resource_provider())); |
| 2078 host_impl_->active_tree()->SetRequiresHighResToDraw(); | 2078 host_impl_->active_tree()->SetRequiresHighResToDraw(); |
| 2079 LayerTreeHostImpl::FrameData frame; | 2079 LayerTreeHostImpl::FrameData frame; |
| 2080 EXPECT_EQ(DRAW_ABORTED_MISSING_HIGH_RES_CONTENT, | 2080 EXPECT_EQ(DRAW_ABORTED_MISSING_HIGH_RES_CONTENT, |
| 2081 host_impl_->PrepareToDraw(&frame)); | 2081 host_impl_->PrepareToDraw(&frame)); |
| 2082 host_impl_->DrawLayers(&frame, gfx::FrameTime::Now()); | 2082 host_impl_->DrawLayers(&frame); |
| 2083 host_impl_->DidDrawAllLayers(frame); | 2083 host_impl_->DidDrawAllLayers(frame); |
| 2084 } | 2084 } |
| 2085 | 2085 |
| 2086 TEST_F(LayerTreeHostImplTest, | 2086 TEST_F(LayerTreeHostImplTest, |
| 2087 PrepareToDrawSucceedsWhenHighResRequiredAndMissingTile) { | 2087 PrepareToDrawSucceedsWhenHighResRequiredAndMissingTile) { |
| 2088 host_impl_->active_tree()->SetRootLayer( | 2088 host_impl_->active_tree()->SetRootLayer( |
| 2089 DidDrawCheckLayer::Create(host_impl_->active_tree(), 7)); | 2089 DidDrawCheckLayer::Create(host_impl_->active_tree(), 7)); |
| 2090 DidDrawCheckLayer* root = | 2090 DidDrawCheckLayer* root = |
| 2091 static_cast<DidDrawCheckLayer*>(host_impl_->active_tree()->root_layer()); | 2091 static_cast<DidDrawCheckLayer*>(host_impl_->active_tree()->root_layer()); |
| 2092 bool tile_missing = true; | 2092 bool tile_missing = true; |
| 2093 bool had_incomplete_tile = false; | 2093 bool had_incomplete_tile = false; |
| 2094 bool is_animating = false; | 2094 bool is_animating = false; |
| 2095 root->AddChild( | 2095 root->AddChild( |
| 2096 MissingTextureAnimatingLayer::Create(host_impl_->active_tree(), | 2096 MissingTextureAnimatingLayer::Create(host_impl_->active_tree(), |
| 2097 8, | 2097 8, |
| 2098 tile_missing, | 2098 tile_missing, |
| 2099 had_incomplete_tile, | 2099 had_incomplete_tile, |
| 2100 is_animating, | 2100 is_animating, |
| 2101 host_impl_->resource_provider())); | 2101 host_impl_->resource_provider())); |
| 2102 host_impl_->active_tree()->SetRequiresHighResToDraw(); | 2102 host_impl_->active_tree()->SetRequiresHighResToDraw(); |
| 2103 LayerTreeHostImpl::FrameData frame; | 2103 LayerTreeHostImpl::FrameData frame; |
| 2104 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame)); | 2104 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame)); |
| 2105 host_impl_->DrawLayers(&frame, gfx::FrameTime::Now()); | 2105 host_impl_->DrawLayers(&frame); |
| 2106 host_impl_->DidDrawAllLayers(frame); | 2106 host_impl_->DidDrawAllLayers(frame); |
| 2107 } | 2107 } |
| 2108 | 2108 |
| 2109 TEST_F(LayerTreeHostImplTest, ScrollRootIgnored) { | 2109 TEST_F(LayerTreeHostImplTest, ScrollRootIgnored) { |
| 2110 scoped_ptr<LayerImpl> root = LayerImpl::Create(host_impl_->active_tree(), 1); | 2110 scoped_ptr<LayerImpl> root = LayerImpl::Create(host_impl_->active_tree(), 1); |
| 2111 root->SetScrollClipLayer(Layer::INVALID_ID); | 2111 root->SetScrollClipLayer(Layer::INVALID_ID); |
| 2112 host_impl_->active_tree()->SetRootLayer(root.Pass()); | 2112 host_impl_->active_tree()->SetRootLayer(root.Pass()); |
| 2113 DrawFrame(); | 2113 DrawFrame(); |
| 2114 | 2114 |
| 2115 // Scroll event is ignored because layer is not scrollable. | 2115 // Scroll event is ignored because layer is not scrollable. |
| (...skipping 428 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2544 EXPECT_EQ(1.f, scroll->contents_scale_y()); | 2544 EXPECT_EQ(1.f, scroll->contents_scale_y()); |
| 2545 EXPECT_EQ(1.f, child->contents_scale_x()); | 2545 EXPECT_EQ(1.f, child->contents_scale_x()); |
| 2546 EXPECT_EQ(1.f, child->contents_scale_y()); | 2546 EXPECT_EQ(1.f, child->contents_scale_y()); |
| 2547 EXPECT_EQ(1.f, grand_child->contents_scale_x()); | 2547 EXPECT_EQ(1.f, grand_child->contents_scale_x()); |
| 2548 EXPECT_EQ(1.f, grand_child->contents_scale_y()); | 2548 EXPECT_EQ(1.f, grand_child->contents_scale_y()); |
| 2549 | 2549 |
| 2550 // Make sure all the layers are drawn with the page scale delta applied, i.e., | 2550 // Make sure all the layers are drawn with the page scale delta applied, i.e., |
| 2551 // the page scale delta on the root layer is applied hierarchically. | 2551 // the page scale delta on the root layer is applied hierarchically. |
| 2552 LayerTreeHostImpl::FrameData frame; | 2552 LayerTreeHostImpl::FrameData frame; |
| 2553 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame)); | 2553 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame)); |
| 2554 host_impl_->DrawLayers(&frame, gfx::FrameTime::Now()); | 2554 host_impl_->DrawLayers(&frame); |
| 2555 host_impl_->DidDrawAllLayers(frame); | 2555 host_impl_->DidDrawAllLayers(frame); |
| 2556 | 2556 |
| 2557 EXPECT_EQ(1.f, root->draw_transform().matrix().getDouble(0, 0)); | 2557 EXPECT_EQ(1.f, root->draw_transform().matrix().getDouble(0, 0)); |
| 2558 EXPECT_EQ(1.f, root->draw_transform().matrix().getDouble(1, 1)); | 2558 EXPECT_EQ(1.f, root->draw_transform().matrix().getDouble(1, 1)); |
| 2559 EXPECT_EQ(new_page_scale, scroll->draw_transform().matrix().getDouble(0, 0)); | 2559 EXPECT_EQ(new_page_scale, scroll->draw_transform().matrix().getDouble(0, 0)); |
| 2560 EXPECT_EQ(new_page_scale, scroll->draw_transform().matrix().getDouble(1, 1)); | 2560 EXPECT_EQ(new_page_scale, scroll->draw_transform().matrix().getDouble(1, 1)); |
| 2561 EXPECT_EQ(new_page_scale, child->draw_transform().matrix().getDouble(0, 0)); | 2561 EXPECT_EQ(new_page_scale, child->draw_transform().matrix().getDouble(0, 0)); |
| 2562 EXPECT_EQ(new_page_scale, child->draw_transform().matrix().getDouble(1, 1)); | 2562 EXPECT_EQ(new_page_scale, child->draw_transform().matrix().getDouble(1, 1)); |
| 2563 EXPECT_EQ(new_page_scale, | 2563 EXPECT_EQ(new_page_scale, |
| 2564 grand_child->draw_transform().matrix().getDouble(0, 0)); | 2564 grand_child->draw_transform().matrix().getDouble(0, 0)); |
| (...skipping 1010 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3575 static_cast<BlendStateCheckLayer*>(root->children()[0]); | 3575 static_cast<BlendStateCheckLayer*>(root->children()[0]); |
| 3576 layer1->SetPosition(gfx::PointF(2.f, 2.f)); | 3576 layer1->SetPosition(gfx::PointF(2.f, 2.f)); |
| 3577 | 3577 |
| 3578 LayerTreeHostImpl::FrameData frame; | 3578 LayerTreeHostImpl::FrameData frame; |
| 3579 | 3579 |
| 3580 // Opaque layer, drawn without blending. | 3580 // Opaque layer, drawn without blending. |
| 3581 layer1->SetContentsOpaque(true); | 3581 layer1->SetContentsOpaque(true); |
| 3582 layer1->SetExpectation(false, false); | 3582 layer1->SetExpectation(false, false); |
| 3583 layer1->SetUpdateRect(gfx::RectF(layer1->content_bounds())); | 3583 layer1->SetUpdateRect(gfx::RectF(layer1->content_bounds())); |
| 3584 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame)); | 3584 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame)); |
| 3585 host_impl_->DrawLayers(&frame, gfx::FrameTime::Now()); | 3585 host_impl_->DrawLayers(&frame); |
| 3586 EXPECT_TRUE(layer1->quads_appended()); | 3586 EXPECT_TRUE(layer1->quads_appended()); |
| 3587 host_impl_->DidDrawAllLayers(frame); | 3587 host_impl_->DidDrawAllLayers(frame); |
| 3588 | 3588 |
| 3589 // Layer with translucent content and painting, so drawn with blending. | 3589 // Layer with translucent content and painting, so drawn with blending. |
| 3590 layer1->SetContentsOpaque(false); | 3590 layer1->SetContentsOpaque(false); |
| 3591 layer1->SetExpectation(true, false); | 3591 layer1->SetExpectation(true, false); |
| 3592 layer1->SetUpdateRect(gfx::RectF(layer1->content_bounds())); | 3592 layer1->SetUpdateRect(gfx::RectF(layer1->content_bounds())); |
| 3593 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame)); | 3593 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame)); |
| 3594 host_impl_->DrawLayers(&frame, gfx::FrameTime::Now()); | 3594 host_impl_->DrawLayers(&frame); |
| 3595 EXPECT_TRUE(layer1->quads_appended()); | 3595 EXPECT_TRUE(layer1->quads_appended()); |
| 3596 host_impl_->DidDrawAllLayers(frame); | 3596 host_impl_->DidDrawAllLayers(frame); |
| 3597 | 3597 |
| 3598 // Layer with translucent opacity, drawn with blending. | 3598 // Layer with translucent opacity, drawn with blending. |
| 3599 layer1->SetContentsOpaque(true); | 3599 layer1->SetContentsOpaque(true); |
| 3600 layer1->SetOpacity(0.5f); | 3600 layer1->SetOpacity(0.5f); |
| 3601 layer1->SetExpectation(true, false); | 3601 layer1->SetExpectation(true, false); |
| 3602 layer1->SetUpdateRect(gfx::RectF(layer1->content_bounds())); | 3602 layer1->SetUpdateRect(gfx::RectF(layer1->content_bounds())); |
| 3603 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame)); | 3603 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame)); |
| 3604 host_impl_->DrawLayers(&frame, gfx::FrameTime::Now()); | 3604 host_impl_->DrawLayers(&frame); |
| 3605 EXPECT_TRUE(layer1->quads_appended()); | 3605 EXPECT_TRUE(layer1->quads_appended()); |
| 3606 host_impl_->DidDrawAllLayers(frame); | 3606 host_impl_->DidDrawAllLayers(frame); |
| 3607 | 3607 |
| 3608 // Layer with translucent opacity and painting, drawn with blending. | 3608 // Layer with translucent opacity and painting, drawn with blending. |
| 3609 layer1->SetContentsOpaque(true); | 3609 layer1->SetContentsOpaque(true); |
| 3610 layer1->SetOpacity(0.5f); | 3610 layer1->SetOpacity(0.5f); |
| 3611 layer1->SetExpectation(true, false); | 3611 layer1->SetExpectation(true, false); |
| 3612 layer1->SetUpdateRect(gfx::RectF(layer1->content_bounds())); | 3612 layer1->SetUpdateRect(gfx::RectF(layer1->content_bounds())); |
| 3613 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame)); | 3613 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame)); |
| 3614 host_impl_->DrawLayers(&frame, gfx::FrameTime::Now()); | 3614 host_impl_->DrawLayers(&frame); |
| 3615 EXPECT_TRUE(layer1->quads_appended()); | 3615 EXPECT_TRUE(layer1->quads_appended()); |
| 3616 host_impl_->DidDrawAllLayers(frame); | 3616 host_impl_->DidDrawAllLayers(frame); |
| 3617 | 3617 |
| 3618 layer1->AddChild( | 3618 layer1->AddChild( |
| 3619 BlendStateCheckLayer::Create(host_impl_->active_tree(), | 3619 BlendStateCheckLayer::Create(host_impl_->active_tree(), |
| 3620 3, | 3620 3, |
| 3621 host_impl_->resource_provider())); | 3621 host_impl_->resource_provider())); |
| 3622 BlendStateCheckLayer* layer2 = | 3622 BlendStateCheckLayer* layer2 = |
| 3623 static_cast<BlendStateCheckLayer*>(layer1->children()[0]); | 3623 static_cast<BlendStateCheckLayer*>(layer1->children()[0]); |
| 3624 layer2->SetPosition(gfx::PointF(4.f, 4.f)); | 3624 layer2->SetPosition(gfx::PointF(4.f, 4.f)); |
| 3625 | 3625 |
| 3626 // 2 opaque layers, drawn without blending. | 3626 // 2 opaque layers, drawn without blending. |
| 3627 layer1->SetContentsOpaque(true); | 3627 layer1->SetContentsOpaque(true); |
| 3628 layer1->SetOpacity(1.f); | 3628 layer1->SetOpacity(1.f); |
| 3629 layer1->SetExpectation(false, false); | 3629 layer1->SetExpectation(false, false); |
| 3630 layer1->SetUpdateRect(gfx::RectF(layer1->content_bounds())); | 3630 layer1->SetUpdateRect(gfx::RectF(layer1->content_bounds())); |
| 3631 layer2->SetContentsOpaque(true); | 3631 layer2->SetContentsOpaque(true); |
| 3632 layer2->SetOpacity(1.f); | 3632 layer2->SetOpacity(1.f); |
| 3633 layer2->SetExpectation(false, false); | 3633 layer2->SetExpectation(false, false); |
| 3634 layer2->SetUpdateRect(gfx::RectF(layer1->content_bounds())); | 3634 layer2->SetUpdateRect(gfx::RectF(layer1->content_bounds())); |
| 3635 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame)); | 3635 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame)); |
| 3636 host_impl_->DrawLayers(&frame, gfx::FrameTime::Now()); | 3636 host_impl_->DrawLayers(&frame); |
| 3637 EXPECT_TRUE(layer1->quads_appended()); | 3637 EXPECT_TRUE(layer1->quads_appended()); |
| 3638 EXPECT_TRUE(layer2->quads_appended()); | 3638 EXPECT_TRUE(layer2->quads_appended()); |
| 3639 host_impl_->DidDrawAllLayers(frame); | 3639 host_impl_->DidDrawAllLayers(frame); |
| 3640 | 3640 |
| 3641 // Parent layer with translucent content, drawn with blending. | 3641 // Parent layer with translucent content, drawn with blending. |
| 3642 // Child layer with opaque content, drawn without blending. | 3642 // Child layer with opaque content, drawn without blending. |
| 3643 layer1->SetContentsOpaque(false); | 3643 layer1->SetContentsOpaque(false); |
| 3644 layer1->SetExpectation(true, false); | 3644 layer1->SetExpectation(true, false); |
| 3645 layer1->SetUpdateRect(gfx::RectF(layer1->content_bounds())); | 3645 layer1->SetUpdateRect(gfx::RectF(layer1->content_bounds())); |
| 3646 layer2->SetExpectation(false, false); | 3646 layer2->SetExpectation(false, false); |
| 3647 layer2->SetUpdateRect(gfx::RectF(layer1->content_bounds())); | 3647 layer2->SetUpdateRect(gfx::RectF(layer1->content_bounds())); |
| 3648 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame)); | 3648 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame)); |
| 3649 host_impl_->DrawLayers(&frame, gfx::FrameTime::Now()); | 3649 host_impl_->DrawLayers(&frame); |
| 3650 EXPECT_TRUE(layer1->quads_appended()); | 3650 EXPECT_TRUE(layer1->quads_appended()); |
| 3651 EXPECT_TRUE(layer2->quads_appended()); | 3651 EXPECT_TRUE(layer2->quads_appended()); |
| 3652 host_impl_->DidDrawAllLayers(frame); | 3652 host_impl_->DidDrawAllLayers(frame); |
| 3653 | 3653 |
| 3654 // Parent layer with translucent content but opaque painting, drawn without | 3654 // Parent layer with translucent content but opaque painting, drawn without |
| 3655 // blending. | 3655 // blending. |
| 3656 // Child layer with opaque content, drawn without blending. | 3656 // Child layer with opaque content, drawn without blending. |
| 3657 layer1->SetContentsOpaque(true); | 3657 layer1->SetContentsOpaque(true); |
| 3658 layer1->SetExpectation(false, false); | 3658 layer1->SetExpectation(false, false); |
| 3659 layer1->SetUpdateRect(gfx::RectF(layer1->content_bounds())); | 3659 layer1->SetUpdateRect(gfx::RectF(layer1->content_bounds())); |
| 3660 layer2->SetExpectation(false, false); | 3660 layer2->SetExpectation(false, false); |
| 3661 layer2->SetUpdateRect(gfx::RectF(layer1->content_bounds())); | 3661 layer2->SetUpdateRect(gfx::RectF(layer1->content_bounds())); |
| 3662 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame)); | 3662 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame)); |
| 3663 host_impl_->DrawLayers(&frame, gfx::FrameTime::Now()); | 3663 host_impl_->DrawLayers(&frame); |
| 3664 EXPECT_TRUE(layer1->quads_appended()); | 3664 EXPECT_TRUE(layer1->quads_appended()); |
| 3665 EXPECT_TRUE(layer2->quads_appended()); | 3665 EXPECT_TRUE(layer2->quads_appended()); |
| 3666 host_impl_->DidDrawAllLayers(frame); | 3666 host_impl_->DidDrawAllLayers(frame); |
| 3667 | 3667 |
| 3668 // Parent layer with translucent opacity and opaque content. Since it has a | 3668 // Parent layer with translucent opacity and opaque content. Since it has a |
| 3669 // drawing child, it's drawn to a render surface which carries the opacity, | 3669 // drawing child, it's drawn to a render surface which carries the opacity, |
| 3670 // so it's itself drawn without blending. | 3670 // so it's itself drawn without blending. |
| 3671 // Child layer with opaque content, drawn without blending (parent surface | 3671 // Child layer with opaque content, drawn without blending (parent surface |
| 3672 // carries the inherited opacity). | 3672 // carries the inherited opacity). |
| 3673 layer1->SetContentsOpaque(true); | 3673 layer1->SetContentsOpaque(true); |
| 3674 layer1->SetOpacity(0.5f); | 3674 layer1->SetOpacity(0.5f); |
| 3675 layer1->SetExpectation(false, true); | 3675 layer1->SetExpectation(false, true); |
| 3676 layer1->SetUpdateRect(gfx::RectF(layer1->content_bounds())); | 3676 layer1->SetUpdateRect(gfx::RectF(layer1->content_bounds())); |
| 3677 layer2->SetExpectation(false, false); | 3677 layer2->SetExpectation(false, false); |
| 3678 layer2->SetUpdateRect(gfx::RectF(layer1->content_bounds())); | 3678 layer2->SetUpdateRect(gfx::RectF(layer1->content_bounds())); |
| 3679 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame)); | 3679 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame)); |
| 3680 host_impl_->DrawLayers(&frame, gfx::FrameTime::Now()); | 3680 host_impl_->DrawLayers(&frame); |
| 3681 EXPECT_TRUE(layer1->quads_appended()); | 3681 EXPECT_TRUE(layer1->quads_appended()); |
| 3682 EXPECT_TRUE(layer2->quads_appended()); | 3682 EXPECT_TRUE(layer2->quads_appended()); |
| 3683 host_impl_->DidDrawAllLayers(frame); | 3683 host_impl_->DidDrawAllLayers(frame); |
| 3684 | 3684 |
| 3685 // Draw again, but with child non-opaque, to make sure | 3685 // Draw again, but with child non-opaque, to make sure |
| 3686 // layer1 not culled. | 3686 // layer1 not culled. |
| 3687 layer1->SetContentsOpaque(true); | 3687 layer1->SetContentsOpaque(true); |
| 3688 layer1->SetOpacity(1.f); | 3688 layer1->SetOpacity(1.f); |
| 3689 layer1->SetExpectation(false, false); | 3689 layer1->SetExpectation(false, false); |
| 3690 layer1->SetUpdateRect(gfx::RectF(layer1->content_bounds())); | 3690 layer1->SetUpdateRect(gfx::RectF(layer1->content_bounds())); |
| 3691 layer2->SetContentsOpaque(true); | 3691 layer2->SetContentsOpaque(true); |
| 3692 layer2->SetOpacity(0.5f); | 3692 layer2->SetOpacity(0.5f); |
| 3693 layer2->SetExpectation(true, false); | 3693 layer2->SetExpectation(true, false); |
| 3694 layer2->SetUpdateRect(gfx::RectF(layer1->content_bounds())); | 3694 layer2->SetUpdateRect(gfx::RectF(layer1->content_bounds())); |
| 3695 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame)); | 3695 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame)); |
| 3696 host_impl_->DrawLayers(&frame, gfx::FrameTime::Now()); | 3696 host_impl_->DrawLayers(&frame); |
| 3697 EXPECT_TRUE(layer1->quads_appended()); | 3697 EXPECT_TRUE(layer1->quads_appended()); |
| 3698 EXPECT_TRUE(layer2->quads_appended()); | 3698 EXPECT_TRUE(layer2->quads_appended()); |
| 3699 host_impl_->DidDrawAllLayers(frame); | 3699 host_impl_->DidDrawAllLayers(frame); |
| 3700 | 3700 |
| 3701 // A second way of making the child non-opaque. | 3701 // A second way of making the child non-opaque. |
| 3702 layer1->SetContentsOpaque(true); | 3702 layer1->SetContentsOpaque(true); |
| 3703 layer1->SetOpacity(1.f); | 3703 layer1->SetOpacity(1.f); |
| 3704 layer1->SetExpectation(false, false); | 3704 layer1->SetExpectation(false, false); |
| 3705 layer1->SetUpdateRect(gfx::RectF(layer1->content_bounds())); | 3705 layer1->SetUpdateRect(gfx::RectF(layer1->content_bounds())); |
| 3706 layer2->SetContentsOpaque(false); | 3706 layer2->SetContentsOpaque(false); |
| 3707 layer2->SetOpacity(1.f); | 3707 layer2->SetOpacity(1.f); |
| 3708 layer2->SetExpectation(true, false); | 3708 layer2->SetExpectation(true, false); |
| 3709 layer2->SetUpdateRect(gfx::RectF(layer1->content_bounds())); | 3709 layer2->SetUpdateRect(gfx::RectF(layer1->content_bounds())); |
| 3710 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame)); | 3710 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame)); |
| 3711 host_impl_->DrawLayers(&frame, gfx::FrameTime::Now()); | 3711 host_impl_->DrawLayers(&frame); |
| 3712 EXPECT_TRUE(layer1->quads_appended()); | 3712 EXPECT_TRUE(layer1->quads_appended()); |
| 3713 EXPECT_TRUE(layer2->quads_appended()); | 3713 EXPECT_TRUE(layer2->quads_appended()); |
| 3714 host_impl_->DidDrawAllLayers(frame); | 3714 host_impl_->DidDrawAllLayers(frame); |
| 3715 | 3715 |
| 3716 // And when the layer says its not opaque but is painted opaque, it is not | 3716 // And when the layer says its not opaque but is painted opaque, it is not |
| 3717 // blended. | 3717 // blended. |
| 3718 layer1->SetContentsOpaque(true); | 3718 layer1->SetContentsOpaque(true); |
| 3719 layer1->SetOpacity(1.f); | 3719 layer1->SetOpacity(1.f); |
| 3720 layer1->SetExpectation(false, false); | 3720 layer1->SetExpectation(false, false); |
| 3721 layer1->SetUpdateRect(gfx::RectF(layer1->content_bounds())); | 3721 layer1->SetUpdateRect(gfx::RectF(layer1->content_bounds())); |
| 3722 layer2->SetContentsOpaque(true); | 3722 layer2->SetContentsOpaque(true); |
| 3723 layer2->SetOpacity(1.f); | 3723 layer2->SetOpacity(1.f); |
| 3724 layer2->SetExpectation(false, false); | 3724 layer2->SetExpectation(false, false); |
| 3725 layer2->SetUpdateRect(gfx::RectF(layer1->content_bounds())); | 3725 layer2->SetUpdateRect(gfx::RectF(layer1->content_bounds())); |
| 3726 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame)); | 3726 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame)); |
| 3727 host_impl_->DrawLayers(&frame, gfx::FrameTime::Now()); | 3727 host_impl_->DrawLayers(&frame); |
| 3728 EXPECT_TRUE(layer1->quads_appended()); | 3728 EXPECT_TRUE(layer1->quads_appended()); |
| 3729 EXPECT_TRUE(layer2->quads_appended()); | 3729 EXPECT_TRUE(layer2->quads_appended()); |
| 3730 host_impl_->DidDrawAllLayers(frame); | 3730 host_impl_->DidDrawAllLayers(frame); |
| 3731 | 3731 |
| 3732 // Layer with partially opaque contents, drawn with blending. | 3732 // Layer with partially opaque contents, drawn with blending. |
| 3733 layer1->SetContentsOpaque(false); | 3733 layer1->SetContentsOpaque(false); |
| 3734 layer1->SetQuadRect(gfx::Rect(5, 5, 5, 5)); | 3734 layer1->SetQuadRect(gfx::Rect(5, 5, 5, 5)); |
| 3735 layer1->SetQuadVisibleRect(gfx::Rect(5, 5, 5, 5)); | 3735 layer1->SetQuadVisibleRect(gfx::Rect(5, 5, 5, 5)); |
| 3736 layer1->SetOpaqueContentRect(gfx::Rect(5, 5, 2, 5)); | 3736 layer1->SetOpaqueContentRect(gfx::Rect(5, 5, 2, 5)); |
| 3737 layer1->SetExpectation(true, false); | 3737 layer1->SetExpectation(true, false); |
| 3738 layer1->SetUpdateRect(gfx::RectF(layer1->content_bounds())); | 3738 layer1->SetUpdateRect(gfx::RectF(layer1->content_bounds())); |
| 3739 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame)); | 3739 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame)); |
| 3740 host_impl_->DrawLayers(&frame, gfx::FrameTime::Now()); | 3740 host_impl_->DrawLayers(&frame); |
| 3741 EXPECT_TRUE(layer1->quads_appended()); | 3741 EXPECT_TRUE(layer1->quads_appended()); |
| 3742 host_impl_->DidDrawAllLayers(frame); | 3742 host_impl_->DidDrawAllLayers(frame); |
| 3743 | 3743 |
| 3744 // Layer with partially opaque contents partially culled, drawn with blending. | 3744 // Layer with partially opaque contents partially culled, drawn with blending. |
| 3745 layer1->SetContentsOpaque(false); | 3745 layer1->SetContentsOpaque(false); |
| 3746 layer1->SetQuadRect(gfx::Rect(5, 5, 5, 5)); | 3746 layer1->SetQuadRect(gfx::Rect(5, 5, 5, 5)); |
| 3747 layer1->SetQuadVisibleRect(gfx::Rect(5, 5, 5, 2)); | 3747 layer1->SetQuadVisibleRect(gfx::Rect(5, 5, 5, 2)); |
| 3748 layer1->SetOpaqueContentRect(gfx::Rect(5, 5, 2, 5)); | 3748 layer1->SetOpaqueContentRect(gfx::Rect(5, 5, 2, 5)); |
| 3749 layer1->SetExpectation(true, false); | 3749 layer1->SetExpectation(true, false); |
| 3750 layer1->SetUpdateRect(gfx::RectF(layer1->content_bounds())); | 3750 layer1->SetUpdateRect(gfx::RectF(layer1->content_bounds())); |
| 3751 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame)); | 3751 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame)); |
| 3752 host_impl_->DrawLayers(&frame, gfx::FrameTime::Now()); | 3752 host_impl_->DrawLayers(&frame); |
| 3753 EXPECT_TRUE(layer1->quads_appended()); | 3753 EXPECT_TRUE(layer1->quads_appended()); |
| 3754 host_impl_->DidDrawAllLayers(frame); | 3754 host_impl_->DidDrawAllLayers(frame); |
| 3755 | 3755 |
| 3756 // Layer with partially opaque contents culled, drawn with blending. | 3756 // Layer with partially opaque contents culled, drawn with blending. |
| 3757 layer1->SetContentsOpaque(false); | 3757 layer1->SetContentsOpaque(false); |
| 3758 layer1->SetQuadRect(gfx::Rect(5, 5, 5, 5)); | 3758 layer1->SetQuadRect(gfx::Rect(5, 5, 5, 5)); |
| 3759 layer1->SetQuadVisibleRect(gfx::Rect(7, 5, 3, 5)); | 3759 layer1->SetQuadVisibleRect(gfx::Rect(7, 5, 3, 5)); |
| 3760 layer1->SetOpaqueContentRect(gfx::Rect(5, 5, 2, 5)); | 3760 layer1->SetOpaqueContentRect(gfx::Rect(5, 5, 2, 5)); |
| 3761 layer1->SetExpectation(true, false); | 3761 layer1->SetExpectation(true, false); |
| 3762 layer1->SetUpdateRect(gfx::RectF(layer1->content_bounds())); | 3762 layer1->SetUpdateRect(gfx::RectF(layer1->content_bounds())); |
| 3763 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame)); | 3763 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame)); |
| 3764 host_impl_->DrawLayers(&frame, gfx::FrameTime::Now()); | 3764 host_impl_->DrawLayers(&frame); |
| 3765 EXPECT_TRUE(layer1->quads_appended()); | 3765 EXPECT_TRUE(layer1->quads_appended()); |
| 3766 host_impl_->DidDrawAllLayers(frame); | 3766 host_impl_->DidDrawAllLayers(frame); |
| 3767 | 3767 |
| 3768 // Layer with partially opaque contents and translucent contents culled, drawn | 3768 // Layer with partially opaque contents and translucent contents culled, drawn |
| 3769 // without blending. | 3769 // without blending. |
| 3770 layer1->SetContentsOpaque(false); | 3770 layer1->SetContentsOpaque(false); |
| 3771 layer1->SetQuadRect(gfx::Rect(5, 5, 5, 5)); | 3771 layer1->SetQuadRect(gfx::Rect(5, 5, 5, 5)); |
| 3772 layer1->SetQuadVisibleRect(gfx::Rect(5, 5, 2, 5)); | 3772 layer1->SetQuadVisibleRect(gfx::Rect(5, 5, 2, 5)); |
| 3773 layer1->SetOpaqueContentRect(gfx::Rect(5, 5, 2, 5)); | 3773 layer1->SetOpaqueContentRect(gfx::Rect(5, 5, 2, 5)); |
| 3774 layer1->SetExpectation(false, false); | 3774 layer1->SetExpectation(false, false); |
| 3775 layer1->SetUpdateRect(gfx::RectF(layer1->content_bounds())); | 3775 layer1->SetUpdateRect(gfx::RectF(layer1->content_bounds())); |
| 3776 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame)); | 3776 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame)); |
| 3777 host_impl_->DrawLayers(&frame, gfx::FrameTime::Now()); | 3777 host_impl_->DrawLayers(&frame); |
| 3778 EXPECT_TRUE(layer1->quads_appended()); | 3778 EXPECT_TRUE(layer1->quads_appended()); |
| 3779 host_impl_->DidDrawAllLayers(frame); | 3779 host_impl_->DidDrawAllLayers(frame); |
| 3780 } | 3780 } |
| 3781 | 3781 |
| 3782 class LayerTreeHostImplViewportCoveredTest : public LayerTreeHostImplTest { | 3782 class LayerTreeHostImplViewportCoveredTest : public LayerTreeHostImplTest { |
| 3783 protected: | 3783 protected: |
| 3784 LayerTreeHostImplViewportCoveredTest() : | 3784 LayerTreeHostImplViewportCoveredTest() : |
| 3785 gutter_quad_material_(DrawQuad::SOLID_COLOR), | 3785 gutter_quad_material_(DrawQuad::SOLID_COLOR), |
| 3786 child_(NULL), | 3786 child_(NULL), |
| 3787 did_activate_pending_tree_(false) {} | 3787 did_activate_pending_tree_(false) {} |
| (...skipping 302 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4090 root->SetContentBounds(gfx::Size(10, 10)); | 4090 root->SetContentBounds(gfx::Size(10, 10)); |
| 4091 root->SetDrawsContent(true); | 4091 root->SetDrawsContent(true); |
| 4092 host_impl_->active_tree()->SetRootLayer(root.Pass()); | 4092 host_impl_->active_tree()->SetRootLayer(root.Pass()); |
| 4093 EXPECT_FALSE(provider->TestContext3d()->reshape_called()); | 4093 EXPECT_FALSE(provider->TestContext3d()->reshape_called()); |
| 4094 provider->TestContext3d()->clear_reshape_called(); | 4094 provider->TestContext3d()->clear_reshape_called(); |
| 4095 | 4095 |
| 4096 LayerTreeHostImpl::FrameData frame; | 4096 LayerTreeHostImpl::FrameData frame; |
| 4097 host_impl_->SetViewportSize(gfx::Size(10, 10)); | 4097 host_impl_->SetViewportSize(gfx::Size(10, 10)); |
| 4098 host_impl_->SetDeviceScaleFactor(1.f); | 4098 host_impl_->SetDeviceScaleFactor(1.f); |
| 4099 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame)); | 4099 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame)); |
| 4100 host_impl_->DrawLayers(&frame, gfx::FrameTime::Now()); | 4100 host_impl_->DrawLayers(&frame); |
| 4101 EXPECT_TRUE(provider->TestContext3d()->reshape_called()); | 4101 EXPECT_TRUE(provider->TestContext3d()->reshape_called()); |
| 4102 EXPECT_EQ(provider->TestContext3d()->width(), 10); | 4102 EXPECT_EQ(provider->TestContext3d()->width(), 10); |
| 4103 EXPECT_EQ(provider->TestContext3d()->height(), 10); | 4103 EXPECT_EQ(provider->TestContext3d()->height(), 10); |
| 4104 EXPECT_EQ(provider->TestContext3d()->scale_factor(), 1.f); | 4104 EXPECT_EQ(provider->TestContext3d()->scale_factor(), 1.f); |
| 4105 host_impl_->DidDrawAllLayers(frame); | 4105 host_impl_->DidDrawAllLayers(frame); |
| 4106 provider->TestContext3d()->clear_reshape_called(); | 4106 provider->TestContext3d()->clear_reshape_called(); |
| 4107 | 4107 |
| 4108 host_impl_->SetViewportSize(gfx::Size(20, 30)); | 4108 host_impl_->SetViewportSize(gfx::Size(20, 30)); |
| 4109 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame)); | 4109 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame)); |
| 4110 host_impl_->DrawLayers(&frame, gfx::FrameTime::Now()); | 4110 host_impl_->DrawLayers(&frame); |
| 4111 EXPECT_TRUE(provider->TestContext3d()->reshape_called()); | 4111 EXPECT_TRUE(provider->TestContext3d()->reshape_called()); |
| 4112 EXPECT_EQ(provider->TestContext3d()->width(), 20); | 4112 EXPECT_EQ(provider->TestContext3d()->width(), 20); |
| 4113 EXPECT_EQ(provider->TestContext3d()->height(), 30); | 4113 EXPECT_EQ(provider->TestContext3d()->height(), 30); |
| 4114 EXPECT_EQ(provider->TestContext3d()->scale_factor(), 1.f); | 4114 EXPECT_EQ(provider->TestContext3d()->scale_factor(), 1.f); |
| 4115 host_impl_->DidDrawAllLayers(frame); | 4115 host_impl_->DidDrawAllLayers(frame); |
| 4116 provider->TestContext3d()->clear_reshape_called(); | 4116 provider->TestContext3d()->clear_reshape_called(); |
| 4117 | 4117 |
| 4118 host_impl_->SetDeviceScaleFactor(2.f); | 4118 host_impl_->SetDeviceScaleFactor(2.f); |
| 4119 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame)); | 4119 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame)); |
| 4120 host_impl_->DrawLayers(&frame, gfx::FrameTime::Now()); | 4120 host_impl_->DrawLayers(&frame); |
| 4121 EXPECT_TRUE(provider->TestContext3d()->reshape_called()); | 4121 EXPECT_TRUE(provider->TestContext3d()->reshape_called()); |
| 4122 EXPECT_EQ(provider->TestContext3d()->width(), 20); | 4122 EXPECT_EQ(provider->TestContext3d()->width(), 20); |
| 4123 EXPECT_EQ(provider->TestContext3d()->height(), 30); | 4123 EXPECT_EQ(provider->TestContext3d()->height(), 30); |
| 4124 EXPECT_EQ(provider->TestContext3d()->scale_factor(), 2.f); | 4124 EXPECT_EQ(provider->TestContext3d()->scale_factor(), 2.f); |
| 4125 host_impl_->DidDrawAllLayers(frame); | 4125 host_impl_->DidDrawAllLayers(frame); |
| 4126 provider->TestContext3d()->clear_reshape_called(); | 4126 provider->TestContext3d()->clear_reshape_called(); |
| 4127 } | 4127 } |
| 4128 | 4128 |
| 4129 // Make sure damage tracking propagates all the way to the graphics context, | 4129 // Make sure damage tracking propagates all the way to the graphics context, |
| 4130 // where it should request to swap only the sub-buffer that is damaged. | 4130 // where it should request to swap only the sub-buffer that is damaged. |
| (...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4164 root->SetBounds(gfx::Size(500, 500)); | 4164 root->SetBounds(gfx::Size(500, 500)); |
| 4165 root->SetContentBounds(gfx::Size(500, 500)); | 4165 root->SetContentBounds(gfx::Size(500, 500)); |
| 4166 root->SetDrawsContent(true); | 4166 root->SetDrawsContent(true); |
| 4167 root->AddChild(child.Pass()); | 4167 root->AddChild(child.Pass()); |
| 4168 layer_tree_host_impl->active_tree()->SetRootLayer(root.Pass()); | 4168 layer_tree_host_impl->active_tree()->SetRootLayer(root.Pass()); |
| 4169 | 4169 |
| 4170 LayerTreeHostImpl::FrameData frame; | 4170 LayerTreeHostImpl::FrameData frame; |
| 4171 | 4171 |
| 4172 // First frame, the entire screen should get swapped. | 4172 // First frame, the entire screen should get swapped. |
| 4173 EXPECT_EQ(DRAW_SUCCESS, layer_tree_host_impl->PrepareToDraw(&frame)); | 4173 EXPECT_EQ(DRAW_SUCCESS, layer_tree_host_impl->PrepareToDraw(&frame)); |
| 4174 layer_tree_host_impl->DrawLayers(&frame, gfx::FrameTime::Now()); | 4174 layer_tree_host_impl->DrawLayers(&frame); |
| 4175 layer_tree_host_impl->DidDrawAllLayers(frame); | 4175 layer_tree_host_impl->DidDrawAllLayers(frame); |
| 4176 layer_tree_host_impl->SwapBuffers(frame); | 4176 layer_tree_host_impl->SwapBuffers(frame); |
| 4177 EXPECT_EQ(TestContextSupport::SWAP, | 4177 EXPECT_EQ(TestContextSupport::SWAP, |
| 4178 context_provider->support()->last_swap_type()); | 4178 context_provider->support()->last_swap_type()); |
| 4179 | 4179 |
| 4180 // Second frame, only the damaged area should get swapped. Damage should be | 4180 // Second frame, only the damaged area should get swapped. Damage should be |
| 4181 // the union of old and new child rects. | 4181 // the union of old and new child rects. |
| 4182 // expected damage rect: gfx::Rect(26, 28); | 4182 // expected damage rect: gfx::Rect(26, 28); |
| 4183 // expected swap rect: vertically flipped, with origin at bottom left corner. | 4183 // expected swap rect: vertically flipped, with origin at bottom left corner. |
| 4184 layer_tree_host_impl->active_tree()->root_layer()->children()[0]->SetPosition( | 4184 layer_tree_host_impl->active_tree()->root_layer()->children()[0]->SetPosition( |
| 4185 gfx::PointF()); | 4185 gfx::PointF()); |
| 4186 EXPECT_EQ(DRAW_SUCCESS, layer_tree_host_impl->PrepareToDraw(&frame)); | 4186 EXPECT_EQ(DRAW_SUCCESS, layer_tree_host_impl->PrepareToDraw(&frame)); |
| 4187 layer_tree_host_impl->DrawLayers(&frame, gfx::FrameTime::Now()); | 4187 layer_tree_host_impl->DrawLayers(&frame); |
| 4188 host_impl_->DidDrawAllLayers(frame); | 4188 host_impl_->DidDrawAllLayers(frame); |
| 4189 layer_tree_host_impl->SwapBuffers(frame); | 4189 layer_tree_host_impl->SwapBuffers(frame); |
| 4190 | 4190 |
| 4191 // Make sure that partial swap is constrained to the viewport dimensions | 4191 // Make sure that partial swap is constrained to the viewport dimensions |
| 4192 // expected damage rect: gfx::Rect(500, 500); | 4192 // expected damage rect: gfx::Rect(500, 500); |
| 4193 // expected swap rect: flipped damage rect, but also clamped to viewport | 4193 // expected swap rect: flipped damage rect, but also clamped to viewport |
| 4194 EXPECT_EQ(TestContextSupport::PARTIAL_SWAP, | 4194 EXPECT_EQ(TestContextSupport::PARTIAL_SWAP, |
| 4195 context_provider->support()->last_swap_type()); | 4195 context_provider->support()->last_swap_type()); |
| 4196 gfx::Rect expected_swap_rect(0, 500-28, 26, 28); | 4196 gfx::Rect expected_swap_rect(0, 500-28, 26, 28); |
| 4197 EXPECT_EQ(expected_swap_rect.ToString(), | 4197 EXPECT_EQ(expected_swap_rect.ToString(), |
| 4198 context_provider->support()-> | 4198 context_provider->support()-> |
| 4199 last_partial_swap_rect().ToString()); | 4199 last_partial_swap_rect().ToString()); |
| 4200 | 4200 |
| 4201 layer_tree_host_impl->SetViewportSize(gfx::Size(10, 10)); | 4201 layer_tree_host_impl->SetViewportSize(gfx::Size(10, 10)); |
| 4202 // This will damage everything. | 4202 // This will damage everything. |
| 4203 layer_tree_host_impl->active_tree()->root_layer()->SetBackgroundColor( | 4203 layer_tree_host_impl->active_tree()->root_layer()->SetBackgroundColor( |
| 4204 SK_ColorBLACK); | 4204 SK_ColorBLACK); |
| 4205 EXPECT_EQ(DRAW_SUCCESS, layer_tree_host_impl->PrepareToDraw(&frame)); | 4205 EXPECT_EQ(DRAW_SUCCESS, layer_tree_host_impl->PrepareToDraw(&frame)); |
| 4206 layer_tree_host_impl->DrawLayers(&frame, gfx::FrameTime::Now()); | 4206 layer_tree_host_impl->DrawLayers(&frame); |
| 4207 host_impl_->DidDrawAllLayers(frame); | 4207 host_impl_->DidDrawAllLayers(frame); |
| 4208 layer_tree_host_impl->SwapBuffers(frame); | 4208 layer_tree_host_impl->SwapBuffers(frame); |
| 4209 | 4209 |
| 4210 EXPECT_EQ(TestContextSupport::SWAP, | 4210 EXPECT_EQ(TestContextSupport::SWAP, |
| 4211 context_provider->support()->last_swap_type()); | 4211 context_provider->support()->last_swap_type()); |
| 4212 } | 4212 } |
| 4213 | 4213 |
| 4214 TEST_F(LayerTreeHostImplTest, RootLayerDoesntCreateExtraSurface) { | 4214 TEST_F(LayerTreeHostImplTest, RootLayerDoesntCreateExtraSurface) { |
| 4215 scoped_ptr<LayerImpl> root = | 4215 scoped_ptr<LayerImpl> root = |
| 4216 FakeDrawableLayerImpl::Create(host_impl_->active_tree(), 1); | 4216 FakeDrawableLayerImpl::Create(host_impl_->active_tree(), 1); |
| (...skipping 145 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4362 settings.partial_swap_enabled = false; | 4362 settings.partial_swap_enabled = false; |
| 4363 CreateHostImpl(settings, output_surface.Pass()); | 4363 CreateHostImpl(settings, output_surface.Pass()); |
| 4364 SetupRootLayerImpl(FakeLayerWithQuads::Create(host_impl_->active_tree(), 1)); | 4364 SetupRootLayerImpl(FakeLayerWithQuads::Create(host_impl_->active_tree(), 1)); |
| 4365 | 4365 |
| 4366 // Without partial swap, and no clipping, no scissor is set. | 4366 // Without partial swap, and no clipping, no scissor is set. |
| 4367 harness.MustDrawSolidQuad(); | 4367 harness.MustDrawSolidQuad(); |
| 4368 harness.MustSetNoScissor(); | 4368 harness.MustSetNoScissor(); |
| 4369 { | 4369 { |
| 4370 LayerTreeHostImpl::FrameData frame; | 4370 LayerTreeHostImpl::FrameData frame; |
| 4371 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame)); | 4371 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame)); |
| 4372 host_impl_->DrawLayers(&frame, gfx::FrameTime::Now()); | 4372 host_impl_->DrawLayers(&frame); |
| 4373 host_impl_->DidDrawAllLayers(frame); | 4373 host_impl_->DidDrawAllLayers(frame); |
| 4374 } | 4374 } |
| 4375 Mock::VerifyAndClearExpectations(&mock_context); | 4375 Mock::VerifyAndClearExpectations(&mock_context); |
| 4376 | 4376 |
| 4377 // Without partial swap, but a layer does clip its subtree, one scissor is | 4377 // Without partial swap, but a layer does clip its subtree, one scissor is |
| 4378 // set. | 4378 // set. |
| 4379 host_impl_->active_tree()->root_layer()->SetMasksToBounds(true); | 4379 host_impl_->active_tree()->root_layer()->SetMasksToBounds(true); |
| 4380 harness.MustDrawSolidQuad(); | 4380 harness.MustDrawSolidQuad(); |
| 4381 harness.MustSetScissor(0, 0, 10, 10); | 4381 harness.MustSetScissor(0, 0, 10, 10); |
| 4382 { | 4382 { |
| 4383 LayerTreeHostImpl::FrameData frame; | 4383 LayerTreeHostImpl::FrameData frame; |
| 4384 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame)); | 4384 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame)); |
| 4385 host_impl_->DrawLayers(&frame, gfx::FrameTime::Now()); | 4385 host_impl_->DrawLayers(&frame); |
| 4386 host_impl_->DidDrawAllLayers(frame); | 4386 host_impl_->DidDrawAllLayers(frame); |
| 4387 } | 4387 } |
| 4388 Mock::VerifyAndClearExpectations(&mock_context); | 4388 Mock::VerifyAndClearExpectations(&mock_context); |
| 4389 } | 4389 } |
| 4390 | 4390 |
| 4391 TEST_F(LayerTreeHostImplTest, PartialSwap) { | 4391 TEST_F(LayerTreeHostImplTest, PartialSwap) { |
| 4392 scoped_ptr<MockContext> context_owned(new MockContext); | 4392 scoped_ptr<MockContext> context_owned(new MockContext); |
| 4393 MockContext* mock_context = context_owned.get(); | 4393 MockContext* mock_context = context_owned.get(); |
| 4394 scoped_ptr<OutputSurface> output_surface(FakeOutputSurface::Create3d( | 4394 scoped_ptr<OutputSurface> output_surface(FakeOutputSurface::Create3d( |
| 4395 context_owned.PassAs<TestWebGraphicsContext3D>())); | 4395 context_owned.PassAs<TestWebGraphicsContext3D>())); |
| 4396 MockContextHarness harness(mock_context); | 4396 MockContextHarness harness(mock_context); |
| 4397 | 4397 |
| 4398 LayerTreeSettings settings = DefaultSettings(); | 4398 LayerTreeSettings settings = DefaultSettings(); |
| 4399 settings.partial_swap_enabled = true; | 4399 settings.partial_swap_enabled = true; |
| 4400 CreateHostImpl(settings, output_surface.Pass()); | 4400 CreateHostImpl(settings, output_surface.Pass()); |
| 4401 SetupRootLayerImpl(FakeLayerWithQuads::Create(host_impl_->active_tree(), 1)); | 4401 SetupRootLayerImpl(FakeLayerWithQuads::Create(host_impl_->active_tree(), 1)); |
| 4402 | 4402 |
| 4403 // The first frame is not a partially-swapped one. | 4403 // The first frame is not a partially-swapped one. |
| 4404 harness.MustSetScissor(0, 0, 10, 10); | 4404 harness.MustSetScissor(0, 0, 10, 10); |
| 4405 harness.MustDrawSolidQuad(); | 4405 harness.MustDrawSolidQuad(); |
| 4406 { | 4406 { |
| 4407 LayerTreeHostImpl::FrameData frame; | 4407 LayerTreeHostImpl::FrameData frame; |
| 4408 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame)); | 4408 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame)); |
| 4409 host_impl_->DrawLayers(&frame, gfx::FrameTime::Now()); | 4409 host_impl_->DrawLayers(&frame); |
| 4410 host_impl_->DidDrawAllLayers(frame); | 4410 host_impl_->DidDrawAllLayers(frame); |
| 4411 } | 4411 } |
| 4412 Mock::VerifyAndClearExpectations(&mock_context); | 4412 Mock::VerifyAndClearExpectations(&mock_context); |
| 4413 | 4413 |
| 4414 // Damage a portion of the frame. | 4414 // Damage a portion of the frame. |
| 4415 host_impl_->active_tree()->root_layer()->SetUpdateRect( | 4415 host_impl_->active_tree()->root_layer()->SetUpdateRect( |
| 4416 gfx::Rect(0, 0, 2, 3)); | 4416 gfx::Rect(0, 0, 2, 3)); |
| 4417 | 4417 |
| 4418 // The second frame will be partially-swapped (the y coordinates are flipped). | 4418 // The second frame will be partially-swapped (the y coordinates are flipped). |
| 4419 harness.MustSetScissor(0, 7, 2, 3); | 4419 harness.MustSetScissor(0, 7, 2, 3); |
| 4420 harness.MustDrawSolidQuad(); | 4420 harness.MustDrawSolidQuad(); |
| 4421 { | 4421 { |
| 4422 LayerTreeHostImpl::FrameData frame; | 4422 LayerTreeHostImpl::FrameData frame; |
| 4423 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame)); | 4423 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame)); |
| 4424 host_impl_->DrawLayers(&frame, gfx::FrameTime::Now()); | 4424 host_impl_->DrawLayers(&frame); |
| 4425 host_impl_->DidDrawAllLayers(frame); | 4425 host_impl_->DidDrawAllLayers(frame); |
| 4426 } | 4426 } |
| 4427 Mock::VerifyAndClearExpectations(&mock_context); | 4427 Mock::VerifyAndClearExpectations(&mock_context); |
| 4428 } | 4428 } |
| 4429 | 4429 |
| 4430 static scoped_ptr<LayerTreeHostImpl> SetupLayersForOpacity( | 4430 static scoped_ptr<LayerTreeHostImpl> SetupLayersForOpacity( |
| 4431 bool partial_swap, | 4431 bool partial_swap, |
| 4432 LayerTreeHostImplClient* client, | 4432 LayerTreeHostImplClient* client, |
| 4433 Proxy* proxy, | 4433 Proxy* proxy, |
| 4434 SharedBitmapManager* manager, | 4434 SharedBitmapManager* manager, |
| (...skipping 84 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4519 | 4519 |
| 4520 // Verify all quads have been computed | 4520 // Verify all quads have been computed |
| 4521 ASSERT_EQ(2U, frame.render_passes.size()); | 4521 ASSERT_EQ(2U, frame.render_passes.size()); |
| 4522 ASSERT_EQ(1U, frame.render_passes[0]->quad_list.size()); | 4522 ASSERT_EQ(1U, frame.render_passes[0]->quad_list.size()); |
| 4523 ASSERT_EQ(1U, frame.render_passes[1]->quad_list.size()); | 4523 ASSERT_EQ(1U, frame.render_passes[1]->quad_list.size()); |
| 4524 EXPECT_EQ(DrawQuad::SOLID_COLOR, | 4524 EXPECT_EQ(DrawQuad::SOLID_COLOR, |
| 4525 frame.render_passes[0]->quad_list[0]->material); | 4525 frame.render_passes[0]->quad_list[0]->material); |
| 4526 EXPECT_EQ(DrawQuad::RENDER_PASS, | 4526 EXPECT_EQ(DrawQuad::RENDER_PASS, |
| 4527 frame.render_passes[1]->quad_list[0]->material); | 4527 frame.render_passes[1]->quad_list[0]->material); |
| 4528 | 4528 |
| 4529 my_host_impl->DrawLayers(&frame, gfx::FrameTime::Now()); | 4529 my_host_impl->DrawLayers(&frame); |
| 4530 my_host_impl->DidDrawAllLayers(frame); | 4530 my_host_impl->DidDrawAllLayers(frame); |
| 4531 } | 4531 } |
| 4532 } | 4532 } |
| 4533 | 4533 |
| 4534 TEST_F(LayerTreeHostImplTest, ContributingLayerEmptyScissorNoPartialSwap) { | 4534 TEST_F(LayerTreeHostImplTest, ContributingLayerEmptyScissorNoPartialSwap) { |
| 4535 scoped_ptr<SharedBitmapManager> shared_bitmap_manager( | 4535 scoped_ptr<SharedBitmapManager> shared_bitmap_manager( |
| 4536 new TestSharedBitmapManager()); | 4536 new TestSharedBitmapManager()); |
| 4537 scoped_ptr<LayerTreeHostImpl> my_host_impl = | 4537 scoped_ptr<LayerTreeHostImpl> my_host_impl = |
| 4538 SetupLayersForOpacity(false, | 4538 SetupLayersForOpacity(false, |
| 4539 this, | 4539 this, |
| 4540 &proxy_, | 4540 &proxy_, |
| 4541 shared_bitmap_manager.get(), | 4541 shared_bitmap_manager.get(), |
| 4542 &stats_instrumentation_); | 4542 &stats_instrumentation_); |
| 4543 { | 4543 { |
| 4544 LayerTreeHostImpl::FrameData frame; | 4544 LayerTreeHostImpl::FrameData frame; |
| 4545 EXPECT_EQ(DRAW_SUCCESS, my_host_impl->PrepareToDraw(&frame)); | 4545 EXPECT_EQ(DRAW_SUCCESS, my_host_impl->PrepareToDraw(&frame)); |
| 4546 | 4546 |
| 4547 // Verify all quads have been computed | 4547 // Verify all quads have been computed |
| 4548 ASSERT_EQ(2U, frame.render_passes.size()); | 4548 ASSERT_EQ(2U, frame.render_passes.size()); |
| 4549 ASSERT_EQ(1U, frame.render_passes[0]->quad_list.size()); | 4549 ASSERT_EQ(1U, frame.render_passes[0]->quad_list.size()); |
| 4550 ASSERT_EQ(1U, frame.render_passes[1]->quad_list.size()); | 4550 ASSERT_EQ(1U, frame.render_passes[1]->quad_list.size()); |
| 4551 EXPECT_EQ(DrawQuad::SOLID_COLOR, | 4551 EXPECT_EQ(DrawQuad::SOLID_COLOR, |
| 4552 frame.render_passes[0]->quad_list[0]->material); | 4552 frame.render_passes[0]->quad_list[0]->material); |
| 4553 EXPECT_EQ(DrawQuad::RENDER_PASS, | 4553 EXPECT_EQ(DrawQuad::RENDER_PASS, |
| 4554 frame.render_passes[1]->quad_list[0]->material); | 4554 frame.render_passes[1]->quad_list[0]->material); |
| 4555 | 4555 |
| 4556 my_host_impl->DrawLayers(&frame, gfx::FrameTime::Now()); | 4556 my_host_impl->DrawLayers(&frame); |
| 4557 my_host_impl->DidDrawAllLayers(frame); | 4557 my_host_impl->DidDrawAllLayers(frame); |
| 4558 } | 4558 } |
| 4559 } | 4559 } |
| 4560 | 4560 |
| 4561 TEST_F(LayerTreeHostImplTest, LayersFreeTextures) { | 4561 TEST_F(LayerTreeHostImplTest, LayersFreeTextures) { |
| 4562 scoped_ptr<TestWebGraphicsContext3D> context = | 4562 scoped_ptr<TestWebGraphicsContext3D> context = |
| 4563 TestWebGraphicsContext3D::Create(); | 4563 TestWebGraphicsContext3D::Create(); |
| 4564 TestWebGraphicsContext3D* context3d = context.get(); | 4564 TestWebGraphicsContext3D* context3d = context.get(); |
| 4565 scoped_ptr<OutputSurface> output_surface( | 4565 scoped_ptr<OutputSurface> output_surface( |
| 4566 FakeOutputSurface::Create3d(context.Pass())); | 4566 FakeOutputSurface::Create3d(context.Pass())); |
| (...skipping 22 matching lines...) Expand all Loading... |
| 4589 io_surface_layer->SetDrawsContent(true); | 4589 io_surface_layer->SetDrawsContent(true); |
| 4590 io_surface_layer->SetIOSurfaceProperties(1, gfx::Size(10, 10)); | 4590 io_surface_layer->SetIOSurfaceProperties(1, gfx::Size(10, 10)); |
| 4591 root_layer->AddChild(io_surface_layer.PassAs<LayerImpl>()); | 4591 root_layer->AddChild(io_surface_layer.PassAs<LayerImpl>()); |
| 4592 | 4592 |
| 4593 host_impl_->active_tree()->SetRootLayer(root_layer.Pass()); | 4593 host_impl_->active_tree()->SetRootLayer(root_layer.Pass()); |
| 4594 | 4594 |
| 4595 EXPECT_EQ(0u, context3d->NumTextures()); | 4595 EXPECT_EQ(0u, context3d->NumTextures()); |
| 4596 | 4596 |
| 4597 LayerTreeHostImpl::FrameData frame; | 4597 LayerTreeHostImpl::FrameData frame; |
| 4598 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame)); | 4598 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame)); |
| 4599 host_impl_->DrawLayers(&frame, gfx::FrameTime::Now()); | 4599 host_impl_->DrawLayers(&frame); |
| 4600 host_impl_->DidDrawAllLayers(frame); | 4600 host_impl_->DidDrawAllLayers(frame); |
| 4601 host_impl_->SwapBuffers(frame); | 4601 host_impl_->SwapBuffers(frame); |
| 4602 | 4602 |
| 4603 EXPECT_GT(context3d->NumTextures(), 0u); | 4603 EXPECT_GT(context3d->NumTextures(), 0u); |
| 4604 | 4604 |
| 4605 // Kill the layer tree. | 4605 // Kill the layer tree. |
| 4606 host_impl_->active_tree()->SetRootLayer( | 4606 host_impl_->active_tree()->SetRootLayer( |
| 4607 LayerImpl::Create(host_impl_->active_tree(), 100)); | 4607 LayerImpl::Create(host_impl_->active_tree(), 100)); |
| 4608 // There should be no textures left in use after. | 4608 // There should be no textures left in use after. |
| 4609 EXPECT_EQ(0u, context3d->NumTextures()); | 4609 EXPECT_EQ(0u, context3d->NumTextures()); |
| (...skipping 24 matching lines...) Expand all Loading... |
| 4634 host_impl_->active_tree()->set_background_color(SK_ColorWHITE); | 4634 host_impl_->active_tree()->set_background_color(SK_ColorWHITE); |
| 4635 | 4635 |
| 4636 // Verify one quad is drawn when transparent background set is not set. | 4636 // Verify one quad is drawn when transparent background set is not set. |
| 4637 host_impl_->active_tree()->set_has_transparent_background(false); | 4637 host_impl_->active_tree()->set_has_transparent_background(false); |
| 4638 EXPECT_CALL(*mock_context, useProgram(_)) | 4638 EXPECT_CALL(*mock_context, useProgram(_)) |
| 4639 .Times(1); | 4639 .Times(1); |
| 4640 EXPECT_CALL(*mock_context, drawElements(_, _, _, _)) | 4640 EXPECT_CALL(*mock_context, drawElements(_, _, _, _)) |
| 4641 .Times(1); | 4641 .Times(1); |
| 4642 LayerTreeHostImpl::FrameData frame; | 4642 LayerTreeHostImpl::FrameData frame; |
| 4643 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame)); | 4643 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame)); |
| 4644 host_impl_->DrawLayers(&frame, gfx::FrameTime::Now()); | 4644 host_impl_->DrawLayers(&frame); |
| 4645 host_impl_->DidDrawAllLayers(frame); | 4645 host_impl_->DidDrawAllLayers(frame); |
| 4646 Mock::VerifyAndClearExpectations(&mock_context); | 4646 Mock::VerifyAndClearExpectations(&mock_context); |
| 4647 | 4647 |
| 4648 // Verify no quads are drawn when transparent background is set. | 4648 // Verify no quads are drawn when transparent background is set. |
| 4649 host_impl_->active_tree()->set_has_transparent_background(true); | 4649 host_impl_->active_tree()->set_has_transparent_background(true); |
| 4650 host_impl_->SetFullRootLayerDamage(); | 4650 host_impl_->SetFullRootLayerDamage(); |
| 4651 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame)); | 4651 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame)); |
| 4652 host_impl_->DrawLayers(&frame, gfx::FrameTime::Now()); | 4652 host_impl_->DrawLayers(&frame); |
| 4653 host_impl_->DidDrawAllLayers(frame); | 4653 host_impl_->DidDrawAllLayers(frame); |
| 4654 Mock::VerifyAndClearExpectations(&mock_context); | 4654 Mock::VerifyAndClearExpectations(&mock_context); |
| 4655 } | 4655 } |
| 4656 | 4656 |
| 4657 TEST_F(LayerTreeHostImplTest, ReleaseContentsTextureShouldTriggerCommit) { | 4657 TEST_F(LayerTreeHostImplTest, ReleaseContentsTextureShouldTriggerCommit) { |
| 4658 set_reduce_memory_result(false); | 4658 set_reduce_memory_result(false); |
| 4659 | 4659 |
| 4660 // If changing the memory limit wouldn't result in changing what was | 4660 // If changing the memory limit wouldn't result in changing what was |
| 4661 // committed, then no commit should be requested. | 4661 // committed, then no commit should be requested. |
| 4662 set_reduce_memory_result(false); | 4662 set_reduce_memory_result(false); |
| (...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4725 gfx::RectF expected_child_visible_rect(child->content_bounds()); | 4725 gfx::RectF expected_child_visible_rect(child->content_bounds()); |
| 4726 EXPECT_RECT_EQ(expected_child_visible_rect, | 4726 EXPECT_RECT_EQ(expected_child_visible_rect, |
| 4727 root_render_pass->quad_list[0]->visible_rect); | 4727 root_render_pass->quad_list[0]->visible_rect); |
| 4728 | 4728 |
| 4729 LayerImpl* root = host_impl_->active_tree()->root_layer(); | 4729 LayerImpl* root = host_impl_->active_tree()->root_layer(); |
| 4730 gfx::RectF expected_root_visible_rect(root->content_bounds()); | 4730 gfx::RectF expected_root_visible_rect(root->content_bounds()); |
| 4731 EXPECT_RECT_EQ(expected_root_visible_rect, | 4731 EXPECT_RECT_EQ(expected_root_visible_rect, |
| 4732 root_render_pass->quad_list[1]->visible_rect); | 4732 root_render_pass->quad_list[1]->visible_rect); |
| 4733 } | 4733 } |
| 4734 | 4734 |
| 4735 host_impl_->DrawLayers(&frame, gfx::FrameTime::Now()); | 4735 host_impl_->DrawLayers(&frame); |
| 4736 host_impl_->DidDrawAllLayers(frame); | 4736 host_impl_->DidDrawAllLayers(frame); |
| 4737 EXPECT_EQ(expect_to_draw, host_impl_->SwapBuffers(frame)); | 4737 EXPECT_EQ(expect_to_draw, host_impl_->SwapBuffers(frame)); |
| 4738 } | 4738 } |
| 4739 }; | 4739 }; |
| 4740 | 4740 |
| 4741 TEST_F(LayerTreeHostImplTestWithDelegatingRenderer, FrameIncludesDamageRect) { | 4741 TEST_F(LayerTreeHostImplTestWithDelegatingRenderer, FrameIncludesDamageRect) { |
| 4742 scoped_ptr<SolidColorLayerImpl> root = | 4742 scoped_ptr<SolidColorLayerImpl> root = |
| 4743 SolidColorLayerImpl::Create(host_impl_->active_tree(), 1); | 4743 SolidColorLayerImpl::Create(host_impl_->active_tree(), 1); |
| 4744 root->SetPosition(gfx::PointF()); | 4744 root->SetPosition(gfx::PointF()); |
| 4745 root->SetBounds(gfx::Size(10, 10)); | 4745 root->SetBounds(gfx::Size(10, 10)); |
| (...skipping 118 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4864 ASSERT_EQ(1u, frame.render_passes[0]->quad_list.size()); | 4864 ASSERT_EQ(1u, frame.render_passes[0]->quad_list.size()); |
| 4865 ASSERT_EQ(DrawQuad::RENDER_PASS, | 4865 ASSERT_EQ(DrawQuad::RENDER_PASS, |
| 4866 frame.render_passes[0]->quad_list[0]->material); | 4866 frame.render_passes[0]->quad_list[0]->material); |
| 4867 const RenderPassDrawQuad* render_pass_quad = | 4867 const RenderPassDrawQuad* render_pass_quad = |
| 4868 RenderPassDrawQuad::MaterialCast(frame.render_passes[0]->quad_list[0]); | 4868 RenderPassDrawQuad::MaterialCast(frame.render_passes[0]->quad_list[0]); |
| 4869 EXPECT_EQ(gfx::Rect(0, 0, 100, 100).ToString(), | 4869 EXPECT_EQ(gfx::Rect(0, 0, 100, 100).ToString(), |
| 4870 render_pass_quad->rect.ToString()); | 4870 render_pass_quad->rect.ToString()); |
| 4871 EXPECT_EQ(gfx::RectF(0.f, 0.f, 1.f, 1.f).ToString(), | 4871 EXPECT_EQ(gfx::RectF(0.f, 0.f, 1.f, 1.f).ToString(), |
| 4872 render_pass_quad->mask_uv_rect.ToString()); | 4872 render_pass_quad->mask_uv_rect.ToString()); |
| 4873 | 4873 |
| 4874 host_impl_->DrawLayers(&frame, gfx::FrameTime::Now()); | 4874 host_impl_->DrawLayers(&frame); |
| 4875 host_impl_->DidDrawAllLayers(frame); | 4875 host_impl_->DidDrawAllLayers(frame); |
| 4876 } | 4876 } |
| 4877 | 4877 |
| 4878 | 4878 |
| 4879 // Applying a DSF should change the render surface size, but won't affect | 4879 // Applying a DSF should change the render surface size, but won't affect |
| 4880 // which part of the mask is used. | 4880 // which part of the mask is used. |
| 4881 device_scale_factor = 2.f; | 4881 device_scale_factor = 2.f; |
| 4882 gfx::Size device_viewport = | 4882 gfx::Size device_viewport = |
| 4883 gfx::ToFlooredSize(gfx::ScaleSize(root_size, device_scale_factor)); | 4883 gfx::ToFlooredSize(gfx::ScaleSize(root_size, device_scale_factor)); |
| 4884 host_impl_->SetViewportSize(device_viewport); | 4884 host_impl_->SetViewportSize(device_viewport); |
| 4885 host_impl_->SetDeviceScaleFactor(device_scale_factor); | 4885 host_impl_->SetDeviceScaleFactor(device_scale_factor); |
| 4886 host_impl_->active_tree()->set_needs_update_draw_properties(); | 4886 host_impl_->active_tree()->set_needs_update_draw_properties(); |
| 4887 { | 4887 { |
| 4888 LayerTreeHostImpl::FrameData frame; | 4888 LayerTreeHostImpl::FrameData frame; |
| 4889 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame)); | 4889 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame)); |
| 4890 | 4890 |
| 4891 ASSERT_EQ(1u, frame.render_passes.size()); | 4891 ASSERT_EQ(1u, frame.render_passes.size()); |
| 4892 ASSERT_EQ(1u, frame.render_passes[0]->quad_list.size()); | 4892 ASSERT_EQ(1u, frame.render_passes[0]->quad_list.size()); |
| 4893 ASSERT_EQ(DrawQuad::RENDER_PASS, | 4893 ASSERT_EQ(DrawQuad::RENDER_PASS, |
| 4894 frame.render_passes[0]->quad_list[0]->material); | 4894 frame.render_passes[0]->quad_list[0]->material); |
| 4895 const RenderPassDrawQuad* render_pass_quad = | 4895 const RenderPassDrawQuad* render_pass_quad = |
| 4896 RenderPassDrawQuad::MaterialCast(frame.render_passes[0]->quad_list[0]); | 4896 RenderPassDrawQuad::MaterialCast(frame.render_passes[0]->quad_list[0]); |
| 4897 EXPECT_EQ(gfx::Rect(0, 0, 200, 200).ToString(), | 4897 EXPECT_EQ(gfx::Rect(0, 0, 200, 200).ToString(), |
| 4898 render_pass_quad->rect.ToString()); | 4898 render_pass_quad->rect.ToString()); |
| 4899 EXPECT_EQ(gfx::RectF(0.f, 0.f, 1.f, 1.f).ToString(), | 4899 EXPECT_EQ(gfx::RectF(0.f, 0.f, 1.f, 1.f).ToString(), |
| 4900 render_pass_quad->mask_uv_rect.ToString()); | 4900 render_pass_quad->mask_uv_rect.ToString()); |
| 4901 | 4901 |
| 4902 host_impl_->DrawLayers(&frame, gfx::FrameTime::Now()); | 4902 host_impl_->DrawLayers(&frame); |
| 4903 host_impl_->DidDrawAllLayers(frame); | 4903 host_impl_->DidDrawAllLayers(frame); |
| 4904 } | 4904 } |
| 4905 | 4905 |
| 4906 | 4906 |
| 4907 // Applying an equivalent content scale on the content layer and the mask | 4907 // Applying an equivalent content scale on the content layer and the mask |
| 4908 // should still result in the same part of the mask being used. | 4908 // should still result in the same part of the mask being used. |
| 4909 gfx::Size content_bounds = | 4909 gfx::Size content_bounds = |
| 4910 gfx::ToRoundedSize(gfx::ScaleSize(scaling_layer_size, | 4910 gfx::ToRoundedSize(gfx::ScaleSize(scaling_layer_size, |
| 4911 device_scale_factor)); | 4911 device_scale_factor)); |
| 4912 content_layer->SetContentBounds(content_bounds); | 4912 content_layer->SetContentBounds(content_bounds); |
| 4913 content_layer->SetContentsScale(device_scale_factor, device_scale_factor); | 4913 content_layer->SetContentsScale(device_scale_factor, device_scale_factor); |
| 4914 mask_layer->SetContentBounds(content_bounds); | 4914 mask_layer->SetContentBounds(content_bounds); |
| 4915 mask_layer->SetContentsScale(device_scale_factor, device_scale_factor); | 4915 mask_layer->SetContentsScale(device_scale_factor, device_scale_factor); |
| 4916 host_impl_->active_tree()->set_needs_update_draw_properties(); | 4916 host_impl_->active_tree()->set_needs_update_draw_properties(); |
| 4917 { | 4917 { |
| 4918 LayerTreeHostImpl::FrameData frame; | 4918 LayerTreeHostImpl::FrameData frame; |
| 4919 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame)); | 4919 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame)); |
| 4920 | 4920 |
| 4921 ASSERT_EQ(1u, frame.render_passes.size()); | 4921 ASSERT_EQ(1u, frame.render_passes.size()); |
| 4922 ASSERT_EQ(1u, frame.render_passes[0]->quad_list.size()); | 4922 ASSERT_EQ(1u, frame.render_passes[0]->quad_list.size()); |
| 4923 ASSERT_EQ(DrawQuad::RENDER_PASS, | 4923 ASSERT_EQ(DrawQuad::RENDER_PASS, |
| 4924 frame.render_passes[0]->quad_list[0]->material); | 4924 frame.render_passes[0]->quad_list[0]->material); |
| 4925 const RenderPassDrawQuad* render_pass_quad = | 4925 const RenderPassDrawQuad* render_pass_quad = |
| 4926 RenderPassDrawQuad::MaterialCast(frame.render_passes[0]->quad_list[0]); | 4926 RenderPassDrawQuad::MaterialCast(frame.render_passes[0]->quad_list[0]); |
| 4927 EXPECT_EQ(gfx::Rect(0, 0, 200, 200).ToString(), | 4927 EXPECT_EQ(gfx::Rect(0, 0, 200, 200).ToString(), |
| 4928 render_pass_quad->rect.ToString()); | 4928 render_pass_quad->rect.ToString()); |
| 4929 EXPECT_EQ(gfx::RectF(0.f, 0.f, 1.f, 1.f).ToString(), | 4929 EXPECT_EQ(gfx::RectF(0.f, 0.f, 1.f, 1.f).ToString(), |
| 4930 render_pass_quad->mask_uv_rect.ToString()); | 4930 render_pass_quad->mask_uv_rect.ToString()); |
| 4931 | 4931 |
| 4932 host_impl_->DrawLayers(&frame, gfx::FrameTime::Now()); | 4932 host_impl_->DrawLayers(&frame); |
| 4933 host_impl_->DidDrawAllLayers(frame); | 4933 host_impl_->DidDrawAllLayers(frame); |
| 4934 } | 4934 } |
| 4935 } | 4935 } |
| 4936 | 4936 |
| 4937 TEST_F(LayerTreeHostImplTest, MaskLayerWithDifferentBounds) { | 4937 TEST_F(LayerTreeHostImplTest, MaskLayerWithDifferentBounds) { |
| 4938 // The mask layer has bounds 100x100 but is attached to a layer with bounds | 4938 // The mask layer has bounds 100x100 but is attached to a layer with bounds |
| 4939 // 50x50. | 4939 // 50x50. |
| 4940 | 4940 |
| 4941 scoped_ptr<LayerImpl> scoped_root = | 4941 scoped_ptr<LayerImpl> scoped_root = |
| 4942 LayerImpl::Create(host_impl_->active_tree(), 1); | 4942 LayerImpl::Create(host_impl_->active_tree(), 1); |
| (...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4982 ASSERT_EQ(1u, frame.render_passes[0]->quad_list.size()); | 4982 ASSERT_EQ(1u, frame.render_passes[0]->quad_list.size()); |
| 4983 ASSERT_EQ(DrawQuad::RENDER_PASS, | 4983 ASSERT_EQ(DrawQuad::RENDER_PASS, |
| 4984 frame.render_passes[0]->quad_list[0]->material); | 4984 frame.render_passes[0]->quad_list[0]->material); |
| 4985 const RenderPassDrawQuad* render_pass_quad = | 4985 const RenderPassDrawQuad* render_pass_quad = |
| 4986 RenderPassDrawQuad::MaterialCast(frame.render_passes[0]->quad_list[0]); | 4986 RenderPassDrawQuad::MaterialCast(frame.render_passes[0]->quad_list[0]); |
| 4987 EXPECT_EQ(gfx::Rect(0, 0, 50, 50).ToString(), | 4987 EXPECT_EQ(gfx::Rect(0, 0, 50, 50).ToString(), |
| 4988 render_pass_quad->rect.ToString()); | 4988 render_pass_quad->rect.ToString()); |
| 4989 EXPECT_EQ(gfx::RectF(0.f, 0.f, 1.f, 1.f).ToString(), | 4989 EXPECT_EQ(gfx::RectF(0.f, 0.f, 1.f, 1.f).ToString(), |
| 4990 render_pass_quad->mask_uv_rect.ToString()); | 4990 render_pass_quad->mask_uv_rect.ToString()); |
| 4991 | 4991 |
| 4992 host_impl_->DrawLayers(&frame, gfx::FrameTime::Now()); | 4992 host_impl_->DrawLayers(&frame); |
| 4993 host_impl_->DidDrawAllLayers(frame); | 4993 host_impl_->DidDrawAllLayers(frame); |
| 4994 } | 4994 } |
| 4995 | 4995 |
| 4996 // Applying a DSF should change the render surface size, but won't affect | 4996 // Applying a DSF should change the render surface size, but won't affect |
| 4997 // which part of the mask is used. | 4997 // which part of the mask is used. |
| 4998 device_scale_factor = 2.f; | 4998 device_scale_factor = 2.f; |
| 4999 gfx::Size device_viewport = | 4999 gfx::Size device_viewport = |
| 5000 gfx::ToFlooredSize(gfx::ScaleSize(root_size, device_scale_factor)); | 5000 gfx::ToFlooredSize(gfx::ScaleSize(root_size, device_scale_factor)); |
| 5001 host_impl_->SetViewportSize(device_viewport); | 5001 host_impl_->SetViewportSize(device_viewport); |
| 5002 host_impl_->SetDeviceScaleFactor(device_scale_factor); | 5002 host_impl_->SetDeviceScaleFactor(device_scale_factor); |
| 5003 host_impl_->active_tree()->set_needs_update_draw_properties(); | 5003 host_impl_->active_tree()->set_needs_update_draw_properties(); |
| 5004 { | 5004 { |
| 5005 LayerTreeHostImpl::FrameData frame; | 5005 LayerTreeHostImpl::FrameData frame; |
| 5006 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame)); | 5006 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame)); |
| 5007 | 5007 |
| 5008 ASSERT_EQ(1u, frame.render_passes.size()); | 5008 ASSERT_EQ(1u, frame.render_passes.size()); |
| 5009 ASSERT_EQ(1u, frame.render_passes[0]->quad_list.size()); | 5009 ASSERT_EQ(1u, frame.render_passes[0]->quad_list.size()); |
| 5010 ASSERT_EQ(DrawQuad::RENDER_PASS, | 5010 ASSERT_EQ(DrawQuad::RENDER_PASS, |
| 5011 frame.render_passes[0]->quad_list[0]->material); | 5011 frame.render_passes[0]->quad_list[0]->material); |
| 5012 const RenderPassDrawQuad* render_pass_quad = | 5012 const RenderPassDrawQuad* render_pass_quad = |
| 5013 RenderPassDrawQuad::MaterialCast(frame.render_passes[0]->quad_list[0]); | 5013 RenderPassDrawQuad::MaterialCast(frame.render_passes[0]->quad_list[0]); |
| 5014 EXPECT_EQ(gfx::Rect(0, 0, 100, 100).ToString(), | 5014 EXPECT_EQ(gfx::Rect(0, 0, 100, 100).ToString(), |
| 5015 render_pass_quad->rect.ToString()); | 5015 render_pass_quad->rect.ToString()); |
| 5016 EXPECT_EQ(gfx::RectF(0.f, 0.f, 1.f, 1.f).ToString(), | 5016 EXPECT_EQ(gfx::RectF(0.f, 0.f, 1.f, 1.f).ToString(), |
| 5017 render_pass_quad->mask_uv_rect.ToString()); | 5017 render_pass_quad->mask_uv_rect.ToString()); |
| 5018 | 5018 |
| 5019 host_impl_->DrawLayers(&frame, gfx::FrameTime::Now()); | 5019 host_impl_->DrawLayers(&frame); |
| 5020 host_impl_->DidDrawAllLayers(frame); | 5020 host_impl_->DidDrawAllLayers(frame); |
| 5021 } | 5021 } |
| 5022 | 5022 |
| 5023 // Applying an equivalent content scale on the content layer and the mask | 5023 // Applying an equivalent content scale on the content layer and the mask |
| 5024 // should still result in the same part of the mask being used. | 5024 // should still result in the same part of the mask being used. |
| 5025 gfx::Size layer_size_large = | 5025 gfx::Size layer_size_large = |
| 5026 gfx::ToRoundedSize(gfx::ScaleSize(layer_size, device_scale_factor)); | 5026 gfx::ToRoundedSize(gfx::ScaleSize(layer_size, device_scale_factor)); |
| 5027 content_layer->SetContentBounds(layer_size_large); | 5027 content_layer->SetContentBounds(layer_size_large); |
| 5028 content_layer->SetContentsScale(device_scale_factor, device_scale_factor); | 5028 content_layer->SetContentsScale(device_scale_factor, device_scale_factor); |
| 5029 gfx::Size mask_size_large = | 5029 gfx::Size mask_size_large = |
| 5030 gfx::ToRoundedSize(gfx::ScaleSize(mask_size, device_scale_factor)); | 5030 gfx::ToRoundedSize(gfx::ScaleSize(mask_size, device_scale_factor)); |
| 5031 mask_layer->SetContentBounds(mask_size_large); | 5031 mask_layer->SetContentBounds(mask_size_large); |
| 5032 mask_layer->SetContentsScale(device_scale_factor, device_scale_factor); | 5032 mask_layer->SetContentsScale(device_scale_factor, device_scale_factor); |
| 5033 host_impl_->active_tree()->set_needs_update_draw_properties(); | 5033 host_impl_->active_tree()->set_needs_update_draw_properties(); |
| 5034 { | 5034 { |
| 5035 LayerTreeHostImpl::FrameData frame; | 5035 LayerTreeHostImpl::FrameData frame; |
| 5036 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame)); | 5036 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame)); |
| 5037 | 5037 |
| 5038 ASSERT_EQ(1u, frame.render_passes.size()); | 5038 ASSERT_EQ(1u, frame.render_passes.size()); |
| 5039 ASSERT_EQ(1u, frame.render_passes[0]->quad_list.size()); | 5039 ASSERT_EQ(1u, frame.render_passes[0]->quad_list.size()); |
| 5040 ASSERT_EQ(DrawQuad::RENDER_PASS, | 5040 ASSERT_EQ(DrawQuad::RENDER_PASS, |
| 5041 frame.render_passes[0]->quad_list[0]->material); | 5041 frame.render_passes[0]->quad_list[0]->material); |
| 5042 const RenderPassDrawQuad* render_pass_quad = | 5042 const RenderPassDrawQuad* render_pass_quad = |
| 5043 RenderPassDrawQuad::MaterialCast(frame.render_passes[0]->quad_list[0]); | 5043 RenderPassDrawQuad::MaterialCast(frame.render_passes[0]->quad_list[0]); |
| 5044 EXPECT_EQ(gfx::Rect(0, 0, 100, 100).ToString(), | 5044 EXPECT_EQ(gfx::Rect(0, 0, 100, 100).ToString(), |
| 5045 render_pass_quad->rect.ToString()); | 5045 render_pass_quad->rect.ToString()); |
| 5046 EXPECT_EQ(gfx::RectF(0.f, 0.f, 1.f, 1.f).ToString(), | 5046 EXPECT_EQ(gfx::RectF(0.f, 0.f, 1.f, 1.f).ToString(), |
| 5047 render_pass_quad->mask_uv_rect.ToString()); | 5047 render_pass_quad->mask_uv_rect.ToString()); |
| 5048 | 5048 |
| 5049 host_impl_->DrawLayers(&frame, gfx::FrameTime::Now()); | 5049 host_impl_->DrawLayers(&frame); |
| 5050 host_impl_->DidDrawAllLayers(frame); | 5050 host_impl_->DidDrawAllLayers(frame); |
| 5051 } | 5051 } |
| 5052 | 5052 |
| 5053 // Applying a different contents scale to the mask layer means it will have | 5053 // Applying a different contents scale to the mask layer means it will have |
| 5054 // a larger texture, but it should use the same tex coords to cover the | 5054 // a larger texture, but it should use the same tex coords to cover the |
| 5055 // layer it masks. | 5055 // layer it masks. |
| 5056 mask_layer->SetContentBounds(mask_size); | 5056 mask_layer->SetContentBounds(mask_size); |
| 5057 mask_layer->SetContentsScale(1.f, 1.f); | 5057 mask_layer->SetContentsScale(1.f, 1.f); |
| 5058 host_impl_->active_tree()->set_needs_update_draw_properties(); | 5058 host_impl_->active_tree()->set_needs_update_draw_properties(); |
| 5059 { | 5059 { |
| 5060 LayerTreeHostImpl::FrameData frame; | 5060 LayerTreeHostImpl::FrameData frame; |
| 5061 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame)); | 5061 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame)); |
| 5062 | 5062 |
| 5063 ASSERT_EQ(1u, frame.render_passes.size()); | 5063 ASSERT_EQ(1u, frame.render_passes.size()); |
| 5064 ASSERT_EQ(1u, frame.render_passes[0]->quad_list.size()); | 5064 ASSERT_EQ(1u, frame.render_passes[0]->quad_list.size()); |
| 5065 ASSERT_EQ(DrawQuad::RENDER_PASS, | 5065 ASSERT_EQ(DrawQuad::RENDER_PASS, |
| 5066 frame.render_passes[0]->quad_list[0]->material); | 5066 frame.render_passes[0]->quad_list[0]->material); |
| 5067 const RenderPassDrawQuad* render_pass_quad = | 5067 const RenderPassDrawQuad* render_pass_quad = |
| 5068 RenderPassDrawQuad::MaterialCast(frame.render_passes[0]->quad_list[0]); | 5068 RenderPassDrawQuad::MaterialCast(frame.render_passes[0]->quad_list[0]); |
| 5069 EXPECT_EQ(gfx::Rect(0, 0, 100, 100).ToString(), | 5069 EXPECT_EQ(gfx::Rect(0, 0, 100, 100).ToString(), |
| 5070 render_pass_quad->rect.ToString()); | 5070 render_pass_quad->rect.ToString()); |
| 5071 EXPECT_EQ(gfx::RectF(0.f, 0.f, 1.f, 1.f).ToString(), | 5071 EXPECT_EQ(gfx::RectF(0.f, 0.f, 1.f, 1.f).ToString(), |
| 5072 render_pass_quad->mask_uv_rect.ToString()); | 5072 render_pass_quad->mask_uv_rect.ToString()); |
| 5073 | 5073 |
| 5074 host_impl_->DrawLayers(&frame, gfx::FrameTime::Now()); | 5074 host_impl_->DrawLayers(&frame); |
| 5075 host_impl_->DidDrawAllLayers(frame); | 5075 host_impl_->DidDrawAllLayers(frame); |
| 5076 } | 5076 } |
| 5077 } | 5077 } |
| 5078 | 5078 |
| 5079 TEST_F(LayerTreeHostImplTest, ReflectionMaskLayerWithDifferentBounds) { | 5079 TEST_F(LayerTreeHostImplTest, ReflectionMaskLayerWithDifferentBounds) { |
| 5080 // The replica's mask layer has bounds 100x100 but the replica is of a | 5080 // The replica's mask layer has bounds 100x100 but the replica is of a |
| 5081 // layer with bounds 50x50. | 5081 // layer with bounds 50x50. |
| 5082 | 5082 |
| 5083 scoped_ptr<LayerImpl> scoped_root = | 5083 scoped_ptr<LayerImpl> scoped_root = |
| 5084 LayerImpl::Create(host_impl_->active_tree(), 1); | 5084 LayerImpl::Create(host_impl_->active_tree(), 1); |
| (...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 5130 ASSERT_EQ(DrawQuad::RENDER_PASS, | 5130 ASSERT_EQ(DrawQuad::RENDER_PASS, |
| 5131 frame.render_passes[0]->quad_list[1]->material); | 5131 frame.render_passes[0]->quad_list[1]->material); |
| 5132 const RenderPassDrawQuad* replica_quad = | 5132 const RenderPassDrawQuad* replica_quad = |
| 5133 RenderPassDrawQuad::MaterialCast(frame.render_passes[0]->quad_list[1]); | 5133 RenderPassDrawQuad::MaterialCast(frame.render_passes[0]->quad_list[1]); |
| 5134 EXPECT_TRUE(replica_quad->is_replica); | 5134 EXPECT_TRUE(replica_quad->is_replica); |
| 5135 EXPECT_EQ(gfx::Rect(0, 0, 50, 50).ToString(), | 5135 EXPECT_EQ(gfx::Rect(0, 0, 50, 50).ToString(), |
| 5136 replica_quad->rect.ToString()); | 5136 replica_quad->rect.ToString()); |
| 5137 EXPECT_EQ(gfx::RectF(0.f, 0.f, 1.f, 1.f).ToString(), | 5137 EXPECT_EQ(gfx::RectF(0.f, 0.f, 1.f, 1.f).ToString(), |
| 5138 replica_quad->mask_uv_rect.ToString()); | 5138 replica_quad->mask_uv_rect.ToString()); |
| 5139 | 5139 |
| 5140 host_impl_->DrawLayers(&frame, gfx::FrameTime::Now()); | 5140 host_impl_->DrawLayers(&frame); |
| 5141 host_impl_->DidDrawAllLayers(frame); | 5141 host_impl_->DidDrawAllLayers(frame); |
| 5142 } | 5142 } |
| 5143 | 5143 |
| 5144 // Applying a DSF should change the render surface size, but won't affect | 5144 // Applying a DSF should change the render surface size, but won't affect |
| 5145 // which part of the mask is used. | 5145 // which part of the mask is used. |
| 5146 device_scale_factor = 2.f; | 5146 device_scale_factor = 2.f; |
| 5147 gfx::Size device_viewport = | 5147 gfx::Size device_viewport = |
| 5148 gfx::ToFlooredSize(gfx::ScaleSize(root_size, device_scale_factor)); | 5148 gfx::ToFlooredSize(gfx::ScaleSize(root_size, device_scale_factor)); |
| 5149 host_impl_->SetViewportSize(device_viewport); | 5149 host_impl_->SetViewportSize(device_viewport); |
| 5150 host_impl_->SetDeviceScaleFactor(device_scale_factor); | 5150 host_impl_->SetDeviceScaleFactor(device_scale_factor); |
| 5151 host_impl_->active_tree()->set_needs_update_draw_properties(); | 5151 host_impl_->active_tree()->set_needs_update_draw_properties(); |
| 5152 { | 5152 { |
| 5153 LayerTreeHostImpl::FrameData frame; | 5153 LayerTreeHostImpl::FrameData frame; |
| 5154 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame)); | 5154 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame)); |
| 5155 | 5155 |
| 5156 ASSERT_EQ(1u, frame.render_passes.size()); | 5156 ASSERT_EQ(1u, frame.render_passes.size()); |
| 5157 ASSERT_EQ(2u, frame.render_passes[0]->quad_list.size()); | 5157 ASSERT_EQ(2u, frame.render_passes[0]->quad_list.size()); |
| 5158 ASSERT_EQ(DrawQuad::RENDER_PASS, | 5158 ASSERT_EQ(DrawQuad::RENDER_PASS, |
| 5159 frame.render_passes[0]->quad_list[1]->material); | 5159 frame.render_passes[0]->quad_list[1]->material); |
| 5160 const RenderPassDrawQuad* replica_quad = | 5160 const RenderPassDrawQuad* replica_quad = |
| 5161 RenderPassDrawQuad::MaterialCast(frame.render_passes[0]->quad_list[1]); | 5161 RenderPassDrawQuad::MaterialCast(frame.render_passes[0]->quad_list[1]); |
| 5162 EXPECT_TRUE(replica_quad->is_replica); | 5162 EXPECT_TRUE(replica_quad->is_replica); |
| 5163 EXPECT_EQ(gfx::Rect(0, 0, 100, 100).ToString(), | 5163 EXPECT_EQ(gfx::Rect(0, 0, 100, 100).ToString(), |
| 5164 replica_quad->rect.ToString()); | 5164 replica_quad->rect.ToString()); |
| 5165 EXPECT_EQ(gfx::RectF(0.f, 0.f, 1.f, 1.f).ToString(), | 5165 EXPECT_EQ(gfx::RectF(0.f, 0.f, 1.f, 1.f).ToString(), |
| 5166 replica_quad->mask_uv_rect.ToString()); | 5166 replica_quad->mask_uv_rect.ToString()); |
| 5167 | 5167 |
| 5168 host_impl_->DrawLayers(&frame, gfx::FrameTime::Now()); | 5168 host_impl_->DrawLayers(&frame); |
| 5169 host_impl_->DidDrawAllLayers(frame); | 5169 host_impl_->DidDrawAllLayers(frame); |
| 5170 } | 5170 } |
| 5171 | 5171 |
| 5172 // Applying an equivalent content scale on the content layer and the mask | 5172 // Applying an equivalent content scale on the content layer and the mask |
| 5173 // should still result in the same part of the mask being used. | 5173 // should still result in the same part of the mask being used. |
| 5174 gfx::Size layer_size_large = | 5174 gfx::Size layer_size_large = |
| 5175 gfx::ToRoundedSize(gfx::ScaleSize(layer_size, device_scale_factor)); | 5175 gfx::ToRoundedSize(gfx::ScaleSize(layer_size, device_scale_factor)); |
| 5176 content_layer->SetContentBounds(layer_size_large); | 5176 content_layer->SetContentBounds(layer_size_large); |
| 5177 content_layer->SetContentsScale(device_scale_factor, device_scale_factor); | 5177 content_layer->SetContentsScale(device_scale_factor, device_scale_factor); |
| 5178 gfx::Size mask_size_large = | 5178 gfx::Size mask_size_large = |
| (...skipping 10 matching lines...) Expand all Loading... |
| 5189 ASSERT_EQ(DrawQuad::RENDER_PASS, | 5189 ASSERT_EQ(DrawQuad::RENDER_PASS, |
| 5190 frame.render_passes[0]->quad_list[1]->material); | 5190 frame.render_passes[0]->quad_list[1]->material); |
| 5191 const RenderPassDrawQuad* replica_quad = | 5191 const RenderPassDrawQuad* replica_quad = |
| 5192 RenderPassDrawQuad::MaterialCast(frame.render_passes[0]->quad_list[1]); | 5192 RenderPassDrawQuad::MaterialCast(frame.render_passes[0]->quad_list[1]); |
| 5193 EXPECT_TRUE(replica_quad->is_replica); | 5193 EXPECT_TRUE(replica_quad->is_replica); |
| 5194 EXPECT_EQ(gfx::Rect(0, 0, 100, 100).ToString(), | 5194 EXPECT_EQ(gfx::Rect(0, 0, 100, 100).ToString(), |
| 5195 replica_quad->rect.ToString()); | 5195 replica_quad->rect.ToString()); |
| 5196 EXPECT_EQ(gfx::RectF(0.f, 0.f, 1.f, 1.f).ToString(), | 5196 EXPECT_EQ(gfx::RectF(0.f, 0.f, 1.f, 1.f).ToString(), |
| 5197 replica_quad->mask_uv_rect.ToString()); | 5197 replica_quad->mask_uv_rect.ToString()); |
| 5198 | 5198 |
| 5199 host_impl_->DrawLayers(&frame, gfx::FrameTime::Now()); | 5199 host_impl_->DrawLayers(&frame); |
| 5200 host_impl_->DidDrawAllLayers(frame); | 5200 host_impl_->DidDrawAllLayers(frame); |
| 5201 } | 5201 } |
| 5202 | 5202 |
| 5203 // Applying a different contents scale to the mask layer means it will have | 5203 // Applying a different contents scale to the mask layer means it will have |
| 5204 // a larger texture, but it should use the same tex coords to cover the | 5204 // a larger texture, but it should use the same tex coords to cover the |
| 5205 // layer it masks. | 5205 // layer it masks. |
| 5206 mask_layer->SetContentBounds(mask_size); | 5206 mask_layer->SetContentBounds(mask_size); |
| 5207 mask_layer->SetContentsScale(1.f, 1.f); | 5207 mask_layer->SetContentsScale(1.f, 1.f); |
| 5208 host_impl_->active_tree()->set_needs_update_draw_properties(); | 5208 host_impl_->active_tree()->set_needs_update_draw_properties(); |
| 5209 { | 5209 { |
| 5210 LayerTreeHostImpl::FrameData frame; | 5210 LayerTreeHostImpl::FrameData frame; |
| 5211 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame)); | 5211 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame)); |
| 5212 | 5212 |
| 5213 ASSERT_EQ(1u, frame.render_passes.size()); | 5213 ASSERT_EQ(1u, frame.render_passes.size()); |
| 5214 ASSERT_EQ(2u, frame.render_passes[0]->quad_list.size()); | 5214 ASSERT_EQ(2u, frame.render_passes[0]->quad_list.size()); |
| 5215 ASSERT_EQ(DrawQuad::RENDER_PASS, | 5215 ASSERT_EQ(DrawQuad::RENDER_PASS, |
| 5216 frame.render_passes[0]->quad_list[1]->material); | 5216 frame.render_passes[0]->quad_list[1]->material); |
| 5217 const RenderPassDrawQuad* replica_quad = | 5217 const RenderPassDrawQuad* replica_quad = |
| 5218 RenderPassDrawQuad::MaterialCast(frame.render_passes[0]->quad_list[1]); | 5218 RenderPassDrawQuad::MaterialCast(frame.render_passes[0]->quad_list[1]); |
| 5219 EXPECT_TRUE(replica_quad->is_replica); | 5219 EXPECT_TRUE(replica_quad->is_replica); |
| 5220 EXPECT_EQ(gfx::Rect(0, 0, 100, 100).ToString(), | 5220 EXPECT_EQ(gfx::Rect(0, 0, 100, 100).ToString(), |
| 5221 replica_quad->rect.ToString()); | 5221 replica_quad->rect.ToString()); |
| 5222 EXPECT_EQ(gfx::RectF(0.f, 0.f, 1.f, 1.f).ToString(), | 5222 EXPECT_EQ(gfx::RectF(0.f, 0.f, 1.f, 1.f).ToString(), |
| 5223 replica_quad->mask_uv_rect.ToString()); | 5223 replica_quad->mask_uv_rect.ToString()); |
| 5224 | 5224 |
| 5225 host_impl_->DrawLayers(&frame, gfx::FrameTime::Now()); | 5225 host_impl_->DrawLayers(&frame); |
| 5226 host_impl_->DidDrawAllLayers(frame); | 5226 host_impl_->DidDrawAllLayers(frame); |
| 5227 } | 5227 } |
| 5228 } | 5228 } |
| 5229 | 5229 |
| 5230 TEST_F(LayerTreeHostImplTest, ReflectionMaskLayerForSurfaceWithUnclippedChild) { | 5230 TEST_F(LayerTreeHostImplTest, ReflectionMaskLayerForSurfaceWithUnclippedChild) { |
| 5231 // The replica is of a layer with bounds 50x50, but it has a child that causes | 5231 // The replica is of a layer with bounds 50x50, but it has a child that causes |
| 5232 // the surface bounds to be larger. | 5232 // the surface bounds to be larger. |
| 5233 | 5233 |
| 5234 scoped_ptr<LayerImpl> scoped_root = | 5234 scoped_ptr<LayerImpl> scoped_root = |
| 5235 LayerImpl::Create(host_impl_->active_tree(), 1); | 5235 LayerImpl::Create(host_impl_->active_tree(), 1); |
| (...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 5302 ASSERT_EQ(DrawQuad::RENDER_PASS, | 5302 ASSERT_EQ(DrawQuad::RENDER_PASS, |
| 5303 frame.render_passes[0]->quad_list[1]->material); | 5303 frame.render_passes[0]->quad_list[1]->material); |
| 5304 const RenderPassDrawQuad* replica_quad = | 5304 const RenderPassDrawQuad* replica_quad = |
| 5305 RenderPassDrawQuad::MaterialCast(frame.render_passes[0]->quad_list[1]); | 5305 RenderPassDrawQuad::MaterialCast(frame.render_passes[0]->quad_list[1]); |
| 5306 EXPECT_TRUE(replica_quad->is_replica); | 5306 EXPECT_TRUE(replica_quad->is_replica); |
| 5307 EXPECT_EQ(gfx::Rect(0, 0, 100, 50).ToString(), | 5307 EXPECT_EQ(gfx::Rect(0, 0, 100, 50).ToString(), |
| 5308 replica_quad->rect.ToString()); | 5308 replica_quad->rect.ToString()); |
| 5309 EXPECT_EQ(gfx::RectF(0.f, 0.f, 2.f, 1.f).ToString(), | 5309 EXPECT_EQ(gfx::RectF(0.f, 0.f, 2.f, 1.f).ToString(), |
| 5310 replica_quad->mask_uv_rect.ToString()); | 5310 replica_quad->mask_uv_rect.ToString()); |
| 5311 | 5311 |
| 5312 host_impl_->DrawLayers(&frame, gfx::FrameTime::Now()); | 5312 host_impl_->DrawLayers(&frame); |
| 5313 host_impl_->DidDrawAllLayers(frame); | 5313 host_impl_->DidDrawAllLayers(frame); |
| 5314 } | 5314 } |
| 5315 | 5315 |
| 5316 // Move the child to (-50, 0) instead. Now the mask should be moved to still | 5316 // Move the child to (-50, 0) instead. Now the mask should be moved to still |
| 5317 // cover the layer being replicated. | 5317 // cover the layer being replicated. |
| 5318 content_child_layer->SetPosition(gfx::Point(-50, 0)); | 5318 content_child_layer->SetPosition(gfx::Point(-50, 0)); |
| 5319 { | 5319 { |
| 5320 LayerTreeHostImpl::FrameData frame; | 5320 LayerTreeHostImpl::FrameData frame; |
| 5321 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame)); | 5321 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame)); |
| 5322 | 5322 |
| (...skipping 13 matching lines...) Expand all Loading... |
| 5336 ASSERT_EQ(DrawQuad::RENDER_PASS, | 5336 ASSERT_EQ(DrawQuad::RENDER_PASS, |
| 5337 frame.render_passes[0]->quad_list[1]->material); | 5337 frame.render_passes[0]->quad_list[1]->material); |
| 5338 const RenderPassDrawQuad* replica_quad = | 5338 const RenderPassDrawQuad* replica_quad = |
| 5339 RenderPassDrawQuad::MaterialCast(frame.render_passes[0]->quad_list[1]); | 5339 RenderPassDrawQuad::MaterialCast(frame.render_passes[0]->quad_list[1]); |
| 5340 EXPECT_TRUE(replica_quad->is_replica); | 5340 EXPECT_TRUE(replica_quad->is_replica); |
| 5341 EXPECT_EQ(gfx::Rect(-50, 0, 100, 50).ToString(), | 5341 EXPECT_EQ(gfx::Rect(-50, 0, 100, 50).ToString(), |
| 5342 replica_quad->rect.ToString()); | 5342 replica_quad->rect.ToString()); |
| 5343 EXPECT_EQ(gfx::RectF(-1.f, 0.f, 2.f, 1.f).ToString(), | 5343 EXPECT_EQ(gfx::RectF(-1.f, 0.f, 2.f, 1.f).ToString(), |
| 5344 replica_quad->mask_uv_rect.ToString()); | 5344 replica_quad->mask_uv_rect.ToString()); |
| 5345 | 5345 |
| 5346 host_impl_->DrawLayers(&frame, gfx::FrameTime::Now()); | 5346 host_impl_->DrawLayers(&frame); |
| 5347 host_impl_->DidDrawAllLayers(frame); | 5347 host_impl_->DidDrawAllLayers(frame); |
| 5348 } | 5348 } |
| 5349 } | 5349 } |
| 5350 | 5350 |
| 5351 TEST_F(LayerTreeHostImplTest, MaskLayerForSurfaceWithClippedLayer) { | 5351 TEST_F(LayerTreeHostImplTest, MaskLayerForSurfaceWithClippedLayer) { |
| 5352 // The masked layer has bounds 50x50, but it has a child that causes | 5352 // The masked layer has bounds 50x50, but it has a child that causes |
| 5353 // the surface bounds to be larger. It also has a parent that clips the | 5353 // the surface bounds to be larger. It also has a parent that clips the |
| 5354 // masked layer and its surface. | 5354 // masked layer and its surface. |
| 5355 | 5355 |
| 5356 scoped_ptr<LayerImpl> scoped_root = | 5356 scoped_ptr<LayerImpl> scoped_root = |
| (...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 5427 render_pass_quad->rect.ToString()); | 5427 render_pass_quad->rect.ToString()); |
| 5428 | 5428 |
| 5429 // The masked layer is 50x50, but the surface size is 10x20. So the texture | 5429 // The masked layer is 50x50, but the surface size is 10x20. So the texture |
| 5430 // coords in the mask are scaled by 10/50 and 20/50. | 5430 // coords in the mask are scaled by 10/50 and 20/50. |
| 5431 // The surface is clipped to (20,10) so the mask texture coords are offset | 5431 // The surface is clipped to (20,10) so the mask texture coords are offset |
| 5432 // by 20/50 and 10/50 | 5432 // by 20/50 and 10/50 |
| 5433 EXPECT_EQ(gfx::ScaleRect(gfx::RectF(20.f, 10.f, 10.f, 20.f), | 5433 EXPECT_EQ(gfx::ScaleRect(gfx::RectF(20.f, 10.f, 10.f, 20.f), |
| 5434 1.f / 50.f).ToString(), | 5434 1.f / 50.f).ToString(), |
| 5435 render_pass_quad->mask_uv_rect.ToString()); | 5435 render_pass_quad->mask_uv_rect.ToString()); |
| 5436 | 5436 |
| 5437 host_impl_->DrawLayers(&frame, gfx::FrameTime::Now()); | 5437 host_impl_->DrawLayers(&frame); |
| 5438 host_impl_->DidDrawAllLayers(frame); | 5438 host_impl_->DidDrawAllLayers(frame); |
| 5439 } | 5439 } |
| 5440 } | 5440 } |
| 5441 | 5441 |
| 5442 class GLRendererWithSetupQuadForAntialiasing : public GLRenderer { | 5442 class GLRendererWithSetupQuadForAntialiasing : public GLRenderer { |
| 5443 public: | 5443 public: |
| 5444 using GLRenderer::SetupQuadForAntialiasing; | 5444 using GLRenderer::SetupQuadForAntialiasing; |
| 5445 }; | 5445 }; |
| 5446 | 5446 |
| 5447 TEST_F(LayerTreeHostImplTest, FarAwayQuadsDontNeedAA) { | 5447 TEST_F(LayerTreeHostImplTest, FarAwayQuadsDontNeedAA) { |
| (...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 5499 ASSERT_LE(1u, frame.render_passes[0]->quad_list.size()); | 5499 ASSERT_LE(1u, frame.render_passes[0]->quad_list.size()); |
| 5500 const DrawQuad* quad = frame.render_passes[0]->quad_list[0]; | 5500 const DrawQuad* quad = frame.render_passes[0]->quad_list[0]; |
| 5501 | 5501 |
| 5502 float edge[24]; | 5502 float edge[24]; |
| 5503 gfx::QuadF device_layer_quad; | 5503 gfx::QuadF device_layer_quad; |
| 5504 bool antialiased = | 5504 bool antialiased = |
| 5505 GLRendererWithSetupQuadForAntialiasing::SetupQuadForAntialiasing( | 5505 GLRendererWithSetupQuadForAntialiasing::SetupQuadForAntialiasing( |
| 5506 quad->quadTransform(), quad, &device_layer_quad, edge); | 5506 quad->quadTransform(), quad, &device_layer_quad, edge); |
| 5507 EXPECT_FALSE(antialiased); | 5507 EXPECT_FALSE(antialiased); |
| 5508 | 5508 |
| 5509 host_impl_->DrawLayers(&frame, gfx::FrameTime::Now()); | 5509 host_impl_->DrawLayers(&frame); |
| 5510 host_impl_->DidDrawAllLayers(frame); | 5510 host_impl_->DidDrawAllLayers(frame); |
| 5511 } | 5511 } |
| 5512 | 5512 |
| 5513 | 5513 |
| 5514 class CompositorFrameMetadataTest : public LayerTreeHostImplTest { | 5514 class CompositorFrameMetadataTest : public LayerTreeHostImplTest { |
| 5515 public: | 5515 public: |
| 5516 CompositorFrameMetadataTest() | 5516 CompositorFrameMetadataTest() |
| 5517 : swap_buffers_complete_(0) {} | 5517 : swap_buffers_complete_(0) {} |
| 5518 | 5518 |
| 5519 virtual void DidSwapBuffersCompleteOnImplThread() OVERRIDE { | 5519 virtual void DidSwapBuffersCompleteOnImplThread() OVERRIDE { |
| 5520 swap_buffers_complete_++; | 5520 swap_buffers_complete_++; |
| 5521 } | 5521 } |
| 5522 | 5522 |
| 5523 int swap_buffers_complete_; | 5523 int swap_buffers_complete_; |
| 5524 }; | 5524 }; |
| 5525 | 5525 |
| 5526 TEST_F(CompositorFrameMetadataTest, CompositorFrameAckCountsAsSwapComplete) { | 5526 TEST_F(CompositorFrameMetadataTest, CompositorFrameAckCountsAsSwapComplete) { |
| 5527 SetupRootLayerImpl(FakeLayerWithQuads::Create(host_impl_->active_tree(), 1)); | 5527 SetupRootLayerImpl(FakeLayerWithQuads::Create(host_impl_->active_tree(), 1)); |
| 5528 { | 5528 { |
| 5529 LayerTreeHostImpl::FrameData frame; | 5529 LayerTreeHostImpl::FrameData frame; |
| 5530 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame)); | 5530 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame)); |
| 5531 host_impl_->DrawLayers(&frame, base::TimeTicks()); | 5531 host_impl_->DrawLayers(&frame); |
| 5532 host_impl_->DidDrawAllLayers(frame); | 5532 host_impl_->DidDrawAllLayers(frame); |
| 5533 } | 5533 } |
| 5534 CompositorFrameAck ack; | 5534 CompositorFrameAck ack; |
| 5535 host_impl_->ReclaimResources(&ack); | 5535 host_impl_->ReclaimResources(&ack); |
| 5536 host_impl_->DidSwapBuffersComplete(); | 5536 host_impl_->DidSwapBuffersComplete(); |
| 5537 EXPECT_EQ(swap_buffers_complete_, 1); | 5537 EXPECT_EQ(swap_buffers_complete_, 1); |
| 5538 } | 5538 } |
| 5539 | 5539 |
| 5540 class CountingSoftwareDevice : public SoftwareOutputDevice { | 5540 class CountingSoftwareDevice : public SoftwareOutputDevice { |
| 5541 public: | 5541 public: |
| (...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 5607 scoped_ptr<VideoLayerImpl> video_layer = | 5607 scoped_ptr<VideoLayerImpl> video_layer = |
| 5608 VideoLayerImpl::Create(host_impl_->active_tree(), 2, &provider); | 5608 VideoLayerImpl::Create(host_impl_->active_tree(), 2, &provider); |
| 5609 video_layer->SetBounds(gfx::Size(10, 10)); | 5609 video_layer->SetBounds(gfx::Size(10, 10)); |
| 5610 video_layer->SetContentBounds(gfx::Size(10, 10)); | 5610 video_layer->SetContentBounds(gfx::Size(10, 10)); |
| 5611 video_layer->SetDrawsContent(true); | 5611 video_layer->SetDrawsContent(true); |
| 5612 root_layer->AddChild(video_layer.PassAs<LayerImpl>()); | 5612 root_layer->AddChild(video_layer.PassAs<LayerImpl>()); |
| 5613 SetupRootLayerImpl(root_layer.PassAs<LayerImpl>()); | 5613 SetupRootLayerImpl(root_layer.PassAs<LayerImpl>()); |
| 5614 | 5614 |
| 5615 LayerTreeHostImpl::FrameData frame; | 5615 LayerTreeHostImpl::FrameData frame; |
| 5616 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame)); | 5616 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame)); |
| 5617 host_impl_->DrawLayers(&frame, gfx::FrameTime::Now()); | 5617 host_impl_->DrawLayers(&frame); |
| 5618 host_impl_->DidDrawAllLayers(frame); | 5618 host_impl_->DidDrawAllLayers(frame); |
| 5619 | 5619 |
| 5620 EXPECT_EQ(1u, frame.will_draw_layers.size()); | 5620 EXPECT_EQ(1u, frame.will_draw_layers.size()); |
| 5621 EXPECT_EQ(host_impl_->active_tree()->root_layer(), frame.will_draw_layers[0]); | 5621 EXPECT_EQ(host_impl_->active_tree()->root_layer(), frame.will_draw_layers[0]); |
| 5622 } | 5622 } |
| 5623 | 5623 |
| 5624 class LayerTreeHostImplTestDeferredInitialize : public LayerTreeHostImplTest { | 5624 class LayerTreeHostImplTestDeferredInitialize : public LayerTreeHostImplTest { |
| 5625 protected: | 5625 protected: |
| 5626 virtual void SetUp() OVERRIDE { | 5626 virtual void SetUp() OVERRIDE { |
| 5627 LayerTreeHostImplTest::SetUp(); | 5627 LayerTreeHostImplTest::SetUp(); |
| (...skipping 285 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 5913 SetupRootLayerImpl(LayerImpl::Create(host_impl_->active_tree(), 1)); | 5913 SetupRootLayerImpl(LayerImpl::Create(host_impl_->active_tree(), 1)); |
| 5914 | 5914 |
| 5915 ScopedPtrVector<CopyOutputRequest> requests; | 5915 ScopedPtrVector<CopyOutputRequest> requests; |
| 5916 requests.push_back(CopyOutputRequest::CreateRequest( | 5916 requests.push_back(CopyOutputRequest::CreateRequest( |
| 5917 base::Bind(&ShutdownReleasesContext_Callback))); | 5917 base::Bind(&ShutdownReleasesContext_Callback))); |
| 5918 | 5918 |
| 5919 host_impl_->active_tree()->root_layer()->PassCopyRequests(&requests); | 5919 host_impl_->active_tree()->root_layer()->PassCopyRequests(&requests); |
| 5920 | 5920 |
| 5921 LayerTreeHostImpl::FrameData frame; | 5921 LayerTreeHostImpl::FrameData frame; |
| 5922 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame)); | 5922 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame)); |
| 5923 host_impl_->DrawLayers(&frame, gfx::FrameTime::Now()); | 5923 host_impl_->DrawLayers(&frame); |
| 5924 host_impl_->DidDrawAllLayers(frame); | 5924 host_impl_->DidDrawAllLayers(frame); |
| 5925 | 5925 |
| 5926 // The CopyOutputResult's callback has a ref on the ContextProvider and a | 5926 // The CopyOutputResult's callback has a ref on the ContextProvider and a |
| 5927 // texture in a texture mailbox. | 5927 // texture in a texture mailbox. |
| 5928 EXPECT_FALSE(context_provider->HasOneRef()); | 5928 EXPECT_FALSE(context_provider->HasOneRef()); |
| 5929 EXPECT_EQ(1u, context_provider->TestContext3d()->NumTextures()); | 5929 EXPECT_EQ(1u, context_provider->TestContext3d()->NumTextures()); |
| 5930 | 5930 |
| 5931 host_impl_.reset(); | 5931 host_impl_.reset(); |
| 5932 | 5932 |
| 5933 // The CopyOutputResult's callback was cancelled, the CopyOutputResult | 5933 // The CopyOutputResult's callback was cancelled, the CopyOutputResult |
| (...skipping 339 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 6273 latency_info.AddLatencyNumber( | 6273 latency_info.AddLatencyNumber( |
| 6274 ui::INPUT_EVENT_LATENCY_BEGIN_RWH_COMPONENT, 0, 0); | 6274 ui::INPUT_EVENT_LATENCY_BEGIN_RWH_COMPONENT, 0, 0); |
| 6275 scoped_ptr<SwapPromise> swap_promise( | 6275 scoped_ptr<SwapPromise> swap_promise( |
| 6276 new LatencyInfoSwapPromise(latency_info)); | 6276 new LatencyInfoSwapPromise(latency_info)); |
| 6277 host_impl_->active_tree()->QueueSwapPromise(swap_promise.Pass()); | 6277 host_impl_->active_tree()->QueueSwapPromise(swap_promise.Pass()); |
| 6278 host_impl_->SetNeedsRedraw(); | 6278 host_impl_->SetNeedsRedraw(); |
| 6279 | 6279 |
| 6280 gfx::Rect full_frame_damage(host_impl_->DrawViewportSize()); | 6280 gfx::Rect full_frame_damage(host_impl_->DrawViewportSize()); |
| 6281 LayerTreeHostImpl::FrameData frame; | 6281 LayerTreeHostImpl::FrameData frame; |
| 6282 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame)); | 6282 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame)); |
| 6283 host_impl_->DrawLayers(&frame, gfx::FrameTime::Now()); | 6283 host_impl_->DrawLayers(&frame); |
| 6284 host_impl_->DidDrawAllLayers(frame); | 6284 host_impl_->DidDrawAllLayers(frame); |
| 6285 EXPECT_TRUE(host_impl_->SwapBuffers(frame)); | 6285 EXPECT_TRUE(host_impl_->SwapBuffers(frame)); |
| 6286 | 6286 |
| 6287 const std::vector<ui::LatencyInfo>& metadata_latency_after = | 6287 const std::vector<ui::LatencyInfo>& metadata_latency_after = |
| 6288 fake_output_surface->last_sent_frame().metadata.latency_info; | 6288 fake_output_surface->last_sent_frame().metadata.latency_info; |
| 6289 EXPECT_EQ(1u, metadata_latency_after.size()); | 6289 EXPECT_EQ(1u, metadata_latency_after.size()); |
| 6290 EXPECT_TRUE(metadata_latency_after[0].FindLatency( | 6290 EXPECT_TRUE(metadata_latency_after[0].FindLatency( |
| 6291 ui::INPUT_EVENT_LATENCY_BEGIN_RWH_COMPONENT, 0, NULL)); | 6291 ui::INPUT_EVENT_LATENCY_BEGIN_RWH_COMPONENT, 0, NULL)); |
| 6292 } | 6292 } |
| 6293 | 6293 |
| (...skipping 26 matching lines...) Expand all Loading... |
| 6320 anchor.layer_rect = selection_rect; | 6320 anchor.layer_rect = selection_rect; |
| 6321 focus = anchor; | 6321 focus = anchor; |
| 6322 host_impl_->active_tree()->RegisterSelection(anchor, focus); | 6322 host_impl_->active_tree()->RegisterSelection(anchor, focus); |
| 6323 | 6323 |
| 6324 // Trigger a draw-swap sequence. | 6324 // Trigger a draw-swap sequence. |
| 6325 host_impl_->SetNeedsRedraw(); | 6325 host_impl_->SetNeedsRedraw(); |
| 6326 | 6326 |
| 6327 gfx::Rect full_frame_damage(host_impl_->DrawViewportSize()); | 6327 gfx::Rect full_frame_damage(host_impl_->DrawViewportSize()); |
| 6328 LayerTreeHostImpl::FrameData frame; | 6328 LayerTreeHostImpl::FrameData frame; |
| 6329 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame)); | 6329 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame)); |
| 6330 host_impl_->DrawLayers(&frame, gfx::FrameTime::Now()); | 6330 host_impl_->DrawLayers(&frame); |
| 6331 host_impl_->DidDrawAllLayers(frame); | 6331 host_impl_->DidDrawAllLayers(frame); |
| 6332 EXPECT_TRUE(host_impl_->SwapBuffers(frame)); | 6332 EXPECT_TRUE(host_impl_->SwapBuffers(frame)); |
| 6333 | 6333 |
| 6334 // Ensure the selection bounds have propagated to the frame metadata. | 6334 // Ensure the selection bounds have propagated to the frame metadata. |
| 6335 const ViewportSelectionBound& selection_anchor_after = | 6335 const ViewportSelectionBound& selection_anchor_after = |
| 6336 fake_output_surface->last_sent_frame().metadata.selection_anchor; | 6336 fake_output_surface->last_sent_frame().metadata.selection_anchor; |
| 6337 const ViewportSelectionBound& selection_focus_after = | 6337 const ViewportSelectionBound& selection_focus_after = |
| 6338 fake_output_surface->last_sent_frame().metadata.selection_focus; | 6338 fake_output_surface->last_sent_frame().metadata.selection_focus; |
| 6339 EXPECT_EQ(anchor.type, selection_anchor_after.type); | 6339 EXPECT_EQ(anchor.type, selection_anchor_after.type); |
| 6340 EXPECT_EQ(focus.type, selection_focus_after.type); | 6340 EXPECT_EQ(focus.type, selection_focus_after.type); |
| (...skipping 309 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 6650 external_viewport, | 6650 external_viewport, |
| 6651 external_clip, | 6651 external_clip, |
| 6652 valid_for_tile_management); | 6652 valid_for_tile_management); |
| 6653 DrawFrame(); | 6653 DrawFrame(); |
| 6654 EXPECT_TRANSFORMATION_MATRIX_EQ( | 6654 EXPECT_TRANSFORMATION_MATRIX_EQ( |
| 6655 external_transform, layer->draw_properties().target_space_transform); | 6655 external_transform, layer->draw_properties().target_space_transform); |
| 6656 } | 6656 } |
| 6657 | 6657 |
| 6658 } // namespace | 6658 } // namespace |
| 6659 } // namespace cc | 6659 } // namespace cc |
| OLD | NEW |