Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(161)

Side by Side Diff: cc/layer_tree_host_impl_unittest.cc

Issue 12804006: cc: Save correct frame begin time to FrameRateCounter (Closed) Base URL: http://git.chromium.org/chromium/src.git@master
Patch Set: Rebase to 188402 Created 7 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « cc/layer_tree_host_impl.cc ('k') | cc/scheduler.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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/layer_tree_host_impl.h" 5 #include "cc/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 182 matching lines...) Expand 10 before | Expand all | Expand 10 after
193 layer->SetContentBounds(size); 193 layer->SetContentBounds(size);
194 layer->SetMaxScrollOffset(gfx::Vector2d(size.width() * 2, size.height() * 2)); 194 layer->SetMaxScrollOffset(gfx::Vector2d(size.width() * 2, size.height() * 2));
195 return layer.Pass(); 195 return layer.Pass();
196 } 196 }
197 197
198 void initializeRendererAndDrawFrame() 198 void initializeRendererAndDrawFrame()
199 { 199 {
200 m_hostImpl->InitializeRenderer(createOutputSurface()); 200 m_hostImpl->InitializeRenderer(createOutputSurface());
201 LayerTreeHostImpl::FrameData frame; 201 LayerTreeHostImpl::FrameData frame;
202 EXPECT_TRUE(m_hostImpl->PrepareToDraw(&frame)); 202 EXPECT_TRUE(m_hostImpl->PrepareToDraw(&frame));
203 m_hostImpl->DrawLayers(&frame); 203 m_hostImpl->DrawLayers(&frame, base::TimeTicks::Now());
204 m_hostImpl->DidDrawAllLayers(frame); 204 m_hostImpl->DidDrawAllLayers(frame);
205 } 205 }
206 206
207 void pinchZoomPanViewportForcesCommitRedraw(const float deviceScaleFactor); 207 void pinchZoomPanViewportForcesCommitRedraw(const float deviceScaleFactor);
208 void pinchZoomPanViewportTest(const float deviceScaleFactor); 208 void pinchZoomPanViewportTest(const float deviceScaleFactor);
209 void pinchZoomPanViewportAndScrollTest(const float deviceScaleFactor); 209 void pinchZoomPanViewportAndScrollTest(const float deviceScaleFactor);
210 void pinchZoomPanViewportAndScrollBoundaryTest(const float deviceScaleFactor ); 210 void pinchZoomPanViewportAndScrollBoundaryTest(const float deviceScaleFactor );
211 211
212 protected: 212 protected:
213 virtual scoped_ptr<OutputSurface> createOutputSurface() { return createFakeO utputSurface(); } 213 virtual scoped_ptr<OutputSurface> createOutputSurface() { return createFakeO utputSurface(); }
(...skipping 705 matching lines...) Expand 10 before | Expand all | Expand 10 after
919 layer->SetPosition(gfx::PointF(100, 100)); 919 layer->SetPosition(gfx::PointF(100, 100));
920 layer->SetBounds(gfx::Size(10, 10)); 920 layer->SetBounds(gfx::Size(10, 10));
921 layer->SetContentBounds(gfx::Size(10, 10)); 921 layer->SetContentBounds(gfx::Size(10, 10));
922 922
923 LayerTreeHostImpl::FrameData frame; 923 LayerTreeHostImpl::FrameData frame;
924 924
925 EXPECT_FALSE(layer->willDrawCalled()); 925 EXPECT_FALSE(layer->willDrawCalled());
926 EXPECT_FALSE(layer->didDrawCalled()); 926 EXPECT_FALSE(layer->didDrawCalled());
927 927
928 EXPECT_TRUE(m_hostImpl->PrepareToDraw(&frame)); 928 EXPECT_TRUE(m_hostImpl->PrepareToDraw(&frame));
929 m_hostImpl->DrawLayers(&frame); 929 m_hostImpl->DrawLayers(&frame, base::TimeTicks::Now());
930 m_hostImpl->DidDrawAllLayers(frame); 930 m_hostImpl->DidDrawAllLayers(frame);
931 931
932 EXPECT_FALSE(layer->willDrawCalled()); 932 EXPECT_FALSE(layer->willDrawCalled());
933 EXPECT_FALSE(layer->didDrawCalled()); 933 EXPECT_FALSE(layer->didDrawCalled());
934 934
935 EXPECT_TRUE(layer->visible_content_rect().IsEmpty()); 935 EXPECT_TRUE(layer->visible_content_rect().IsEmpty());
936 936
937 // Ensure visibleContentRect for layer layer is not empty 937 // Ensure visibleContentRect for layer layer is not empty
938 layer->SetPosition(gfx::PointF(0, 0)); 938 layer->SetPosition(gfx::PointF(0, 0));
939 939
940 EXPECT_FALSE(layer->willDrawCalled()); 940 EXPECT_FALSE(layer->willDrawCalled());
941 EXPECT_FALSE(layer->didDrawCalled()); 941 EXPECT_FALSE(layer->didDrawCalled());
942 942
943 EXPECT_TRUE(m_hostImpl->PrepareToDraw(&frame)); 943 EXPECT_TRUE(m_hostImpl->PrepareToDraw(&frame));
944 m_hostImpl->DrawLayers(&frame); 944 m_hostImpl->DrawLayers(&frame, base::TimeTicks::Now());
945 m_hostImpl->DidDrawAllLayers(frame); 945 m_hostImpl->DidDrawAllLayers(frame);
946 946
947 EXPECT_TRUE(layer->willDrawCalled()); 947 EXPECT_TRUE(layer->willDrawCalled());
948 EXPECT_TRUE(layer->didDrawCalled()); 948 EXPECT_TRUE(layer->didDrawCalled());
949 949
950 EXPECT_FALSE(layer->visible_content_rect().IsEmpty()); 950 EXPECT_FALSE(layer->visible_content_rect().IsEmpty());
951 } 951 }
952 952
953 TEST_F(LayerTreeHostImplTest, willDrawNotCalledOnOccludedLayer) 953 TEST_F(LayerTreeHostImplTest, willDrawNotCalledOnOccludedLayer)
954 { 954 {
(...skipping 14 matching lines...) Expand all
969 topLayer->SetContentsOpaque(true); 969 topLayer->SetContentsOpaque(true);
970 970
971 LayerTreeHostImpl::FrameData frame; 971 LayerTreeHostImpl::FrameData frame;
972 972
973 EXPECT_FALSE(occludedLayer->willDrawCalled()); 973 EXPECT_FALSE(occludedLayer->willDrawCalled());
974 EXPECT_FALSE(occludedLayer->didDrawCalled()); 974 EXPECT_FALSE(occludedLayer->didDrawCalled());
975 EXPECT_FALSE(topLayer->willDrawCalled()); 975 EXPECT_FALSE(topLayer->willDrawCalled());
976 EXPECT_FALSE(topLayer->didDrawCalled()); 976 EXPECT_FALSE(topLayer->didDrawCalled());
977 977
978 EXPECT_TRUE(m_hostImpl->PrepareToDraw(&frame)); 978 EXPECT_TRUE(m_hostImpl->PrepareToDraw(&frame));
979 m_hostImpl->DrawLayers(&frame); 979 m_hostImpl->DrawLayers(&frame, base::TimeTicks::Now());
980 m_hostImpl->DidDrawAllLayers(frame); 980 m_hostImpl->DidDrawAllLayers(frame);
981 981
982 EXPECT_FALSE(occludedLayer->willDrawCalled()); 982 EXPECT_FALSE(occludedLayer->willDrawCalled());
983 EXPECT_FALSE(occludedLayer->didDrawCalled()); 983 EXPECT_FALSE(occludedLayer->didDrawCalled());
984 EXPECT_TRUE(topLayer->willDrawCalled()); 984 EXPECT_TRUE(topLayer->willDrawCalled());
985 EXPECT_TRUE(topLayer->didDrawCalled()); 985 EXPECT_TRUE(topLayer->didDrawCalled());
986 } 986 }
987 987
988 TEST_F(LayerTreeHostImplTest, didDrawCalledOnAllLayers) 988 TEST_F(LayerTreeHostImplTest, didDrawCalledOnAllLayers)
989 { 989 {
990 m_hostImpl->active_tree()->SetRootLayer(DidDrawCheckLayer::Create(m_hostImpl ->active_tree(), 1)); 990 m_hostImpl->active_tree()->SetRootLayer(DidDrawCheckLayer::Create(m_hostImpl ->active_tree(), 1));
991 DidDrawCheckLayer* root = static_cast<DidDrawCheckLayer*>(m_hostImpl->active _tree()->root_layer()); 991 DidDrawCheckLayer* root = static_cast<DidDrawCheckLayer*>(m_hostImpl->active _tree()->root_layer());
992 992
993 root->AddChild(DidDrawCheckLayer::Create(m_hostImpl->active_tree(), 2)); 993 root->AddChild(DidDrawCheckLayer::Create(m_hostImpl->active_tree(), 2));
994 DidDrawCheckLayer* layer1 = static_cast<DidDrawCheckLayer*>(root->children() [0]); 994 DidDrawCheckLayer* layer1 = static_cast<DidDrawCheckLayer*>(root->children() [0]);
995 995
996 layer1->AddChild(DidDrawCheckLayer::Create(m_hostImpl->active_tree(), 3)); 996 layer1->AddChild(DidDrawCheckLayer::Create(m_hostImpl->active_tree(), 3));
997 DidDrawCheckLayer* layer2 = static_cast<DidDrawCheckLayer*>(layer1->children ()[0]); 997 DidDrawCheckLayer* layer2 = static_cast<DidDrawCheckLayer*>(layer1->children ()[0]);
998 998
999 layer1->SetOpacity(0.3f); 999 layer1->SetOpacity(0.3f);
1000 layer1->SetPreserves3d(false); 1000 layer1->SetPreserves3d(false);
1001 1001
1002 EXPECT_FALSE(root->didDrawCalled()); 1002 EXPECT_FALSE(root->didDrawCalled());
1003 EXPECT_FALSE(layer1->didDrawCalled()); 1003 EXPECT_FALSE(layer1->didDrawCalled());
1004 EXPECT_FALSE(layer2->didDrawCalled()); 1004 EXPECT_FALSE(layer2->didDrawCalled());
1005 1005
1006 LayerTreeHostImpl::FrameData frame; 1006 LayerTreeHostImpl::FrameData frame;
1007 EXPECT_TRUE(m_hostImpl->PrepareToDraw(&frame)); 1007 EXPECT_TRUE(m_hostImpl->PrepareToDraw(&frame));
1008 m_hostImpl->DrawLayers(&frame); 1008 m_hostImpl->DrawLayers(&frame, base::TimeTicks::Now());
1009 m_hostImpl->DidDrawAllLayers(frame); 1009 m_hostImpl->DidDrawAllLayers(frame);
1010 1010
1011 EXPECT_TRUE(root->didDrawCalled()); 1011 EXPECT_TRUE(root->didDrawCalled());
1012 EXPECT_TRUE(layer1->didDrawCalled()); 1012 EXPECT_TRUE(layer1->didDrawCalled());
1013 EXPECT_TRUE(layer2->didDrawCalled()); 1013 EXPECT_TRUE(layer2->didDrawCalled());
1014 1014
1015 EXPECT_NE(root->render_surface(), layer1->render_surface()); 1015 EXPECT_NE(root->render_surface(), layer1->render_surface());
1016 EXPECT_TRUE(!!layer1->render_surface()); 1016 EXPECT_TRUE(!!layer1->render_surface());
1017 } 1017 }
1018 1018
(...skipping 25 matching lines...) Expand all
1044 TEST_F(LayerTreeHostImplTest, prepareToDrawFailsWhenAnimationUsesCheckerboard) 1044 TEST_F(LayerTreeHostImplTest, prepareToDrawFailsWhenAnimationUsesCheckerboard)
1045 { 1045 {
1046 // When the texture is not missing, we draw as usual. 1046 // When the texture is not missing, we draw as usual.
1047 m_hostImpl->active_tree()->SetRootLayer(DidDrawCheckLayer::Create(m_hostImpl ->active_tree(), 1)); 1047 m_hostImpl->active_tree()->SetRootLayer(DidDrawCheckLayer::Create(m_hostImpl ->active_tree(), 1));
1048 DidDrawCheckLayer* root = static_cast<DidDrawCheckLayer*>(m_hostImpl->active _tree()->root_layer()); 1048 DidDrawCheckLayer* root = static_cast<DidDrawCheckLayer*>(m_hostImpl->active _tree()->root_layer());
1049 root->AddChild(MissingTextureAnimatingLayer::Create(m_hostImpl->active_tree( ), 2, false, false, true, m_hostImpl->resource_provider())); 1049 root->AddChild(MissingTextureAnimatingLayer::Create(m_hostImpl->active_tree( ), 2, false, false, true, m_hostImpl->resource_provider()));
1050 1050
1051 LayerTreeHostImpl::FrameData frame; 1051 LayerTreeHostImpl::FrameData frame;
1052 1052
1053 EXPECT_TRUE(m_hostImpl->PrepareToDraw(&frame)); 1053 EXPECT_TRUE(m_hostImpl->PrepareToDraw(&frame));
1054 m_hostImpl->DrawLayers(&frame); 1054 m_hostImpl->DrawLayers(&frame, base::TimeTicks::Now());
1055 m_hostImpl->DidDrawAllLayers(frame); 1055 m_hostImpl->DidDrawAllLayers(frame);
1056 1056
1057 // When a texture is missing and we're not animating, we draw as usual with checkerboarding. 1057 // When a texture is missing and we're not animating, we draw as usual with checkerboarding.
1058 m_hostImpl->active_tree()->SetRootLayer(DidDrawCheckLayer::Create(m_hostImpl ->active_tree(), 3)); 1058 m_hostImpl->active_tree()->SetRootLayer(DidDrawCheckLayer::Create(m_hostImpl ->active_tree(), 3));
1059 root = static_cast<DidDrawCheckLayer*>(m_hostImpl->active_tree()->root_layer ()); 1059 root = static_cast<DidDrawCheckLayer*>(m_hostImpl->active_tree()->root_layer ());
1060 root->AddChild(MissingTextureAnimatingLayer::Create(m_hostImpl->active_tree( ), 4, true, false, false, m_hostImpl->resource_provider())); 1060 root->AddChild(MissingTextureAnimatingLayer::Create(m_hostImpl->active_tree( ), 4, true, false, false, m_hostImpl->resource_provider()));
1061 1061
1062 EXPECT_TRUE(m_hostImpl->PrepareToDraw(&frame)); 1062 EXPECT_TRUE(m_hostImpl->PrepareToDraw(&frame));
1063 m_hostImpl->DrawLayers(&frame); 1063 m_hostImpl->DrawLayers(&frame, base::TimeTicks::Now());
1064 m_hostImpl->DidDrawAllLayers(frame); 1064 m_hostImpl->DidDrawAllLayers(frame);
1065 1065
1066 // When a texture is missing and we're animating, we don't want to draw anyt hing. 1066 // When a texture is missing and we're animating, we don't want to draw anyt hing.
1067 m_hostImpl->active_tree()->SetRootLayer(DidDrawCheckLayer::Create(m_hostImpl ->active_tree(), 5)); 1067 m_hostImpl->active_tree()->SetRootLayer(DidDrawCheckLayer::Create(m_hostImpl ->active_tree(), 5));
1068 root = static_cast<DidDrawCheckLayer*>(m_hostImpl->active_tree()->root_layer ()); 1068 root = static_cast<DidDrawCheckLayer*>(m_hostImpl->active_tree()->root_layer ());
1069 root->AddChild(MissingTextureAnimatingLayer::Create(m_hostImpl->active_tree( ), 6, true, false, true, m_hostImpl->resource_provider())); 1069 root->AddChild(MissingTextureAnimatingLayer::Create(m_hostImpl->active_tree( ), 6, true, false, true, m_hostImpl->resource_provider()));
1070 1070
1071 EXPECT_FALSE(m_hostImpl->PrepareToDraw(&frame)); 1071 EXPECT_FALSE(m_hostImpl->PrepareToDraw(&frame));
1072 m_hostImpl->DrawLayers(&frame); 1072 m_hostImpl->DrawLayers(&frame, base::TimeTicks::Now());
1073 m_hostImpl->DidDrawAllLayers(frame); 1073 m_hostImpl->DidDrawAllLayers(frame);
1074 1074
1075 // When the layer skips draw and we're animating, we still draw the frame. 1075 // When the layer skips draw and we're animating, we still draw the frame.
1076 m_hostImpl->active_tree()->SetRootLayer(DidDrawCheckLayer::Create(m_hostImpl ->active_tree(), 7)); 1076 m_hostImpl->active_tree()->SetRootLayer(DidDrawCheckLayer::Create(m_hostImpl ->active_tree(), 7));
1077 root = static_cast<DidDrawCheckLayer*>(m_hostImpl->active_tree()->root_layer ()); 1077 root = static_cast<DidDrawCheckLayer*>(m_hostImpl->active_tree()->root_layer ());
1078 root->AddChild(MissingTextureAnimatingLayer::Create(m_hostImpl->active_tree( ), 8, false, true, true, m_hostImpl->resource_provider())); 1078 root->AddChild(MissingTextureAnimatingLayer::Create(m_hostImpl->active_tree( ), 8, false, true, true, m_hostImpl->resource_provider()));
1079 1079
1080 EXPECT_TRUE(m_hostImpl->PrepareToDraw(&frame)); 1080 EXPECT_TRUE(m_hostImpl->PrepareToDraw(&frame));
1081 m_hostImpl->DrawLayers(&frame); 1081 m_hostImpl->DrawLayers(&frame, base::TimeTicks::Now());
1082 m_hostImpl->DidDrawAllLayers(frame); 1082 m_hostImpl->DidDrawAllLayers(frame);
1083 } 1083 }
1084 1084
1085 TEST_F(LayerTreeHostImplTest, scrollRootIgnored) 1085 TEST_F(LayerTreeHostImplTest, scrollRootIgnored)
1086 { 1086 {
1087 scoped_ptr<LayerImpl> root = LayerImpl::Create(m_hostImpl->active_tree(), 1) ; 1087 scoped_ptr<LayerImpl> root = LayerImpl::Create(m_hostImpl->active_tree(), 1) ;
1088 root->SetScrollable(false); 1088 root->SetScrollable(false);
1089 m_hostImpl->active_tree()->SetRootLayer(root.Pass()); 1089 m_hostImpl->active_tree()->SetRootLayer(root.Pass());
1090 initializeRendererAndDrawFrame(); 1090 initializeRendererAndDrawFrame();
1091 1091
(...skipping 256 matching lines...) Expand 10 before | Expand all | Expand 10 after
1348 1348
1349 // The page scale delta should only be applied to the scrollable root layer. 1349 // The page scale delta should only be applied to the scrollable root layer.
1350 EXPECT_EQ(root->impl_transform(), newPageScaleMatrix); 1350 EXPECT_EQ(root->impl_transform(), newPageScaleMatrix);
1351 EXPECT_EQ(child->impl_transform(), defaultPageScaleMatrix); 1351 EXPECT_EQ(child->impl_transform(), defaultPageScaleMatrix);
1352 EXPECT_EQ(grandChild->impl_transform(), defaultPageScaleMatrix); 1352 EXPECT_EQ(grandChild->impl_transform(), defaultPageScaleMatrix);
1353 1353
1354 // Make sure all the layers are drawn with the page scale delta applied, i.e ., the page scale 1354 // Make sure all the layers are drawn with the page scale delta applied, i.e ., the page scale
1355 // delta on the root layer is applied hierarchically. 1355 // delta on the root layer is applied hierarchically.
1356 LayerTreeHostImpl::FrameData frame; 1356 LayerTreeHostImpl::FrameData frame;
1357 EXPECT_TRUE(m_hostImpl->PrepareToDraw(&frame)); 1357 EXPECT_TRUE(m_hostImpl->PrepareToDraw(&frame));
1358 m_hostImpl->DrawLayers(&frame); 1358 m_hostImpl->DrawLayers(&frame, base::TimeTicks::Now());
1359 m_hostImpl->DidDrawAllLayers(frame); 1359 m_hostImpl->DidDrawAllLayers(frame);
1360 1360
1361 EXPECT_EQ(root->draw_transform().matrix().getDouble(0, 0), newPageScale); 1361 EXPECT_EQ(root->draw_transform().matrix().getDouble(0, 0), newPageScale);
1362 EXPECT_EQ(root->draw_transform().matrix().getDouble(1, 1), newPageScale); 1362 EXPECT_EQ(root->draw_transform().matrix().getDouble(1, 1), newPageScale);
1363 EXPECT_EQ(child->draw_transform().matrix().getDouble(0, 0), newPageScale); 1363 EXPECT_EQ(child->draw_transform().matrix().getDouble(0, 0), newPageScale);
1364 EXPECT_EQ(child->draw_transform().matrix().getDouble(1, 1), newPageScale); 1364 EXPECT_EQ(child->draw_transform().matrix().getDouble(1, 1), newPageScale);
1365 EXPECT_EQ(grandChild->draw_transform().matrix().getDouble(0, 0), newPageScal e); 1365 EXPECT_EQ(grandChild->draw_transform().matrix().getDouble(0, 0), newPageScal e);
1366 EXPECT_EQ(grandChild->draw_transform().matrix().getDouble(1, 1), newPageScal e); 1366 EXPECT_EQ(grandChild->draw_transform().matrix().getDouble(1, 1), newPageScal e);
1367 } 1367 }
1368 1368
(...skipping 442 matching lines...) Expand 10 before | Expand all | Expand 10 after
1811 root->AddChild(BlendStateCheckLayer::Create(m_hostImpl->active_tree(), 2, m_ hostImpl->resource_provider())); 1811 root->AddChild(BlendStateCheckLayer::Create(m_hostImpl->active_tree(), 2, m_ hostImpl->resource_provider()));
1812 BlendStateCheckLayer* layer1 = static_cast<BlendStateCheckLayer*>(root->chil dren()[0]); 1812 BlendStateCheckLayer* layer1 = static_cast<BlendStateCheckLayer*>(root->chil dren()[0]);
1813 layer1->SetPosition(gfx::PointF(2, 2)); 1813 layer1->SetPosition(gfx::PointF(2, 2));
1814 1814
1815 LayerTreeHostImpl::FrameData frame; 1815 LayerTreeHostImpl::FrameData frame;
1816 1816
1817 // Opaque layer, drawn without blending. 1817 // Opaque layer, drawn without blending.
1818 layer1->SetContentsOpaque(true); 1818 layer1->SetContentsOpaque(true);
1819 layer1->setExpectation(false, false); 1819 layer1->setExpectation(false, false);
1820 EXPECT_TRUE(m_hostImpl->PrepareToDraw(&frame)); 1820 EXPECT_TRUE(m_hostImpl->PrepareToDraw(&frame));
1821 m_hostImpl->DrawLayers(&frame); 1821 m_hostImpl->DrawLayers(&frame, base::TimeTicks::Now());
1822 EXPECT_TRUE(layer1->quadsAppended()); 1822 EXPECT_TRUE(layer1->quadsAppended());
1823 m_hostImpl->DidDrawAllLayers(frame); 1823 m_hostImpl->DidDrawAllLayers(frame);
1824 1824
1825 // Layer with translucent content and painting, so drawn with blending. 1825 // Layer with translucent content and painting, so drawn with blending.
1826 layer1->SetContentsOpaque(false); 1826 layer1->SetContentsOpaque(false);
1827 layer1->setExpectation(true, false); 1827 layer1->setExpectation(true, false);
1828 EXPECT_TRUE(m_hostImpl->PrepareToDraw(&frame)); 1828 EXPECT_TRUE(m_hostImpl->PrepareToDraw(&frame));
1829 m_hostImpl->DrawLayers(&frame); 1829 m_hostImpl->DrawLayers(&frame, base::TimeTicks::Now());
1830 EXPECT_TRUE(layer1->quadsAppended()); 1830 EXPECT_TRUE(layer1->quadsAppended());
1831 m_hostImpl->DidDrawAllLayers(frame); 1831 m_hostImpl->DidDrawAllLayers(frame);
1832 1832
1833 // Layer with translucent opacity, drawn with blending. 1833 // Layer with translucent opacity, drawn with blending.
1834 layer1->SetContentsOpaque(true); 1834 layer1->SetContentsOpaque(true);
1835 layer1->SetOpacity(0.5); 1835 layer1->SetOpacity(0.5);
1836 layer1->setExpectation(true, false); 1836 layer1->setExpectation(true, false);
1837 EXPECT_TRUE(m_hostImpl->PrepareToDraw(&frame)); 1837 EXPECT_TRUE(m_hostImpl->PrepareToDraw(&frame));
1838 m_hostImpl->DrawLayers(&frame); 1838 m_hostImpl->DrawLayers(&frame, base::TimeTicks::Now());
1839 EXPECT_TRUE(layer1->quadsAppended()); 1839 EXPECT_TRUE(layer1->quadsAppended());
1840 m_hostImpl->DidDrawAllLayers(frame); 1840 m_hostImpl->DidDrawAllLayers(frame);
1841 1841
1842 // Layer with translucent opacity and painting, drawn with blending. 1842 // Layer with translucent opacity and painting, drawn with blending.
1843 layer1->SetContentsOpaque(true); 1843 layer1->SetContentsOpaque(true);
1844 layer1->SetOpacity(0.5); 1844 layer1->SetOpacity(0.5);
1845 layer1->setExpectation(true, false); 1845 layer1->setExpectation(true, false);
1846 EXPECT_TRUE(m_hostImpl->PrepareToDraw(&frame)); 1846 EXPECT_TRUE(m_hostImpl->PrepareToDraw(&frame));
1847 m_hostImpl->DrawLayers(&frame); 1847 m_hostImpl->DrawLayers(&frame, base::TimeTicks::Now());
1848 EXPECT_TRUE(layer1->quadsAppended()); 1848 EXPECT_TRUE(layer1->quadsAppended());
1849 m_hostImpl->DidDrawAllLayers(frame); 1849 m_hostImpl->DidDrawAllLayers(frame);
1850 1850
1851 layer1->AddChild(BlendStateCheckLayer::Create(m_hostImpl->active_tree(), 3, m_hostImpl->resource_provider())); 1851 layer1->AddChild(BlendStateCheckLayer::Create(m_hostImpl->active_tree(), 3, m_hostImpl->resource_provider()));
1852 BlendStateCheckLayer* layer2 = static_cast<BlendStateCheckLayer*>(layer1->ch ildren()[0]); 1852 BlendStateCheckLayer* layer2 = static_cast<BlendStateCheckLayer*>(layer1->ch ildren()[0]);
1853 layer2->SetPosition(gfx::PointF(4, 4)); 1853 layer2->SetPosition(gfx::PointF(4, 4));
1854 1854
1855 // 2 opaque layers, drawn without blending. 1855 // 2 opaque layers, drawn without blending.
1856 layer1->SetContentsOpaque(true); 1856 layer1->SetContentsOpaque(true);
1857 layer1->SetOpacity(1); 1857 layer1->SetOpacity(1);
1858 layer1->setExpectation(false, false); 1858 layer1->setExpectation(false, false);
1859 layer2->SetContentsOpaque(true); 1859 layer2->SetContentsOpaque(true);
1860 layer2->SetOpacity(1); 1860 layer2->SetOpacity(1);
1861 layer2->setExpectation(false, false); 1861 layer2->setExpectation(false, false);
1862 EXPECT_TRUE(m_hostImpl->PrepareToDraw(&frame)); 1862 EXPECT_TRUE(m_hostImpl->PrepareToDraw(&frame));
1863 m_hostImpl->DrawLayers(&frame); 1863 m_hostImpl->DrawLayers(&frame, base::TimeTicks::Now());
1864 EXPECT_TRUE(layer1->quadsAppended()); 1864 EXPECT_TRUE(layer1->quadsAppended());
1865 EXPECT_TRUE(layer2->quadsAppended()); 1865 EXPECT_TRUE(layer2->quadsAppended());
1866 m_hostImpl->DidDrawAllLayers(frame); 1866 m_hostImpl->DidDrawAllLayers(frame);
1867 1867
1868 // Parent layer with translucent content, drawn with blending. 1868 // Parent layer with translucent content, drawn with blending.
1869 // Child layer with opaque content, drawn without blending. 1869 // Child layer with opaque content, drawn without blending.
1870 layer1->SetContentsOpaque(false); 1870 layer1->SetContentsOpaque(false);
1871 layer1->setExpectation(true, false); 1871 layer1->setExpectation(true, false);
1872 layer2->setExpectation(false, false); 1872 layer2->setExpectation(false, false);
1873 EXPECT_TRUE(m_hostImpl->PrepareToDraw(&frame)); 1873 EXPECT_TRUE(m_hostImpl->PrepareToDraw(&frame));
1874 m_hostImpl->DrawLayers(&frame); 1874 m_hostImpl->DrawLayers(&frame, base::TimeTicks::Now());
1875 EXPECT_TRUE(layer1->quadsAppended()); 1875 EXPECT_TRUE(layer1->quadsAppended());
1876 EXPECT_TRUE(layer2->quadsAppended()); 1876 EXPECT_TRUE(layer2->quadsAppended());
1877 m_hostImpl->DidDrawAllLayers(frame); 1877 m_hostImpl->DidDrawAllLayers(frame);
1878 1878
1879 // Parent layer with translucent content but opaque painting, drawn without blending. 1879 // Parent layer with translucent content but opaque painting, drawn without blending.
1880 // Child layer with opaque content, drawn without blending. 1880 // Child layer with opaque content, drawn without blending.
1881 layer1->SetContentsOpaque(true); 1881 layer1->SetContentsOpaque(true);
1882 layer1->setExpectation(false, false); 1882 layer1->setExpectation(false, false);
1883 layer2->setExpectation(false, false); 1883 layer2->setExpectation(false, false);
1884 EXPECT_TRUE(m_hostImpl->PrepareToDraw(&frame)); 1884 EXPECT_TRUE(m_hostImpl->PrepareToDraw(&frame));
1885 m_hostImpl->DrawLayers(&frame); 1885 m_hostImpl->DrawLayers(&frame, base::TimeTicks::Now());
1886 EXPECT_TRUE(layer1->quadsAppended()); 1886 EXPECT_TRUE(layer1->quadsAppended());
1887 EXPECT_TRUE(layer2->quadsAppended()); 1887 EXPECT_TRUE(layer2->quadsAppended());
1888 m_hostImpl->DidDrawAllLayers(frame); 1888 m_hostImpl->DidDrawAllLayers(frame);
1889 1889
1890 // Parent layer with translucent opacity and opaque content. Since it has a 1890 // Parent layer with translucent opacity and opaque content. Since it has a
1891 // drawing child, it's drawn to a render surface which carries the opacity, 1891 // drawing child, it's drawn to a render surface which carries the opacity,
1892 // so it's itself drawn without blending. 1892 // so it's itself drawn without blending.
1893 // Child layer with opaque content, drawn without blending (parent surface 1893 // Child layer with opaque content, drawn without blending (parent surface
1894 // carries the inherited opacity). 1894 // carries the inherited opacity).
1895 layer1->SetContentsOpaque(true); 1895 layer1->SetContentsOpaque(true);
1896 layer1->SetOpacity(0.5); 1896 layer1->SetOpacity(0.5);
1897 layer1->setExpectation(false, true); 1897 layer1->setExpectation(false, true);
1898 layer2->setExpectation(false, false); 1898 layer2->setExpectation(false, false);
1899 EXPECT_TRUE(m_hostImpl->PrepareToDraw(&frame)); 1899 EXPECT_TRUE(m_hostImpl->PrepareToDraw(&frame));
1900 m_hostImpl->DrawLayers(&frame); 1900 m_hostImpl->DrawLayers(&frame, base::TimeTicks::Now());
1901 EXPECT_TRUE(layer1->quadsAppended()); 1901 EXPECT_TRUE(layer1->quadsAppended());
1902 EXPECT_TRUE(layer2->quadsAppended()); 1902 EXPECT_TRUE(layer2->quadsAppended());
1903 m_hostImpl->DidDrawAllLayers(frame); 1903 m_hostImpl->DidDrawAllLayers(frame);
1904 1904
1905 // Draw again, but with child non-opaque, to make sure 1905 // Draw again, but with child non-opaque, to make sure
1906 // layer1 not culled. 1906 // layer1 not culled.
1907 layer1->SetContentsOpaque(true); 1907 layer1->SetContentsOpaque(true);
1908 layer1->SetOpacity(1); 1908 layer1->SetOpacity(1);
1909 layer1->setExpectation(false, false); 1909 layer1->setExpectation(false, false);
1910 layer2->SetContentsOpaque(true); 1910 layer2->SetContentsOpaque(true);
1911 layer2->SetOpacity(0.5); 1911 layer2->SetOpacity(0.5);
1912 layer2->setExpectation(true, false); 1912 layer2->setExpectation(true, false);
1913 EXPECT_TRUE(m_hostImpl->PrepareToDraw(&frame)); 1913 EXPECT_TRUE(m_hostImpl->PrepareToDraw(&frame));
1914 m_hostImpl->DrawLayers(&frame); 1914 m_hostImpl->DrawLayers(&frame, base::TimeTicks::Now());
1915 EXPECT_TRUE(layer1->quadsAppended()); 1915 EXPECT_TRUE(layer1->quadsAppended());
1916 EXPECT_TRUE(layer2->quadsAppended()); 1916 EXPECT_TRUE(layer2->quadsAppended());
1917 m_hostImpl->DidDrawAllLayers(frame); 1917 m_hostImpl->DidDrawAllLayers(frame);
1918 1918
1919 // A second way of making the child non-opaque. 1919 // A second way of making the child non-opaque.
1920 layer1->SetContentsOpaque(true); 1920 layer1->SetContentsOpaque(true);
1921 layer1->SetOpacity(1); 1921 layer1->SetOpacity(1);
1922 layer1->setExpectation(false, false); 1922 layer1->setExpectation(false, false);
1923 layer2->SetContentsOpaque(false); 1923 layer2->SetContentsOpaque(false);
1924 layer2->SetOpacity(1); 1924 layer2->SetOpacity(1);
1925 layer2->setExpectation(true, false); 1925 layer2->setExpectation(true, false);
1926 EXPECT_TRUE(m_hostImpl->PrepareToDraw(&frame)); 1926 EXPECT_TRUE(m_hostImpl->PrepareToDraw(&frame));
1927 m_hostImpl->DrawLayers(&frame); 1927 m_hostImpl->DrawLayers(&frame, base::TimeTicks::Now());
1928 EXPECT_TRUE(layer1->quadsAppended()); 1928 EXPECT_TRUE(layer1->quadsAppended());
1929 EXPECT_TRUE(layer2->quadsAppended()); 1929 EXPECT_TRUE(layer2->quadsAppended());
1930 m_hostImpl->DidDrawAllLayers(frame); 1930 m_hostImpl->DidDrawAllLayers(frame);
1931 1931
1932 // And when the layer says its not opaque but is painted opaque, it is not b lended. 1932 // And when the layer says its not opaque but is painted opaque, it is not b lended.
1933 layer1->SetContentsOpaque(true); 1933 layer1->SetContentsOpaque(true);
1934 layer1->SetOpacity(1); 1934 layer1->SetOpacity(1);
1935 layer1->setExpectation(false, false); 1935 layer1->setExpectation(false, false);
1936 layer2->SetContentsOpaque(true); 1936 layer2->SetContentsOpaque(true);
1937 layer2->SetOpacity(1); 1937 layer2->SetOpacity(1);
1938 layer2->setExpectation(false, false); 1938 layer2->setExpectation(false, false);
1939 EXPECT_TRUE(m_hostImpl->PrepareToDraw(&frame)); 1939 EXPECT_TRUE(m_hostImpl->PrepareToDraw(&frame));
1940 m_hostImpl->DrawLayers(&frame); 1940 m_hostImpl->DrawLayers(&frame, base::TimeTicks::Now());
1941 EXPECT_TRUE(layer1->quadsAppended()); 1941 EXPECT_TRUE(layer1->quadsAppended());
1942 EXPECT_TRUE(layer2->quadsAppended()); 1942 EXPECT_TRUE(layer2->quadsAppended());
1943 m_hostImpl->DidDrawAllLayers(frame); 1943 m_hostImpl->DidDrawAllLayers(frame);
1944 1944
1945 // Layer with partially opaque contents, drawn with blending. 1945 // Layer with partially opaque contents, drawn with blending.
1946 layer1->SetContentsOpaque(false); 1946 layer1->SetContentsOpaque(false);
1947 layer1->setQuadRect(gfx::Rect(5, 5, 5, 5)); 1947 layer1->setQuadRect(gfx::Rect(5, 5, 5, 5));
1948 layer1->setQuadVisibleRect(gfx::Rect(5, 5, 5, 5)); 1948 layer1->setQuadVisibleRect(gfx::Rect(5, 5, 5, 5));
1949 layer1->setOpaqueContentRect(gfx::Rect(5, 5, 2, 5)); 1949 layer1->setOpaqueContentRect(gfx::Rect(5, 5, 2, 5));
1950 layer1->setExpectation(true, false); 1950 layer1->setExpectation(true, false);
1951 EXPECT_TRUE(m_hostImpl->PrepareToDraw(&frame)); 1951 EXPECT_TRUE(m_hostImpl->PrepareToDraw(&frame));
1952 m_hostImpl->DrawLayers(&frame); 1952 m_hostImpl->DrawLayers(&frame, base::TimeTicks::Now());
1953 EXPECT_TRUE(layer1->quadsAppended()); 1953 EXPECT_TRUE(layer1->quadsAppended());
1954 m_hostImpl->DidDrawAllLayers(frame); 1954 m_hostImpl->DidDrawAllLayers(frame);
1955 1955
1956 // Layer with partially opaque contents partially culled, drawn with blendin g. 1956 // Layer with partially opaque contents partially culled, drawn with blendin g.
1957 layer1->SetContentsOpaque(false); 1957 layer1->SetContentsOpaque(false);
1958 layer1->setQuadRect(gfx::Rect(5, 5, 5, 5)); 1958 layer1->setQuadRect(gfx::Rect(5, 5, 5, 5));
1959 layer1->setQuadVisibleRect(gfx::Rect(5, 5, 5, 2)); 1959 layer1->setQuadVisibleRect(gfx::Rect(5, 5, 5, 2));
1960 layer1->setOpaqueContentRect(gfx::Rect(5, 5, 2, 5)); 1960 layer1->setOpaqueContentRect(gfx::Rect(5, 5, 2, 5));
1961 layer1->setExpectation(true, false); 1961 layer1->setExpectation(true, false);
1962 EXPECT_TRUE(m_hostImpl->PrepareToDraw(&frame)); 1962 EXPECT_TRUE(m_hostImpl->PrepareToDraw(&frame));
1963 m_hostImpl->DrawLayers(&frame); 1963 m_hostImpl->DrawLayers(&frame, base::TimeTicks::Now());
1964 EXPECT_TRUE(layer1->quadsAppended()); 1964 EXPECT_TRUE(layer1->quadsAppended());
1965 m_hostImpl->DidDrawAllLayers(frame); 1965 m_hostImpl->DidDrawAllLayers(frame);
1966 1966
1967 // Layer with partially opaque contents culled, drawn with blending. 1967 // Layer with partially opaque contents culled, drawn with blending.
1968 layer1->SetContentsOpaque(false); 1968 layer1->SetContentsOpaque(false);
1969 layer1->setQuadRect(gfx::Rect(5, 5, 5, 5)); 1969 layer1->setQuadRect(gfx::Rect(5, 5, 5, 5));
1970 layer1->setQuadVisibleRect(gfx::Rect(7, 5, 3, 5)); 1970 layer1->setQuadVisibleRect(gfx::Rect(7, 5, 3, 5));
1971 layer1->setOpaqueContentRect(gfx::Rect(5, 5, 2, 5)); 1971 layer1->setOpaqueContentRect(gfx::Rect(5, 5, 2, 5));
1972 layer1->setExpectation(true, false); 1972 layer1->setExpectation(true, false);
1973 EXPECT_TRUE(m_hostImpl->PrepareToDraw(&frame)); 1973 EXPECT_TRUE(m_hostImpl->PrepareToDraw(&frame));
1974 m_hostImpl->DrawLayers(&frame); 1974 m_hostImpl->DrawLayers(&frame, base::TimeTicks::Now());
1975 EXPECT_TRUE(layer1->quadsAppended()); 1975 EXPECT_TRUE(layer1->quadsAppended());
1976 m_hostImpl->DidDrawAllLayers(frame); 1976 m_hostImpl->DidDrawAllLayers(frame);
1977 1977
1978 // Layer with partially opaque contents and translucent contents culled, dra wn without blending. 1978 // Layer with partially opaque contents and translucent contents culled, dra wn without blending.
1979 layer1->SetContentsOpaque(false); 1979 layer1->SetContentsOpaque(false);
1980 layer1->setQuadRect(gfx::Rect(5, 5, 5, 5)); 1980 layer1->setQuadRect(gfx::Rect(5, 5, 5, 5));
1981 layer1->setQuadVisibleRect(gfx::Rect(5, 5, 2, 5)); 1981 layer1->setQuadVisibleRect(gfx::Rect(5, 5, 2, 5));
1982 layer1->setOpaqueContentRect(gfx::Rect(5, 5, 2, 5)); 1982 layer1->setOpaqueContentRect(gfx::Rect(5, 5, 2, 5));
1983 layer1->setExpectation(false, false); 1983 layer1->setExpectation(false, false);
1984 EXPECT_TRUE(m_hostImpl->PrepareToDraw(&frame)); 1984 EXPECT_TRUE(m_hostImpl->PrepareToDraw(&frame));
1985 m_hostImpl->DrawLayers(&frame); 1985 m_hostImpl->DrawLayers(&frame, base::TimeTicks::Now());
1986 EXPECT_TRUE(layer1->quadsAppended()); 1986 EXPECT_TRUE(layer1->quadsAppended());
1987 m_hostImpl->DidDrawAllLayers(frame); 1987 m_hostImpl->DidDrawAllLayers(frame);
1988 1988
1989 } 1989 }
1990 1990
1991 TEST_F(LayerTreeHostImplTest, viewportCovered) 1991 TEST_F(LayerTreeHostImplTest, viewportCovered)
1992 { 1992 {
1993 m_hostImpl->InitializeRenderer(createOutputSurface()); 1993 m_hostImpl->InitializeRenderer(createOutputSurface());
1994 m_hostImpl->active_tree()->set_background_color(SK_ColorGRAY); 1994 m_hostImpl->active_tree()->set_background_color(SK_ColorGRAY);
1995 1995
(...skipping 111 matching lines...) Expand 10 before | Expand all | Expand 10 after
2107 2107
2108 scoped_ptr<LayerImpl> root = FakeDrawableLayerImpl::Create(m_hostImpl->activ e_tree(), 1); 2108 scoped_ptr<LayerImpl> root = FakeDrawableLayerImpl::Create(m_hostImpl->activ e_tree(), 1);
2109 root->SetAnchorPoint(gfx::PointF(0, 0)); 2109 root->SetAnchorPoint(gfx::PointF(0, 0));
2110 root->SetBounds(gfx::Size(10, 10)); 2110 root->SetBounds(gfx::Size(10, 10));
2111 root->SetDrawsContent(true); 2111 root->SetDrawsContent(true);
2112 m_hostImpl->active_tree()->SetRootLayer(root.Pass()); 2112 m_hostImpl->active_tree()->SetRootLayer(root.Pass());
2113 EXPECT_FALSE(reshapeTracker->reshapeCalled()); 2113 EXPECT_FALSE(reshapeTracker->reshapeCalled());
2114 2114
2115 LayerTreeHostImpl::FrameData frame; 2115 LayerTreeHostImpl::FrameData frame;
2116 EXPECT_TRUE(m_hostImpl->PrepareToDraw(&frame)); 2116 EXPECT_TRUE(m_hostImpl->PrepareToDraw(&frame));
2117 m_hostImpl->DrawLayers(&frame); 2117 m_hostImpl->DrawLayers(&frame, base::TimeTicks::Now());
2118 EXPECT_TRUE(reshapeTracker->reshapeCalled()); 2118 EXPECT_TRUE(reshapeTracker->reshapeCalled());
2119 m_hostImpl->DidDrawAllLayers(frame); 2119 m_hostImpl->DidDrawAllLayers(frame);
2120 } 2120 }
2121 2121
2122 class PartialSwapTrackerContext : public TestWebGraphicsContext3D { 2122 class PartialSwapTrackerContext : public TestWebGraphicsContext3D {
2123 public: 2123 public:
2124 virtual void postSubBufferCHROMIUM(int x, int y, int width, int height) 2124 virtual void postSubBufferCHROMIUM(int x, int y, int width, int height)
2125 { 2125 {
2126 m_partialSwapRect = gfx::Rect(x, y, width, height); 2126 m_partialSwapRect = gfx::Rect(x, y, width, height);
2127 } 2127 }
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
2166 root->SetBounds(gfx::Size(500, 500)); 2166 root->SetBounds(gfx::Size(500, 500));
2167 root->SetContentBounds(gfx::Size(500, 500)); 2167 root->SetContentBounds(gfx::Size(500, 500));
2168 root->SetDrawsContent(true); 2168 root->SetDrawsContent(true);
2169 root->AddChild(child.Pass()); 2169 root->AddChild(child.Pass());
2170 layerTreeHostImpl->active_tree()->SetRootLayer(root.Pass()); 2170 layerTreeHostImpl->active_tree()->SetRootLayer(root.Pass());
2171 2171
2172 LayerTreeHostImpl::FrameData frame; 2172 LayerTreeHostImpl::FrameData frame;
2173 2173
2174 // First frame, the entire screen should get swapped. 2174 // First frame, the entire screen should get swapped.
2175 EXPECT_TRUE(layerTreeHostImpl->PrepareToDraw(&frame)); 2175 EXPECT_TRUE(layerTreeHostImpl->PrepareToDraw(&frame));
2176 layerTreeHostImpl->DrawLayers(&frame); 2176 layerTreeHostImpl->DrawLayers(&frame, base::TimeTicks::Now());
2177 layerTreeHostImpl->DidDrawAllLayers(frame); 2177 layerTreeHostImpl->DidDrawAllLayers(frame);
2178 layerTreeHostImpl->SwapBuffers(); 2178 layerTreeHostImpl->SwapBuffers();
2179 gfx::Rect actualSwapRect = partialSwapTracker->partialSwapRect(); 2179 gfx::Rect actualSwapRect = partialSwapTracker->partialSwapRect();
2180 gfx::Rect expectedSwapRect = gfx::Rect(gfx::Point(), gfx::Size(500, 500)); 2180 gfx::Rect expectedSwapRect = gfx::Rect(gfx::Point(), gfx::Size(500, 500));
2181 EXPECT_EQ(expectedSwapRect.x(), actualSwapRect.x()); 2181 EXPECT_EQ(expectedSwapRect.x(), actualSwapRect.x());
2182 EXPECT_EQ(expectedSwapRect.y(), actualSwapRect.y()); 2182 EXPECT_EQ(expectedSwapRect.y(), actualSwapRect.y());
2183 EXPECT_EQ(expectedSwapRect.width(), actualSwapRect.width()); 2183 EXPECT_EQ(expectedSwapRect.width(), actualSwapRect.width());
2184 EXPECT_EQ(expectedSwapRect.height(), actualSwapRect.height()); 2184 EXPECT_EQ(expectedSwapRect.height(), actualSwapRect.height());
2185 2185
2186 // Second frame, only the damaged area should get swapped. Damage should be the union 2186 // Second frame, only the damaged area should get swapped. Damage should be the union
2187 // of old and new child rects. 2187 // of old and new child rects.
2188 // expected damage rect: gfx::Rect(gfx::Point(), gfx::Size(26, 28)); 2188 // expected damage rect: gfx::Rect(gfx::Point(), gfx::Size(26, 28));
2189 // expected swap rect: vertically flipped, with origin at bottom left corner . 2189 // expected swap rect: vertically flipped, with origin at bottom left corner .
2190 layerTreeHostImpl->active_tree()->root_layer()->children()[0]->SetPosition(g fx::PointF(0, 0)); 2190 layerTreeHostImpl->active_tree()->root_layer()->children()[0]->SetPosition(g fx::PointF(0, 0));
2191 EXPECT_TRUE(layerTreeHostImpl->PrepareToDraw(&frame)); 2191 EXPECT_TRUE(layerTreeHostImpl->PrepareToDraw(&frame));
2192 layerTreeHostImpl->DrawLayers(&frame); 2192 layerTreeHostImpl->DrawLayers(&frame, base::TimeTicks::Now());
2193 m_hostImpl->DidDrawAllLayers(frame); 2193 m_hostImpl->DidDrawAllLayers(frame);
2194 layerTreeHostImpl->SwapBuffers(); 2194 layerTreeHostImpl->SwapBuffers();
2195 actualSwapRect = partialSwapTracker->partialSwapRect(); 2195 actualSwapRect = partialSwapTracker->partialSwapRect();
2196 expectedSwapRect = gfx::Rect(gfx::Point(0, 500-28), gfx::Size(26, 28)); 2196 expectedSwapRect = gfx::Rect(gfx::Point(0, 500-28), gfx::Size(26, 28));
2197 EXPECT_EQ(expectedSwapRect.x(), actualSwapRect.x()); 2197 EXPECT_EQ(expectedSwapRect.x(), actualSwapRect.x());
2198 EXPECT_EQ(expectedSwapRect.y(), actualSwapRect.y()); 2198 EXPECT_EQ(expectedSwapRect.y(), actualSwapRect.y());
2199 EXPECT_EQ(expectedSwapRect.width(), actualSwapRect.width()); 2199 EXPECT_EQ(expectedSwapRect.width(), actualSwapRect.width());
2200 EXPECT_EQ(expectedSwapRect.height(), actualSwapRect.height()); 2200 EXPECT_EQ(expectedSwapRect.height(), actualSwapRect.height());
2201 2201
2202 // Make sure that partial swap is constrained to the viewport dimensions 2202 // Make sure that partial swap is constrained to the viewport dimensions
2203 // expected damage rect: gfx::Rect(gfx::Point(), gfx::Size(500, 500)); 2203 // expected damage rect: gfx::Rect(gfx::Point(), gfx::Size(500, 500));
2204 // expected swap rect: flipped damage rect, but also clamped to viewport 2204 // expected swap rect: flipped damage rect, but also clamped to viewport
2205 layerTreeHostImpl->SetViewportSize(gfx::Size(10, 10), gfx::Size(10, 10)); 2205 layerTreeHostImpl->SetViewportSize(gfx::Size(10, 10), gfx::Size(10, 10));
2206 layerTreeHostImpl->active_tree()->root_layer()->SetOpacity(0.7f); // this wi ll damage everything 2206 layerTreeHostImpl->active_tree()->root_layer()->SetOpacity(0.7f); // this wi ll damage everything
2207 EXPECT_TRUE(layerTreeHostImpl->PrepareToDraw(&frame)); 2207 EXPECT_TRUE(layerTreeHostImpl->PrepareToDraw(&frame));
2208 layerTreeHostImpl->DrawLayers(&frame); 2208 layerTreeHostImpl->DrawLayers(&frame, base::TimeTicks::Now());
2209 m_hostImpl->DidDrawAllLayers(frame); 2209 m_hostImpl->DidDrawAllLayers(frame);
2210 layerTreeHostImpl->SwapBuffers(); 2210 layerTreeHostImpl->SwapBuffers();
2211 actualSwapRect = partialSwapTracker->partialSwapRect(); 2211 actualSwapRect = partialSwapTracker->partialSwapRect();
2212 expectedSwapRect = gfx::Rect(gfx::Point(), gfx::Size(10, 10)); 2212 expectedSwapRect = gfx::Rect(gfx::Point(), gfx::Size(10, 10));
2213 EXPECT_EQ(expectedSwapRect.x(), actualSwapRect.x()); 2213 EXPECT_EQ(expectedSwapRect.x(), actualSwapRect.x());
2214 EXPECT_EQ(expectedSwapRect.y(), actualSwapRect.y()); 2214 EXPECT_EQ(expectedSwapRect.y(), actualSwapRect.y());
2215 EXPECT_EQ(expectedSwapRect.width(), actualSwapRect.width()); 2215 EXPECT_EQ(expectedSwapRect.width(), actualSwapRect.width());
2216 EXPECT_EQ(expectedSwapRect.height(), actualSwapRect.height()); 2216 EXPECT_EQ(expectedSwapRect.height(), actualSwapRect.height());
2217 } 2217 }
2218 2218
(...skipping 142 matching lines...) Expand 10 before | Expand all | Expand 10 after
2361 // Run test case 2361 // Run test case
2362 createLayerTreeHost(false, outputSurface.Pass()); 2362 createLayerTreeHost(false, outputSurface.Pass());
2363 setupRootLayerImpl(FakeLayerWithQuads::Create(m_hostImpl->active_tree(), 1)) ; 2363 setupRootLayerImpl(FakeLayerWithQuads::Create(m_hostImpl->active_tree(), 1)) ;
2364 2364
2365 // without partial swap, and no clipping, no scissor is set. 2365 // without partial swap, and no clipping, no scissor is set.
2366 harness.mustDrawSolidQuad(); 2366 harness.mustDrawSolidQuad();
2367 harness.mustSetNoScissor(); 2367 harness.mustSetNoScissor();
2368 { 2368 {
2369 LayerTreeHostImpl::FrameData frame; 2369 LayerTreeHostImpl::FrameData frame;
2370 EXPECT_TRUE(m_hostImpl->PrepareToDraw(&frame)); 2370 EXPECT_TRUE(m_hostImpl->PrepareToDraw(&frame));
2371 m_hostImpl->DrawLayers(&frame); 2371 m_hostImpl->DrawLayers(&frame, base::TimeTicks::Now());
2372 m_hostImpl->DidDrawAllLayers(frame); 2372 m_hostImpl->DidDrawAllLayers(frame);
2373 } 2373 }
2374 Mock::VerifyAndClearExpectations(&mockContext); 2374 Mock::VerifyAndClearExpectations(&mockContext);
2375 2375
2376 // without partial swap, but a layer does clip its subtree, one scissor is s et. 2376 // without partial swap, but a layer does clip its subtree, one scissor is s et.
2377 m_hostImpl->active_tree()->root_layer()->SetMasksToBounds(true); 2377 m_hostImpl->active_tree()->root_layer()->SetMasksToBounds(true);
2378 harness.mustDrawSolidQuad(); 2378 harness.mustDrawSolidQuad();
2379 harness.mustSetScissor(0, 0, 10, 10); 2379 harness.mustSetScissor(0, 0, 10, 10);
2380 { 2380 {
2381 LayerTreeHostImpl::FrameData frame; 2381 LayerTreeHostImpl::FrameData frame;
2382 EXPECT_TRUE(m_hostImpl->PrepareToDraw(&frame)); 2382 EXPECT_TRUE(m_hostImpl->PrepareToDraw(&frame));
2383 m_hostImpl->DrawLayers(&frame); 2383 m_hostImpl->DrawLayers(&frame, base::TimeTicks::Now());
2384 m_hostImpl->DidDrawAllLayers(frame); 2384 m_hostImpl->DidDrawAllLayers(frame);
2385 } 2385 }
2386 Mock::VerifyAndClearExpectations(&mockContext); 2386 Mock::VerifyAndClearExpectations(&mockContext);
2387 } 2387 }
2388 2388
2389 TEST_F(LayerTreeHostImplTest, partialSwap) 2389 TEST_F(LayerTreeHostImplTest, partialSwap)
2390 { 2390 {
2391 scoped_ptr<OutputSurface> outputSurface = FakeOutputSurface::Create3d(scoped _ptr<WebKit::WebGraphicsContext3D>(new MockContext)).PassAs<OutputSurface>(); 2391 scoped_ptr<OutputSurface> outputSurface = FakeOutputSurface::Create3d(scoped _ptr<WebKit::WebGraphicsContext3D>(new MockContext)).PassAs<OutputSurface>();
2392 MockContext* mockContext = static_cast<MockContext*>(outputSurface->context3 d()); 2392 MockContext* mockContext = static_cast<MockContext*>(outputSurface->context3 d());
2393 MockContextHarness harness(mockContext); 2393 MockContextHarness harness(mockContext);
2394 2394
2395 createLayerTreeHost(true, outputSurface.Pass()); 2395 createLayerTreeHost(true, outputSurface.Pass());
2396 setupRootLayerImpl(FakeLayerWithQuads::Create(m_hostImpl->active_tree(), 1)) ; 2396 setupRootLayerImpl(FakeLayerWithQuads::Create(m_hostImpl->active_tree(), 1)) ;
2397 2397
2398 // The first frame is not a partially-swapped one. 2398 // The first frame is not a partially-swapped one.
2399 harness.mustSetScissor(0, 0, 10, 10); 2399 harness.mustSetScissor(0, 0, 10, 10);
2400 harness.mustDrawSolidQuad(); 2400 harness.mustDrawSolidQuad();
2401 { 2401 {
2402 LayerTreeHostImpl::FrameData frame; 2402 LayerTreeHostImpl::FrameData frame;
2403 EXPECT_TRUE(m_hostImpl->PrepareToDraw(&frame)); 2403 EXPECT_TRUE(m_hostImpl->PrepareToDraw(&frame));
2404 m_hostImpl->DrawLayers(&frame); 2404 m_hostImpl->DrawLayers(&frame, base::TimeTicks::Now());
2405 m_hostImpl->DidDrawAllLayers(frame); 2405 m_hostImpl->DidDrawAllLayers(frame);
2406 } 2406 }
2407 Mock::VerifyAndClearExpectations(&mockContext); 2407 Mock::VerifyAndClearExpectations(&mockContext);
2408 2408
2409 // Damage a portion of the frame. 2409 // Damage a portion of the frame.
2410 m_hostImpl->active_tree()->root_layer()->set_update_rect(gfx::Rect(0, 0, 2, 3)); 2410 m_hostImpl->active_tree()->root_layer()->set_update_rect(gfx::Rect(0, 0, 2, 3));
2411 2411
2412 // The second frame will be partially-swapped (the y coordinates are flipped ). 2412 // The second frame will be partially-swapped (the y coordinates are flipped ).
2413 harness.mustSetScissor(0, 7, 2, 3); 2413 harness.mustSetScissor(0, 7, 2, 3);
2414 harness.mustDrawSolidQuad(); 2414 harness.mustDrawSolidQuad();
2415 { 2415 {
2416 LayerTreeHostImpl::FrameData frame; 2416 LayerTreeHostImpl::FrameData frame;
2417 EXPECT_TRUE(m_hostImpl->PrepareToDraw(&frame)); 2417 EXPECT_TRUE(m_hostImpl->PrepareToDraw(&frame));
2418 m_hostImpl->DrawLayers(&frame); 2418 m_hostImpl->DrawLayers(&frame, base::TimeTicks::Now());
2419 m_hostImpl->DidDrawAllLayers(frame); 2419 m_hostImpl->DidDrawAllLayers(frame);
2420 } 2420 }
2421 Mock::VerifyAndClearExpectations(&mockContext); 2421 Mock::VerifyAndClearExpectations(&mockContext);
2422 } 2422 }
2423 2423
2424 class PartialSwapContext : public TestWebGraphicsContext3D { 2424 class PartialSwapContext : public TestWebGraphicsContext3D {
2425 public: 2425 public:
2426 virtual WebKit::WebString getString(WebKit::WGC3Denum name) 2426 virtual WebKit::WebString getString(WebKit::WGC3Denum name)
2427 { 2427 {
2428 if (name == GL_EXTENSIONS) 2428 if (name == GL_EXTENSIONS)
(...skipping 90 matching lines...) Expand 10 before | Expand all | Expand 10 after
2519 LayerTreeHostImpl::FrameData frame; 2519 LayerTreeHostImpl::FrameData frame;
2520 EXPECT_TRUE(myHostImpl->PrepareToDraw(&frame)); 2520 EXPECT_TRUE(myHostImpl->PrepareToDraw(&frame));
2521 2521
2522 // Verify all quads have been computed 2522 // Verify all quads have been computed
2523 ASSERT_EQ(2U, frame.render_passes.size()); 2523 ASSERT_EQ(2U, frame.render_passes.size());
2524 ASSERT_EQ(1U, frame.render_passes[0]->quad_list.size()); 2524 ASSERT_EQ(1U, frame.render_passes[0]->quad_list.size());
2525 ASSERT_EQ(1U, frame.render_passes[1]->quad_list.size()); 2525 ASSERT_EQ(1U, frame.render_passes[1]->quad_list.size());
2526 EXPECT_EQ(DrawQuad::SOLID_COLOR, frame.render_passes[0]->quad_list[0]->m aterial); 2526 EXPECT_EQ(DrawQuad::SOLID_COLOR, frame.render_passes[0]->quad_list[0]->m aterial);
2527 EXPECT_EQ(DrawQuad::RENDER_PASS, frame.render_passes[1]->quad_list[0]->m aterial); 2527 EXPECT_EQ(DrawQuad::RENDER_PASS, frame.render_passes[1]->quad_list[0]->m aterial);
2528 2528
2529 myHostImpl->DrawLayers(&frame); 2529 myHostImpl->DrawLayers(&frame, base::TimeTicks::Now());
2530 myHostImpl->DidDrawAllLayers(frame); 2530 myHostImpl->DidDrawAllLayers(frame);
2531 } 2531 }
2532 } 2532 }
2533 2533
2534 TEST_F(LayerTreeHostImplTest, contributingLayerEmptyScissorNoPartialSwap) 2534 TEST_F(LayerTreeHostImplTest, contributingLayerEmptyScissorNoPartialSwap)
2535 { 2535 {
2536 scoped_ptr<LayerTreeHostImpl> myHostImpl = setupLayersForOpacity(false, this , &m_proxy); 2536 scoped_ptr<LayerTreeHostImpl> myHostImpl = setupLayersForOpacity(false, this , &m_proxy);
2537 2537
2538 { 2538 {
2539 LayerTreeHostImpl::FrameData frame; 2539 LayerTreeHostImpl::FrameData frame;
2540 EXPECT_TRUE(myHostImpl->PrepareToDraw(&frame)); 2540 EXPECT_TRUE(myHostImpl->PrepareToDraw(&frame));
2541 2541
2542 // Verify all quads have been computed 2542 // Verify all quads have been computed
2543 ASSERT_EQ(2U, frame.render_passes.size()); 2543 ASSERT_EQ(2U, frame.render_passes.size());
2544 ASSERT_EQ(1U, frame.render_passes[0]->quad_list.size()); 2544 ASSERT_EQ(1U, frame.render_passes[0]->quad_list.size());
2545 ASSERT_EQ(1U, frame.render_passes[1]->quad_list.size()); 2545 ASSERT_EQ(1U, frame.render_passes[1]->quad_list.size());
2546 EXPECT_EQ(DrawQuad::SOLID_COLOR, frame.render_passes[0]->quad_list[0]->m aterial); 2546 EXPECT_EQ(DrawQuad::SOLID_COLOR, frame.render_passes[0]->quad_list[0]->m aterial);
2547 EXPECT_EQ(DrawQuad::RENDER_PASS, frame.render_passes[1]->quad_list[0]->m aterial); 2547 EXPECT_EQ(DrawQuad::RENDER_PASS, frame.render_passes[1]->quad_list[0]->m aterial);
2548 2548
2549 myHostImpl->DrawLayers(&frame); 2549 myHostImpl->DrawLayers(&frame, base::TimeTicks::Now());
2550 myHostImpl->DidDrawAllLayers(frame); 2550 myHostImpl->DidDrawAllLayers(frame);
2551 } 2551 }
2552 } 2552 }
2553 2553
2554 // Fake WebKit::WebGraphicsContext3D that tracks the number of textures in use. 2554 // Fake WebKit::WebGraphicsContext3D that tracks the number of textures in use.
2555 class TrackingWebGraphicsContext3D : public TestWebGraphicsContext3D { 2555 class TrackingWebGraphicsContext3D : public TestWebGraphicsContext3D {
2556 public: 2556 public:
2557 TrackingWebGraphicsContext3D() 2557 TrackingWebGraphicsContext3D()
2558 : TestWebGraphicsContext3D() 2558 : TestWebGraphicsContext3D()
2559 , m_numTextures(0) 2559 , m_numTextures(0)
(...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after
2637 ioSurfaceLayer->SetDrawsContent(true); 2637 ioSurfaceLayer->SetDrawsContent(true);
2638 ioSurfaceLayer->setIOSurfaceProperties(1, gfx::Size(10, 10)); 2638 ioSurfaceLayer->setIOSurfaceProperties(1, gfx::Size(10, 10));
2639 rootLayer->AddChild(ioSurfaceLayer.PassAs<LayerImpl>()); 2639 rootLayer->AddChild(ioSurfaceLayer.PassAs<LayerImpl>());
2640 2640
2641 m_hostImpl->active_tree()->SetRootLayer(rootLayer.Pass()); 2641 m_hostImpl->active_tree()->SetRootLayer(rootLayer.Pass());
2642 2642
2643 EXPECT_EQ(0u, context3d->NumTextures()); 2643 EXPECT_EQ(0u, context3d->NumTextures());
2644 2644
2645 LayerTreeHostImpl::FrameData frame; 2645 LayerTreeHostImpl::FrameData frame;
2646 EXPECT_TRUE(m_hostImpl->PrepareToDraw(&frame)); 2646 EXPECT_TRUE(m_hostImpl->PrepareToDraw(&frame));
2647 m_hostImpl->DrawLayers(&frame); 2647 m_hostImpl->DrawLayers(&frame, base::TimeTicks::Now());
2648 m_hostImpl->DidDrawAllLayers(frame); 2648 m_hostImpl->DidDrawAllLayers(frame);
2649 m_hostImpl->SwapBuffers(); 2649 m_hostImpl->SwapBuffers();
2650 2650
2651 EXPECT_GT(context3d->NumTextures(), 0u); 2651 EXPECT_GT(context3d->NumTextures(), 0u);
2652 2652
2653 // Kill the layer tree. 2653 // Kill the layer tree.
2654 m_hostImpl->active_tree()->SetRootLayer(LayerImpl::Create(m_hostImpl->active _tree(), 100)); 2654 m_hostImpl->active_tree()->SetRootLayer(LayerImpl::Create(m_hostImpl->active _tree(), 100));
2655 // There should be no textures left in use after. 2655 // There should be no textures left in use after.
2656 EXPECT_EQ(0u, context3d->NumTextures()); 2656 EXPECT_EQ(0u, context3d->NumTextures());
2657 } 2657 }
(...skipping 15 matching lines...) Expand all
2673 m_hostImpl->active_tree()->set_background_color(SK_ColorWHITE); 2673 m_hostImpl->active_tree()->set_background_color(SK_ColorWHITE);
2674 2674
2675 // Verify one quad is drawn when transparent background set is not set. 2675 // Verify one quad is drawn when transparent background set is not set.
2676 m_hostImpl->active_tree()->set_has_transparent_background(false); 2676 m_hostImpl->active_tree()->set_has_transparent_background(false);
2677 EXPECT_CALL(*mockContext, useProgram(_)) 2677 EXPECT_CALL(*mockContext, useProgram(_))
2678 .Times(1); 2678 .Times(1);
2679 EXPECT_CALL(*mockContext, drawElements(_, _, _, _)) 2679 EXPECT_CALL(*mockContext, drawElements(_, _, _, _))
2680 .Times(1); 2680 .Times(1);
2681 LayerTreeHostImpl::FrameData frame; 2681 LayerTreeHostImpl::FrameData frame;
2682 EXPECT_TRUE(m_hostImpl->PrepareToDraw(&frame)); 2682 EXPECT_TRUE(m_hostImpl->PrepareToDraw(&frame));
2683 m_hostImpl->DrawLayers(&frame); 2683 m_hostImpl->DrawLayers(&frame, base::TimeTicks::Now());
2684 m_hostImpl->DidDrawAllLayers(frame); 2684 m_hostImpl->DidDrawAllLayers(frame);
2685 Mock::VerifyAndClearExpectations(&mockContext); 2685 Mock::VerifyAndClearExpectations(&mockContext);
2686 2686
2687 // Verify no quads are drawn when transparent background is set. 2687 // Verify no quads are drawn when transparent background is set.
2688 m_hostImpl->active_tree()->set_has_transparent_background(true); 2688 m_hostImpl->active_tree()->set_has_transparent_background(true);
2689 EXPECT_TRUE(m_hostImpl->PrepareToDraw(&frame)); 2689 EXPECT_TRUE(m_hostImpl->PrepareToDraw(&frame));
2690 m_hostImpl->DrawLayers(&frame); 2690 m_hostImpl->DrawLayers(&frame, base::TimeTicks::Now());
2691 m_hostImpl->DidDrawAllLayers(frame); 2691 m_hostImpl->DidDrawAllLayers(frame);
2692 Mock::VerifyAndClearExpectations(&mockContext); 2692 Mock::VerifyAndClearExpectations(&mockContext);
2693 } 2693 }
2694 2694
2695 static void addDrawingLayerTo(LayerImpl* parent, int id, const gfx::Rect& layerR ect, LayerImpl** result) 2695 static void addDrawingLayerTo(LayerImpl* parent, int id, const gfx::Rect& layerR ect, LayerImpl** result)
2696 { 2696 {
2697 scoped_ptr<LayerImpl> layer = FakeLayerWithQuads::Create(parent->layer_tree_ impl(), id); 2697 scoped_ptr<LayerImpl> layer = FakeLayerWithQuads::Create(parent->layer_tree_ impl(), id);
2698 LayerImpl* layerPtr = layer.get(); 2698 LayerImpl* layerPtr = layer.get();
2699 layerPtr->SetAnchorPoint(gfx::PointF(0, 0)); 2699 layerPtr->SetAnchorPoint(gfx::PointF(0, 0));
2700 layerPtr->SetPosition(gfx::PointF(layerRect.origin())); 2700 layerPtr->SetPosition(gfx::PointF(layerRect.origin()));
(...skipping 102 matching lines...) Expand 10 before | Expand all | Expand 10 after
2803 EXPECT_TRUE(myHostImpl->PrepareToDraw(&frame)); 2803 EXPECT_TRUE(myHostImpl->PrepareToDraw(&frame));
2804 2804
2805 // Must receive 3 render passes. 2805 // Must receive 3 render passes.
2806 // For Root, there are 2 quads; for S1, there are 2 quads (1 is occluded ); for S2, there is 2 quads. 2806 // For Root, there are 2 quads; for S1, there are 2 quads (1 is occluded ); for S2, there is 2 quads.
2807 ASSERT_EQ(3U, frame.render_passes.size()); 2807 ASSERT_EQ(3U, frame.render_passes.size());
2808 2808
2809 EXPECT_EQ(2U, frame.render_passes[0]->quad_list.size()); 2809 EXPECT_EQ(2U, frame.render_passes[0]->quad_list.size());
2810 EXPECT_EQ(2U, frame.render_passes[1]->quad_list.size()); 2810 EXPECT_EQ(2U, frame.render_passes[1]->quad_list.size());
2811 EXPECT_EQ(2U, frame.render_passes[2]->quad_list.size()); 2811 EXPECT_EQ(2U, frame.render_passes[2]->quad_list.size());
2812 2812
2813 myHostImpl->DrawLayers(&frame); 2813 myHostImpl->DrawLayers(&frame, base::TimeTicks::Now());
2814 myHostImpl->DidDrawAllLayers(frame); 2814 myHostImpl->DidDrawAllLayers(frame);
2815 } 2815 }
2816 2816
2817 // "Unocclude" surface S1 and repeat draw. 2817 // "Unocclude" surface S1 and repeat draw.
2818 // Must remove S2's render pass since it's cached; 2818 // Must remove S2's render pass since it's cached;
2819 // Must keep S1 quads because texture contained external occlusion. 2819 // Must keep S1 quads because texture contained external occlusion.
2820 gfx::Transform transform = layerS2Ptr->transform(); 2820 gfx::Transform transform = layerS2Ptr->transform();
2821 transform.Translate(150, 150); 2821 transform.Translate(150, 150);
2822 layerS2Ptr->SetTransform(transform); 2822 layerS2Ptr->SetTransform(transform);
2823 { 2823 {
2824 LayerTreeHostImpl::FrameData frame; 2824 LayerTreeHostImpl::FrameData frame;
2825 EXPECT_TRUE(myHostImpl->PrepareToDraw(&frame)); 2825 EXPECT_TRUE(myHostImpl->PrepareToDraw(&frame));
2826 2826
2827 // Must receive 2 render passes. 2827 // Must receive 2 render passes.
2828 // For Root, there are 2 quads 2828 // For Root, there are 2 quads
2829 // For S1, the number of quads depends on what got unoccluded, so not as serted beyond being positive. 2829 // For S1, the number of quads depends on what got unoccluded, so not as serted beyond being positive.
2830 // For S2, there is no render pass 2830 // For S2, there is no render pass
2831 ASSERT_EQ(2U, frame.render_passes.size()); 2831 ASSERT_EQ(2U, frame.render_passes.size());
2832 2832
2833 EXPECT_GT(frame.render_passes[0]->quad_list.size(), 0U); 2833 EXPECT_GT(frame.render_passes[0]->quad_list.size(), 0U);
2834 EXPECT_EQ(2U, frame.render_passes[1]->quad_list.size()); 2834 EXPECT_EQ(2U, frame.render_passes[1]->quad_list.size());
2835 2835
2836 myHostImpl->DrawLayers(&frame); 2836 myHostImpl->DrawLayers(&frame, base::TimeTicks::Now());
2837 myHostImpl->DidDrawAllLayers(frame); 2837 myHostImpl->DidDrawAllLayers(frame);
2838 } 2838 }
2839 2839
2840 // "Re-occlude" surface S1 and repeat draw. 2840 // "Re-occlude" surface S1 and repeat draw.
2841 // Must remove S1's render pass since it is now available in full. 2841 // Must remove S1's render pass since it is now available in full.
2842 // S2 has no change so must also be removed. 2842 // S2 has no change so must also be removed.
2843 transform = layerS2Ptr->transform(); 2843 transform = layerS2Ptr->transform();
2844 transform.Translate(-15, -15); 2844 transform.Translate(-15, -15);
2845 layerS2Ptr->SetTransform(transform); 2845 layerS2Ptr->SetTransform(transform);
2846 { 2846 {
2847 LayerTreeHostImpl::FrameData frame; 2847 LayerTreeHostImpl::FrameData frame;
2848 EXPECT_TRUE(myHostImpl->PrepareToDraw(&frame)); 2848 EXPECT_TRUE(myHostImpl->PrepareToDraw(&frame));
2849 2849
2850 // Must receive 1 render pass - for the root. 2850 // Must receive 1 render pass - for the root.
2851 ASSERT_EQ(1U, frame.render_passes.size()); 2851 ASSERT_EQ(1U, frame.render_passes.size());
2852 2852
2853 EXPECT_EQ(2U, frame.render_passes[0]->quad_list.size()); 2853 EXPECT_EQ(2U, frame.render_passes[0]->quad_list.size());
2854 2854
2855 myHostImpl->DrawLayers(&frame); 2855 myHostImpl->DrawLayers(&frame, base::TimeTicks::Now());
2856 myHostImpl->DidDrawAllLayers(frame); 2856 myHostImpl->DidDrawAllLayers(frame);
2857 } 2857 }
2858 2858
2859 } 2859 }
2860 2860
2861 TEST_F(LayerTreeHostImplTest, textureCachingWithOcclusionEarlyOut) 2861 TEST_F(LayerTreeHostImplTest, textureCachingWithOcclusionEarlyOut)
2862 { 2862 {
2863 LayerTreeSettings settings; 2863 LayerTreeSettings settings;
2864 settings.minimumOcclusionTrackingSize = gfx::Size(); 2864 settings.minimumOcclusionTrackingSize = gfx::Size();
2865 settings.cacheRenderPassContents = true; 2865 settings.cacheRenderPassContents = true;
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after
2919 // Must receive 3 render passes. 2919 // Must receive 3 render passes.
2920 // For Root, there are 2 quads; for S1, there are 3 quads; for S2, there is 1 quad. 2920 // For Root, there are 2 quads; for S1, there are 3 quads; for S2, there is 1 quad.
2921 ASSERT_EQ(3U, frame.render_passes.size()); 2921 ASSERT_EQ(3U, frame.render_passes.size());
2922 2922
2923 EXPECT_EQ(1U, frame.render_passes[0]->quad_list.size()); 2923 EXPECT_EQ(1U, frame.render_passes[0]->quad_list.size());
2924 2924
2925 // L14 is culled, so only 3 quads. 2925 // L14 is culled, so only 3 quads.
2926 EXPECT_EQ(3U, frame.render_passes[1]->quad_list.size()); 2926 EXPECT_EQ(3U, frame.render_passes[1]->quad_list.size());
2927 EXPECT_EQ(2U, frame.render_passes[2]->quad_list.size()); 2927 EXPECT_EQ(2U, frame.render_passes[2]->quad_list.size());
2928 2928
2929 myHostImpl->DrawLayers(&frame); 2929 myHostImpl->DrawLayers(&frame, base::TimeTicks::Now());
2930 myHostImpl->DidDrawAllLayers(frame); 2930 myHostImpl->DidDrawAllLayers(frame);
2931 } 2931 }
2932 2932
2933 // "Unocclude" surface S1 and repeat draw. 2933 // "Unocclude" surface S1 and repeat draw.
2934 // Must remove S2's render pass since it's cached; 2934 // Must remove S2's render pass since it's cached;
2935 // Must keep S1 quads because texture contained external occlusion. 2935 // Must keep S1 quads because texture contained external occlusion.
2936 gfx::Transform transform = layerS2Ptr->transform(); 2936 gfx::Transform transform = layerS2Ptr->transform();
2937 transform.Translate(100, 100); 2937 transform.Translate(100, 100);
2938 layerS2Ptr->SetTransform(transform); 2938 layerS2Ptr->SetTransform(transform);
2939 { 2939 {
2940 LayerTreeHostImpl::FrameData frame; 2940 LayerTreeHostImpl::FrameData frame;
2941 EXPECT_TRUE(myHostImpl->PrepareToDraw(&frame)); 2941 EXPECT_TRUE(myHostImpl->PrepareToDraw(&frame));
2942 2942
2943 // Must receive 2 render passes. 2943 // Must receive 2 render passes.
2944 // For Root, there are 2 quads 2944 // For Root, there are 2 quads
2945 // For S1, the number of quads depends on what got unoccluded, so not as serted beyond being positive. 2945 // For S1, the number of quads depends on what got unoccluded, so not as serted beyond being positive.
2946 // For S2, there is no render pass 2946 // For S2, there is no render pass
2947 ASSERT_EQ(2U, frame.render_passes.size()); 2947 ASSERT_EQ(2U, frame.render_passes.size());
2948 2948
2949 EXPECT_GT(frame.render_passes[0]->quad_list.size(), 0U); 2949 EXPECT_GT(frame.render_passes[0]->quad_list.size(), 0U);
2950 EXPECT_EQ(2U, frame.render_passes[1]->quad_list.size()); 2950 EXPECT_EQ(2U, frame.render_passes[1]->quad_list.size());
2951 2951
2952 myHostImpl->DrawLayers(&frame); 2952 myHostImpl->DrawLayers(&frame, base::TimeTicks::Now());
2953 myHostImpl->DidDrawAllLayers(frame); 2953 myHostImpl->DidDrawAllLayers(frame);
2954 } 2954 }
2955 2955
2956 // "Re-occlude" surface S1 and repeat draw. 2956 // "Re-occlude" surface S1 and repeat draw.
2957 // Must remove S1's render pass since it is now available in full. 2957 // Must remove S1's render pass since it is now available in full.
2958 // S2 has no change so must also be removed. 2958 // S2 has no change so must also be removed.
2959 transform = layerS2Ptr->transform(); 2959 transform = layerS2Ptr->transform();
2960 transform.Translate(-15, -15); 2960 transform.Translate(-15, -15);
2961 layerS2Ptr->SetTransform(transform); 2961 layerS2Ptr->SetTransform(transform);
2962 { 2962 {
2963 LayerTreeHostImpl::FrameData frame; 2963 LayerTreeHostImpl::FrameData frame;
2964 EXPECT_TRUE(myHostImpl->PrepareToDraw(&frame)); 2964 EXPECT_TRUE(myHostImpl->PrepareToDraw(&frame));
2965 2965
2966 // Must receive 1 render pass - for the root. 2966 // Must receive 1 render pass - for the root.
2967 ASSERT_EQ(1U, frame.render_passes.size()); 2967 ASSERT_EQ(1U, frame.render_passes.size());
2968 2968
2969 EXPECT_EQ(2U, frame.render_passes[0]->quad_list.size()); 2969 EXPECT_EQ(2U, frame.render_passes[0]->quad_list.size());
2970 2970
2971 myHostImpl->DrawLayers(&frame); 2971 myHostImpl->DrawLayers(&frame, base::TimeTicks::Now());
2972 myHostImpl->DidDrawAllLayers(frame); 2972 myHostImpl->DidDrawAllLayers(frame);
2973 } 2973 }
2974 } 2974 }
2975 2975
2976 TEST_F(LayerTreeHostImplTest, textureCachingWithOcclusionExternalOverInternal) 2976 TEST_F(LayerTreeHostImplTest, textureCachingWithOcclusionExternalOverInternal)
2977 { 2977 {
2978 LayerTreeSettings settings; 2978 LayerTreeSettings settings;
2979 settings.minimumOcclusionTrackingSize = gfx::Size(); 2979 settings.minimumOcclusionTrackingSize = gfx::Size();
2980 settings.cacheRenderPassContents = true; 2980 settings.cacheRenderPassContents = true;
2981 scoped_ptr<LayerTreeHostImpl> myHostImpl = LayerTreeHostImpl::Create(setting s, this, &m_proxy); 2981 scoped_ptr<LayerTreeHostImpl> myHostImpl = LayerTreeHostImpl::Create(setting s, this, &m_proxy);
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
3026 EXPECT_TRUE(myHostImpl->PrepareToDraw(&frame)); 3026 EXPECT_TRUE(myHostImpl->PrepareToDraw(&frame));
3027 3027
3028 // Must receive 3 render passes. 3028 // Must receive 3 render passes.
3029 // For Root, there are 2 quads; for S1, there are 3 quads; for S2, there is 1 quad. 3029 // For Root, there are 2 quads; for S1, there are 3 quads; for S2, there is 1 quad.
3030 ASSERT_EQ(3U, frame.render_passes.size()); 3030 ASSERT_EQ(3U, frame.render_passes.size());
3031 3031
3032 EXPECT_EQ(1U, frame.render_passes[0]->quad_list.size()); 3032 EXPECT_EQ(1U, frame.render_passes[0]->quad_list.size());
3033 EXPECT_EQ(3U, frame.render_passes[1]->quad_list.size()); 3033 EXPECT_EQ(3U, frame.render_passes[1]->quad_list.size());
3034 EXPECT_EQ(2U, frame.render_passes[2]->quad_list.size()); 3034 EXPECT_EQ(2U, frame.render_passes[2]->quad_list.size());
3035 3035
3036 myHostImpl->DrawLayers(&frame); 3036 myHostImpl->DrawLayers(&frame, base::TimeTicks::Now());
3037 myHostImpl->DidDrawAllLayers(frame); 3037 myHostImpl->DidDrawAllLayers(frame);
3038 } 3038 }
3039 3039
3040 // "Unocclude" surface S1 and repeat draw. 3040 // "Unocclude" surface S1 and repeat draw.
3041 // Must remove S2's render pass since it's cached; 3041 // Must remove S2's render pass since it's cached;
3042 // Must keep S1 quads because texture contained external occlusion. 3042 // Must keep S1 quads because texture contained external occlusion.
3043 gfx::Transform transform = layerS2Ptr->transform(); 3043 gfx::Transform transform = layerS2Ptr->transform();
3044 transform.Translate(300, 0); 3044 transform.Translate(300, 0);
3045 layerS2Ptr->SetTransform(transform); 3045 layerS2Ptr->SetTransform(transform);
3046 { 3046 {
3047 LayerTreeHostImpl::FrameData frame; 3047 LayerTreeHostImpl::FrameData frame;
3048 EXPECT_TRUE(myHostImpl->PrepareToDraw(&frame)); 3048 EXPECT_TRUE(myHostImpl->PrepareToDraw(&frame));
3049 3049
3050 // Must receive 2 render passes. 3050 // Must receive 2 render passes.
3051 // For Root, there are 2 quads 3051 // For Root, there are 2 quads
3052 // For S1, the number of quads depends on what got unoccluded, so not as serted beyond being positive. 3052 // For S1, the number of quads depends on what got unoccluded, so not as serted beyond being positive.
3053 // For S2, there is no render pass 3053 // For S2, there is no render pass
3054 ASSERT_EQ(2U, frame.render_passes.size()); 3054 ASSERT_EQ(2U, frame.render_passes.size());
3055 3055
3056 EXPECT_GT(frame.render_passes[0]->quad_list.size(), 0U); 3056 EXPECT_GT(frame.render_passes[0]->quad_list.size(), 0U);
3057 EXPECT_EQ(2U, frame.render_passes[1]->quad_list.size()); 3057 EXPECT_EQ(2U, frame.render_passes[1]->quad_list.size());
3058 3058
3059 myHostImpl->DrawLayers(&frame); 3059 myHostImpl->DrawLayers(&frame, base::TimeTicks::Now());
3060 myHostImpl->DidDrawAllLayers(frame); 3060 myHostImpl->DidDrawAllLayers(frame);
3061 } 3061 }
3062 } 3062 }
3063 3063
3064 TEST_F(LayerTreeHostImplTest, textureCachingWithOcclusionExternalNotAligned) 3064 TEST_F(LayerTreeHostImplTest, textureCachingWithOcclusionExternalNotAligned)
3065 { 3065 {
3066 LayerTreeSettings settings; 3066 LayerTreeSettings settings;
3067 settings.cacheRenderPassContents = true; 3067 settings.cacheRenderPassContents = true;
3068 scoped_ptr<LayerTreeHostImpl> myHostImpl = LayerTreeHostImpl::Create(setting s, this, &m_proxy); 3068 scoped_ptr<LayerTreeHostImpl> myHostImpl = LayerTreeHostImpl::Create(setting s, this, &m_proxy);
3069 3069
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
3107 { 3107 {
3108 LayerTreeHostImpl::FrameData frame; 3108 LayerTreeHostImpl::FrameData frame;
3109 EXPECT_TRUE(myHostImpl->PrepareToDraw(&frame)); 3109 EXPECT_TRUE(myHostImpl->PrepareToDraw(&frame));
3110 3110
3111 // Must receive 2 render passes. 3111 // Must receive 2 render passes.
3112 ASSERT_EQ(2U, frame.render_passes.size()); 3112 ASSERT_EQ(2U, frame.render_passes.size());
3113 3113
3114 EXPECT_EQ(2U, frame.render_passes[0]->quad_list.size()); 3114 EXPECT_EQ(2U, frame.render_passes[0]->quad_list.size());
3115 EXPECT_EQ(1U, frame.render_passes[1]->quad_list.size()); 3115 EXPECT_EQ(1U, frame.render_passes[1]->quad_list.size());
3116 3116
3117 myHostImpl->DrawLayers(&frame); 3117 myHostImpl->DrawLayers(&frame, base::TimeTicks::Now());
3118 myHostImpl->DidDrawAllLayers(frame); 3118 myHostImpl->DidDrawAllLayers(frame);
3119 } 3119 }
3120 3120
3121 // Change opacity and draw. Verify we used cached texture. 3121 // Change opacity and draw. Verify we used cached texture.
3122 layerS1Ptr->SetOpacity(0.2f); 3122 layerS1Ptr->SetOpacity(0.2f);
3123 { 3123 {
3124 LayerTreeHostImpl::FrameData frame; 3124 LayerTreeHostImpl::FrameData frame;
3125 EXPECT_TRUE(myHostImpl->PrepareToDraw(&frame)); 3125 EXPECT_TRUE(myHostImpl->PrepareToDraw(&frame));
3126 3126
3127 // One render pass must be gone due to cached texture. 3127 // One render pass must be gone due to cached texture.
3128 ASSERT_EQ(1U, frame.render_passes.size()); 3128 ASSERT_EQ(1U, frame.render_passes.size());
3129 3129
3130 EXPECT_EQ(1U, frame.render_passes[0]->quad_list.size()); 3130 EXPECT_EQ(1U, frame.render_passes[0]->quad_list.size());
3131 3131
3132 myHostImpl->DrawLayers(&frame); 3132 myHostImpl->DrawLayers(&frame, base::TimeTicks::Now());
3133 myHostImpl->DidDrawAllLayers(frame); 3133 myHostImpl->DidDrawAllLayers(frame);
3134 } 3134 }
3135 } 3135 }
3136 3136
3137 TEST_F(LayerTreeHostImplTest, textureCachingWithOcclusionPartialSwap) 3137 TEST_F(LayerTreeHostImplTest, textureCachingWithOcclusionPartialSwap)
3138 { 3138 {
3139 LayerTreeSettings settings; 3139 LayerTreeSettings settings;
3140 settings.minimumOcclusionTrackingSize = gfx::Size(); 3140 settings.minimumOcclusionTrackingSize = gfx::Size();
3141 settings.partialSwapEnabled = true; 3141 settings.partialSwapEnabled = true;
3142 settings.cacheRenderPassContents = true; 3142 settings.cacheRenderPassContents = true;
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after
3195 EXPECT_TRUE(myHostImpl->PrepareToDraw(&frame)); 3195 EXPECT_TRUE(myHostImpl->PrepareToDraw(&frame));
3196 3196
3197 // Must receive 3 render passes. 3197 // Must receive 3 render passes.
3198 // For Root, there are 2 quads; for S1, there are 2 quads (one is occlud ed); for S2, there is 2 quads. 3198 // For Root, there are 2 quads; for S1, there are 2 quads (one is occlud ed); for S2, there is 2 quads.
3199 ASSERT_EQ(3U, frame.render_passes.size()); 3199 ASSERT_EQ(3U, frame.render_passes.size());
3200 3200
3201 EXPECT_EQ(2U, frame.render_passes[0]->quad_list.size()); 3201 EXPECT_EQ(2U, frame.render_passes[0]->quad_list.size());
3202 EXPECT_EQ(2U, frame.render_passes[1]->quad_list.size()); 3202 EXPECT_EQ(2U, frame.render_passes[1]->quad_list.size());
3203 EXPECT_EQ(2U, frame.render_passes[2]->quad_list.size()); 3203 EXPECT_EQ(2U, frame.render_passes[2]->quad_list.size());
3204 3204
3205 myHostImpl->DrawLayers(&frame); 3205 myHostImpl->DrawLayers(&frame, base::TimeTicks::Now());
3206 myHostImpl->DidDrawAllLayers(frame); 3206 myHostImpl->DidDrawAllLayers(frame);
3207 } 3207 }
3208 3208
3209 // "Unocclude" surface S1 and repeat draw. 3209 // "Unocclude" surface S1 and repeat draw.
3210 // Must remove S2's render pass since it's cached; 3210 // Must remove S2's render pass since it's cached;
3211 // Must keep S1 quads because texture contained external occlusion. 3211 // Must keep S1 quads because texture contained external occlusion.
3212 gfx::Transform transform = layerS2Ptr->transform(); 3212 gfx::Transform transform = layerS2Ptr->transform();
3213 transform.Translate(150, 150); 3213 transform.Translate(150, 150);
3214 layerS2Ptr->SetTransform(transform); 3214 layerS2Ptr->SetTransform(transform);
3215 { 3215 {
3216 LayerTreeHostImpl::FrameData frame; 3216 LayerTreeHostImpl::FrameData frame;
3217 EXPECT_TRUE(myHostImpl->PrepareToDraw(&frame)); 3217 EXPECT_TRUE(myHostImpl->PrepareToDraw(&frame));
3218 3218
3219 // Must receive 2 render passes. 3219 // Must receive 2 render passes.
3220 // For Root, there are 2 quads. 3220 // For Root, there are 2 quads.
3221 // For S1, there are 2 quads. 3221 // For S1, there are 2 quads.
3222 // For S2, there is no render pass 3222 // For S2, there is no render pass
3223 ASSERT_EQ(2U, frame.render_passes.size()); 3223 ASSERT_EQ(2U, frame.render_passes.size());
3224 3224
3225 EXPECT_EQ(2U, frame.render_passes[0]->quad_list.size()); 3225 EXPECT_EQ(2U, frame.render_passes[0]->quad_list.size());
3226 EXPECT_EQ(2U, frame.render_passes[1]->quad_list.size()); 3226 EXPECT_EQ(2U, frame.render_passes[1]->quad_list.size());
3227 3227
3228 myHostImpl->DrawLayers(&frame); 3228 myHostImpl->DrawLayers(&frame, base::TimeTicks::Now());
3229 myHostImpl->DidDrawAllLayers(frame); 3229 myHostImpl->DidDrawAllLayers(frame);
3230 } 3230 }
3231 3231
3232 // "Re-occlude" surface S1 and repeat draw. 3232 // "Re-occlude" surface S1 and repeat draw.
3233 // Must remove S1's render pass since it is now available in full. 3233 // Must remove S1's render pass since it is now available in full.
3234 // S2 has no change so must also be removed. 3234 // S2 has no change so must also be removed.
3235 transform = layerS2Ptr->transform(); 3235 transform = layerS2Ptr->transform();
3236 transform.Translate(-15, -15); 3236 transform.Translate(-15, -15);
3237 layerS2Ptr->SetTransform(transform); 3237 layerS2Ptr->SetTransform(transform);
3238 { 3238 {
3239 LayerTreeHostImpl::FrameData frame; 3239 LayerTreeHostImpl::FrameData frame;
3240 EXPECT_TRUE(myHostImpl->PrepareToDraw(&frame)); 3240 EXPECT_TRUE(myHostImpl->PrepareToDraw(&frame));
3241 3241
3242 // Root render pass only. 3242 // Root render pass only.
3243 ASSERT_EQ(1U, frame.render_passes.size()); 3243 ASSERT_EQ(1U, frame.render_passes.size());
3244 3244
3245 myHostImpl->DrawLayers(&frame); 3245 myHostImpl->DrawLayers(&frame, base::TimeTicks::Now());
3246 myHostImpl->DidDrawAllLayers(frame); 3246 myHostImpl->DidDrawAllLayers(frame);
3247 } 3247 }
3248 } 3248 }
3249 3249
3250 TEST_F(LayerTreeHostImplTest, textureCachingWithScissor) 3250 TEST_F(LayerTreeHostImplTest, textureCachingWithScissor)
3251 { 3251 {
3252 LayerTreeSettings settings; 3252 LayerTreeSettings settings;
3253 settings.minimumOcclusionTrackingSize = gfx::Size(); 3253 settings.minimumOcclusionTrackingSize = gfx::Size();
3254 settings.cacheRenderPassContents = true; 3254 settings.cacheRenderPassContents = true;
3255 scoped_ptr<LayerTreeHostImpl> myHostImpl = LayerTreeHostImpl::Create(setting s, this, &m_proxy); 3255 scoped_ptr<LayerTreeHostImpl> myHostImpl = LayerTreeHostImpl::Create(setting s, this, &m_proxy);
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after
3315 child->AddChild(grandChild.Pass()); 3315 child->AddChild(grandChild.Pass());
3316 root->AddChild(child.PassAs<LayerImpl>()); 3316 root->AddChild(child.PassAs<LayerImpl>());
3317 myHostImpl->active_tree()->SetRootLayer(root.Pass()); 3317 myHostImpl->active_tree()->SetRootLayer(root.Pass());
3318 myHostImpl->SetViewportSize(rootRect.size(), rootRect.size()); 3318 myHostImpl->SetViewportSize(rootRect.size(), rootRect.size());
3319 3319
3320 EXPECT_FALSE(myHostImpl->renderer()->HaveCachedResourcesForRenderPassId(chil dPassId)); 3320 EXPECT_FALSE(myHostImpl->renderer()->HaveCachedResourcesForRenderPassId(chil dPassId));
3321 3321
3322 { 3322 {
3323 LayerTreeHostImpl::FrameData frame; 3323 LayerTreeHostImpl::FrameData frame;
3324 EXPECT_TRUE(myHostImpl->PrepareToDraw(&frame)); 3324 EXPECT_TRUE(myHostImpl->PrepareToDraw(&frame));
3325 myHostImpl->DrawLayers(&frame); 3325 myHostImpl->DrawLayers(&frame, base::TimeTicks::Now());
3326 myHostImpl->DidDrawAllLayers(frame); 3326 myHostImpl->DidDrawAllLayers(frame);
3327 } 3327 }
3328 3328
3329 // We should have cached textures for surface 2. 3329 // We should have cached textures for surface 2.
3330 EXPECT_TRUE(myHostImpl->renderer()->HaveCachedResourcesForRenderPassId(child PassId)); 3330 EXPECT_TRUE(myHostImpl->renderer()->HaveCachedResourcesForRenderPassId(child PassId));
3331 3331
3332 { 3332 {
3333 LayerTreeHostImpl::FrameData frame; 3333 LayerTreeHostImpl::FrameData frame;
3334 EXPECT_TRUE(myHostImpl->PrepareToDraw(&frame)); 3334 EXPECT_TRUE(myHostImpl->PrepareToDraw(&frame));
3335 myHostImpl->DrawLayers(&frame); 3335 myHostImpl->DrawLayers(&frame, base::TimeTicks::Now());
3336 myHostImpl->DidDrawAllLayers(frame); 3336 myHostImpl->DidDrawAllLayers(frame);
3337 } 3337 }
3338 3338
3339 // We should still have cached textures for surface 2 after drawing with no damage. 3339 // We should still have cached textures for surface 2 after drawing with no damage.
3340 EXPECT_TRUE(myHostImpl->renderer()->HaveCachedResourcesForRenderPassId(child PassId)); 3340 EXPECT_TRUE(myHostImpl->renderer()->HaveCachedResourcesForRenderPassId(child PassId));
3341 3341
3342 // Damage a single tile of surface 2. 3342 // Damage a single tile of surface 2.
3343 childPtr->set_update_rect(gfx::Rect(10, 10, 10, 10)); 3343 childPtr->set_update_rect(gfx::Rect(10, 10, 10, 10));
3344 3344
3345 { 3345 {
3346 LayerTreeHostImpl::FrameData frame; 3346 LayerTreeHostImpl::FrameData frame;
3347 EXPECT_TRUE(myHostImpl->PrepareToDraw(&frame)); 3347 EXPECT_TRUE(myHostImpl->PrepareToDraw(&frame));
3348 myHostImpl->DrawLayers(&frame); 3348 myHostImpl->DrawLayers(&frame, base::TimeTicks::Now());
3349 myHostImpl->DidDrawAllLayers(frame); 3349 myHostImpl->DidDrawAllLayers(frame);
3350 } 3350 }
3351 3351
3352 // We should have a cached texture for surface 2 again even though it was da maged. 3352 // We should have a cached texture for surface 2 again even though it was da maged.
3353 EXPECT_TRUE(myHostImpl->renderer()->HaveCachedResourcesForRenderPassId(child PassId)); 3353 EXPECT_TRUE(myHostImpl->renderer()->HaveCachedResourcesForRenderPassId(child PassId));
3354 } 3354 }
3355 3355
3356 TEST_F(LayerTreeHostImplTest, surfaceTextureCaching) 3356 TEST_F(LayerTreeHostImplTest, surfaceTextureCaching)
3357 { 3357 {
3358 LayerTreeSettings settings; 3358 LayerTreeSettings settings;
(...skipping 17 matching lines...) Expand all
3376 ASSERT_EQ(2U, frame.render_passes.size()); 3376 ASSERT_EQ(2U, frame.render_passes.size());
3377 EXPECT_EQ(1U, frame.render_passes[0]->quad_list.size()); 3377 EXPECT_EQ(1U, frame.render_passes[0]->quad_list.size());
3378 EXPECT_EQ(1U, frame.render_passes[1]->quad_list.size()); 3378 EXPECT_EQ(1U, frame.render_passes[1]->quad_list.size());
3379 3379
3380 EXPECT_EQ(DrawQuad::RENDER_PASS, frame.render_passes[1]->quad_list[0]->m aterial); 3380 EXPECT_EQ(DrawQuad::RENDER_PASS, frame.render_passes[1]->quad_list[0]->m aterial);
3381 const RenderPassDrawQuad* quad = RenderPassDrawQuad::MaterialCast(frame. render_passes[1]->quad_list[0]); 3381 const RenderPassDrawQuad* quad = RenderPassDrawQuad::MaterialCast(frame. render_passes[1]->quad_list[0]);
3382 RenderPass* targetPass = frame.render_passes_by_id[quad->render_pass_id] ; 3382 RenderPass* targetPass = frame.render_passes_by_id[quad->render_pass_id] ;
3383 ASSERT_TRUE(targetPass); 3383 ASSERT_TRUE(targetPass);
3384 EXPECT_FALSE(targetPass->damage_rect.IsEmpty()); 3384 EXPECT_FALSE(targetPass->damage_rect.IsEmpty());
3385 3385
3386 myHostImpl->DrawLayers(&frame); 3386 myHostImpl->DrawLayers(&frame, base::TimeTicks::Now());
3387 myHostImpl->DidDrawAllLayers(frame); 3387 myHostImpl->DidDrawAllLayers(frame);
3388 } 3388 }
3389 3389
3390 // Draw without any change 3390 // Draw without any change
3391 { 3391 {
3392 LayerTreeHostImpl::FrameData frame; 3392 LayerTreeHostImpl::FrameData frame;
3393 EXPECT_TRUE(myHostImpl->PrepareToDraw(&frame)); 3393 EXPECT_TRUE(myHostImpl->PrepareToDraw(&frame));
3394 3394
3395 // Must receive one render pass, as the other one should be culled 3395 // Must receive one render pass, as the other one should be culled
3396 ASSERT_EQ(1U, frame.render_passes.size()); 3396 ASSERT_EQ(1U, frame.render_passes.size());
3397 3397
3398 EXPECT_EQ(1U, frame.render_passes[0]->quad_list.size()); 3398 EXPECT_EQ(1U, frame.render_passes[0]->quad_list.size());
3399 EXPECT_EQ(DrawQuad::RENDER_PASS, frame.render_passes[0]->quad_list[0]->m aterial); 3399 EXPECT_EQ(DrawQuad::RENDER_PASS, frame.render_passes[0]->quad_list[0]->m aterial);
3400 const RenderPassDrawQuad* quad = RenderPassDrawQuad::MaterialCast(frame. render_passes[0]->quad_list[0]); 3400 const RenderPassDrawQuad* quad = RenderPassDrawQuad::MaterialCast(frame. render_passes[0]->quad_list[0]);
3401 EXPECT_TRUE(frame.render_passes_by_id.find(quad->render_pass_id) == fram e.render_passes_by_id.end()); 3401 EXPECT_TRUE(frame.render_passes_by_id.find(quad->render_pass_id) == fram e.render_passes_by_id.end());
3402 3402
3403 myHostImpl->DrawLayers(&frame); 3403 myHostImpl->DrawLayers(&frame, base::TimeTicks::Now());
3404 myHostImpl->DidDrawAllLayers(frame); 3404 myHostImpl->DidDrawAllLayers(frame);
3405 } 3405 }
3406 3406
3407 // Change opacity and draw 3407 // Change opacity and draw
3408 surfaceLayerPtr->SetOpacity(0.6f); 3408 surfaceLayerPtr->SetOpacity(0.6f);
3409 { 3409 {
3410 LayerTreeHostImpl::FrameData frame; 3410 LayerTreeHostImpl::FrameData frame;
3411 EXPECT_TRUE(myHostImpl->PrepareToDraw(&frame)); 3411 EXPECT_TRUE(myHostImpl->PrepareToDraw(&frame));
3412 3412
3413 // Must receive one render pass, as the other one should be culled 3413 // Must receive one render pass, as the other one should be culled
3414 ASSERT_EQ(1U, frame.render_passes.size()); 3414 ASSERT_EQ(1U, frame.render_passes.size());
3415 3415
3416 EXPECT_EQ(1U, frame.render_passes[0]->quad_list.size()); 3416 EXPECT_EQ(1U, frame.render_passes[0]->quad_list.size());
3417 EXPECT_EQ(DrawQuad::RENDER_PASS, frame.render_passes[0]->quad_list[0]->m aterial); 3417 EXPECT_EQ(DrawQuad::RENDER_PASS, frame.render_passes[0]->quad_list[0]->m aterial);
3418 const RenderPassDrawQuad* quad = RenderPassDrawQuad::MaterialCast(frame. render_passes[0]->quad_list[0]); 3418 const RenderPassDrawQuad* quad = RenderPassDrawQuad::MaterialCast(frame. render_passes[0]->quad_list[0]);
3419 EXPECT_TRUE(frame.render_passes_by_id.find(quad->render_pass_id) == fram e.render_passes_by_id.end()); 3419 EXPECT_TRUE(frame.render_passes_by_id.find(quad->render_pass_id) == fram e.render_passes_by_id.end());
3420 3420
3421 myHostImpl->DrawLayers(&frame); 3421 myHostImpl->DrawLayers(&frame, base::TimeTicks::Now());
3422 myHostImpl->DidDrawAllLayers(frame); 3422 myHostImpl->DidDrawAllLayers(frame);
3423 } 3423 }
3424 3424
3425 // Change less benign property and draw - should have contents changed flag 3425 // Change less benign property and draw - should have contents changed flag
3426 surfaceLayerPtr->SetStackingOrderChanged(true); 3426 surfaceLayerPtr->SetStackingOrderChanged(true);
3427 { 3427 {
3428 LayerTreeHostImpl::FrameData frame; 3428 LayerTreeHostImpl::FrameData frame;
3429 EXPECT_TRUE(myHostImpl->PrepareToDraw(&frame)); 3429 EXPECT_TRUE(myHostImpl->PrepareToDraw(&frame));
3430 3430
3431 // Must receive two render passes, each with one quad 3431 // Must receive two render passes, each with one quad
3432 ASSERT_EQ(2U, frame.render_passes.size()); 3432 ASSERT_EQ(2U, frame.render_passes.size());
3433 3433
3434 EXPECT_EQ(1U, frame.render_passes[0]->quad_list.size()); 3434 EXPECT_EQ(1U, frame.render_passes[0]->quad_list.size());
3435 EXPECT_EQ(DrawQuad::SOLID_COLOR, frame.render_passes[0]->quad_list[0]->m aterial); 3435 EXPECT_EQ(DrawQuad::SOLID_COLOR, frame.render_passes[0]->quad_list[0]->m aterial);
3436 3436
3437 EXPECT_EQ(DrawQuad::RENDER_PASS, frame.render_passes[1]->quad_list[0]->m aterial); 3437 EXPECT_EQ(DrawQuad::RENDER_PASS, frame.render_passes[1]->quad_list[0]->m aterial);
3438 const RenderPassDrawQuad* quad = RenderPassDrawQuad::MaterialCast(frame. render_passes[1]->quad_list[0]); 3438 const RenderPassDrawQuad* quad = RenderPassDrawQuad::MaterialCast(frame. render_passes[1]->quad_list[0]);
3439 RenderPass* targetPass = frame.render_passes_by_id[quad->render_pass_id] ; 3439 RenderPass* targetPass = frame.render_passes_by_id[quad->render_pass_id] ;
3440 ASSERT_TRUE(targetPass); 3440 ASSERT_TRUE(targetPass);
3441 EXPECT_FALSE(targetPass->damage_rect.IsEmpty()); 3441 EXPECT_FALSE(targetPass->damage_rect.IsEmpty());
3442 3442
3443 myHostImpl->DrawLayers(&frame); 3443 myHostImpl->DrawLayers(&frame, base::TimeTicks::Now());
3444 myHostImpl->DidDrawAllLayers(frame); 3444 myHostImpl->DidDrawAllLayers(frame);
3445 } 3445 }
3446 3446
3447 // Change opacity again, and evict the cached surface texture. 3447 // Change opacity again, and evict the cached surface texture.
3448 surfaceLayerPtr->SetOpacity(0.5f); 3448 surfaceLayerPtr->SetOpacity(0.5f);
3449 static_cast<GLRendererWithReleaseTextures*>(myHostImpl->renderer())->Release RenderPassTextures(); 3449 static_cast<GLRendererWithReleaseTextures*>(myHostImpl->renderer())->Release RenderPassTextures();
3450 3450
3451 // Change opacity and draw 3451 // Change opacity and draw
3452 surfaceLayerPtr->SetOpacity(0.6f); 3452 surfaceLayerPtr->SetOpacity(0.6f);
3453 { 3453 {
(...skipping 10 matching lines...) Expand all
3464 3464
3465 EXPECT_EQ(DrawQuad::RENDER_PASS, frame.render_passes[1]->quad_list[0]->m aterial); 3465 EXPECT_EQ(DrawQuad::RENDER_PASS, frame.render_passes[1]->quad_list[0]->m aterial);
3466 const RenderPassDrawQuad* quad = RenderPassDrawQuad::MaterialCast(frame. render_passes[1]->quad_list[0]); 3466 const RenderPassDrawQuad* quad = RenderPassDrawQuad::MaterialCast(frame. render_passes[1]->quad_list[0]);
3467 RenderPass* targetPass = frame.render_passes_by_id[quad->render_pass_id] ; 3467 RenderPass* targetPass = frame.render_passes_by_id[quad->render_pass_id] ;
3468 ASSERT_TRUE(targetPass); 3468 ASSERT_TRUE(targetPass);
3469 EXPECT_TRUE(targetPass->damage_rect.IsEmpty()); 3469 EXPECT_TRUE(targetPass->damage_rect.IsEmpty());
3470 3470
3471 // Was our surface evicted? 3471 // Was our surface evicted?
3472 EXPECT_FALSE(myHostImpl->renderer()->HaveCachedResourcesForRenderPassId( targetPass->id)); 3472 EXPECT_FALSE(myHostImpl->renderer()->HaveCachedResourcesForRenderPassId( targetPass->id));
3473 3473
3474 myHostImpl->DrawLayers(&frame); 3474 myHostImpl->DrawLayers(&frame, base::TimeTicks::Now());
3475 myHostImpl->DidDrawAllLayers(frame); 3475 myHostImpl->DidDrawAllLayers(frame);
3476 } 3476 }
3477 3477
3478 // Draw without any change, to make sure the state is clear 3478 // Draw without any change, to make sure the state is clear
3479 { 3479 {
3480 LayerTreeHostImpl::FrameData frame; 3480 LayerTreeHostImpl::FrameData frame;
3481 EXPECT_TRUE(myHostImpl->PrepareToDraw(&frame)); 3481 EXPECT_TRUE(myHostImpl->PrepareToDraw(&frame));
3482 3482
3483 // Must receive one render pass, as the other one should be culled 3483 // Must receive one render pass, as the other one should be culled
3484 ASSERT_EQ(1U, frame.render_passes.size()); 3484 ASSERT_EQ(1U, frame.render_passes.size());
3485 3485
3486 EXPECT_EQ(1U, frame.render_passes[0]->quad_list.size()); 3486 EXPECT_EQ(1U, frame.render_passes[0]->quad_list.size());
3487 EXPECT_EQ(DrawQuad::RENDER_PASS, frame.render_passes[0]->quad_list[0]->m aterial); 3487 EXPECT_EQ(DrawQuad::RENDER_PASS, frame.render_passes[0]->quad_list[0]->m aterial);
3488 const RenderPassDrawQuad* quad = RenderPassDrawQuad::MaterialCast(frame. render_passes[0]->quad_list[0]); 3488 const RenderPassDrawQuad* quad = RenderPassDrawQuad::MaterialCast(frame. render_passes[0]->quad_list[0]);
3489 EXPECT_TRUE(frame.render_passes_by_id.find(quad->render_pass_id) == fram e.render_passes_by_id.end()); 3489 EXPECT_TRUE(frame.render_passes_by_id.find(quad->render_pass_id) == fram e.render_passes_by_id.end());
3490 3490
3491 myHostImpl->DrawLayers(&frame); 3491 myHostImpl->DrawLayers(&frame, base::TimeTicks::Now());
3492 myHostImpl->DidDrawAllLayers(frame); 3492 myHostImpl->DidDrawAllLayers(frame);
3493 } 3493 }
3494 3494
3495 // Change location of the intermediate layer 3495 // Change location of the intermediate layer
3496 gfx::Transform transform = intermediateLayerPtr->transform(); 3496 gfx::Transform transform = intermediateLayerPtr->transform();
3497 transform.matrix().setDouble(0, 3, 1.0001); 3497 transform.matrix().setDouble(0, 3, 1.0001);
3498 intermediateLayerPtr->SetTransform(transform); 3498 intermediateLayerPtr->SetTransform(transform);
3499 { 3499 {
3500 LayerTreeHostImpl::FrameData frame; 3500 LayerTreeHostImpl::FrameData frame;
3501 EXPECT_TRUE(myHostImpl->PrepareToDraw(&frame)); 3501 EXPECT_TRUE(myHostImpl->PrepareToDraw(&frame));
3502 3502
3503 // Must receive one render pass, as the other one should be culled. 3503 // Must receive one render pass, as the other one should be culled.
3504 ASSERT_EQ(1U, frame.render_passes.size()); 3504 ASSERT_EQ(1U, frame.render_passes.size());
3505 EXPECT_EQ(1U, frame.render_passes[0]->quad_list.size()); 3505 EXPECT_EQ(1U, frame.render_passes[0]->quad_list.size());
3506 3506
3507 EXPECT_EQ(DrawQuad::RENDER_PASS, frame.render_passes[0]->quad_list[0]->m aterial); 3507 EXPECT_EQ(DrawQuad::RENDER_PASS, frame.render_passes[0]->quad_list[0]->m aterial);
3508 const RenderPassDrawQuad* quad = RenderPassDrawQuad::MaterialCast(frame. render_passes[0]->quad_list[0]); 3508 const RenderPassDrawQuad* quad = RenderPassDrawQuad::MaterialCast(frame. render_passes[0]->quad_list[0]);
3509 EXPECT_TRUE(frame.render_passes_by_id.find(quad->render_pass_id) == fram e.render_passes_by_id.end()); 3509 EXPECT_TRUE(frame.render_passes_by_id.find(quad->render_pass_id) == fram e.render_passes_by_id.end());
3510 3510
3511 myHostImpl->DrawLayers(&frame); 3511 myHostImpl->DrawLayers(&frame, base::TimeTicks::Now());
3512 myHostImpl->DidDrawAllLayers(frame); 3512 myHostImpl->DidDrawAllLayers(frame);
3513 } 3513 }
3514 } 3514 }
3515 3515
3516 TEST_F(LayerTreeHostImplTest, surfaceTextureCachingNoPartialSwap) 3516 TEST_F(LayerTreeHostImplTest, surfaceTextureCachingNoPartialSwap)
3517 { 3517 {
3518 LayerTreeSettings settings; 3518 LayerTreeSettings settings;
3519 settings.minimumOcclusionTrackingSize = gfx::Size(); 3519 settings.minimumOcclusionTrackingSize = gfx::Size();
3520 settings.cacheRenderPassContents = true; 3520 settings.cacheRenderPassContents = true;
3521 scoped_ptr<LayerTreeHostImpl> myHostImpl = LayerTreeHostImpl::Create(setting s, this, &m_proxy); 3521 scoped_ptr<LayerTreeHostImpl> myHostImpl = LayerTreeHostImpl::Create(setting s, this, &m_proxy);
(...skipping 18 matching lines...) Expand all
3540 const RenderPassDrawQuad* quad = RenderPassDrawQuad::MaterialCast(frame. render_passes[1]->quad_list[0]); 3540 const RenderPassDrawQuad* quad = RenderPassDrawQuad::MaterialCast(frame. render_passes[1]->quad_list[0]);
3541 RenderPass* targetPass = frame.render_passes_by_id[quad->render_pass_id] ; 3541 RenderPass* targetPass = frame.render_passes_by_id[quad->render_pass_id] ;
3542 EXPECT_FALSE(targetPass->damage_rect.IsEmpty()); 3542 EXPECT_FALSE(targetPass->damage_rect.IsEmpty());
3543 3543
3544 EXPECT_FALSE(frame.render_passes[0]->damage_rect.IsEmpty()); 3544 EXPECT_FALSE(frame.render_passes[0]->damage_rect.IsEmpty());
3545 EXPECT_FALSE(frame.render_passes[1]->damage_rect.IsEmpty()); 3545 EXPECT_FALSE(frame.render_passes[1]->damage_rect.IsEmpty());
3546 3546
3547 EXPECT_FALSE(frame.render_passes[0]->has_occlusion_from_outside_target_s urface); 3547 EXPECT_FALSE(frame.render_passes[0]->has_occlusion_from_outside_target_s urface);
3548 EXPECT_FALSE(frame.render_passes[1]->has_occlusion_from_outside_target_s urface); 3548 EXPECT_FALSE(frame.render_passes[1]->has_occlusion_from_outside_target_s urface);
3549 3549
3550 myHostImpl->DrawLayers(&frame); 3550 myHostImpl->DrawLayers(&frame, base::TimeTicks::Now());
3551 myHostImpl->DidDrawAllLayers(frame); 3551 myHostImpl->DidDrawAllLayers(frame);
3552 } 3552 }
3553 3553
3554 // Draw without any change 3554 // Draw without any change
3555 { 3555 {
3556 LayerTreeHostImpl::FrameData frame; 3556 LayerTreeHostImpl::FrameData frame;
3557 EXPECT_TRUE(myHostImpl->PrepareToDraw(&frame)); 3557 EXPECT_TRUE(myHostImpl->PrepareToDraw(&frame));
3558 3558
3559 // Even though there was no change, we set the damage to entire viewport . 3559 // Even though there was no change, we set the damage to entire viewport .
3560 // One of the passes should be culled as a result, since contents didn't change 3560 // One of the passes should be culled as a result, since contents didn't change
3561 // and we have cached texture. 3561 // and we have cached texture.
3562 ASSERT_EQ(1U, frame.render_passes.size()); 3562 ASSERT_EQ(1U, frame.render_passes.size());
3563 EXPECT_EQ(1U, frame.render_passes[0]->quad_list.size()); 3563 EXPECT_EQ(1U, frame.render_passes[0]->quad_list.size());
3564 3564
3565 EXPECT_TRUE(frame.render_passes[0]->damage_rect.IsEmpty()); 3565 EXPECT_TRUE(frame.render_passes[0]->damage_rect.IsEmpty());
3566 3566
3567 myHostImpl->DrawLayers(&frame); 3567 myHostImpl->DrawLayers(&frame, base::TimeTicks::Now());
3568 myHostImpl->DidDrawAllLayers(frame); 3568 myHostImpl->DidDrawAllLayers(frame);
3569 } 3569 }
3570 3570
3571 // Change opacity and draw 3571 // Change opacity and draw
3572 surfaceLayerPtr->SetOpacity(0.6f); 3572 surfaceLayerPtr->SetOpacity(0.6f);
3573 { 3573 {
3574 LayerTreeHostImpl::FrameData frame; 3574 LayerTreeHostImpl::FrameData frame;
3575 EXPECT_TRUE(myHostImpl->PrepareToDraw(&frame)); 3575 EXPECT_TRUE(myHostImpl->PrepareToDraw(&frame));
3576 3576
3577 // Must receive one render pass, as the other one should be culled 3577 // Must receive one render pass, as the other one should be culled
3578 ASSERT_EQ(1U, frame.render_passes.size()); 3578 ASSERT_EQ(1U, frame.render_passes.size());
3579 3579
3580 EXPECT_EQ(1U, frame.render_passes[0]->quad_list.size()); 3580 EXPECT_EQ(1U, frame.render_passes[0]->quad_list.size());
3581 EXPECT_EQ(DrawQuad::RENDER_PASS, frame.render_passes[0]->quad_list[0]->m aterial); 3581 EXPECT_EQ(DrawQuad::RENDER_PASS, frame.render_passes[0]->quad_list[0]->m aterial);
3582 const RenderPassDrawQuad* quad = RenderPassDrawQuad::MaterialCast(frame. render_passes[0]->quad_list[0]); 3582 const RenderPassDrawQuad* quad = RenderPassDrawQuad::MaterialCast(frame. render_passes[0]->quad_list[0]);
3583 EXPECT_TRUE(frame.render_passes_by_id.find(quad->render_pass_id) == fram e.render_passes_by_id.end()); 3583 EXPECT_TRUE(frame.render_passes_by_id.find(quad->render_pass_id) == fram e.render_passes_by_id.end());
3584 3584
3585 myHostImpl->DrawLayers(&frame); 3585 myHostImpl->DrawLayers(&frame, base::TimeTicks::Now());
3586 myHostImpl->DidDrawAllLayers(frame); 3586 myHostImpl->DidDrawAllLayers(frame);
3587 } 3587 }
3588 3588
3589 // Change less benign property and draw - should have contents changed flag 3589 // Change less benign property and draw - should have contents changed flag
3590 surfaceLayerPtr->SetStackingOrderChanged(true); 3590 surfaceLayerPtr->SetStackingOrderChanged(true);
3591 { 3591 {
3592 LayerTreeHostImpl::FrameData frame; 3592 LayerTreeHostImpl::FrameData frame;
3593 EXPECT_TRUE(myHostImpl->PrepareToDraw(&frame)); 3593 EXPECT_TRUE(myHostImpl->PrepareToDraw(&frame));
3594 3594
3595 // Must receive two render passes, each with one quad 3595 // Must receive two render passes, each with one quad
3596 ASSERT_EQ(2U, frame.render_passes.size()); 3596 ASSERT_EQ(2U, frame.render_passes.size());
3597 3597
3598 EXPECT_EQ(1U, frame.render_passes[0]->quad_list.size()); 3598 EXPECT_EQ(1U, frame.render_passes[0]->quad_list.size());
3599 EXPECT_EQ(DrawQuad::SOLID_COLOR, frame.render_passes[0]->quad_list[0]->m aterial); 3599 EXPECT_EQ(DrawQuad::SOLID_COLOR, frame.render_passes[0]->quad_list[0]->m aterial);
3600 3600
3601 EXPECT_EQ(DrawQuad::RENDER_PASS, frame.render_passes[1]->quad_list[0]->m aterial); 3601 EXPECT_EQ(DrawQuad::RENDER_PASS, frame.render_passes[1]->quad_list[0]->m aterial);
3602 const RenderPassDrawQuad* quad = RenderPassDrawQuad::MaterialCast(frame. render_passes[1]->quad_list[0]); 3602 const RenderPassDrawQuad* quad = RenderPassDrawQuad::MaterialCast(frame. render_passes[1]->quad_list[0]);
3603 RenderPass* targetPass = frame.render_passes_by_id[quad->render_pass_id] ; 3603 RenderPass* targetPass = frame.render_passes_by_id[quad->render_pass_id] ;
3604 ASSERT_TRUE(targetPass); 3604 ASSERT_TRUE(targetPass);
3605 EXPECT_FALSE(targetPass->damage_rect.IsEmpty()); 3605 EXPECT_FALSE(targetPass->damage_rect.IsEmpty());
3606 3606
3607 myHostImpl->DrawLayers(&frame); 3607 myHostImpl->DrawLayers(&frame, base::TimeTicks::Now());
3608 myHostImpl->DidDrawAllLayers(frame); 3608 myHostImpl->DidDrawAllLayers(frame);
3609 } 3609 }
3610 3610
3611 // Change opacity again, and evict the cached surface texture. 3611 // Change opacity again, and evict the cached surface texture.
3612 surfaceLayerPtr->SetOpacity(0.5f); 3612 surfaceLayerPtr->SetOpacity(0.5f);
3613 static_cast<GLRendererWithReleaseTextures*>(myHostImpl->renderer())->Release RenderPassTextures(); 3613 static_cast<GLRendererWithReleaseTextures*>(myHostImpl->renderer())->Release RenderPassTextures();
3614 3614
3615 // Change opacity and draw 3615 // Change opacity and draw
3616 surfaceLayerPtr->SetOpacity(0.6f); 3616 surfaceLayerPtr->SetOpacity(0.6f);
3617 { 3617 {
(...skipping 10 matching lines...) Expand all
3628 3628
3629 EXPECT_EQ(DrawQuad::RENDER_PASS, frame.render_passes[1]->quad_list[0]->m aterial); 3629 EXPECT_EQ(DrawQuad::RENDER_PASS, frame.render_passes[1]->quad_list[0]->m aterial);
3630 const RenderPassDrawQuad* quad = RenderPassDrawQuad::MaterialCast(frame. render_passes[1]->quad_list[0]); 3630 const RenderPassDrawQuad* quad = RenderPassDrawQuad::MaterialCast(frame. render_passes[1]->quad_list[0]);
3631 RenderPass* targetPass = frame.render_passes_by_id[quad->render_pass_id] ; 3631 RenderPass* targetPass = frame.render_passes_by_id[quad->render_pass_id] ;
3632 ASSERT_TRUE(targetPass); 3632 ASSERT_TRUE(targetPass);
3633 EXPECT_TRUE(targetPass->damage_rect.IsEmpty()); 3633 EXPECT_TRUE(targetPass->damage_rect.IsEmpty());
3634 3634
3635 // Was our surface evicted? 3635 // Was our surface evicted?
3636 EXPECT_FALSE(myHostImpl->renderer()->HaveCachedResourcesForRenderPassId( targetPass->id)); 3636 EXPECT_FALSE(myHostImpl->renderer()->HaveCachedResourcesForRenderPassId( targetPass->id));
3637 3637
3638 myHostImpl->DrawLayers(&frame); 3638 myHostImpl->DrawLayers(&frame, base::TimeTicks::Now());
3639 myHostImpl->DidDrawAllLayers(frame); 3639 myHostImpl->DidDrawAllLayers(frame);
3640 } 3640 }
3641 3641
3642 // Draw without any change, to make sure the state is clear 3642 // Draw without any change, to make sure the state is clear
3643 { 3643 {
3644 LayerTreeHostImpl::FrameData frame; 3644 LayerTreeHostImpl::FrameData frame;
3645 EXPECT_TRUE(myHostImpl->PrepareToDraw(&frame)); 3645 EXPECT_TRUE(myHostImpl->PrepareToDraw(&frame));
3646 3646
3647 // Even though there was no change, we set the damage to entire viewport . 3647 // Even though there was no change, we set the damage to entire viewport .
3648 // One of the passes should be culled as a result, since contents didn't change 3648 // One of the passes should be culled as a result, since contents didn't change
3649 // and we have cached texture. 3649 // and we have cached texture.
3650 ASSERT_EQ(1U, frame.render_passes.size()); 3650 ASSERT_EQ(1U, frame.render_passes.size());
3651 EXPECT_EQ(1U, frame.render_passes[0]->quad_list.size()); 3651 EXPECT_EQ(1U, frame.render_passes[0]->quad_list.size());
3652 3652
3653 myHostImpl->DrawLayers(&frame); 3653 myHostImpl->DrawLayers(&frame, base::TimeTicks::Now());
3654 myHostImpl->DidDrawAllLayers(frame); 3654 myHostImpl->DidDrawAllLayers(frame);
3655 } 3655 }
3656 3656
3657 // Change location of the intermediate layer 3657 // Change location of the intermediate layer
3658 gfx::Transform transform = intermediateLayerPtr->transform(); 3658 gfx::Transform transform = intermediateLayerPtr->transform();
3659 transform.matrix().setDouble(0, 3, 1.0001); 3659 transform.matrix().setDouble(0, 3, 1.0001);
3660 intermediateLayerPtr->SetTransform(transform); 3660 intermediateLayerPtr->SetTransform(transform);
3661 { 3661 {
3662 LayerTreeHostImpl::FrameData frame; 3662 LayerTreeHostImpl::FrameData frame;
3663 EXPECT_TRUE(myHostImpl->PrepareToDraw(&frame)); 3663 EXPECT_TRUE(myHostImpl->PrepareToDraw(&frame));
3664 3664
3665 // Must receive one render pass, as the other one should be culled. 3665 // Must receive one render pass, as the other one should be culled.
3666 ASSERT_EQ(1U, frame.render_passes.size()); 3666 ASSERT_EQ(1U, frame.render_passes.size());
3667 EXPECT_EQ(1U, frame.render_passes[0]->quad_list.size()); 3667 EXPECT_EQ(1U, frame.render_passes[0]->quad_list.size());
3668 3668
3669 EXPECT_EQ(DrawQuad::RENDER_PASS, frame.render_passes[0]->quad_list[0]->m aterial); 3669 EXPECT_EQ(DrawQuad::RENDER_PASS, frame.render_passes[0]->quad_list[0]->m aterial);
3670 const RenderPassDrawQuad* quad = RenderPassDrawQuad::MaterialCast(frame. render_passes[0]->quad_list[0]); 3670 const RenderPassDrawQuad* quad = RenderPassDrawQuad::MaterialCast(frame. render_passes[0]->quad_list[0]);
3671 EXPECT_TRUE(frame.render_passes_by_id.find(quad->render_pass_id) == fram e.render_passes_by_id.end()); 3671 EXPECT_TRUE(frame.render_passes_by_id.find(quad->render_pass_id) == fram e.render_passes_by_id.end());
3672 3672
3673 myHostImpl->DrawLayers(&frame); 3673 myHostImpl->DrawLayers(&frame, base::TimeTicks::Now());
3674 myHostImpl->DidDrawAllLayers(frame); 3674 myHostImpl->DidDrawAllLayers(frame);
3675 } 3675 }
3676 } 3676 }
3677 3677
3678 TEST_F(LayerTreeHostImplTest, releaseContentsTextureShouldTriggerCommit) 3678 TEST_F(LayerTreeHostImplTest, releaseContentsTextureShouldTriggerCommit)
3679 { 3679 {
3680 setReduceMemoryResult(false); 3680 setReduceMemoryResult(false);
3681 3681
3682 // Even if changing the memory limit didn't result in anything being 3682 // Even if changing the memory limit didn't result in anything being
3683 // evicted, we need to re-commit because the new value may result in us 3683 // evicted, we need to re-commit because the new value may result in us
(...skipping 373 matching lines...) Expand 10 before | Expand all | Expand 10 after
4057 4057
4058 // Verify the damage rect for the root render pass. 4058 // Verify the damage rect for the root render pass.
4059 const RenderPass* rootRenderPass = frame.render_passes.back(); 4059 const RenderPass* rootRenderPass = frame.render_passes.back();
4060 EXPECT_RECT_EQ(expectedDamage, rootRenderPass->damage_rect); 4060 EXPECT_RECT_EQ(expectedDamage, rootRenderPass->damage_rect);
4061 4061
4062 // Verify the root layer's quad is generated and not being culled. 4062 // Verify the root layer's quad is generated and not being culled.
4063 ASSERT_EQ(1u, rootRenderPass->quad_list.size()); 4063 ASSERT_EQ(1u, rootRenderPass->quad_list.size());
4064 gfx::Rect expectedVisibleRect(m_hostImpl->active_tree()->root_layer()->c ontent_bounds()); 4064 gfx::Rect expectedVisibleRect(m_hostImpl->active_tree()->root_layer()->c ontent_bounds());
4065 EXPECT_RECT_EQ(expectedVisibleRect, rootRenderPass->quad_list[0]->visibl e_rect); 4065 EXPECT_RECT_EQ(expectedVisibleRect, rootRenderPass->quad_list[0]->visibl e_rect);
4066 4066
4067 m_hostImpl->DrawLayers(&frame); 4067 m_hostImpl->DrawLayers(&frame, base::TimeTicks::Now());
4068 m_hostImpl->DidDrawAllLayers(frame); 4068 m_hostImpl->DidDrawAllLayers(frame);
4069 } 4069 }
4070 }; 4070 };
4071 4071
4072 TEST_F(LayerTreeHostImplTestWithDelegatingRenderer, FrameIncludesDamageRect) 4072 TEST_F(LayerTreeHostImplTestWithDelegatingRenderer, FrameIncludesDamageRect)
4073 { 4073 {
4074 scoped_ptr<SolidColorLayerImpl> root = SolidColorLayerImpl::Create(m_hostImp l->active_tree(), 1); 4074 scoped_ptr<SolidColorLayerImpl> root = SolidColorLayerImpl::Create(m_hostImp l->active_tree(), 1);
4075 root->SetAnchorPoint(gfx::PointF(0.f, 0.f)); 4075 root->SetAnchorPoint(gfx::PointF(0.f, 0.f));
4076 root->SetPosition(gfx::PointF(0.f, 0.f)); 4076 root->SetPosition(gfx::PointF(0.f, 0.f));
4077 root->SetBounds(gfx::Size(10, 10)); 4077 root->SetBounds(gfx::Size(10, 10));
(...skipping 84 matching lines...) Expand 10 before | Expand all | Expand 10 after
4162 LayerTreeHostImpl::FrameData frame; 4162 LayerTreeHostImpl::FrameData frame;
4163 EXPECT_TRUE(m_hostImpl->PrepareToDraw(&frame)); 4163 EXPECT_TRUE(m_hostImpl->PrepareToDraw(&frame));
4164 4164
4165 ASSERT_EQ(1u, frame.render_passes.size()); 4165 ASSERT_EQ(1u, frame.render_passes.size());
4166 ASSERT_EQ(1u, frame.render_passes[0]->quad_list.size()); 4166 ASSERT_EQ(1u, frame.render_passes[0]->quad_list.size());
4167 ASSERT_EQ(DrawQuad::RENDER_PASS, frame.render_passes[0]->quad_list[0]->m aterial); 4167 ASSERT_EQ(DrawQuad::RENDER_PASS, frame.render_passes[0]->quad_list[0]->m aterial);
4168 const RenderPassDrawQuad* renderPassQuad = RenderPassDrawQuad::MaterialC ast(frame.render_passes[0]->quad_list[0]); 4168 const RenderPassDrawQuad* renderPassQuad = RenderPassDrawQuad::MaterialC ast(frame.render_passes[0]->quad_list[0]);
4169 EXPECT_EQ(gfx::Rect(0, 0, 100, 100).ToString(), renderPassQuad->rect.ToS tring()); 4169 EXPECT_EQ(gfx::Rect(0, 0, 100, 100).ToString(), renderPassQuad->rect.ToS tring());
4170 EXPECT_EQ(gfx::RectF(0.f, 0.f, 1.f, 1.f).ToString(), renderPassQuad->mas k_uv_rect.ToString()); 4170 EXPECT_EQ(gfx::RectF(0.f, 0.f, 1.f, 1.f).ToString(), renderPassQuad->mas k_uv_rect.ToString());
4171 4171
4172 m_hostImpl->DrawLayers(&frame); 4172 m_hostImpl->DrawLayers(&frame, base::TimeTicks::Now());
4173 m_hostImpl->DidDrawAllLayers(frame); 4173 m_hostImpl->DidDrawAllLayers(frame);
4174 } 4174 }
4175 4175
4176 4176
4177 // Applying a DSF should change the render surface size, but won't affect 4177 // Applying a DSF should change the render surface size, but won't affect
4178 // which part of the mask is used. 4178 // which part of the mask is used.
4179 deviceScaleFactor = 2.f; 4179 deviceScaleFactor = 2.f;
4180 gfx::Size deviceViewport(gfx::ToFlooredSize(gfx::ScaleSize(rootSize, deviceS caleFactor))); 4180 gfx::Size deviceViewport(gfx::ToFlooredSize(gfx::ScaleSize(rootSize, deviceS caleFactor)));
4181 m_hostImpl->SetViewportSize(rootSize, deviceViewport); 4181 m_hostImpl->SetViewportSize(rootSize, deviceViewport);
4182 m_hostImpl->SetDeviceScaleFactor(deviceScaleFactor); 4182 m_hostImpl->SetDeviceScaleFactor(deviceScaleFactor);
4183 m_hostImpl->active_tree()->set_needs_update_draw_properties(); 4183 m_hostImpl->active_tree()->set_needs_update_draw_properties();
4184 { 4184 {
4185 LayerTreeHostImpl::FrameData frame; 4185 LayerTreeHostImpl::FrameData frame;
4186 EXPECT_TRUE(m_hostImpl->PrepareToDraw(&frame)); 4186 EXPECT_TRUE(m_hostImpl->PrepareToDraw(&frame));
4187 4187
4188 ASSERT_EQ(1u, frame.render_passes.size()); 4188 ASSERT_EQ(1u, frame.render_passes.size());
4189 ASSERT_EQ(1u, frame.render_passes[0]->quad_list.size()); 4189 ASSERT_EQ(1u, frame.render_passes[0]->quad_list.size());
4190 ASSERT_EQ(DrawQuad::RENDER_PASS, frame.render_passes[0]->quad_list[0]->m aterial); 4190 ASSERT_EQ(DrawQuad::RENDER_PASS, frame.render_passes[0]->quad_list[0]->m aterial);
4191 const RenderPassDrawQuad* renderPassQuad = RenderPassDrawQuad::MaterialC ast(frame.render_passes[0]->quad_list[0]); 4191 const RenderPassDrawQuad* renderPassQuad = RenderPassDrawQuad::MaterialC ast(frame.render_passes[0]->quad_list[0]);
4192 EXPECT_EQ(gfx::Rect(0, 0, 200, 200).ToString(), renderPassQuad->rect.ToS tring()); 4192 EXPECT_EQ(gfx::Rect(0, 0, 200, 200).ToString(), renderPassQuad->rect.ToS tring());
4193 EXPECT_EQ(gfx::RectF(0.f, 0.f, 1.f, 1.f).ToString(), renderPassQuad->mas k_uv_rect.ToString()); 4193 EXPECT_EQ(gfx::RectF(0.f, 0.f, 1.f, 1.f).ToString(), renderPassQuad->mas k_uv_rect.ToString());
4194 4194
4195 m_hostImpl->DrawLayers(&frame); 4195 m_hostImpl->DrawLayers(&frame, base::TimeTicks::Now());
4196 m_hostImpl->DidDrawAllLayers(frame); 4196 m_hostImpl->DidDrawAllLayers(frame);
4197 } 4197 }
4198 4198
4199 4199
4200 // Applying an equivalent content scale on the content layer and the mask 4200 // Applying an equivalent content scale on the content layer and the mask
4201 // should still result in the same part of the mask being used. 4201 // should still result in the same part of the mask being used.
4202 gfx::Size contentsBounds(gfx::ToRoundedSize(gfx::ScaleSize(scalingLayerSize, deviceScaleFactor))); 4202 gfx::Size contentsBounds(gfx::ToRoundedSize(gfx::ScaleSize(scalingLayerSize, deviceScaleFactor)));
4203 contentLayer->SetContentBounds(contentsBounds); 4203 contentLayer->SetContentBounds(contentsBounds);
4204 contentLayer->SetContentsScale(deviceScaleFactor, deviceScaleFactor); 4204 contentLayer->SetContentsScale(deviceScaleFactor, deviceScaleFactor);
4205 maskLayer->SetContentBounds(contentsBounds); 4205 maskLayer->SetContentBounds(contentsBounds);
4206 maskLayer->SetContentsScale(deviceScaleFactor, deviceScaleFactor); 4206 maskLayer->SetContentsScale(deviceScaleFactor, deviceScaleFactor);
4207 m_hostImpl->active_tree()->set_needs_update_draw_properties(); 4207 m_hostImpl->active_tree()->set_needs_update_draw_properties();
4208 { 4208 {
4209 LayerTreeHostImpl::FrameData frame; 4209 LayerTreeHostImpl::FrameData frame;
4210 EXPECT_TRUE(m_hostImpl->PrepareToDraw(&frame)); 4210 EXPECT_TRUE(m_hostImpl->PrepareToDraw(&frame));
4211 4211
4212 ASSERT_EQ(1u, frame.render_passes.size()); 4212 ASSERT_EQ(1u, frame.render_passes.size());
4213 ASSERT_EQ(1u, frame.render_passes[0]->quad_list.size()); 4213 ASSERT_EQ(1u, frame.render_passes[0]->quad_list.size());
4214 ASSERT_EQ(DrawQuad::RENDER_PASS, frame.render_passes[0]->quad_list[0]->m aterial); 4214 ASSERT_EQ(DrawQuad::RENDER_PASS, frame.render_passes[0]->quad_list[0]->m aterial);
4215 const RenderPassDrawQuad* renderPassQuad = RenderPassDrawQuad::MaterialC ast(frame.render_passes[0]->quad_list[0]); 4215 const RenderPassDrawQuad* renderPassQuad = RenderPassDrawQuad::MaterialC ast(frame.render_passes[0]->quad_list[0]);
4216 EXPECT_EQ(gfx::Rect(0, 0, 200, 200).ToString(), renderPassQuad->rect.ToS tring()); 4216 EXPECT_EQ(gfx::Rect(0, 0, 200, 200).ToString(), renderPassQuad->rect.ToS tring());
4217 EXPECT_EQ(gfx::RectF(0.f, 0.f, 1.f, 1.f).ToString(), renderPassQuad->mas k_uv_rect.ToString()); 4217 EXPECT_EQ(gfx::RectF(0.f, 0.f, 1.f, 1.f).ToString(), renderPassQuad->mas k_uv_rect.ToString());
4218 4218
4219 m_hostImpl->DrawLayers(&frame); 4219 m_hostImpl->DrawLayers(&frame, base::TimeTicks::Now());
4220 m_hostImpl->DidDrawAllLayers(frame); 4220 m_hostImpl->DidDrawAllLayers(frame);
4221 } 4221 }
4222 } 4222 }
4223 4223
4224 TEST_F(LayerTreeHostImplTest, maskLayerWithDifferentBounds) 4224 TEST_F(LayerTreeHostImplTest, maskLayerWithDifferentBounds)
4225 { 4225 {
4226 // The mask layer has bounds 100x100 but is attached to a layer with bounds 50x50. 4226 // The mask layer has bounds 100x100 but is attached to a layer with bounds 50x50.
4227 4227
4228 scoped_ptr<LayerImpl> scopedRoot = LayerImpl::Create(m_hostImpl->active_tree (), 1); 4228 scoped_ptr<LayerImpl> scopedRoot = LayerImpl::Create(m_hostImpl->active_tree (), 1);
4229 LayerImpl* root = scopedRoot.get(); 4229 LayerImpl* root = scopedRoot.get();
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
4266 LayerTreeHostImpl::FrameData frame; 4266 LayerTreeHostImpl::FrameData frame;
4267 EXPECT_TRUE(m_hostImpl->PrepareToDraw(&frame)); 4267 EXPECT_TRUE(m_hostImpl->PrepareToDraw(&frame));
4268 4268
4269 ASSERT_EQ(1u, frame.render_passes.size()); 4269 ASSERT_EQ(1u, frame.render_passes.size());
4270 ASSERT_EQ(1u, frame.render_passes[0]->quad_list.size()); 4270 ASSERT_EQ(1u, frame.render_passes[0]->quad_list.size());
4271 ASSERT_EQ(DrawQuad::RENDER_PASS, frame.render_passes[0]->quad_list[0]->m aterial); 4271 ASSERT_EQ(DrawQuad::RENDER_PASS, frame.render_passes[0]->quad_list[0]->m aterial);
4272 const RenderPassDrawQuad* renderPassQuad = RenderPassDrawQuad::MaterialC ast(frame.render_passes[0]->quad_list[0]); 4272 const RenderPassDrawQuad* renderPassQuad = RenderPassDrawQuad::MaterialC ast(frame.render_passes[0]->quad_list[0]);
4273 EXPECT_EQ(gfx::Rect(0, 0, 50, 50).ToString(), renderPassQuad->rect.ToStr ing()); 4273 EXPECT_EQ(gfx::Rect(0, 0, 50, 50).ToString(), renderPassQuad->rect.ToStr ing());
4274 EXPECT_EQ(gfx::RectF(0.f, 0.f, 1.f, 1.f).ToString(), renderPassQuad->mas k_uv_rect.ToString()); 4274 EXPECT_EQ(gfx::RectF(0.f, 0.f, 1.f, 1.f).ToString(), renderPassQuad->mas k_uv_rect.ToString());
4275 4275
4276 m_hostImpl->DrawLayers(&frame); 4276 m_hostImpl->DrawLayers(&frame, base::TimeTicks::Now());
4277 m_hostImpl->DidDrawAllLayers(frame); 4277 m_hostImpl->DidDrawAllLayers(frame);
4278 } 4278 }
4279 4279
4280 4280
4281 // Applying a DSF should change the render surface size, but won't affect 4281 // Applying a DSF should change the render surface size, but won't affect
4282 // which part of the mask is used. 4282 // which part of the mask is used.
4283 deviceScaleFactor = 2.f; 4283 deviceScaleFactor = 2.f;
4284 gfx::Size deviceViewport(gfx::ToFlooredSize(gfx::ScaleSize(rootSize, deviceS caleFactor))); 4284 gfx::Size deviceViewport(gfx::ToFlooredSize(gfx::ScaleSize(rootSize, deviceS caleFactor)));
4285 m_hostImpl->SetViewportSize(rootSize, deviceViewport); 4285 m_hostImpl->SetViewportSize(rootSize, deviceViewport);
4286 m_hostImpl->SetDeviceScaleFactor(deviceScaleFactor); 4286 m_hostImpl->SetDeviceScaleFactor(deviceScaleFactor);
4287 m_hostImpl->active_tree()->set_needs_update_draw_properties(); 4287 m_hostImpl->active_tree()->set_needs_update_draw_properties();
4288 { 4288 {
4289 LayerTreeHostImpl::FrameData frame; 4289 LayerTreeHostImpl::FrameData frame;
4290 EXPECT_TRUE(m_hostImpl->PrepareToDraw(&frame)); 4290 EXPECT_TRUE(m_hostImpl->PrepareToDraw(&frame));
4291 4291
4292 ASSERT_EQ(1u, frame.render_passes.size()); 4292 ASSERT_EQ(1u, frame.render_passes.size());
4293 ASSERT_EQ(1u, frame.render_passes[0]->quad_list.size()); 4293 ASSERT_EQ(1u, frame.render_passes[0]->quad_list.size());
4294 ASSERT_EQ(DrawQuad::RENDER_PASS, frame.render_passes[0]->quad_list[0]->m aterial); 4294 ASSERT_EQ(DrawQuad::RENDER_PASS, frame.render_passes[0]->quad_list[0]->m aterial);
4295 const RenderPassDrawQuad* renderPassQuad = RenderPassDrawQuad::MaterialC ast(frame.render_passes[0]->quad_list[0]); 4295 const RenderPassDrawQuad* renderPassQuad = RenderPassDrawQuad::MaterialC ast(frame.render_passes[0]->quad_list[0]);
4296 EXPECT_EQ(gfx::Rect(0, 0, 100, 100).ToString(), renderPassQuad->rect.ToS tring()); 4296 EXPECT_EQ(gfx::Rect(0, 0, 100, 100).ToString(), renderPassQuad->rect.ToS tring());
4297 EXPECT_EQ(gfx::RectF(0.f, 0.f, 1.f, 1.f).ToString(), renderPassQuad->mas k_uv_rect.ToString()); 4297 EXPECT_EQ(gfx::RectF(0.f, 0.f, 1.f, 1.f).ToString(), renderPassQuad->mas k_uv_rect.ToString());
4298 4298
4299 m_hostImpl->DrawLayers(&frame); 4299 m_hostImpl->DrawLayers(&frame, base::TimeTicks::Now());
4300 m_hostImpl->DidDrawAllLayers(frame); 4300 m_hostImpl->DidDrawAllLayers(frame);
4301 } 4301 }
4302 4302
4303 4303
4304 // Applying an equivalent content scale on the content layer and the mask 4304 // Applying an equivalent content scale on the content layer and the mask
4305 // should still result in the same part of the mask being used. 4305 // should still result in the same part of the mask being used.
4306 gfx::Size layerSizeLarge(gfx::ToRoundedSize(gfx::ScaleSize(layerSize, device ScaleFactor))); 4306 gfx::Size layerSizeLarge(gfx::ToRoundedSize(gfx::ScaleSize(layerSize, device ScaleFactor)));
4307 contentLayer->SetContentBounds(layerSizeLarge); 4307 contentLayer->SetContentBounds(layerSizeLarge);
4308 contentLayer->SetContentsScale(deviceScaleFactor, deviceScaleFactor); 4308 contentLayer->SetContentsScale(deviceScaleFactor, deviceScaleFactor);
4309 gfx::Size maskSizeLarge(gfx::ToRoundedSize(gfx::ScaleSize(maskSize, deviceSc aleFactor))); 4309 gfx::Size maskSizeLarge(gfx::ToRoundedSize(gfx::ScaleSize(maskSize, deviceSc aleFactor)));
4310 maskLayer->SetContentBounds(maskSizeLarge); 4310 maskLayer->SetContentBounds(maskSizeLarge);
4311 maskLayer->SetContentsScale(deviceScaleFactor, deviceScaleFactor); 4311 maskLayer->SetContentsScale(deviceScaleFactor, deviceScaleFactor);
4312 m_hostImpl->active_tree()->set_needs_update_draw_properties(); 4312 m_hostImpl->active_tree()->set_needs_update_draw_properties();
4313 { 4313 {
4314 LayerTreeHostImpl::FrameData frame; 4314 LayerTreeHostImpl::FrameData frame;
4315 EXPECT_TRUE(m_hostImpl->PrepareToDraw(&frame)); 4315 EXPECT_TRUE(m_hostImpl->PrepareToDraw(&frame));
4316 4316
4317 ASSERT_EQ(1u, frame.render_passes.size()); 4317 ASSERT_EQ(1u, frame.render_passes.size());
4318 ASSERT_EQ(1u, frame.render_passes[0]->quad_list.size()); 4318 ASSERT_EQ(1u, frame.render_passes[0]->quad_list.size());
4319 ASSERT_EQ(DrawQuad::RENDER_PASS, frame.render_passes[0]->quad_list[0]->m aterial); 4319 ASSERT_EQ(DrawQuad::RENDER_PASS, frame.render_passes[0]->quad_list[0]->m aterial);
4320 const RenderPassDrawQuad* renderPassQuad = RenderPassDrawQuad::MaterialC ast(frame.render_passes[0]->quad_list[0]); 4320 const RenderPassDrawQuad* renderPassQuad = RenderPassDrawQuad::MaterialC ast(frame.render_passes[0]->quad_list[0]);
4321 EXPECT_EQ(gfx::Rect(0, 0, 100, 100).ToString(), renderPassQuad->rect.ToS tring()); 4321 EXPECT_EQ(gfx::Rect(0, 0, 100, 100).ToString(), renderPassQuad->rect.ToS tring());
4322 EXPECT_EQ(gfx::RectF(0.f, 0.f, 1.f, 1.f).ToString(), renderPassQuad->mas k_uv_rect.ToString()); 4322 EXPECT_EQ(gfx::RectF(0.f, 0.f, 1.f, 1.f).ToString(), renderPassQuad->mas k_uv_rect.ToString());
4323 4323
4324 m_hostImpl->DrawLayers(&frame); 4324 m_hostImpl->DrawLayers(&frame, base::TimeTicks::Now());
4325 m_hostImpl->DidDrawAllLayers(frame); 4325 m_hostImpl->DidDrawAllLayers(frame);
4326 } 4326 }
4327 4327
4328 // Applying a different contents scale to the mask layer will still result 4328 // Applying a different contents scale to the mask layer will still result
4329 // in the mask covering the owning layer. 4329 // in the mask covering the owning layer.
4330 maskLayer->SetContentBounds(maskSize); 4330 maskLayer->SetContentBounds(maskSize);
4331 maskLayer->SetContentsScale(deviceScaleFactor, deviceScaleFactor); 4331 maskLayer->SetContentsScale(deviceScaleFactor, deviceScaleFactor);
4332 m_hostImpl->active_tree()->set_needs_update_draw_properties(); 4332 m_hostImpl->active_tree()->set_needs_update_draw_properties();
4333 { 4333 {
4334 LayerTreeHostImpl::FrameData frame; 4334 LayerTreeHostImpl::FrameData frame;
4335 EXPECT_TRUE(m_hostImpl->PrepareToDraw(&frame)); 4335 EXPECT_TRUE(m_hostImpl->PrepareToDraw(&frame));
4336 4336
4337 ASSERT_EQ(1u, frame.render_passes.size()); 4337 ASSERT_EQ(1u, frame.render_passes.size());
4338 ASSERT_EQ(1u, frame.render_passes[0]->quad_list.size()); 4338 ASSERT_EQ(1u, frame.render_passes[0]->quad_list.size());
4339 ASSERT_EQ(DrawQuad::RENDER_PASS, frame.render_passes[0]->quad_list[0]->m aterial); 4339 ASSERT_EQ(DrawQuad::RENDER_PASS, frame.render_passes[0]->quad_list[0]->m aterial);
4340 const RenderPassDrawQuad* renderPassQuad = RenderPassDrawQuad::MaterialC ast(frame.render_passes[0]->quad_list[0]); 4340 const RenderPassDrawQuad* renderPassQuad = RenderPassDrawQuad::MaterialC ast(frame.render_passes[0]->quad_list[0]);
4341 EXPECT_EQ(gfx::Rect(0, 0, 100, 100).ToString(), renderPassQuad->rect.ToS tring()); 4341 EXPECT_EQ(gfx::Rect(0, 0, 100, 100).ToString(), renderPassQuad->rect.ToS tring());
4342 EXPECT_EQ(gfx::RectF(0.f, 0.f, 1.f, 1.f).ToString(), renderPassQuad->mas k_uv_rect.ToString()); 4342 EXPECT_EQ(gfx::RectF(0.f, 0.f, 1.f, 1.f).ToString(), renderPassQuad->mas k_uv_rect.ToString());
4343 4343
4344 m_hostImpl->DrawLayers(&frame); 4344 m_hostImpl->DrawLayers(&frame, base::TimeTicks::Now());
4345 m_hostImpl->DidDrawAllLayers(frame); 4345 m_hostImpl->DidDrawAllLayers(frame);
4346 } 4346 }
4347 } 4347 }
4348 4348
4349 } // namespace 4349 } // namespace
4350 } // namespace cc 4350 } // namespace cc
OLDNEW
« no previous file with comments | « cc/layer_tree_host_impl.cc ('k') | cc/scheduler.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698