| OLD | NEW |
| 1 // Copyright 2011 The Chromium Authors. All rights reserved. | 1 // Copyright 2011 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "cc/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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 |
| OLD | NEW |