| 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 "config.h" | 5 #include "config.h" |
| 6 | 6 |
| 7 #include "CCLayerTreeHostImpl.h" | 7 #include "CCLayerTreeHostImpl.h" |
| 8 | 8 |
| 9 #include "CCAnimationTestCommon.h" | 9 #include "CCAnimationTestCommon.h" |
| 10 #include "CCGeometryTestUtils.h" | 10 #include "CCGeometryTestUtils.h" |
| (...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 92 root->setVisibleContentRect(IntRect(0, 0, 10, 10)); | 92 root->setVisibleContentRect(IntRect(0, 0, 10, 10)); |
| 93 root->setDrawsContent(true); | 93 root->setDrawsContent(true); |
| 94 myHostImpl->setRootLayer(root.release()); | 94 myHostImpl->setRootLayer(root.release()); |
| 95 return myHostImpl.release(); | 95 return myHostImpl.release(); |
| 96 } | 96 } |
| 97 | 97 |
| 98 static void expectClearedScrollDeltasRecursive(CCLayerImpl* layer) | 98 static void expectClearedScrollDeltasRecursive(CCLayerImpl* layer) |
| 99 { | 99 { |
| 100 ASSERT_EQ(layer->scrollDelta(), IntSize()); | 100 ASSERT_EQ(layer->scrollDelta(), IntSize()); |
| 101 for (size_t i = 0; i < layer->children().size(); ++i) | 101 for (size_t i = 0; i < layer->children().size(); ++i) |
| 102 expectClearedScrollDeltasRecursive(layer->children()[i].get()); | 102 expectClearedScrollDeltasRecursive(layer->children()[i]); |
| 103 } | 103 } |
| 104 | 104 |
| 105 static void expectContains(const CCScrollAndScaleSet& scrollInfo, int id, co
nst IntSize& scrollDelta) | 105 static void expectContains(const CCScrollAndScaleSet& scrollInfo, int id, co
nst IntSize& scrollDelta) |
| 106 { | 106 { |
| 107 int timesEncountered = 0; | 107 int timesEncountered = 0; |
| 108 | 108 |
| 109 for (size_t i = 0; i < scrollInfo.scrolls.size(); ++i) { | 109 for (size_t i = 0; i < scrollInfo.scrolls.size(); ++i) { |
| 110 if (scrollInfo.scrolls[i].layerId != id) | 110 if (scrollInfo.scrolls[i].layerId != id) |
| 111 continue; | 111 continue; |
| 112 EXPECT_EQ(scrollDelta.width(), scrollInfo.scrolls[i].scrollDelta.wid
th()); | 112 EXPECT_EQ(scrollDelta.width(), scrollInfo.scrolls[i].scrollDelta.wid
th()); |
| (...skipping 610 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 723 | 723 |
| 724 TEST_F(CCLayerTreeHostImplTest, didDrawNotCalledOnHiddenLayer) | 724 TEST_F(CCLayerTreeHostImplTest, didDrawNotCalledOnHiddenLayer) |
| 725 { | 725 { |
| 726 // The root layer is always drawn, so run this test on a child layer that | 726 // The root layer is always drawn, so run this test on a child layer that |
| 727 // will be masked out by the root layer's bounds. | 727 // will be masked out by the root layer's bounds. |
| 728 m_hostImpl->setRootLayer(DidDrawCheckLayer::create(1)); | 728 m_hostImpl->setRootLayer(DidDrawCheckLayer::create(1)); |
| 729 DidDrawCheckLayer* root = static_cast<DidDrawCheckLayer*>(m_hostImpl->rootLa
yer()); | 729 DidDrawCheckLayer* root = static_cast<DidDrawCheckLayer*>(m_hostImpl->rootLa
yer()); |
| 730 root->setMasksToBounds(true); | 730 root->setMasksToBounds(true); |
| 731 | 731 |
| 732 root->addChild(DidDrawCheckLayer::create(2)); | 732 root->addChild(DidDrawCheckLayer::create(2)); |
| 733 DidDrawCheckLayer* layer = static_cast<DidDrawCheckLayer*>(root->children()[
0].get()); | 733 DidDrawCheckLayer* layer = static_cast<DidDrawCheckLayer*>(root->children()[
0]); |
| 734 // Ensure visibleContentRect for layer is empty | 734 // Ensure visibleContentRect for layer is empty |
| 735 layer->setPosition(FloatPoint(100, 100)); | 735 layer->setPosition(FloatPoint(100, 100)); |
| 736 layer->setBounds(IntSize(10, 10)); | 736 layer->setBounds(IntSize(10, 10)); |
| 737 layer->setContentBounds(IntSize(10, 10)); | 737 layer->setContentBounds(IntSize(10, 10)); |
| 738 | 738 |
| 739 CCLayerTreeHostImpl::FrameData frame; | 739 CCLayerTreeHostImpl::FrameData frame; |
| 740 | 740 |
| 741 EXPECT_FALSE(layer->willDrawCalled()); | 741 EXPECT_FALSE(layer->willDrawCalled()); |
| 742 EXPECT_FALSE(layer->didDrawCalled()); | 742 EXPECT_FALSE(layer->didDrawCalled()); |
| 743 | 743 |
| (...skipping 24 matching lines...) Expand all Loading... |
| 768 | 768 |
| 769 TEST_F(CCLayerTreeHostImplTest, willDrawNotCalledOnOccludedLayer) | 769 TEST_F(CCLayerTreeHostImplTest, willDrawNotCalledOnOccludedLayer) |
| 770 { | 770 { |
| 771 IntSize bigSize(1000, 1000); | 771 IntSize bigSize(1000, 1000); |
| 772 m_hostImpl->setViewportSize(bigSize, bigSize); | 772 m_hostImpl->setViewportSize(bigSize, bigSize); |
| 773 | 773 |
| 774 m_hostImpl->setRootLayer(DidDrawCheckLayer::create(1)); | 774 m_hostImpl->setRootLayer(DidDrawCheckLayer::create(1)); |
| 775 DidDrawCheckLayer* root = static_cast<DidDrawCheckLayer*>(m_hostImpl->rootLa
yer()); | 775 DidDrawCheckLayer* root = static_cast<DidDrawCheckLayer*>(m_hostImpl->rootLa
yer()); |
| 776 | 776 |
| 777 root->addChild(DidDrawCheckLayer::create(2)); | 777 root->addChild(DidDrawCheckLayer::create(2)); |
| 778 DidDrawCheckLayer* occludedLayer = static_cast<DidDrawCheckLayer*>(root->chi
ldren()[0].get()); | 778 DidDrawCheckLayer* occludedLayer = static_cast<DidDrawCheckLayer*>(root->chi
ldren()[0]); |
| 779 | 779 |
| 780 root->addChild(DidDrawCheckLayer::create(3)); | 780 root->addChild(DidDrawCheckLayer::create(3)); |
| 781 DidDrawCheckLayer* topLayer = static_cast<DidDrawCheckLayer*>(root->children
()[1].get()); | 781 DidDrawCheckLayer* topLayer = static_cast<DidDrawCheckLayer*>(root->children
()[1]); |
| 782 // This layer covers the occludedLayer above. Make this layer large so it ca
n occlude. | 782 // This layer covers the occludedLayer above. Make this layer large so it ca
n occlude. |
| 783 topLayer->setBounds(bigSize); | 783 topLayer->setBounds(bigSize); |
| 784 topLayer->setContentBounds(bigSize); | 784 topLayer->setContentBounds(bigSize); |
| 785 topLayer->setOpaque(true); | 785 topLayer->setOpaque(true); |
| 786 | 786 |
| 787 CCLayerTreeHostImpl::FrameData frame; | 787 CCLayerTreeHostImpl::FrameData frame; |
| 788 | 788 |
| 789 EXPECT_FALSE(occludedLayer->willDrawCalled()); | 789 EXPECT_FALSE(occludedLayer->willDrawCalled()); |
| 790 EXPECT_FALSE(occludedLayer->didDrawCalled()); | 790 EXPECT_FALSE(occludedLayer->didDrawCalled()); |
| 791 EXPECT_FALSE(topLayer->willDrawCalled()); | 791 EXPECT_FALSE(topLayer->willDrawCalled()); |
| 792 EXPECT_FALSE(topLayer->didDrawCalled()); | 792 EXPECT_FALSE(topLayer->didDrawCalled()); |
| 793 | 793 |
| 794 EXPECT_TRUE(m_hostImpl->prepareToDraw(frame)); | 794 EXPECT_TRUE(m_hostImpl->prepareToDraw(frame)); |
| 795 m_hostImpl->drawLayers(frame); | 795 m_hostImpl->drawLayers(frame); |
| 796 m_hostImpl->didDrawAllLayers(frame); | 796 m_hostImpl->didDrawAllLayers(frame); |
| 797 | 797 |
| 798 EXPECT_FALSE(occludedLayer->willDrawCalled()); | 798 EXPECT_FALSE(occludedLayer->willDrawCalled()); |
| 799 EXPECT_FALSE(occludedLayer->didDrawCalled()); | 799 EXPECT_FALSE(occludedLayer->didDrawCalled()); |
| 800 EXPECT_TRUE(topLayer->willDrawCalled()); | 800 EXPECT_TRUE(topLayer->willDrawCalled()); |
| 801 EXPECT_TRUE(topLayer->didDrawCalled()); | 801 EXPECT_TRUE(topLayer->didDrawCalled()); |
| 802 } | 802 } |
| 803 | 803 |
| 804 TEST_F(CCLayerTreeHostImplTest, didDrawCalledOnAllLayers) | 804 TEST_F(CCLayerTreeHostImplTest, didDrawCalledOnAllLayers) |
| 805 { | 805 { |
| 806 m_hostImpl->setRootLayer(DidDrawCheckLayer::create(1)); | 806 m_hostImpl->setRootLayer(DidDrawCheckLayer::create(1)); |
| 807 DidDrawCheckLayer* root = static_cast<DidDrawCheckLayer*>(m_hostImpl->rootLa
yer()); | 807 DidDrawCheckLayer* root = static_cast<DidDrawCheckLayer*>(m_hostImpl->rootLa
yer()); |
| 808 | 808 |
| 809 root->addChild(DidDrawCheckLayer::create(2)); | 809 root->addChild(DidDrawCheckLayer::create(2)); |
| 810 DidDrawCheckLayer* layer1 = static_cast<DidDrawCheckLayer*>(root->children()
[0].get()); | 810 DidDrawCheckLayer* layer1 = static_cast<DidDrawCheckLayer*>(root->children()
[0]); |
| 811 | 811 |
| 812 layer1->addChild(DidDrawCheckLayer::create(3)); | 812 layer1->addChild(DidDrawCheckLayer::create(3)); |
| 813 DidDrawCheckLayer* layer2 = static_cast<DidDrawCheckLayer*>(layer1->children
()[0].get()); | 813 DidDrawCheckLayer* layer2 = static_cast<DidDrawCheckLayer*>(layer1->children
()[0]); |
| 814 | 814 |
| 815 layer1->setOpacity(0.3f); | 815 layer1->setOpacity(0.3f); |
| 816 layer1->setPreserves3D(false); | 816 layer1->setPreserves3D(false); |
| 817 | 817 |
| 818 EXPECT_FALSE(root->didDrawCalled()); | 818 EXPECT_FALSE(root->didDrawCalled()); |
| 819 EXPECT_FALSE(layer1->didDrawCalled()); | 819 EXPECT_FALSE(layer1->didDrawCalled()); |
| 820 EXPECT_FALSE(layer2->didDrawCalled()); | 820 EXPECT_FALSE(layer2->didDrawCalled()); |
| 821 | 821 |
| 822 CCLayerTreeHostImpl::FrameData frame; | 822 CCLayerTreeHostImpl::FrameData frame; |
| 823 EXPECT_TRUE(m_hostImpl->prepareToDraw(frame)); | 823 EXPECT_TRUE(m_hostImpl->prepareToDraw(frame)); |
| (...skipping 257 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1081 | 1081 |
| 1082 TEST_F(CCLayerTreeHostImplTest, pageScaleDeltaAppliedToRootScrollLayerOnly) | 1082 TEST_F(CCLayerTreeHostImplTest, pageScaleDeltaAppliedToRootScrollLayerOnly) |
| 1083 { | 1083 { |
| 1084 IntSize surfaceSize(10, 10); | 1084 IntSize surfaceSize(10, 10); |
| 1085 float defaultPageScale = 1; | 1085 float defaultPageScale = 1; |
| 1086 float newPageScale = 2; | 1086 float newPageScale = 2; |
| 1087 | 1087 |
| 1088 // Create a normal scrollable root layer and another scrollable child layer. | 1088 // Create a normal scrollable root layer and another scrollable child layer. |
| 1089 setupScrollAndContentsLayers(surfaceSize); | 1089 setupScrollAndContentsLayers(surfaceSize); |
| 1090 CCLayerImpl* root = m_hostImpl->rootLayer(); | 1090 CCLayerImpl* root = m_hostImpl->rootLayer(); |
| 1091 CCLayerImpl* child = root->children()[0].get(); | 1091 CCLayerImpl* child = root->children()[0]; |
| 1092 | 1092 |
| 1093 OwnPtr<CCLayerImpl> scrollableChild = createScrollableLayer(3, surfaceSize); | 1093 OwnPtr<CCLayerImpl> scrollableChild = createScrollableLayer(3, surfaceSize); |
| 1094 child->addChild(scrollableChild.release()); | 1094 child->addChild(scrollableChild.release()); |
| 1095 CCLayerImpl* grandChild = child->children()[0].get(); | 1095 CCLayerImpl* grandChild = child->children()[0]; |
| 1096 | 1096 |
| 1097 // Set new page scale on impl thread by pinching. | 1097 // Set new page scale on impl thread by pinching. |
| 1098 m_hostImpl->pinchGestureBegin(); | 1098 m_hostImpl->pinchGestureBegin(); |
| 1099 m_hostImpl->pinchGestureUpdate(newPageScale, IntPoint()); | 1099 m_hostImpl->pinchGestureUpdate(newPageScale, IntPoint()); |
| 1100 m_hostImpl->pinchGestureEnd(); | 1100 m_hostImpl->pinchGestureEnd(); |
| 1101 | 1101 |
| 1102 // The page scale delta should only be applied to the scrollable root layer. | 1102 // The page scale delta should only be applied to the scrollable root layer. |
| 1103 EXPECT_EQ(root->pageScaleDelta(), newPageScale); | 1103 EXPECT_EQ(root->pageScaleDelta(), newPageScale); |
| 1104 EXPECT_EQ(child->pageScaleDelta(), defaultPageScale); | 1104 EXPECT_EQ(child->pageScaleDelta(), defaultPageScale); |
| 1105 EXPECT_EQ(grandChild->pageScaleDelta(), defaultPageScale); | 1105 EXPECT_EQ(grandChild->pageScaleDelta(), defaultPageScale); |
| (...skipping 20 matching lines...) Expand all Loading... |
| 1126 root->setBounds(surfaceSize); | 1126 root->setBounds(surfaceSize); |
| 1127 root->setContentBounds(surfaceSize); | 1127 root->setContentBounds(surfaceSize); |
| 1128 // Also mark the root scrollable so it becomes the root scroll layer. | 1128 // Also mark the root scrollable so it becomes the root scroll layer. |
| 1129 root->setScrollable(true); | 1129 root->setScrollable(true); |
| 1130 int scrollLayerId = 2; | 1130 int scrollLayerId = 2; |
| 1131 root->addChild(createScrollableLayer(scrollLayerId, surfaceSize)); | 1131 root->addChild(createScrollableLayer(scrollLayerId, surfaceSize)); |
| 1132 m_hostImpl->setRootLayer(root.release()); | 1132 m_hostImpl->setRootLayer(root.release()); |
| 1133 m_hostImpl->setViewportSize(surfaceSize, surfaceSize); | 1133 m_hostImpl->setViewportSize(surfaceSize, surfaceSize); |
| 1134 initializeRendererAndDrawFrame(); | 1134 initializeRendererAndDrawFrame(); |
| 1135 | 1135 |
| 1136 CCLayerImpl* child = m_hostImpl->rootLayer()->children()[0].get(); | 1136 CCLayerImpl* child = m_hostImpl->rootLayer()->children()[0]; |
| 1137 | 1137 |
| 1138 IntSize scrollDelta(0, 10); | 1138 IntSize scrollDelta(0, 10); |
| 1139 IntSize expectedScrollDelta(scrollDelta); | 1139 IntSize expectedScrollDelta(scrollDelta); |
| 1140 IntSize expectedMaxScroll(child->maxScrollPosition()); | 1140 IntSize expectedMaxScroll(child->maxScrollPosition()); |
| 1141 EXPECT_EQ(m_hostImpl->scrollBegin(IntPoint(5, 5), CCInputHandlerClient::Whee
l), CCInputHandlerClient::ScrollStarted); | 1141 EXPECT_EQ(m_hostImpl->scrollBegin(IntPoint(5, 5), CCInputHandlerClient::Whee
l), CCInputHandlerClient::ScrollStarted); |
| 1142 m_hostImpl->scrollBy(IntPoint(), scrollDelta); | 1142 m_hostImpl->scrollBy(IntPoint(), scrollDelta); |
| 1143 m_hostImpl->scrollEnd(); | 1143 m_hostImpl->scrollEnd(); |
| 1144 | 1144 |
| 1145 float pageScale = 2; | 1145 float pageScale = 2; |
| 1146 m_hostImpl->setPageScaleFactorAndLimits(pageScale, 1, pageScale); | 1146 m_hostImpl->setPageScaleFactorAndLimits(pageScale, 1, pageScale); |
| (...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1178 initializeRendererAndDrawFrame(); | 1178 initializeRendererAndDrawFrame(); |
| 1179 { | 1179 { |
| 1180 IntSize scrollDelta(-8, -7); | 1180 IntSize scrollDelta(-8, -7); |
| 1181 EXPECT_EQ(m_hostImpl->scrollBegin(IntPoint(5, 5), CCInputHandlerClient::
Wheel), CCInputHandlerClient::ScrollStarted); | 1181 EXPECT_EQ(m_hostImpl->scrollBegin(IntPoint(5, 5), CCInputHandlerClient::
Wheel), CCInputHandlerClient::ScrollStarted); |
| 1182 m_hostImpl->scrollBy(IntPoint(), scrollDelta); | 1182 m_hostImpl->scrollBy(IntPoint(), scrollDelta); |
| 1183 m_hostImpl->scrollEnd(); | 1183 m_hostImpl->scrollEnd(); |
| 1184 | 1184 |
| 1185 OwnPtr<CCScrollAndScaleSet> scrollInfo = m_hostImpl->processScrollDeltas
(); | 1185 OwnPtr<CCScrollAndScaleSet> scrollInfo = m_hostImpl->processScrollDeltas
(); |
| 1186 | 1186 |
| 1187 // The grand child should have scrolled up to its limit. | 1187 // The grand child should have scrolled up to its limit. |
| 1188 CCLayerImpl* child = m_hostImpl->rootLayer()->children()[0].get(); | 1188 CCLayerImpl* child = m_hostImpl->rootLayer()->children()[0]; |
| 1189 CCLayerImpl* grandChild = child->children()[0].get(); | 1189 CCLayerImpl* grandChild = child->children()[0]; |
| 1190 expectContains(*scrollInfo.get(), grandChild->id(), IntSize(0, -5)); | 1190 expectContains(*scrollInfo.get(), grandChild->id(), IntSize(0, -5)); |
| 1191 | 1191 |
| 1192 // The child should have only scrolled on the other axis. | 1192 // The child should have only scrolled on the other axis. |
| 1193 expectContains(*scrollInfo.get(), child->id(), IntSize(-3, 0)); | 1193 expectContains(*scrollInfo.get(), child->id(), IntSize(-3, 0)); |
| 1194 } | 1194 } |
| 1195 } | 1195 } |
| 1196 | 1196 |
| 1197 TEST_F(CCLayerTreeHostImplTest, scrollEventBubbling) | 1197 TEST_F(CCLayerTreeHostImplTest, scrollEventBubbling) |
| 1198 { | 1198 { |
| 1199 // When we try to scroll a non-scrollable child layer, the scroll delta | 1199 // When we try to scroll a non-scrollable child layer, the scroll delta |
| (...skipping 260 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1460 OwnPtr<CCLayerImpl> root = CCLayerImpl::create(1); | 1460 OwnPtr<CCLayerImpl> root = CCLayerImpl::create(1); |
| 1461 root->setAnchorPoint(FloatPoint(0, 0)); | 1461 root->setAnchorPoint(FloatPoint(0, 0)); |
| 1462 root->setBounds(IntSize(10, 10)); | 1462 root->setBounds(IntSize(10, 10)); |
| 1463 root->setContentBounds(root->bounds()); | 1463 root->setContentBounds(root->bounds()); |
| 1464 root->setDrawsContent(false); | 1464 root->setDrawsContent(false); |
| 1465 m_hostImpl->setRootLayer(root.release()); | 1465 m_hostImpl->setRootLayer(root.release()); |
| 1466 } | 1466 } |
| 1467 CCLayerImpl* root = m_hostImpl->rootLayer(); | 1467 CCLayerImpl* root = m_hostImpl->rootLayer(); |
| 1468 | 1468 |
| 1469 root->addChild(BlendStateCheckLayer::create(2, m_hostImpl->resourceProvider(
))); | 1469 root->addChild(BlendStateCheckLayer::create(2, m_hostImpl->resourceProvider(
))); |
| 1470 BlendStateCheckLayer* layer1 = static_cast<BlendStateCheckLayer*>(root->chil
dren()[0].get()); | 1470 BlendStateCheckLayer* layer1 = static_cast<BlendStateCheckLayer*>(root->chil
dren()[0]); |
| 1471 layer1->setPosition(FloatPoint(2, 2)); | 1471 layer1->setPosition(FloatPoint(2, 2)); |
| 1472 | 1472 |
| 1473 CCLayerTreeHostImpl::FrameData frame; | 1473 CCLayerTreeHostImpl::FrameData frame; |
| 1474 | 1474 |
| 1475 // Opaque layer, drawn without blending. | 1475 // Opaque layer, drawn without blending. |
| 1476 layer1->setOpaque(true); | 1476 layer1->setOpaque(true); |
| 1477 layer1->setOpaqueContents(true); | 1477 layer1->setOpaqueContents(true); |
| 1478 layer1->setExpectation(false, false); | 1478 layer1->setExpectation(false, false); |
| 1479 EXPECT_TRUE(m_hostImpl->prepareToDraw(frame)); | 1479 EXPECT_TRUE(m_hostImpl->prepareToDraw(frame)); |
| 1480 m_hostImpl->drawLayers(frame); | 1480 m_hostImpl->drawLayers(frame); |
| (...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1513 layer1->setOpaque(true); | 1513 layer1->setOpaque(true); |
| 1514 layer1->setOpaqueContents(false); | 1514 layer1->setOpaqueContents(false); |
| 1515 layer1->setOpacity(0.5); | 1515 layer1->setOpacity(0.5); |
| 1516 layer1->setExpectation(true, false); | 1516 layer1->setExpectation(true, false); |
| 1517 EXPECT_TRUE(m_hostImpl->prepareToDraw(frame)); | 1517 EXPECT_TRUE(m_hostImpl->prepareToDraw(frame)); |
| 1518 m_hostImpl->drawLayers(frame); | 1518 m_hostImpl->drawLayers(frame); |
| 1519 EXPECT_TRUE(layer1->quadsAppended()); | 1519 EXPECT_TRUE(layer1->quadsAppended()); |
| 1520 m_hostImpl->didDrawAllLayers(frame); | 1520 m_hostImpl->didDrawAllLayers(frame); |
| 1521 | 1521 |
| 1522 layer1->addChild(BlendStateCheckLayer::create(3, m_hostImpl->resourceProvide
r())); | 1522 layer1->addChild(BlendStateCheckLayer::create(3, m_hostImpl->resourceProvide
r())); |
| 1523 BlendStateCheckLayer* layer2 = static_cast<BlendStateCheckLayer*>(layer1->ch
ildren()[0].get()); | 1523 BlendStateCheckLayer* layer2 = static_cast<BlendStateCheckLayer*>(layer1->ch
ildren()[0]); |
| 1524 layer2->setPosition(FloatPoint(4, 4)); | 1524 layer2->setPosition(FloatPoint(4, 4)); |
| 1525 | 1525 |
| 1526 // 2 opaque layers, drawn without blending. | 1526 // 2 opaque layers, drawn without blending. |
| 1527 layer1->setOpaque(true); | 1527 layer1->setOpaque(true); |
| 1528 layer1->setOpaqueContents(true); | 1528 layer1->setOpaqueContents(true); |
| 1529 layer1->setOpacity(1); | 1529 layer1->setOpacity(1); |
| 1530 layer1->setExpectation(false, false); | 1530 layer1->setExpectation(false, false); |
| 1531 layer2->setOpaque(true); | 1531 layer2->setOpaque(true); |
| 1532 layer2->setOpaqueContents(true); | 1532 layer2->setOpaqueContents(true); |
| 1533 layer2->setOpacity(1); | 1533 layer2->setOpacity(1); |
| (...skipping 710 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2244 | 2244 |
| 2245 bool m_didLoseContextCalled; | 2245 bool m_didLoseContextCalled; |
| 2246 }; | 2246 }; |
| 2247 | 2247 |
| 2248 TEST_F(CCLayerTreeHostImplTest, contextLostAndRestoredNotificationSentToAllLayer
s) | 2248 TEST_F(CCLayerTreeHostImplTest, contextLostAndRestoredNotificationSentToAllLayer
s) |
| 2249 { | 2249 { |
| 2250 m_hostImpl->setRootLayer(ContextLostNotificationCheckLayer::create(1)); | 2250 m_hostImpl->setRootLayer(ContextLostNotificationCheckLayer::create(1)); |
| 2251 ContextLostNotificationCheckLayer* root = static_cast<ContextLostNotificatio
nCheckLayer*>(m_hostImpl->rootLayer()); | 2251 ContextLostNotificationCheckLayer* root = static_cast<ContextLostNotificatio
nCheckLayer*>(m_hostImpl->rootLayer()); |
| 2252 | 2252 |
| 2253 root->addChild(ContextLostNotificationCheckLayer::create(1)); | 2253 root->addChild(ContextLostNotificationCheckLayer::create(1)); |
| 2254 ContextLostNotificationCheckLayer* layer1 = static_cast<ContextLostNotificat
ionCheckLayer*>(root->children()[0].get()); | 2254 ContextLostNotificationCheckLayer* layer1 = static_cast<ContextLostNotificat
ionCheckLayer*>(root->children()[0]); |
| 2255 | 2255 |
| 2256 layer1->addChild(ContextLostNotificationCheckLayer::create(2)); | 2256 layer1->addChild(ContextLostNotificationCheckLayer::create(2)); |
| 2257 ContextLostNotificationCheckLayer* layer2 = static_cast<ContextLostNotificat
ionCheckLayer*>(layer1->children()[0].get()); | 2257 ContextLostNotificationCheckLayer* layer2 = static_cast<ContextLostNotificat
ionCheckLayer*>(layer1->children()[0]); |
| 2258 | 2258 |
| 2259 EXPECT_FALSE(root->didLoseContextCalled()); | 2259 EXPECT_FALSE(root->didLoseContextCalled()); |
| 2260 EXPECT_FALSE(layer1->didLoseContextCalled()); | 2260 EXPECT_FALSE(layer1->didLoseContextCalled()); |
| 2261 EXPECT_FALSE(layer2->didLoseContextCalled()); | 2261 EXPECT_FALSE(layer2->didLoseContextCalled()); |
| 2262 | 2262 |
| 2263 m_hostImpl->initializeRenderer(createContext(), UnthrottledUploader); | 2263 m_hostImpl->initializeRenderer(createContext(), UnthrottledUploader); |
| 2264 | 2264 |
| 2265 EXPECT_TRUE(root->didLoseContextCalled()); | 2265 EXPECT_TRUE(root->didLoseContextCalled()); |
| 2266 EXPECT_TRUE(layer1->didLoseContextCalled()); | 2266 EXPECT_TRUE(layer1->didLoseContextCalled()); |
| 2267 EXPECT_TRUE(layer2->didLoseContextCalled()); | 2267 EXPECT_TRUE(layer2->didLoseContextCalled()); |
| (...skipping 579 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2847 IntRect quadVisibleRect = frame.renderPasses[0]->quadList()[0]->quadVisi
bleRect(); | 2847 IntRect quadVisibleRect = frame.renderPasses[0]->quadList()[0]->quadVisi
bleRect(); |
| 2848 EXPECT_LT(quadVisibleRect.width(), 100); | 2848 EXPECT_LT(quadVisibleRect.width(), 100); |
| 2849 | 2849 |
| 2850 quadVisibleRect = frame.renderPasses[0]->quadList()[1]->quadVisibleRect(
); | 2850 quadVisibleRect = frame.renderPasses[0]->quadList()[1]->quadVisibleRect(
); |
| 2851 EXPECT_LT(quadVisibleRect.width(), 100); | 2851 EXPECT_LT(quadVisibleRect.width(), 100); |
| 2852 | 2852 |
| 2853 // Verify that the render surface texture is *not* clipped. | 2853 // Verify that the render surface texture is *not* clipped. |
| 2854 EXPECT_RECT_EQ(IntRect(0, 0, 100, 100), frame.renderPasses[0]->outputRec
t()); | 2854 EXPECT_RECT_EQ(IntRect(0, 0, 100, 100), frame.renderPasses[0]->outputRec
t()); |
| 2855 | 2855 |
| 2856 EXPECT_EQ(CCDrawQuad::RenderPass, frame.renderPasses[1]->quadList()[0]->
material()); | 2856 EXPECT_EQ(CCDrawQuad::RenderPass, frame.renderPasses[1]->quadList()[0]->
material()); |
| 2857 CCRenderPassDrawQuad* quad = static_cast<CCRenderPassDrawQuad*>(frame.re
nderPasses[1]->quadList()[0].get()); | 2857 CCRenderPassDrawQuad* quad = static_cast<CCRenderPassDrawQuad*>(frame.re
nderPasses[1]->quadList()[0]); |
| 2858 EXPECT_FALSE(quad->contentsChangedSinceLastFrame().isEmpty()); | 2858 EXPECT_FALSE(quad->contentsChangedSinceLastFrame().isEmpty()); |
| 2859 | 2859 |
| 2860 myHostImpl->drawLayers(frame); | 2860 myHostImpl->drawLayers(frame); |
| 2861 myHostImpl->didDrawAllLayers(frame); | 2861 myHostImpl->didDrawAllLayers(frame); |
| 2862 } | 2862 } |
| 2863 | 2863 |
| 2864 transform = surfaceLayerPtr->transform(); | 2864 transform = surfaceLayerPtr->transform(); |
| 2865 transform.translate(50, 50); | 2865 transform.translate(50, 50); |
| 2866 transform.rotate(-35); | 2866 transform.rotate(-35); |
| 2867 transform.translate(-50, -50); | 2867 transform.translate(-50, -50); |
| (...skipping 649 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3517 { | 3517 { |
| 3518 CCLayerTreeHostImpl::FrameData frame; | 3518 CCLayerTreeHostImpl::FrameData frame; |
| 3519 EXPECT_TRUE(myHostImpl->prepareToDraw(frame)); | 3519 EXPECT_TRUE(myHostImpl->prepareToDraw(frame)); |
| 3520 | 3520 |
| 3521 // Must receive two render passes, each with one quad | 3521 // Must receive two render passes, each with one quad |
| 3522 ASSERT_EQ(2U, frame.renderPasses.size()); | 3522 ASSERT_EQ(2U, frame.renderPasses.size()); |
| 3523 EXPECT_EQ(1U, frame.renderPasses[0]->quadList().size()); | 3523 EXPECT_EQ(1U, frame.renderPasses[0]->quadList().size()); |
| 3524 EXPECT_EQ(1U, frame.renderPasses[1]->quadList().size()); | 3524 EXPECT_EQ(1U, frame.renderPasses[1]->quadList().size()); |
| 3525 | 3525 |
| 3526 EXPECT_EQ(CCDrawQuad::RenderPass, frame.renderPasses[1]->quadList()[0]->
material()); | 3526 EXPECT_EQ(CCDrawQuad::RenderPass, frame.renderPasses[1]->quadList()[0]->
material()); |
| 3527 CCRenderPassDrawQuad* quad = static_cast<CCRenderPassDrawQuad*>(frame.re
nderPasses[1]->quadList()[0].get()); | 3527 CCRenderPassDrawQuad* quad = static_cast<CCRenderPassDrawQuad*>(frame.re
nderPasses[1]->quadList()[0]); |
| 3528 CCRenderPass* targetPass = frame.renderPassesById.get(quad->renderPassId
()); | 3528 CCRenderPass* targetPass = frame.renderPassesById.get(quad->renderPassId
()); |
| 3529 EXPECT_FALSE(targetPass->damageRect().isEmpty()); | 3529 EXPECT_FALSE(targetPass->damageRect().isEmpty()); |
| 3530 | 3530 |
| 3531 myHostImpl->drawLayers(frame); | 3531 myHostImpl->drawLayers(frame); |
| 3532 myHostImpl->didDrawAllLayers(frame); | 3532 myHostImpl->didDrawAllLayers(frame); |
| 3533 } | 3533 } |
| 3534 | 3534 |
| 3535 // Draw without any change | 3535 // Draw without any change |
| 3536 { | 3536 { |
| 3537 CCLayerTreeHostImpl::FrameData frame; | 3537 CCLayerTreeHostImpl::FrameData frame; |
| 3538 EXPECT_TRUE(myHostImpl->prepareToDraw(frame)); | 3538 EXPECT_TRUE(myHostImpl->prepareToDraw(frame)); |
| 3539 | 3539 |
| 3540 // Must receive one render pass, as the other one should be culled | 3540 // Must receive one render pass, as the other one should be culled |
| 3541 ASSERT_EQ(1U, frame.renderPasses.size()); | 3541 ASSERT_EQ(1U, frame.renderPasses.size()); |
| 3542 | 3542 |
| 3543 EXPECT_EQ(1U, frame.renderPasses[0]->quadList().size()); | 3543 EXPECT_EQ(1U, frame.renderPasses[0]->quadList().size()); |
| 3544 EXPECT_EQ(CCDrawQuad::RenderPass, frame.renderPasses[0]->quadList()[0]->
material()); | 3544 EXPECT_EQ(CCDrawQuad::RenderPass, frame.renderPasses[0]->quadList()[0]->
material()); |
| 3545 CCRenderPassDrawQuad* quad = static_cast<CCRenderPassDrawQuad*>(frame.re
nderPasses[0]->quadList()[0].get()); | 3545 CCRenderPassDrawQuad* quad = static_cast<CCRenderPassDrawQuad*>(frame.re
nderPasses[0]->quadList()[0]); |
| 3546 CCRenderPass* targetPass = frame.renderPassesById.get(quad->renderPassId
()); | 3546 CCRenderPass* targetPass = frame.renderPassesById.get(quad->renderPassId
()); |
| 3547 EXPECT_TRUE(targetPass->damageRect().isEmpty()); | 3547 EXPECT_TRUE(targetPass->damageRect().isEmpty()); |
| 3548 | 3548 |
| 3549 myHostImpl->drawLayers(frame); | 3549 myHostImpl->drawLayers(frame); |
| 3550 myHostImpl->didDrawAllLayers(frame); | 3550 myHostImpl->didDrawAllLayers(frame); |
| 3551 } | 3551 } |
| 3552 | 3552 |
| 3553 // Change opacity and draw | 3553 // Change opacity and draw |
| 3554 surfaceLayerPtr->setOpacity(0.6f); | 3554 surfaceLayerPtr->setOpacity(0.6f); |
| 3555 { | 3555 { |
| 3556 CCLayerTreeHostImpl::FrameData frame; | 3556 CCLayerTreeHostImpl::FrameData frame; |
| 3557 EXPECT_TRUE(myHostImpl->prepareToDraw(frame)); | 3557 EXPECT_TRUE(myHostImpl->prepareToDraw(frame)); |
| 3558 | 3558 |
| 3559 // Must receive one render pass, as the other one should be culled | 3559 // Must receive one render pass, as the other one should be culled |
| 3560 ASSERT_EQ(1U, frame.renderPasses.size()); | 3560 ASSERT_EQ(1U, frame.renderPasses.size()); |
| 3561 | 3561 |
| 3562 EXPECT_EQ(1U, frame.renderPasses[0]->quadList().size()); | 3562 EXPECT_EQ(1U, frame.renderPasses[0]->quadList().size()); |
| 3563 EXPECT_EQ(CCDrawQuad::RenderPass, frame.renderPasses[0]->quadList()[0]->
material()); | 3563 EXPECT_EQ(CCDrawQuad::RenderPass, frame.renderPasses[0]->quadList()[0]->
material()); |
| 3564 CCRenderPassDrawQuad* quad = static_cast<CCRenderPassDrawQuad*>(frame.re
nderPasses[0]->quadList()[0].get()); | 3564 CCRenderPassDrawQuad* quad = static_cast<CCRenderPassDrawQuad*>(frame.re
nderPasses[0]->quadList()[0]); |
| 3565 CCRenderPass* targetPass = frame.renderPassesById.get(quad->renderPassId
()); | 3565 CCRenderPass* targetPass = frame.renderPassesById.get(quad->renderPassId
()); |
| 3566 EXPECT_TRUE(targetPass->damageRect().isEmpty()); | 3566 EXPECT_TRUE(targetPass->damageRect().isEmpty()); |
| 3567 | 3567 |
| 3568 myHostImpl->drawLayers(frame); | 3568 myHostImpl->drawLayers(frame); |
| 3569 myHostImpl->didDrawAllLayers(frame); | 3569 myHostImpl->didDrawAllLayers(frame); |
| 3570 } | 3570 } |
| 3571 | 3571 |
| 3572 // Change less benign property and draw - should have contents changed flag | 3572 // Change less benign property and draw - should have contents changed flag |
| 3573 surfaceLayerPtr->setStackingOrderChanged(true); | 3573 surfaceLayerPtr->setStackingOrderChanged(true); |
| 3574 { | 3574 { |
| 3575 CCLayerTreeHostImpl::FrameData frame; | 3575 CCLayerTreeHostImpl::FrameData frame; |
| 3576 EXPECT_TRUE(myHostImpl->prepareToDraw(frame)); | 3576 EXPECT_TRUE(myHostImpl->prepareToDraw(frame)); |
| 3577 | 3577 |
| 3578 // Must receive two render passes, each with one quad | 3578 // Must receive two render passes, each with one quad |
| 3579 ASSERT_EQ(2U, frame.renderPasses.size()); | 3579 ASSERT_EQ(2U, frame.renderPasses.size()); |
| 3580 | 3580 |
| 3581 EXPECT_EQ(1U, frame.renderPasses[0]->quadList().size()); | 3581 EXPECT_EQ(1U, frame.renderPasses[0]->quadList().size()); |
| 3582 EXPECT_EQ(CCDrawQuad::SolidColor, frame.renderPasses[0]->quadList()[0]->
material()); | 3582 EXPECT_EQ(CCDrawQuad::SolidColor, frame.renderPasses[0]->quadList()[0]->
material()); |
| 3583 | 3583 |
| 3584 EXPECT_EQ(CCDrawQuad::RenderPass, frame.renderPasses[1]->quadList()[0]->
material()); | 3584 EXPECT_EQ(CCDrawQuad::RenderPass, frame.renderPasses[1]->quadList()[0]->
material()); |
| 3585 CCRenderPassDrawQuad* quad = static_cast<CCRenderPassDrawQuad*>(frame.re
nderPasses[1]->quadList()[0].get()); | 3585 CCRenderPassDrawQuad* quad = static_cast<CCRenderPassDrawQuad*>(frame.re
nderPasses[1]->quadList()[0]); |
| 3586 CCRenderPass* targetPass = frame.renderPassesById.get(quad->renderPassId
()); | 3586 CCRenderPass* targetPass = frame.renderPassesById.get(quad->renderPassId
()); |
| 3587 EXPECT_FALSE(targetPass->damageRect().isEmpty()); | 3587 EXPECT_FALSE(targetPass->damageRect().isEmpty()); |
| 3588 | 3588 |
| 3589 myHostImpl->drawLayers(frame); | 3589 myHostImpl->drawLayers(frame); |
| 3590 myHostImpl->didDrawAllLayers(frame); | 3590 myHostImpl->didDrawAllLayers(frame); |
| 3591 } | 3591 } |
| 3592 | 3592 |
| 3593 // Change opacity again, and evict the cached surface texture. | 3593 // Change opacity again, and evict the cached surface texture. |
| 3594 surfaceLayerPtr->setOpacity(0.5f); | 3594 surfaceLayerPtr->setOpacity(0.5f); |
| 3595 static_cast<CCRendererGLWithReleaseTextures*>(myHostImpl->renderer())->relea
seRenderPassTextures(); | 3595 static_cast<CCRendererGLWithReleaseTextures*>(myHostImpl->renderer())->relea
seRenderPassTextures(); |
| 3596 | 3596 |
| 3597 // Change opacity and draw | 3597 // Change opacity and draw |
| 3598 surfaceLayerPtr->setOpacity(0.6f); | 3598 surfaceLayerPtr->setOpacity(0.6f); |
| 3599 { | 3599 { |
| 3600 CCLayerTreeHostImpl::FrameData frame; | 3600 CCLayerTreeHostImpl::FrameData frame; |
| 3601 EXPECT_TRUE(myHostImpl->prepareToDraw(frame)); | 3601 EXPECT_TRUE(myHostImpl->prepareToDraw(frame)); |
| 3602 | 3602 |
| 3603 // Must receive two render passes | 3603 // Must receive two render passes |
| 3604 ASSERT_EQ(2U, frame.renderPasses.size()); | 3604 ASSERT_EQ(2U, frame.renderPasses.size()); |
| 3605 | 3605 |
| 3606 // Even though not enough properties changed, the entire thing must be | 3606 // Even though not enough properties changed, the entire thing must be |
| 3607 // redrawn as we don't have cached textures | 3607 // redrawn as we don't have cached textures |
| 3608 EXPECT_EQ(1U, frame.renderPasses[0]->quadList().size()); | 3608 EXPECT_EQ(1U, frame.renderPasses[0]->quadList().size()); |
| 3609 EXPECT_EQ(1U, frame.renderPasses[1]->quadList().size()); | 3609 EXPECT_EQ(1U, frame.renderPasses[1]->quadList().size()); |
| 3610 | 3610 |
| 3611 EXPECT_EQ(CCDrawQuad::RenderPass, frame.renderPasses[1]->quadList()[0]->
material()); | 3611 EXPECT_EQ(CCDrawQuad::RenderPass, frame.renderPasses[1]->quadList()[0]->
material()); |
| 3612 CCRenderPassDrawQuad* quad = static_cast<CCRenderPassDrawQuad*>(frame.re
nderPasses[1]->quadList()[0].get()); | 3612 CCRenderPassDrawQuad* quad = static_cast<CCRenderPassDrawQuad*>(frame.re
nderPasses[1]->quadList()[0]); |
| 3613 CCRenderPass* targetPass = frame.renderPassesById.get(quad->renderPassId
()); | 3613 CCRenderPass* targetPass = frame.renderPassesById.get(quad->renderPassId
()); |
| 3614 EXPECT_TRUE(targetPass->damageRect().isEmpty()); | 3614 EXPECT_TRUE(targetPass->damageRect().isEmpty()); |
| 3615 | 3615 |
| 3616 // Was our surface evicted? | 3616 // Was our surface evicted? |
| 3617 EXPECT_FALSE(myHostImpl->renderer()->haveCachedResourcesForRenderPassId(
targetPass->id())); | 3617 EXPECT_FALSE(myHostImpl->renderer()->haveCachedResourcesForRenderPassId(
targetPass->id())); |
| 3618 | 3618 |
| 3619 myHostImpl->drawLayers(frame); | 3619 myHostImpl->drawLayers(frame); |
| 3620 myHostImpl->didDrawAllLayers(frame); | 3620 myHostImpl->didDrawAllLayers(frame); |
| 3621 } | 3621 } |
| 3622 | 3622 |
| 3623 // Draw without any change, to make sure the state is clear | 3623 // Draw without any change, to make sure the state is clear |
| 3624 { | 3624 { |
| 3625 CCLayerTreeHostImpl::FrameData frame; | 3625 CCLayerTreeHostImpl::FrameData frame; |
| 3626 EXPECT_TRUE(myHostImpl->prepareToDraw(frame)); | 3626 EXPECT_TRUE(myHostImpl->prepareToDraw(frame)); |
| 3627 | 3627 |
| 3628 // Must receive one render pass, as the other one should be culled | 3628 // Must receive one render pass, as the other one should be culled |
| 3629 ASSERT_EQ(1U, frame.renderPasses.size()); | 3629 ASSERT_EQ(1U, frame.renderPasses.size()); |
| 3630 | 3630 |
| 3631 EXPECT_EQ(1U, frame.renderPasses[0]->quadList().size()); | 3631 EXPECT_EQ(1U, frame.renderPasses[0]->quadList().size()); |
| 3632 EXPECT_EQ(CCDrawQuad::RenderPass, frame.renderPasses[0]->quadList()[0]->
material()); | 3632 EXPECT_EQ(CCDrawQuad::RenderPass, frame.renderPasses[0]->quadList()[0]->
material()); |
| 3633 CCRenderPassDrawQuad* quad = static_cast<CCRenderPassDrawQuad*>(frame.re
nderPasses[0]->quadList()[0].get()); | 3633 CCRenderPassDrawQuad* quad = static_cast<CCRenderPassDrawQuad*>(frame.re
nderPasses[0]->quadList()[0]); |
| 3634 CCRenderPass* targetPass = frame.renderPassesById.get(quad->renderPassId
()); | 3634 CCRenderPass* targetPass = frame.renderPassesById.get(quad->renderPassId
()); |
| 3635 EXPECT_TRUE(targetPass->damageRect().isEmpty()); | 3635 EXPECT_TRUE(targetPass->damageRect().isEmpty()); |
| 3636 | 3636 |
| 3637 myHostImpl->drawLayers(frame); | 3637 myHostImpl->drawLayers(frame); |
| 3638 myHostImpl->didDrawAllLayers(frame); | 3638 myHostImpl->didDrawAllLayers(frame); |
| 3639 } | 3639 } |
| 3640 | 3640 |
| 3641 // Change opacity on the intermediate layer | 3641 // Change opacity on the intermediate layer |
| 3642 WebTransformationMatrix transform = intermediateLayerPtr->transform(); | 3642 WebTransformationMatrix transform = intermediateLayerPtr->transform(); |
| 3643 transform.setM11(1.0001); | 3643 transform.setM11(1.0001); |
| 3644 intermediateLayerPtr->setTransform(transform); | 3644 intermediateLayerPtr->setTransform(transform); |
| 3645 { | 3645 { |
| 3646 CCLayerTreeHostImpl::FrameData frame; | 3646 CCLayerTreeHostImpl::FrameData frame; |
| 3647 EXPECT_TRUE(myHostImpl->prepareToDraw(frame)); | 3647 EXPECT_TRUE(myHostImpl->prepareToDraw(frame)); |
| 3648 | 3648 |
| 3649 // Must receive one render pass, as the other one should be culled. | 3649 // Must receive one render pass, as the other one should be culled. |
| 3650 ASSERT_EQ(1U, frame.renderPasses.size()); | 3650 ASSERT_EQ(1U, frame.renderPasses.size()); |
| 3651 EXPECT_EQ(1U, frame.renderPasses[0]->quadList().size()); | 3651 EXPECT_EQ(1U, frame.renderPasses[0]->quadList().size()); |
| 3652 | 3652 |
| 3653 EXPECT_EQ(CCDrawQuad::RenderPass, frame.renderPasses[0]->quadList()[0]->
material()); | 3653 EXPECT_EQ(CCDrawQuad::RenderPass, frame.renderPasses[0]->quadList()[0]->
material()); |
| 3654 CCRenderPassDrawQuad* quad = static_cast<CCRenderPassDrawQuad*>(frame.re
nderPasses[0]->quadList()[0].get()); | 3654 CCRenderPassDrawQuad* quad = static_cast<CCRenderPassDrawQuad*>(frame.re
nderPasses[0]->quadList()[0]); |
| 3655 CCRenderPass* targetPass = frame.renderPassesById.get(quad->renderPassId
()); | 3655 CCRenderPass* targetPass = frame.renderPassesById.get(quad->renderPassId
()); |
| 3656 EXPECT_TRUE(targetPass->damageRect().isEmpty()); | 3656 EXPECT_TRUE(targetPass->damageRect().isEmpty()); |
| 3657 | 3657 |
| 3658 myHostImpl->drawLayers(frame); | 3658 myHostImpl->drawLayers(frame); |
| 3659 myHostImpl->didDrawAllLayers(frame); | 3659 myHostImpl->didDrawAllLayers(frame); |
| 3660 } | 3660 } |
| 3661 } | 3661 } |
| 3662 | 3662 |
| 3663 TEST_F(CCLayerTreeHostImplTest, surfaceTextureCachingNoPartialSwap) | 3663 TEST_F(CCLayerTreeHostImplTest, surfaceTextureCachingNoPartialSwap) |
| 3664 { | 3664 { |
| (...skipping 13 matching lines...) Expand all Loading... |
| 3678 { | 3678 { |
| 3679 CCLayerTreeHostImpl::FrameData frame; | 3679 CCLayerTreeHostImpl::FrameData frame; |
| 3680 EXPECT_TRUE(myHostImpl->prepareToDraw(frame)); | 3680 EXPECT_TRUE(myHostImpl->prepareToDraw(frame)); |
| 3681 | 3681 |
| 3682 // Must receive two render passes, each with one quad | 3682 // Must receive two render passes, each with one quad |
| 3683 ASSERT_EQ(2U, frame.renderPasses.size()); | 3683 ASSERT_EQ(2U, frame.renderPasses.size()); |
| 3684 EXPECT_EQ(1U, frame.renderPasses[0]->quadList().size()); | 3684 EXPECT_EQ(1U, frame.renderPasses[0]->quadList().size()); |
| 3685 EXPECT_EQ(1U, frame.renderPasses[1]->quadList().size()); | 3685 EXPECT_EQ(1U, frame.renderPasses[1]->quadList().size()); |
| 3686 | 3686 |
| 3687 EXPECT_EQ(CCDrawQuad::RenderPass, frame.renderPasses[1]->quadList()[0]->
material()); | 3687 EXPECT_EQ(CCDrawQuad::RenderPass, frame.renderPasses[1]->quadList()[0]->
material()); |
| 3688 CCRenderPassDrawQuad* quad = static_cast<CCRenderPassDrawQuad*>(frame.re
nderPasses[1]->quadList()[0].get()); | 3688 CCRenderPassDrawQuad* quad = static_cast<CCRenderPassDrawQuad*>(frame.re
nderPasses[1]->quadList()[0]); |
| 3689 CCRenderPass* targetPass = frame.renderPassesById.get(quad->renderPassId
()); | 3689 CCRenderPass* targetPass = frame.renderPassesById.get(quad->renderPassId
()); |
| 3690 EXPECT_FALSE(targetPass->damageRect().isEmpty()); | 3690 EXPECT_FALSE(targetPass->damageRect().isEmpty()); |
| 3691 | 3691 |
| 3692 EXPECT_FALSE(frame.renderPasses[0]->damageRect().isEmpty()); | 3692 EXPECT_FALSE(frame.renderPasses[0]->damageRect().isEmpty()); |
| 3693 EXPECT_FALSE(frame.renderPasses[1]->damageRect().isEmpty()); | 3693 EXPECT_FALSE(frame.renderPasses[1]->damageRect().isEmpty()); |
| 3694 | 3694 |
| 3695 EXPECT_FALSE(frame.renderPasses[0]->hasOcclusionFromOutsideTargetSurface
()); | 3695 EXPECT_FALSE(frame.renderPasses[0]->hasOcclusionFromOutsideTargetSurface
()); |
| 3696 EXPECT_FALSE(frame.renderPasses[1]->hasOcclusionFromOutsideTargetSurface
()); | 3696 EXPECT_FALSE(frame.renderPasses[1]->hasOcclusionFromOutsideTargetSurface
()); |
| 3697 | 3697 |
| 3698 myHostImpl->drawLayers(frame); | 3698 myHostImpl->drawLayers(frame); |
| (...skipping 21 matching lines...) Expand all Loading... |
| 3720 surfaceLayerPtr->setOpacity(0.6f); | 3720 surfaceLayerPtr->setOpacity(0.6f); |
| 3721 { | 3721 { |
| 3722 CCLayerTreeHostImpl::FrameData frame; | 3722 CCLayerTreeHostImpl::FrameData frame; |
| 3723 EXPECT_TRUE(myHostImpl->prepareToDraw(frame)); | 3723 EXPECT_TRUE(myHostImpl->prepareToDraw(frame)); |
| 3724 | 3724 |
| 3725 // Must receive one render pass, as the other one should be culled | 3725 // Must receive one render pass, as the other one should be culled |
| 3726 ASSERT_EQ(1U, frame.renderPasses.size()); | 3726 ASSERT_EQ(1U, frame.renderPasses.size()); |
| 3727 | 3727 |
| 3728 EXPECT_EQ(1U, frame.renderPasses[0]->quadList().size()); | 3728 EXPECT_EQ(1U, frame.renderPasses[0]->quadList().size()); |
| 3729 EXPECT_EQ(CCDrawQuad::RenderPass, frame.renderPasses[0]->quadList()[0]->
material()); | 3729 EXPECT_EQ(CCDrawQuad::RenderPass, frame.renderPasses[0]->quadList()[0]->
material()); |
| 3730 CCRenderPassDrawQuad* quad = static_cast<CCRenderPassDrawQuad*>(frame.re
nderPasses[0]->quadList()[0].get()); | 3730 CCRenderPassDrawQuad* quad = static_cast<CCRenderPassDrawQuad*>(frame.re
nderPasses[0]->quadList()[0]); |
| 3731 CCRenderPass* targetPass = frame.renderPassesById.get(quad->renderPassId
()); | 3731 CCRenderPass* targetPass = frame.renderPassesById.get(quad->renderPassId
()); |
| 3732 EXPECT_TRUE(targetPass->damageRect().isEmpty()); | 3732 EXPECT_TRUE(targetPass->damageRect().isEmpty()); |
| 3733 | 3733 |
| 3734 myHostImpl->drawLayers(frame); | 3734 myHostImpl->drawLayers(frame); |
| 3735 myHostImpl->didDrawAllLayers(frame); | 3735 myHostImpl->didDrawAllLayers(frame); |
| 3736 } | 3736 } |
| 3737 | 3737 |
| 3738 // Change less benign property and draw - should have contents changed flag | 3738 // Change less benign property and draw - should have contents changed flag |
| 3739 surfaceLayerPtr->setStackingOrderChanged(true); | 3739 surfaceLayerPtr->setStackingOrderChanged(true); |
| 3740 { | 3740 { |
| 3741 CCLayerTreeHostImpl::FrameData frame; | 3741 CCLayerTreeHostImpl::FrameData frame; |
| 3742 EXPECT_TRUE(myHostImpl->prepareToDraw(frame)); | 3742 EXPECT_TRUE(myHostImpl->prepareToDraw(frame)); |
| 3743 | 3743 |
| 3744 // Must receive two render passes, each with one quad | 3744 // Must receive two render passes, each with one quad |
| 3745 ASSERT_EQ(2U, frame.renderPasses.size()); | 3745 ASSERT_EQ(2U, frame.renderPasses.size()); |
| 3746 | 3746 |
| 3747 EXPECT_EQ(1U, frame.renderPasses[0]->quadList().size()); | 3747 EXPECT_EQ(1U, frame.renderPasses[0]->quadList().size()); |
| 3748 EXPECT_EQ(CCDrawQuad::SolidColor, frame.renderPasses[0]->quadList()[0]->
material()); | 3748 EXPECT_EQ(CCDrawQuad::SolidColor, frame.renderPasses[0]->quadList()[0]->
material()); |
| 3749 | 3749 |
| 3750 EXPECT_EQ(CCDrawQuad::RenderPass, frame.renderPasses[1]->quadList()[0]->
material()); | 3750 EXPECT_EQ(CCDrawQuad::RenderPass, frame.renderPasses[1]->quadList()[0]->
material()); |
| 3751 CCRenderPassDrawQuad* quad = static_cast<CCRenderPassDrawQuad*>(frame.re
nderPasses[1]->quadList()[0].get()); | 3751 CCRenderPassDrawQuad* quad = static_cast<CCRenderPassDrawQuad*>(frame.re
nderPasses[1]->quadList()[0]); |
| 3752 CCRenderPass* targetPass = frame.renderPassesById.get(quad->renderPassId
()); | 3752 CCRenderPass* targetPass = frame.renderPassesById.get(quad->renderPassId
()); |
| 3753 EXPECT_FALSE(targetPass->damageRect().isEmpty()); | 3753 EXPECT_FALSE(targetPass->damageRect().isEmpty()); |
| 3754 | 3754 |
| 3755 myHostImpl->drawLayers(frame); | 3755 myHostImpl->drawLayers(frame); |
| 3756 myHostImpl->didDrawAllLayers(frame); | 3756 myHostImpl->didDrawAllLayers(frame); |
| 3757 } | 3757 } |
| 3758 | 3758 |
| 3759 // Change opacity again, and evict the cached surface texture. | 3759 // Change opacity again, and evict the cached surface texture. |
| 3760 surfaceLayerPtr->setOpacity(0.5f); | 3760 surfaceLayerPtr->setOpacity(0.5f); |
| 3761 static_cast<CCRendererGLWithReleaseTextures*>(myHostImpl->renderer())->relea
seRenderPassTextures(); | 3761 static_cast<CCRendererGLWithReleaseTextures*>(myHostImpl->renderer())->relea
seRenderPassTextures(); |
| 3762 | 3762 |
| 3763 // Change opacity and draw | 3763 // Change opacity and draw |
| 3764 surfaceLayerPtr->setOpacity(0.6f); | 3764 surfaceLayerPtr->setOpacity(0.6f); |
| 3765 { | 3765 { |
| 3766 CCLayerTreeHostImpl::FrameData frame; | 3766 CCLayerTreeHostImpl::FrameData frame; |
| 3767 EXPECT_TRUE(myHostImpl->prepareToDraw(frame)); | 3767 EXPECT_TRUE(myHostImpl->prepareToDraw(frame)); |
| 3768 | 3768 |
| 3769 // Must receive two render passes | 3769 // Must receive two render passes |
| 3770 ASSERT_EQ(2U, frame.renderPasses.size()); | 3770 ASSERT_EQ(2U, frame.renderPasses.size()); |
| 3771 | 3771 |
| 3772 // Even though not enough properties changed, the entire thing must be | 3772 // Even though not enough properties changed, the entire thing must be |
| 3773 // redrawn as we don't have cached textures | 3773 // redrawn as we don't have cached textures |
| 3774 EXPECT_EQ(1U, frame.renderPasses[0]->quadList().size()); | 3774 EXPECT_EQ(1U, frame.renderPasses[0]->quadList().size()); |
| 3775 EXPECT_EQ(1U, frame.renderPasses[1]->quadList().size()); | 3775 EXPECT_EQ(1U, frame.renderPasses[1]->quadList().size()); |
| 3776 | 3776 |
| 3777 EXPECT_EQ(CCDrawQuad::RenderPass, frame.renderPasses[1]->quadList()[0]->
material()); | 3777 EXPECT_EQ(CCDrawQuad::RenderPass, frame.renderPasses[1]->quadList()[0]->
material()); |
| 3778 CCRenderPassDrawQuad* quad = static_cast<CCRenderPassDrawQuad*>(frame.re
nderPasses[1]->quadList()[0].get()); | 3778 CCRenderPassDrawQuad* quad = static_cast<CCRenderPassDrawQuad*>(frame.re
nderPasses[1]->quadList()[0]); |
| 3779 CCRenderPass* targetPass = frame.renderPassesById.get(quad->renderPassId
()); | 3779 CCRenderPass* targetPass = frame.renderPassesById.get(quad->renderPassId
()); |
| 3780 EXPECT_TRUE(targetPass->damageRect().isEmpty()); | 3780 EXPECT_TRUE(targetPass->damageRect().isEmpty()); |
| 3781 | 3781 |
| 3782 // Was our surface evicted? | 3782 // Was our surface evicted? |
| 3783 EXPECT_FALSE(myHostImpl->renderer()->haveCachedResourcesForRenderPassId(
targetPass->id())); | 3783 EXPECT_FALSE(myHostImpl->renderer()->haveCachedResourcesForRenderPassId(
targetPass->id())); |
| 3784 | 3784 |
| 3785 myHostImpl->drawLayers(frame); | 3785 myHostImpl->drawLayers(frame); |
| 3786 myHostImpl->didDrawAllLayers(frame); | 3786 myHostImpl->didDrawAllLayers(frame); |
| 3787 } | 3787 } |
| 3788 | 3788 |
| (...skipping 18 matching lines...) Expand all Loading... |
| 3807 intermediateLayerPtr->setTransform(transform); | 3807 intermediateLayerPtr->setTransform(transform); |
| 3808 { | 3808 { |
| 3809 CCLayerTreeHostImpl::FrameData frame; | 3809 CCLayerTreeHostImpl::FrameData frame; |
| 3810 EXPECT_TRUE(myHostImpl->prepareToDraw(frame)); | 3810 EXPECT_TRUE(myHostImpl->prepareToDraw(frame)); |
| 3811 | 3811 |
| 3812 // Must receive one render pass, as the other one should be culled. | 3812 // Must receive one render pass, as the other one should be culled. |
| 3813 ASSERT_EQ(1U, frame.renderPasses.size()); | 3813 ASSERT_EQ(1U, frame.renderPasses.size()); |
| 3814 EXPECT_EQ(1U, frame.renderPasses[0]->quadList().size()); | 3814 EXPECT_EQ(1U, frame.renderPasses[0]->quadList().size()); |
| 3815 | 3815 |
| 3816 EXPECT_EQ(CCDrawQuad::RenderPass, frame.renderPasses[0]->quadList()[0]->
material()); | 3816 EXPECT_EQ(CCDrawQuad::RenderPass, frame.renderPasses[0]->quadList()[0]->
material()); |
| 3817 CCRenderPassDrawQuad* quad = static_cast<CCRenderPassDrawQuad*>(frame.re
nderPasses[0]->quadList()[0].get()); | 3817 CCRenderPassDrawQuad* quad = static_cast<CCRenderPassDrawQuad*>(frame.re
nderPasses[0]->quadList()[0]); |
| 3818 CCRenderPass* targetPass = frame.renderPassesById.get(quad->renderPassId
()); | 3818 CCRenderPass* targetPass = frame.renderPassesById.get(quad->renderPassId
()); |
| 3819 EXPECT_TRUE(targetPass->damageRect().isEmpty()); | 3819 EXPECT_TRUE(targetPass->damageRect().isEmpty()); |
| 3820 | 3820 |
| 3821 myHostImpl->drawLayers(frame); | 3821 myHostImpl->drawLayers(frame); |
| 3822 myHostImpl->didDrawAllLayers(frame); | 3822 myHostImpl->didDrawAllLayers(frame); |
| 3823 } | 3823 } |
| 3824 } | 3824 } |
| 3825 | 3825 |
| 3826 TEST_F(CCLayerTreeHostImplTest, releaseContentsTextureShouldTriggerCommit) | 3826 TEST_F(CCLayerTreeHostImplTest, releaseContentsTextureShouldTriggerCommit) |
| 3827 { | 3827 { |
| (...skipping 171 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3999 char* pos = buffer; | 3999 char* pos = buffer; |
| 4000 for (CCRenderPassList::const_reverse_iterator it = testData.renderPasses.rbe
gin(); it != testData.renderPasses.rend(); ++it) { | 4000 for (CCRenderPassList::const_reverse_iterator it = testData.renderPasses.rbe
gin(); it != testData.renderPasses.rend(); ++it) { |
| 4001 const CCRenderPass* currentPass = *it; | 4001 const CCRenderPass* currentPass = *it; |
| 4002 *pos = currentPass->id().layerId; | 4002 *pos = currentPass->id().layerId; |
| 4003 pos++; | 4003 pos++; |
| 4004 *pos = currentPass->id().index; | 4004 *pos = currentPass->id().index; |
| 4005 pos++; | 4005 pos++; |
| 4006 | 4006 |
| 4007 CCQuadList::const_iterator quadListIterator = currentPass->quadList().be
gin(); | 4007 CCQuadList::const_iterator quadListIterator = currentPass->quadList().be
gin(); |
| 4008 while (quadListIterator != currentPass->quadList().end()) { | 4008 while (quadListIterator != currentPass->quadList().end()) { |
| 4009 CCDrawQuad* currentQuad = (*quadListIterator).get(); | 4009 CCDrawQuad* currentQuad = *quadListIterator; |
| 4010 switch (currentQuad->material()) { | 4010 switch (currentQuad->material()) { |
| 4011 case CCDrawQuad::SolidColor: | 4011 case CCDrawQuad::SolidColor: |
| 4012 *pos = 's'; | 4012 *pos = 's'; |
| 4013 pos++; | 4013 pos++; |
| 4014 break; | 4014 break; |
| 4015 case CCDrawQuad::RenderPass: | 4015 case CCDrawQuad::RenderPass: |
| 4016 *pos = CCRenderPassDrawQuad::materialCast(currentQuad)->renderPa
ssId().layerId; | 4016 *pos = CCRenderPassDrawQuad::materialCast(currentQuad)->renderPa
ssId().layerId; |
| 4017 pos++; | 4017 pos++; |
| 4018 *pos = CCRenderPassDrawQuad::materialCast(currentQuad)->renderPa
ssId().index; | 4018 *pos = CCRenderPassDrawQuad::materialCast(currentQuad)->renderPa
ssId().index; |
| 4019 pos++; | 4019 pos++; |
| (...skipping 172 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4192 while (removeRenderPassesCases[testCaseIndex].name) { | 4192 while (removeRenderPassesCases[testCaseIndex].name) { |
| 4193 RenderPassRemovalTestData testData; | 4193 RenderPassRemovalTestData testData; |
| 4194 configureRenderPassTestData(removeRenderPassesCases[testCaseIndex].initS
cript, testData, renderer.get()); | 4194 configureRenderPassTestData(removeRenderPassesCases[testCaseIndex].initS
cript, testData, renderer.get()); |
| 4195 CCLayerTreeHostImpl::removeRenderPasses(CCLayerTreeHostImpl::CullRenderP
assesWithCachedTextures(*renderer), testData); | 4195 CCLayerTreeHostImpl::removeRenderPasses(CCLayerTreeHostImpl::CullRenderP
assesWithCachedTextures(*renderer), testData); |
| 4196 verifyRenderPassTestData(removeRenderPassesCases[testCaseIndex], testDat
a); | 4196 verifyRenderPassTestData(removeRenderPassesCases[testCaseIndex], testDat
a); |
| 4197 testCaseIndex++; | 4197 testCaseIndex++; |
| 4198 } | 4198 } |
| 4199 } | 4199 } |
| 4200 | 4200 |
| 4201 } // namespace | 4201 } // namespace |
| OLD | NEW |