| 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 192 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 203 } | 203 } |
| 204 | 204 |
| 205 void pinchZoomPanViewportForcesCommitRedraw(const float deviceScaleFactor); | 205 void pinchZoomPanViewportForcesCommitRedraw(const float deviceScaleFactor); |
| 206 void pinchZoomPanViewportTest(const float deviceScaleFactor); | 206 void pinchZoomPanViewportTest(const float deviceScaleFactor); |
| 207 void pinchZoomPanViewportAndScrollTest(const float deviceScaleFactor); | 207 void pinchZoomPanViewportAndScrollTest(const float deviceScaleFactor); |
| 208 void pinchZoomPanViewportAndScrollBoundaryTest(const float deviceScaleFactor
); | 208 void pinchZoomPanViewportAndScrollBoundaryTest(const float deviceScaleFactor
); |
| 209 | 209 |
| 210 protected: | 210 protected: |
| 211 virtual scoped_ptr<OutputSurface> createOutputSurface() { return createFakeO
utputSurface(); } | 211 virtual scoped_ptr<OutputSurface> createOutputSurface() { return createFakeO
utputSurface(); } |
| 212 | 212 |
| 213 void forcePrepareToDraw() { |
| 214 LayerTreeHostImpl::FrameData frameData; |
| 215 m_hostImpl->prepareToDraw(frameData); |
| 216 m_hostImpl->didDrawAllLayers(frameData); |
| 217 } |
| 218 |
| 213 FakeProxy m_proxy; | 219 FakeProxy m_proxy; |
| 214 DebugScopedSetImplThread m_alwaysImplThread; | 220 DebugScopedSetImplThread m_alwaysImplThread; |
| 215 DebugScopedSetMainThreadBlocked m_alwaysMainThreadBlocked; | 221 DebugScopedSetMainThreadBlocked m_alwaysMainThreadBlocked; |
| 216 | 222 |
| 217 scoped_ptr<LayerTreeHostImpl> m_hostImpl; | 223 scoped_ptr<LayerTreeHostImpl> m_hostImpl; |
| 218 bool m_onCanDrawStateChangedCalled; | 224 bool m_onCanDrawStateChangedCalled; |
| 219 bool m_didRequestCommit; | 225 bool m_didRequestCommit; |
| 220 bool m_didRequestRedraw; | 226 bool m_didRequestRedraw; |
| 221 bool m_reduceMemoryResult; | 227 bool m_reduceMemoryResult; |
| 222 }; | 228 }; |
| (...skipping 1065 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1288 gfx::Vector2d expectedScrollDelta(scrollDelta); | 1294 gfx::Vector2d expectedScrollDelta(scrollDelta); |
| 1289 gfx::Vector2d expectedMaxScroll(m_hostImpl->rootLayer()->maxScrollOffset()); | 1295 gfx::Vector2d expectedMaxScroll(m_hostImpl->rootLayer()->maxScrollOffset()); |
| 1290 EXPECT_EQ(m_hostImpl->scrollBegin(gfx::Point(5, 5), InputHandlerClient::Whee
l), InputHandlerClient::ScrollStarted); | 1296 EXPECT_EQ(m_hostImpl->scrollBegin(gfx::Point(5, 5), InputHandlerClient::Whee
l), InputHandlerClient::ScrollStarted); |
| 1291 m_hostImpl->scrollBy(gfx::Point(), scrollDelta); | 1297 m_hostImpl->scrollBy(gfx::Point(), scrollDelta); |
| 1292 m_hostImpl->scrollEnd(); | 1298 m_hostImpl->scrollEnd(); |
| 1293 | 1299 |
| 1294 // Set new page scale on impl thread by pinching. | 1300 // Set new page scale on impl thread by pinching. |
| 1295 m_hostImpl->pinchGestureBegin(); | 1301 m_hostImpl->pinchGestureBegin(); |
| 1296 m_hostImpl->pinchGestureUpdate(pageScale, gfx::Point()); | 1302 m_hostImpl->pinchGestureUpdate(pageScale, gfx::Point()); |
| 1297 m_hostImpl->pinchGestureEnd(); | 1303 m_hostImpl->pinchGestureEnd(); |
| 1298 m_hostImpl->updateRootScrollLayerImplTransform(); | 1304 forcePrepareToDraw(); |
| 1299 | 1305 |
| 1300 // The scroll delta is not scaled because the main thread did not scale. | 1306 // The scroll delta is not scaled because the main thread did not scale. |
| 1301 scoped_ptr<ScrollAndScaleSet> scrollInfo = m_hostImpl->processScrollDeltas()
; | 1307 scoped_ptr<ScrollAndScaleSet> scrollInfo = m_hostImpl->processScrollDeltas()
; |
| 1302 expectContains(*scrollInfo.get(), m_hostImpl->rootLayer()->id(), expectedScr
ollDelta); | 1308 expectContains(*scrollInfo.get(), m_hostImpl->rootLayer()->id(), expectedScr
ollDelta); |
| 1303 | 1309 |
| 1304 // The scroll range should also have been updated. | 1310 // The scroll range should also have been updated. |
| 1305 EXPECT_EQ(m_hostImpl->rootLayer()->maxScrollOffset(), expectedMaxScroll); | 1311 EXPECT_EQ(m_hostImpl->rootLayer()->maxScrollOffset(), expectedMaxScroll); |
| 1306 | 1312 |
| 1307 // The page scale delta should match the new scale on the impl side. | 1313 // The page scale delta should match the new scale on the impl side. |
| 1308 gfx::Transform expectedScale; | 1314 gfx::Transform expectedScale; |
| (...skipping 17 matching lines...) Expand all Loading... |
| 1326 LayerImpl* child = root->children()[0]; | 1332 LayerImpl* child = root->children()[0]; |
| 1327 | 1333 |
| 1328 scoped_ptr<LayerImpl> scrollableChild = createScrollableLayer(3, surfaceSize
); | 1334 scoped_ptr<LayerImpl> scrollableChild = createScrollableLayer(3, surfaceSize
); |
| 1329 child->addChild(scrollableChild.Pass()); | 1335 child->addChild(scrollableChild.Pass()); |
| 1330 LayerImpl* grandChild = child->children()[0]; | 1336 LayerImpl* grandChild = child->children()[0]; |
| 1331 | 1337 |
| 1332 // Set new page scale on impl thread by pinching. | 1338 // Set new page scale on impl thread by pinching. |
| 1333 m_hostImpl->pinchGestureBegin(); | 1339 m_hostImpl->pinchGestureBegin(); |
| 1334 m_hostImpl->pinchGestureUpdate(newPageScale, gfx::Point()); | 1340 m_hostImpl->pinchGestureUpdate(newPageScale, gfx::Point()); |
| 1335 m_hostImpl->pinchGestureEnd(); | 1341 m_hostImpl->pinchGestureEnd(); |
| 1336 m_hostImpl->updateRootScrollLayerImplTransform(); | 1342 forcePrepareToDraw(); |
| 1337 | 1343 |
| 1338 // The page scale delta should only be applied to the scrollable root layer. | 1344 // The page scale delta should only be applied to the scrollable root layer. |
| 1339 EXPECT_EQ(root->implTransform(), newPageScaleMatrix); | 1345 EXPECT_EQ(root->implTransform(), newPageScaleMatrix); |
| 1340 EXPECT_EQ(child->implTransform(), defaultPageScaleMatrix); | 1346 EXPECT_EQ(child->implTransform(), defaultPageScaleMatrix); |
| 1341 EXPECT_EQ(grandChild->implTransform(), defaultPageScaleMatrix); | 1347 EXPECT_EQ(grandChild->implTransform(), defaultPageScaleMatrix); |
| 1342 | 1348 |
| 1343 // Make sure all the layers are drawn with the page scale delta applied, i.e
., the page scale | 1349 // Make sure all the layers are drawn with the page scale delta applied, i.e
., the page scale |
| 1344 // delta on the root layer is applied hierarchically. | 1350 // delta on the root layer is applied hierarchically. |
| 1345 LayerTreeHostImpl::FrameData frame; | 1351 LayerTreeHostImpl::FrameData frame; |
| 1346 EXPECT_TRUE(m_hostImpl->prepareToDraw(frame)); | 1352 EXPECT_TRUE(m_hostImpl->prepareToDraw(frame)); |
| (...skipping 27 matching lines...) Expand all Loading... |
| 1374 gfx::Vector2d scrollDelta(0, 10); | 1380 gfx::Vector2d scrollDelta(0, 10); |
| 1375 gfx::Vector2d expectedScrollDelta(scrollDelta); | 1381 gfx::Vector2d expectedScrollDelta(scrollDelta); |
| 1376 gfx::Vector2d expectedMaxScroll(child->maxScrollOffset()); | 1382 gfx::Vector2d expectedMaxScroll(child->maxScrollOffset()); |
| 1377 EXPECT_EQ(m_hostImpl->scrollBegin(gfx::Point(5, 5), InputHandlerClient::Whee
l), InputHandlerClient::ScrollStarted); | 1383 EXPECT_EQ(m_hostImpl->scrollBegin(gfx::Point(5, 5), InputHandlerClient::Whee
l), InputHandlerClient::ScrollStarted); |
| 1378 m_hostImpl->scrollBy(gfx::Point(), scrollDelta); | 1384 m_hostImpl->scrollBy(gfx::Point(), scrollDelta); |
| 1379 m_hostImpl->scrollEnd(); | 1385 m_hostImpl->scrollEnd(); |
| 1380 | 1386 |
| 1381 float pageScale = 2; | 1387 float pageScale = 2; |
| 1382 m_hostImpl->setPageScaleFactorAndLimits(pageScale, 1, pageScale); | 1388 m_hostImpl->setPageScaleFactorAndLimits(pageScale, 1, pageScale); |
| 1383 | 1389 |
| 1384 m_hostImpl->updateRootScrollLayerImplTransform(); | 1390 forcePrepareToDraw(); |
| 1385 | 1391 |
| 1386 if (!m_hostImpl->settings().pageScalePinchZoomEnabled) { | 1392 if (!m_hostImpl->settings().pageScalePinchZoomEnabled) { |
| 1387 // The scale should apply to the scroll delta. | 1393 // The scale should apply to the scroll delta. |
| 1388 expectedScrollDelta = gfx::ToFlooredVector2d(gfx::ScaleVector2d(expected
ScrollDelta, pageScale)); | 1394 expectedScrollDelta = gfx::ToFlooredVector2d(gfx::ScaleVector2d(expected
ScrollDelta, pageScale)); |
| 1389 } | 1395 } |
| 1390 scoped_ptr<ScrollAndScaleSet> scrollInfo = m_hostImpl->processScrollDeltas()
; | 1396 scoped_ptr<ScrollAndScaleSet> scrollInfo = m_hostImpl->processScrollDeltas()
; |
| 1391 expectContains(*scrollInfo.get(), scrollLayerId, expectedScrollDelta); | 1397 expectContains(*scrollInfo.get(), scrollLayerId, expectedScrollDelta); |
| 1392 | 1398 |
| 1393 // The scroll range should not have changed. | 1399 // The scroll range should not have changed. |
| 1394 EXPECT_EQ(child->maxScrollOffset(), expectedMaxScroll); | 1400 EXPECT_EQ(child->maxScrollOffset(), expectedMaxScroll); |
| (...skipping 3155 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4550 root->setMaxScrollOffset(gfx::Vector2d()); | 4556 root->setMaxScrollOffset(gfx::Vector2d()); |
| 4551 m_hostImpl->setRootLayer(root.Pass()); | 4557 m_hostImpl->setRootLayer(root.Pass()); |
| 4552 m_hostImpl->setViewportSize(layoutSurfaceSize, deviceSurfaceSize); | 4558 m_hostImpl->setViewportSize(layoutSurfaceSize, deviceSurfaceSize); |
| 4553 m_hostImpl->setPageScaleFactorAndLimits(1, 1, pageScale); | 4559 m_hostImpl->setPageScaleFactorAndLimits(1, 1, pageScale); |
| 4554 initializeRendererAndDrawFrame(); | 4560 initializeRendererAndDrawFrame(); |
| 4555 | 4561 |
| 4556 // Set new page scale on impl thread by pinching. | 4562 // Set new page scale on impl thread by pinching. |
| 4557 m_hostImpl->pinchGestureBegin(); | 4563 m_hostImpl->pinchGestureBegin(); |
| 4558 m_hostImpl->pinchGestureUpdate(pageScale, gfx::Point()); | 4564 m_hostImpl->pinchGestureUpdate(pageScale, gfx::Point()); |
| 4559 m_hostImpl->pinchGestureEnd(); | 4565 m_hostImpl->pinchGestureEnd(); |
| 4560 m_hostImpl->updateRootScrollLayerImplTransform(); | 4566 forcePrepareToDraw(); |
| 4561 | 4567 |
| 4562 gfx::Transform expectedImplTransform; | 4568 gfx::Transform expectedImplTransform; |
| 4563 expectedImplTransform.Scale(pageScale, pageScale); | 4569 expectedImplTransform.Scale(pageScale, pageScale); |
| 4564 | 4570 |
| 4565 // Verify the pinch zoom took place. | 4571 // Verify the pinch zoom took place. |
| 4566 EXPECT_EQ(expectedImplTransform, m_hostImpl->rootLayer()->implTransform()); | 4572 EXPECT_EQ(expectedImplTransform, m_hostImpl->rootLayer()->implTransform()); |
| 4567 | 4573 |
| 4568 // The implTransform ignores the scroll if !pageScalePinchZoomEnabled, | 4574 // The implTransform ignores the scroll if !pageScalePinchZoomEnabled, |
| 4569 // so no point in continuing without it. | 4575 // so no point in continuing without it. |
| 4570 if (!m_hostImpl->settings().pageScalePinchZoomEnabled) | 4576 if (!m_hostImpl->settings().pageScalePinchZoomEnabled) |
| (...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4622 root->setMaxScrollOffset(gfx::Vector2d()); | 4628 root->setMaxScrollOffset(gfx::Vector2d()); |
| 4623 m_hostImpl->setRootLayer(root.Pass()); | 4629 m_hostImpl->setRootLayer(root.Pass()); |
| 4624 m_hostImpl->setViewportSize(layoutSurfaceSize, deviceSurfaceSize); | 4630 m_hostImpl->setViewportSize(layoutSurfaceSize, deviceSurfaceSize); |
| 4625 m_hostImpl->setPageScaleFactorAndLimits(1, 1, pageScale); | 4631 m_hostImpl->setPageScaleFactorAndLimits(1, 1, pageScale); |
| 4626 initializeRendererAndDrawFrame(); | 4632 initializeRendererAndDrawFrame(); |
| 4627 | 4633 |
| 4628 // Set new page scale on impl thread by pinching. | 4634 // Set new page scale on impl thread by pinching. |
| 4629 m_hostImpl->pinchGestureBegin(); | 4635 m_hostImpl->pinchGestureBegin(); |
| 4630 m_hostImpl->pinchGestureUpdate(pageScale, gfx::Point()); | 4636 m_hostImpl->pinchGestureUpdate(pageScale, gfx::Point()); |
| 4631 m_hostImpl->pinchGestureEnd(); | 4637 m_hostImpl->pinchGestureEnd(); |
| 4632 m_hostImpl->updateRootScrollLayerImplTransform(); | 4638 forcePrepareToDraw(); |
| 4633 | 4639 |
| 4634 gfx::Transform expectedImplTransform; | 4640 gfx::Transform expectedImplTransform; |
| 4635 expectedImplTransform.Scale(pageScale, pageScale); | 4641 expectedImplTransform.Scale(pageScale, pageScale); |
| 4636 | 4642 |
| 4637 EXPECT_EQ(m_hostImpl->rootLayer()->implTransform(), expectedImplTransform); | 4643 EXPECT_EQ(m_hostImpl->rootLayer()->implTransform(), expectedImplTransform); |
| 4638 | 4644 |
| 4639 // The implTransform ignores the scroll if !pageScalePinchZoomEnabled, | 4645 // The implTransform ignores the scroll if !pageScalePinchZoomEnabled, |
| 4640 // so no point in continuing without it. | 4646 // so no point in continuing without it. |
| 4641 if (!m_hostImpl->settings().pageScalePinchZoomEnabled) | 4647 if (!m_hostImpl->settings().pageScalePinchZoomEnabled) |
| 4642 return; | 4648 return; |
| 4643 | 4649 |
| 4644 gfx::Vector2d scrollDelta(5, 0); | 4650 gfx::Vector2d scrollDelta(5, 0); |
| 4651 gfx::Vector2d scrollDeltaInViewportSpace = ToFlooredVector2d(gfx::ScaleVecto
r2d(scrollDelta, m_hostImpl->totalPageScaleFactor())); |
| 4645 gfx::Vector2d expectedMaxScroll(m_hostImpl->rootLayer()->maxScrollOffset()); | 4652 gfx::Vector2d expectedMaxScroll(m_hostImpl->rootLayer()->maxScrollOffset()); |
| 4646 EXPECT_EQ(InputHandlerClient::ScrollStarted, m_hostImpl->scrollBegin(gfx::Po
int(0, 0), InputHandlerClient::Gesture)); | 4653 EXPECT_EQ(InputHandlerClient::ScrollStarted, m_hostImpl->scrollBegin(gfx::Po
int(0, 0), InputHandlerClient::Gesture)); |
| 4647 m_hostImpl->scrollBy(gfx::Point(), scrollDelta); | 4654 m_hostImpl->scrollBy(gfx::Point(), scrollDeltaInViewportSpace); |
| 4648 m_hostImpl->scrollEnd(); | 4655 m_hostImpl->scrollEnd(); |
| 4649 m_hostImpl->updateRootScrollLayerImplTransform(); | 4656 forcePrepareToDraw(); |
| 4650 | 4657 |
| 4651 gfx::Vector2dF expectedTranslation = gfx::ScaleVector2d(scrollDelta, m_hostI
mpl->deviceScaleFactor()); | 4658 gfx::Vector2dF expectedTranslation = gfx::ScaleVector2d(scrollDelta, m_hostI
mpl->deviceScaleFactor()); |
| 4652 expectedImplTransform.Translate(-expectedTranslation.x(), -expectedTranslati
on.y()); | 4659 expectedImplTransform.Translate(-expectedTranslation.x(), -expectedTranslati
on.y()); |
| 4653 | 4660 |
| 4654 EXPECT_EQ(expectedImplTransform, m_hostImpl->rootLayer()->implTransform()); | 4661 EXPECT_EQ(expectedImplTransform, m_hostImpl->rootLayer()->implTransform()); |
| 4655 // No change expected. | 4662 // No change expected. |
| 4656 EXPECT_EQ(expectedMaxScroll, m_hostImpl->rootLayer()->maxScrollOffset()); | 4663 EXPECT_EQ(expectedMaxScroll, m_hostImpl->rootLayer()->maxScrollOffset()); |
| 4657 // None of the scroll delta should have been used for document scroll. | 4664 // None of the scroll delta should have been used for document scroll. |
| 4658 scoped_ptr<ScrollAndScaleSet> scrollInfo = m_hostImpl->processScrollDeltas()
; | 4665 scoped_ptr<ScrollAndScaleSet> scrollInfo = m_hostImpl->processScrollDeltas()
; |
| 4659 expectNone(*scrollInfo.get(), m_hostImpl->rootLayer()->id()); | 4666 expectNone(*scrollInfo.get(), m_hostImpl->rootLayer()->id()); |
| 4660 | 4667 |
| 4661 // Test scroll in y-direction also. | 4668 // Test scroll in y-direction also. |
| 4662 scrollDelta = gfx::Vector2d(0, 5); | 4669 scrollDelta = gfx::Vector2d(0, 5); |
| 4670 scrollDeltaInViewportSpace = ToFlooredVector2d(gfx::ScaleVector2d(scrollDelt
a, m_hostImpl->totalPageScaleFactor())); |
| 4663 EXPECT_EQ(InputHandlerClient::ScrollStarted, m_hostImpl->scrollBegin(gfx::Po
int(0, 0), InputHandlerClient::Gesture)); | 4671 EXPECT_EQ(InputHandlerClient::ScrollStarted, m_hostImpl->scrollBegin(gfx::Po
int(0, 0), InputHandlerClient::Gesture)); |
| 4664 m_hostImpl->scrollBy(gfx::Point(), scrollDelta); | 4672 m_hostImpl->scrollBy(gfx::Point(), scrollDeltaInViewportSpace); |
| 4665 m_hostImpl->scrollEnd(); | 4673 m_hostImpl->scrollEnd(); |
| 4666 m_hostImpl->updateRootScrollLayerImplTransform(); | 4674 forcePrepareToDraw(); |
| 4667 | 4675 |
| 4668 expectedTranslation = gfx::ScaleVector2d(scrollDelta, m_hostImpl->deviceScal
eFactor()); | 4676 expectedTranslation = gfx::ScaleVector2d(scrollDelta, m_hostImpl->deviceScal
eFactor()); |
| 4669 expectedImplTransform.Translate(-expectedTranslation.x(), -expectedTranslati
on.y()); | 4677 expectedImplTransform.Translate(-expectedTranslation.x(), -expectedTranslati
on.y()); |
| 4670 | 4678 |
| 4671 EXPECT_EQ(expectedImplTransform, m_hostImpl->rootLayer()->implTransform()); | 4679 EXPECT_EQ(expectedImplTransform, m_hostImpl->rootLayer()->implTransform()); |
| 4672 // No change expected. | 4680 // No change expected. |
| 4673 EXPECT_EQ(expectedMaxScroll, m_hostImpl->rootLayer()->maxScrollOffset()); | 4681 EXPECT_EQ(expectedMaxScroll, m_hostImpl->rootLayer()->maxScrollOffset()); |
| 4674 // None of the scroll delta should have been used for document scroll. | 4682 // None of the scroll delta should have been used for document scroll. |
| 4675 scrollInfo = m_hostImpl->processScrollDeltas(); | 4683 scrollInfo = m_hostImpl->processScrollDeltas(); |
| 4676 expectNone(*scrollInfo.get(), m_hostImpl->rootLayer()->id()); | 4684 expectNone(*scrollInfo.get(), m_hostImpl->rootLayer()->id()); |
| (...skipping 25 matching lines...) Expand all Loading... |
| 4702 root->setMaxScrollOffset(gfx::Vector2d(3, 4)); | 4710 root->setMaxScrollOffset(gfx::Vector2d(3, 4)); |
| 4703 m_hostImpl->setRootLayer(root.Pass()); | 4711 m_hostImpl->setRootLayer(root.Pass()); |
| 4704 m_hostImpl->setViewportSize(layoutSurfaceSize, deviceSurfaceSize); | 4712 m_hostImpl->setViewportSize(layoutSurfaceSize, deviceSurfaceSize); |
| 4705 m_hostImpl->setPageScaleFactorAndLimits(1, 1, pageScale); | 4713 m_hostImpl->setPageScaleFactorAndLimits(1, 1, pageScale); |
| 4706 initializeRendererAndDrawFrame(); | 4714 initializeRendererAndDrawFrame(); |
| 4707 | 4715 |
| 4708 // Set new page scale on impl thread by pinching. | 4716 // Set new page scale on impl thread by pinching. |
| 4709 m_hostImpl->pinchGestureBegin(); | 4717 m_hostImpl->pinchGestureBegin(); |
| 4710 m_hostImpl->pinchGestureUpdate(pageScale, gfx::Point()); | 4718 m_hostImpl->pinchGestureUpdate(pageScale, gfx::Point()); |
| 4711 m_hostImpl->pinchGestureEnd(); | 4719 m_hostImpl->pinchGestureEnd(); |
| 4712 m_hostImpl->updateRootScrollLayerImplTransform(); | 4720 forcePrepareToDraw(); |
| 4713 | 4721 |
| 4714 gfx::Transform expectedImplTransform; | 4722 gfx::Transform expectedImplTransform; |
| 4715 expectedImplTransform.Scale(pageScale, pageScale); | 4723 expectedImplTransform.Scale(pageScale, pageScale); |
| 4716 | 4724 |
| 4717 EXPECT_EQ(expectedImplTransform, m_hostImpl->rootLayer()->implTransform()); | 4725 EXPECT_EQ(expectedImplTransform, m_hostImpl->rootLayer()->implTransform()); |
| 4718 | 4726 |
| 4719 // The implTransform ignores the scroll if !pageScalePinchZoomEnabled, | 4727 // The implTransform ignores the scroll if !pageScalePinchZoomEnabled, |
| 4720 // so no point in continuing without it. | 4728 // so no point in continuing without it. |
| 4721 if (!m_hostImpl->settings().pageScalePinchZoomEnabled) | 4729 if (!m_hostImpl->settings().pageScalePinchZoomEnabled) |
| 4722 return; | 4730 return; |
| 4723 | 4731 |
| 4724 // Scroll document only: scrollDelta chosen to move document horizontally | 4732 // Scroll document only: scrollDelta chosen to move document horizontally |
| 4725 // to its max scroll offset. | 4733 // to its max scroll offset. |
| 4726 gfx::Vector2d scrollDelta(3, 0); | 4734 gfx::Vector2d scrollDelta(3, 0); |
| 4735 gfx::Vector2d scrollDeltaInViewportSpace = ToFlooredVector2d(gfx::ScaleVecto
r2d(scrollDelta, m_hostImpl->totalPageScaleFactor())); |
| 4727 gfx::Vector2d expectedScrollDelta(scrollDelta); | 4736 gfx::Vector2d expectedScrollDelta(scrollDelta); |
| 4728 gfx::Vector2d expectedMaxScroll(m_hostImpl->rootLayer()->maxScrollOffset()); | 4737 gfx::Vector2d expectedMaxScroll(m_hostImpl->rootLayer()->maxScrollOffset()); |
| 4729 EXPECT_EQ(InputHandlerClient::ScrollStarted, m_hostImpl->scrollBegin(gfx::Po
int(0, 0), InputHandlerClient::Gesture)); | 4738 EXPECT_EQ(InputHandlerClient::ScrollStarted, m_hostImpl->scrollBegin(gfx::Po
int(0, 0), InputHandlerClient::Gesture)); |
| 4730 m_hostImpl->scrollBy(gfx::Point(), scrollDelta); | 4739 m_hostImpl->scrollBy(gfx::Point(), scrollDeltaInViewportSpace); |
| 4731 m_hostImpl->scrollEnd(); | 4740 m_hostImpl->scrollEnd(); |
| 4732 m_hostImpl->updateRootScrollLayerImplTransform(); | 4741 forcePrepareToDraw(); |
| 4733 | 4742 |
| 4734 // The scroll delta is not scaled because the main thread did not scale. | 4743 // The scroll delta is not scaled because the main thread did not scale. |
| 4735 scoped_ptr<ScrollAndScaleSet> scrollInfo = m_hostImpl->processScrollDeltas()
; | 4744 scoped_ptr<ScrollAndScaleSet> scrollInfo = m_hostImpl->processScrollDeltas()
; |
| 4736 expectContains(*scrollInfo.get(), m_hostImpl->rootLayer()->id(), expectedScr
ollDelta); | 4745 expectContains(*scrollInfo.get(), m_hostImpl->rootLayer()->id(), expectedScr
ollDelta); |
| 4737 EXPECT_EQ(expectedMaxScroll, m_hostImpl->rootLayer()->maxScrollOffset()); | 4746 EXPECT_EQ(expectedMaxScroll, m_hostImpl->rootLayer()->maxScrollOffset()); |
| 4738 | 4747 |
| 4739 // Verify we did not change the implTransform this time. | 4748 // Verify we did not change the implTransform this time. |
| 4740 EXPECT_EQ(expectedImplTransform, m_hostImpl->rootLayer()->implTransform()); | 4749 EXPECT_EQ(expectedImplTransform, m_hostImpl->rootLayer()->implTransform()); |
| 4741 | 4750 |
| 4742 // Further scrolling should move the pinchZoomViewport only. | 4751 // Further scrolling should move the pinchZoomViewport only. |
| 4743 scrollDelta = gfx::Vector2d(2, 0); | 4752 scrollDelta = gfx::Vector2d(2, 0); |
| 4753 scrollDeltaInViewportSpace = ToFlooredVector2d(gfx::ScaleVector2d(scrollDelt
a, m_hostImpl->totalPageScaleFactor())); |
| 4744 EXPECT_EQ(InputHandlerClient::ScrollStarted, m_hostImpl->scrollBegin(gfx::Po
int(0, 0), InputHandlerClient::Gesture)); | 4754 EXPECT_EQ(InputHandlerClient::ScrollStarted, m_hostImpl->scrollBegin(gfx::Po
int(0, 0), InputHandlerClient::Gesture)); |
| 4745 m_hostImpl->scrollBy(gfx::Point(), scrollDelta); | 4755 m_hostImpl->scrollBy(gfx::Point(), scrollDeltaInViewportSpace); |
| 4746 m_hostImpl->scrollEnd(); | 4756 m_hostImpl->scrollEnd(); |
| 4747 m_hostImpl->updateRootScrollLayerImplTransform(); | 4757 forcePrepareToDraw(); |
| 4748 | 4758 |
| 4749 gfx::Vector2d expectedPanDelta(scrollDelta); | 4759 gfx::Vector2d expectedPanDelta(scrollDelta); |
| 4750 gfx::Vector2dF expectedTranslation = gfx::ScaleVector2d(expectedPanDelta, m_
hostImpl->deviceScaleFactor()); | 4760 gfx::Vector2dF expectedTranslation = gfx::ScaleVector2d(expectedPanDelta, m_
hostImpl->deviceScaleFactor()); |
| 4751 expectedImplTransform.Translate(-expectedTranslation.x(), -expectedTranslati
on.y()); | 4761 expectedImplTransform.Translate(-expectedTranslation.x(), -expectedTranslati
on.y()); |
| 4752 | 4762 |
| 4753 EXPECT_EQ(m_hostImpl->rootLayer()->implTransform(), expectedImplTransform); | 4763 EXPECT_EQ(m_hostImpl->rootLayer()->implTransform(), expectedImplTransform); |
| 4754 | 4764 |
| 4755 // The scroll delta on the main thread should not have been affected by this
. | 4765 // The scroll delta on the main thread should not have been affected by this
. |
| 4756 scrollInfo = m_hostImpl->processScrollDeltas(); | 4766 scrollInfo = m_hostImpl->processScrollDeltas(); |
| 4757 expectContains(*scrollInfo.get(), m_hostImpl->rootLayer()->id(), expectedScr
ollDelta); | 4767 expectContains(*scrollInfo.get(), m_hostImpl->rootLayer()->id(), expectedScr
ollDelta); |
| 4758 EXPECT_EQ(expectedMaxScroll, m_hostImpl->rootLayer()->maxScrollOffset()); | 4768 EXPECT_EQ(expectedMaxScroll, m_hostImpl->rootLayer()->maxScrollOffset()); |
| 4759 | 4769 |
| 4760 // Perform same test sequence in y-direction also. | 4770 // Perform same test sequence in y-direction also. |
| 4761 // Document only scroll. | 4771 // Document only scroll. |
| 4762 scrollDelta = gfx::Vector2d(0, 4); | 4772 scrollDelta = gfx::Vector2d(0, 4); |
| 4773 scrollDeltaInViewportSpace = ToFlooredVector2d(gfx::ScaleVector2d(scrollDelt
a, m_hostImpl->totalPageScaleFactor())); |
| 4763 expectedScrollDelta += scrollDelta; | 4774 expectedScrollDelta += scrollDelta; |
| 4764 EXPECT_EQ(InputHandlerClient::ScrollStarted, m_hostImpl->scrollBegin(gfx::Po
int(0, 0), InputHandlerClient::Gesture)); | 4775 EXPECT_EQ(InputHandlerClient::ScrollStarted, m_hostImpl->scrollBegin(gfx::Po
int(0, 0), InputHandlerClient::Gesture)); |
| 4765 m_hostImpl->scrollBy(gfx::Point(), scrollDelta); | 4776 m_hostImpl->scrollBy(gfx::Point(), scrollDeltaInViewportSpace); |
| 4766 m_hostImpl->scrollEnd(); | 4777 m_hostImpl->scrollEnd(); |
| 4767 m_hostImpl->updateRootScrollLayerImplTransform(); | 4778 forcePrepareToDraw(); |
| 4768 | 4779 |
| 4769 // The scroll delta is not scaled because the main thread did not scale. | 4780 // The scroll delta is not scaled because the main thread did not scale. |
| 4770 scrollInfo = m_hostImpl->processScrollDeltas(); | 4781 scrollInfo = m_hostImpl->processScrollDeltas(); |
| 4771 expectContains(*scrollInfo.get(), m_hostImpl->rootLayer()->id(), expectedScr
ollDelta); | 4782 expectContains(*scrollInfo.get(), m_hostImpl->rootLayer()->id(), expectedScr
ollDelta); |
| 4772 EXPECT_EQ(expectedMaxScroll, m_hostImpl->rootLayer()->maxScrollOffset()); | 4783 EXPECT_EQ(expectedMaxScroll, m_hostImpl->rootLayer()->maxScrollOffset()); |
| 4773 | 4784 |
| 4774 // Verify we did not change the implTransform this time. | 4785 // Verify we did not change the implTransform this time. |
| 4775 EXPECT_EQ(expectedImplTransform, m_hostImpl->rootLayer()->implTransform()); | 4786 EXPECT_EQ(expectedImplTransform, m_hostImpl->rootLayer()->implTransform()); |
| 4776 | 4787 |
| 4777 // pinchZoomViewport scroll only. | 4788 // pinchZoomViewport scroll only. |
| 4778 scrollDelta = gfx::Vector2d(0, 1); | 4789 scrollDelta = gfx::Vector2d(0, 1); |
| 4790 scrollDeltaInViewportSpace = ToFlooredVector2d(gfx::ScaleVector2d(scrollDelt
a, m_hostImpl->totalPageScaleFactor())); |
| 4779 EXPECT_EQ(InputHandlerClient::ScrollStarted, m_hostImpl->scrollBegin(gfx::Po
int(0, 0), InputHandlerClient::Gesture)); | 4791 EXPECT_EQ(InputHandlerClient::ScrollStarted, m_hostImpl->scrollBegin(gfx::Po
int(0, 0), InputHandlerClient::Gesture)); |
| 4780 m_hostImpl->scrollBy(gfx::Point(), scrollDelta); | 4792 m_hostImpl->scrollBy(gfx::Point(), scrollDeltaInViewportSpace); |
| 4781 m_hostImpl->scrollEnd(); | 4793 m_hostImpl->scrollEnd(); |
| 4782 m_hostImpl->updateRootScrollLayerImplTransform(); | 4794 forcePrepareToDraw(); |
| 4783 | 4795 |
| 4784 expectedPanDelta = scrollDelta; | 4796 expectedPanDelta = scrollDelta; |
| 4785 expectedTranslation = gfx::ScaleVector2d(expectedPanDelta, m_hostImpl->devic
eScaleFactor()); | 4797 expectedTranslation = gfx::ScaleVector2d(expectedPanDelta, m_hostImpl->devic
eScaleFactor()); |
| 4786 expectedImplTransform.Translate(-expectedTranslation.x(), -expectedTranslati
on.y()); | 4798 expectedImplTransform.Translate(-expectedTranslation.x(), -expectedTranslati
on.y()); |
| 4787 | 4799 |
| 4788 EXPECT_EQ(expectedImplTransform, m_hostImpl->rootLayer()->implTransform()); | 4800 EXPECT_EQ(expectedImplTransform, m_hostImpl->rootLayer()->implTransform()); |
| 4789 | 4801 |
| 4790 // The scroll delta on the main thread should not have been affected by this
. | 4802 // The scroll delta on the main thread should not have been affected by this
. |
| 4791 scrollInfo = m_hostImpl->processScrollDeltas(); | 4803 scrollInfo = m_hostImpl->processScrollDeltas(); |
| 4792 expectContains(*scrollInfo.get(), m_hostImpl->rootLayer()->id(), expectedScr
ollDelta); | 4804 expectContains(*scrollInfo.get(), m_hostImpl->rootLayer()->id(), expectedScr
ollDelta); |
| (...skipping 28 matching lines...) Expand all Loading... |
| 4821 root->setMaxScrollOffset(gfx::Vector2d(3, 4)); | 4833 root->setMaxScrollOffset(gfx::Vector2d(3, 4)); |
| 4822 m_hostImpl->setRootLayer(root.Pass()); | 4834 m_hostImpl->setRootLayer(root.Pass()); |
| 4823 m_hostImpl->setViewportSize(layoutSurfaceSize, deviceSurfaceSize); | 4835 m_hostImpl->setViewportSize(layoutSurfaceSize, deviceSurfaceSize); |
| 4824 m_hostImpl->setPageScaleFactorAndLimits(1, 1, pageScale); | 4836 m_hostImpl->setPageScaleFactorAndLimits(1, 1, pageScale); |
| 4825 initializeRendererAndDrawFrame(); | 4837 initializeRendererAndDrawFrame(); |
| 4826 | 4838 |
| 4827 // Set new page scale on impl thread by pinching. | 4839 // Set new page scale on impl thread by pinching. |
| 4828 m_hostImpl->pinchGestureBegin(); | 4840 m_hostImpl->pinchGestureBegin(); |
| 4829 m_hostImpl->pinchGestureUpdate(pageScale, gfx::Point()); | 4841 m_hostImpl->pinchGestureUpdate(pageScale, gfx::Point()); |
| 4830 m_hostImpl->pinchGestureEnd(); | 4842 m_hostImpl->pinchGestureEnd(); |
| 4831 m_hostImpl->updateRootScrollLayerImplTransform(); | 4843 forcePrepareToDraw(); |
| 4832 | 4844 |
| 4833 gfx::Transform expectedImplTransform; | 4845 gfx::Transform expectedImplTransform; |
| 4834 expectedImplTransform.Scale(pageScale, pageScale); | 4846 expectedImplTransform.Scale(pageScale, pageScale); |
| 4835 | 4847 |
| 4836 EXPECT_EQ(expectedImplTransform, m_hostImpl->rootLayer()->implTransform()); | 4848 EXPECT_EQ(expectedImplTransform, m_hostImpl->rootLayer()->implTransform()); |
| 4837 | 4849 |
| 4838 // The implTransform ignores the scroll if !pageScalePinchZoomEnabled, | 4850 // The implTransform ignores the scroll if !pageScalePinchZoomEnabled, |
| 4839 // so no point in continuing without it. | 4851 // so no point in continuing without it. |
| 4840 if (!m_hostImpl->settings().pageScalePinchZoomEnabled) | 4852 if (!m_hostImpl->settings().pageScalePinchZoomEnabled) |
| 4841 return; | 4853 return; |
| 4842 | 4854 |
| 4843 // Scroll document and pann zoomViewport in one scroll-delta. | 4855 // Scroll document and pann zoomViewport in one scroll-delta. |
| 4844 gfx::Vector2d scrollDelta(5, 0); | 4856 gfx::Vector2d scrollDelta(5, 0); |
| 4857 gfx::Vector2d scrollDeltaInViewportSpace = ToFlooredVector2d(gfx::ScaleVecto
r2d(scrollDelta, m_hostImpl->totalPageScaleFactor())); |
| 4845 gfx::Vector2d expectedScrollDelta(gfx::Vector2d(3, 0)); // This component ge
ts handled by document scroll. | 4858 gfx::Vector2d expectedScrollDelta(gfx::Vector2d(3, 0)); // This component ge
ts handled by document scroll. |
| 4846 gfx::Vector2d expectedMaxScroll(m_hostImpl->rootLayer()->maxScrollOffset()); | 4859 gfx::Vector2d expectedMaxScroll(m_hostImpl->rootLayer()->maxScrollOffset()); |
| 4847 | 4860 |
| 4848 EXPECT_EQ(InputHandlerClient::ScrollStarted, m_hostImpl->scrollBegin(gfx::Po
int(0, 0), InputHandlerClient::Gesture)); | 4861 EXPECT_EQ(InputHandlerClient::ScrollStarted, m_hostImpl->scrollBegin(gfx::Po
int(0, 0), InputHandlerClient::Gesture)); |
| 4849 m_hostImpl->scrollBy(gfx::Point(), scrollDelta); | 4862 m_hostImpl->scrollBy(gfx::Point(), scrollDeltaInViewportSpace); |
| 4850 m_hostImpl->scrollEnd(); | 4863 m_hostImpl->scrollEnd(); |
| 4851 m_hostImpl->updateRootScrollLayerImplTransform(); | 4864 forcePrepareToDraw(); |
| 4852 | 4865 |
| 4853 // The scroll delta is not scaled because the main thread did not scale. | 4866 // The scroll delta is not scaled because the main thread did not scale. |
| 4854 scoped_ptr<ScrollAndScaleSet> scrollInfo = m_hostImpl->processScrollDeltas()
; | 4867 scoped_ptr<ScrollAndScaleSet> scrollInfo = m_hostImpl->processScrollDeltas()
; |
| 4855 expectContains(*scrollInfo.get(), m_hostImpl->rootLayer()->id(), expectedScr
ollDelta); | 4868 expectContains(*scrollInfo.get(), m_hostImpl->rootLayer()->id(), expectedScr
ollDelta); |
| 4856 EXPECT_EQ(expectedMaxScroll, m_hostImpl->rootLayer()->maxScrollOffset()); | 4869 EXPECT_EQ(expectedMaxScroll, m_hostImpl->rootLayer()->maxScrollOffset()); |
| 4857 | 4870 |
| 4858 gfx::Vector2d expectedPanDelta(2, 0); // This component gets handled by zoom
Viewport pan. | 4871 gfx::Vector2d expectedPanDelta(2, 0); // This component gets handled by zoom
Viewport pan. |
| 4859 gfx::Vector2dF expectedTranslation = gfx::ScaleVector2d(expectedPanDelta, m_
hostImpl->deviceScaleFactor()); | 4872 gfx::Vector2dF expectedTranslation = gfx::ScaleVector2d(expectedPanDelta, m_
hostImpl->deviceScaleFactor()); |
| 4860 expectedImplTransform.Translate(-expectedTranslation.x(), -expectedTranslati
on.y()); | 4873 expectedImplTransform.Translate(-expectedTranslation.x(), -expectedTranslati
on.y()); |
| 4861 | 4874 |
| 4862 EXPECT_EQ(m_hostImpl->rootLayer()->implTransform(), expectedImplTransform); | 4875 EXPECT_EQ(m_hostImpl->rootLayer()->implTransform(), expectedImplTransform); |
| 4863 | 4876 |
| 4864 // Perform same test sequence in y-direction also. | 4877 // Perform same test sequence in y-direction also. |
| 4865 scrollDelta = gfx::Vector2d(0, 5); | 4878 scrollDelta = gfx::Vector2d(0, 5); |
| 4879 scrollDeltaInViewportSpace = ToFlooredVector2d(gfx::ScaleVector2d(scrollDelt
a, m_hostImpl->totalPageScaleFactor())); |
| 4866 expectedScrollDelta += gfx::Vector2d(0, 4); // This component gets handled b
y document scroll. | 4880 expectedScrollDelta += gfx::Vector2d(0, 4); // This component gets handled b
y document scroll. |
| 4867 EXPECT_EQ(InputHandlerClient::ScrollStarted, m_hostImpl->scrollBegin(gfx::Po
int(0, 0), InputHandlerClient::Gesture)); | 4881 EXPECT_EQ(InputHandlerClient::ScrollStarted, m_hostImpl->scrollBegin(gfx::Po
int(0, 0), InputHandlerClient::Gesture)); |
| 4868 m_hostImpl->scrollBy(gfx::Point(), scrollDelta); | 4882 m_hostImpl->scrollBy(gfx::Point(), scrollDeltaInViewportSpace); |
| 4869 m_hostImpl->scrollEnd(); | 4883 m_hostImpl->scrollEnd(); |
| 4870 m_hostImpl->updateRootScrollLayerImplTransform(); | 4884 forcePrepareToDraw(); |
| 4871 | 4885 |
| 4872 // The scroll delta is not scaled because the main thread did not scale. | 4886 // The scroll delta is not scaled because the main thread did not scale. |
| 4873 scrollInfo = m_hostImpl->processScrollDeltas(); // This component gets handl
ed by zoomViewport pan. | 4887 scrollInfo = m_hostImpl->processScrollDeltas(); // This component gets handl
ed by zoomViewport pan. |
| 4874 expectContains(*scrollInfo.get(), m_hostImpl->rootLayer()->id(), expectedScr
ollDelta); | 4888 expectContains(*scrollInfo.get(), m_hostImpl->rootLayer()->id(), expectedScr
ollDelta); |
| 4875 EXPECT_EQ(expectedMaxScroll, m_hostImpl->rootLayer()->maxScrollOffset()); | 4889 EXPECT_EQ(expectedMaxScroll, m_hostImpl->rootLayer()->maxScrollOffset()); |
| 4876 | 4890 |
| 4877 expectedPanDelta = gfx::Vector2d(0, 1); | 4891 expectedPanDelta = gfx::Vector2d(0, 1); |
| 4878 expectedTranslation = gfx::ScaleVector2d(expectedPanDelta, m_hostImpl->devic
eScaleFactor()); | 4892 expectedTranslation = gfx::ScaleVector2d(expectedPanDelta, m_hostImpl->devic
eScaleFactor()); |
| 4879 expectedImplTransform.Translate(-expectedTranslation.x(), -expectedTranslati
on.y()); | 4893 expectedImplTransform.Translate(-expectedTranslation.x(), -expectedTranslati
on.y()); |
| 4880 | 4894 |
| (...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4929 gfx::Rect noDamage = gfx::Rect(m_hostImpl->deviceViewportSize()); | 4943 gfx::Rect noDamage = gfx::Rect(m_hostImpl->deviceViewportSize()); |
| 4930 drawFrameAndTestDamage(noDamage); | 4944 drawFrameAndTestDamage(noDamage); |
| 4931 } | 4945 } |
| 4932 | 4946 |
| 4933 INSTANTIATE_TEST_CASE_P(LayerTreeHostImplTests, | 4947 INSTANTIATE_TEST_CASE_P(LayerTreeHostImplTests, |
| 4934 LayerTreeHostImplTest, | 4948 LayerTreeHostImplTest, |
| 4935 ::testing::Values(false, true)); | 4949 ::testing::Values(false, true)); |
| 4936 | 4950 |
| 4937 } // namespace | 4951 } // namespace |
| 4938 } // namespace cc | 4952 } // namespace cc |
| OLD | NEW |