Index: cc/layer_tree_host_impl_unittest.cc |
diff --git a/cc/layer_tree_host_impl_unittest.cc b/cc/layer_tree_host_impl_unittest.cc |
index d707b46f90622c4c4f88256542e232c218e1e386..7eb981385a278f1561938345f4810cc9affb9c42 100644 |
--- a/cc/layer_tree_host_impl_unittest.cc |
+++ b/cc/layer_tree_host_impl_unittest.cc |
@@ -572,25 +572,6 @@ TEST_P(LayerTreeHostImplTest, implPinchZoom) |
const float minPageScale = 1, maxPageScale = 4; |
const gfx::Transform identityScaleTransform; |
- // The impl-based pinch zoom should not adjust the max scroll position. |
- { |
- m_hostImpl->setPageScaleFactorAndLimits(1, minPageScale, maxPageScale); |
- scrollLayer->setImplTransform(identityScaleTransform); |
- scrollLayer->setScrollDelta(gfx::Vector2d()); |
- |
- float pageScaleDelta = 2; |
- m_hostImpl->pinchGestureBegin(); |
- m_hostImpl->pinchGestureUpdate(pageScaleDelta, gfx::Point(50, 50)); |
- m_hostImpl->pinchGestureEnd(); |
- EXPECT_TRUE(m_didRequestRedraw); |
- EXPECT_TRUE(m_didRequestCommit); |
- |
- scoped_ptr<ScrollAndScaleSet> scrollInfo = m_hostImpl->processScrollDeltas(); |
- EXPECT_EQ(scrollInfo->pageScaleDelta, pageScaleDelta); |
- |
- EXPECT_EQ(m_hostImpl->rootLayer()->maxScrollOffset(), gfx::Vector2d(50, 50)); |
- } |
- |
// Scrolling after a pinch gesture should always be in local space. The scroll deltas do not |
// have the page scale factor applied. |
{ |
@@ -773,121 +754,6 @@ TEST_P(LayerTreeHostImplTest, pageScaleAnimation) |
} |
} |
-TEST_P(LayerTreeHostImplTest, inhibitScrollAndPageScaleUpdatesWhilePinchZooming) |
-{ |
- setupScrollAndContentsLayers(gfx::Size(100, 100)); |
- m_hostImpl->setViewportSize(gfx::Size(50, 50), gfx::Size(50, 50)); |
- initializeRendererAndDrawFrame(); |
- |
- LayerImpl* scrollLayer = m_hostImpl->rootScrollLayer(); |
- DCHECK(scrollLayer); |
- |
- const float minPageScale = m_hostImpl->settings().pageScalePinchZoomEnabled ? 1 : 0.5; |
- const float maxPageScale = 4; |
- |
- // Pinch zoom in. |
- { |
- // Start a pinch in gesture at the bottom right corner of the viewport. |
- const float zoomInDelta = 2; |
- m_hostImpl->setPageScaleFactorAndLimits(1, minPageScale, maxPageScale); |
- m_hostImpl->pinchGestureBegin(); |
- m_hostImpl->pinchGestureUpdate(zoomInDelta, gfx::Point(50, 50)); |
- |
- // Because we are pinch zooming in, we shouldn't get any scroll or page |
- // scale deltas. |
- scoped_ptr<ScrollAndScaleSet> scrollInfo = m_hostImpl->processScrollDeltas(); |
- EXPECT_EQ(scrollInfo->pageScaleDelta, 1); |
- EXPECT_EQ(scrollInfo->scrolls.size(), 0u); |
- |
- // Once the gesture ends, we get the final scroll and page scale values. |
- m_hostImpl->pinchGestureEnd(); |
- scrollInfo = m_hostImpl->processScrollDeltas(); |
- EXPECT_EQ(scrollInfo->pageScaleDelta, zoomInDelta); |
- if (!m_hostImpl->settings().pageScalePinchZoomEnabled) { |
- expectContains(*scrollInfo, scrollLayer->id(), gfx::Vector2d(25, 25)); |
- } else { |
- EXPECT_TRUE(scrollInfo->scrolls.empty()); |
- } |
- } |
- |
- // Pinch zoom out. |
- { |
- // Start a pinch out gesture at the bottom right corner of the viewport. |
- const float zoomOutDelta = 0.75; |
- m_hostImpl->setPageScaleFactorAndLimits(1, minPageScale, maxPageScale); |
- m_hostImpl->pinchGestureBegin(); |
- m_hostImpl->pinchGestureUpdate(zoomOutDelta, gfx::Point(50, 50)); |
- |
- // Since we are pinch zooming out, we should get an update to zoom all |
- // the way out to the minimum page scale. |
- scoped_ptr<ScrollAndScaleSet> scrollInfo = m_hostImpl->processScrollDeltas(); |
- if (!m_hostImpl->settings().pageScalePinchZoomEnabled) { |
- EXPECT_EQ(scrollInfo->pageScaleDelta, minPageScale); |
- expectContains(*scrollInfo, scrollLayer->id(), gfx::Vector2d(0, 0)); |
- } else { |
- EXPECT_EQ(scrollInfo->pageScaleDelta, 1); |
- EXPECT_TRUE(scrollInfo->scrolls.empty()); |
- } |
- |
- // Once the gesture ends, we get the final scroll and page scale values. |
- m_hostImpl->pinchGestureEnd(); |
- scrollInfo = m_hostImpl->processScrollDeltas(); |
- if (m_hostImpl->settings().pageScalePinchZoomEnabled) { |
- EXPECT_EQ(scrollInfo->pageScaleDelta, minPageScale); |
- expectContains(*scrollInfo, scrollLayer->id(), gfx::Vector2d(25, 25)); |
- } else { |
- EXPECT_EQ(scrollInfo->pageScaleDelta, zoomOutDelta); |
- expectContains(*scrollInfo, scrollLayer->id(), gfx::Vector2d(8, 8)); |
- } |
- } |
-} |
- |
-TEST_P(LayerTreeHostImplTest, inhibitScrollAndPageScaleUpdatesWhileAnimatingPageScale) |
-{ |
- setupScrollAndContentsLayers(gfx::Size(100, 100)); |
- m_hostImpl->setViewportSize(gfx::Size(50, 50), gfx::Size(50, 50)); |
- initializeRendererAndDrawFrame(); |
- |
- LayerImpl* scrollLayer = m_hostImpl->rootScrollLayer(); |
- DCHECK(scrollLayer); |
- |
- const float minPageScale = 0.5; |
- const float maxPageScale = 4; |
- const base::TimeTicks startTime = base::TimeTicks() + base::TimeDelta::FromSeconds(1); |
- const base::TimeDelta duration = base::TimeDelta::FromMilliseconds(100); |
- const base::TimeTicks halfwayThroughAnimation = startTime + duration / 2; |
- const base::TimeTicks endTime = startTime + duration; |
- |
- const float pageScaleDelta = 2; |
- gfx::Vector2d target(25, 25); |
- gfx::Vector2d scaledTarget = target; |
- if (!m_hostImpl->settings().pageScalePinchZoomEnabled) |
- scaledTarget = gfx::Vector2d(12, 12); |
- |
- m_hostImpl->setPageScaleFactorAndLimits(1, minPageScale, maxPageScale); |
- m_hostImpl->startPageScaleAnimation(target, false, pageScaleDelta, startTime, duration); |
- |
- // We should immediately get the final zoom and scroll values for the |
- // animation. |
- m_hostImpl->animate(halfwayThroughAnimation, base::Time()); |
- scoped_ptr<ScrollAndScaleSet> scrollInfo = m_hostImpl->processScrollDeltas(); |
- EXPECT_EQ(scrollInfo->pageScaleDelta, pageScaleDelta); |
- expectContains(*scrollInfo, scrollLayer->id(), scaledTarget); |
- |
- // Scrolling during the animation is ignored. |
- const gfx::Vector2d scrollDelta(0, 10); |
- EXPECT_EQ(m_hostImpl->scrollBegin(gfx::Point(target.x(), target.y()), InputHandlerClient::Wheel), InputHandlerClient::ScrollStarted); |
- m_hostImpl->scrollBy(gfx::Point(), scrollDelta); |
- m_hostImpl->scrollEnd(); |
- |
- // The final page scale and scroll deltas should match what we got |
- // earlier. |
- m_hostImpl->animate(endTime, base::Time()); |
- scrollInfo = m_hostImpl->processScrollDeltas(); |
- EXPECT_EQ(scrollInfo->pageScaleDelta, pageScaleDelta); |
- expectContains(*scrollInfo, scrollLayer->id(), scaledTarget); |
-} |
- |
TEST_P(LayerTreeHostImplTest, compositorFrameMetadata) |
{ |
setupScrollAndContentsLayers(gfx::Size(100, 100)); |
@@ -4009,377 +3875,6 @@ TEST_P(LayerTreeHostImplTest, testRemoveRenderPasses) |
} |
} |
-// Make sure that scrolls that only pan the pinch viewport, and not the document, |
-// still force redraw/commit. |
-void LayerTreeHostImplTest::pinchZoomPanViewportForcesCommitRedraw(const float deviceScaleFactor) |
-{ |
- m_hostImpl->setDeviceScaleFactor(deviceScaleFactor); |
- |
- gfx::Size layoutSurfaceSize(10, 20); |
- gfx::Size deviceSurfaceSize(layoutSurfaceSize.width() * static_cast<int>(deviceScaleFactor), |
- layoutSurfaceSize.height() * static_cast<int>(deviceScaleFactor)); |
- float pageScale = 2; |
- scoped_ptr<LayerImpl> root = createScrollableLayer(1, layoutSurfaceSize); |
- // For this test we want to force scrolls to only pan the pinchZoomViewport |
- // and not the document, we can verify commit/redraw are requested. |
- root->setMaxScrollOffset(gfx::Vector2d()); |
- m_hostImpl->activeTree()->SetRootLayer(root.Pass()); |
- m_hostImpl->activeTree()->DidBecomeActive(); |
- m_hostImpl->setViewportSize(layoutSurfaceSize, deviceSurfaceSize); |
- m_hostImpl->setPageScaleFactorAndLimits(1, 1, pageScale); |
- initializeRendererAndDrawFrame(); |
- |
- // Set new page scale on impl thread by pinching. |
- m_hostImpl->pinchGestureBegin(); |
- m_hostImpl->pinchGestureUpdate(pageScale, gfx::Point()); |
- m_hostImpl->pinchGestureEnd(); |
- drawOneFrame(); |
- |
- gfx::Transform expectedImplTransform; |
- expectedImplTransform.Scale(pageScale, pageScale); |
- |
- // Verify the pinch zoom took place. |
- EXPECT_EQ(expectedImplTransform, m_hostImpl->rootLayer()->implTransform()); |
- |
- // The implTransform ignores the scroll if !pageScalePinchZoomEnabled, |
- // so no point in continuing without it. |
- if (!m_hostImpl->settings().pageScalePinchZoomEnabled) |
- return; |
- |
- m_didRequestCommit = false; |
- m_didRequestRedraw = false; |
- |
- // This scroll will force the viewport to pan horizontally. |
- gfx::Vector2d scrollDelta(5, 0); |
- EXPECT_EQ(InputHandlerClient::ScrollStarted, m_hostImpl->scrollBegin(gfx::Point(0, 0), InputHandlerClient::Gesture)); |
- m_hostImpl->scrollBy(gfx::Point(), scrollDelta); |
- m_hostImpl->scrollEnd(); |
- |
- EXPECT_EQ(true, m_didRequestCommit); |
- EXPECT_EQ(true, m_didRequestRedraw); |
- |
- m_didRequestCommit = false; |
- m_didRequestRedraw = false; |
- |
- // This scroll will force the viewport to pan vertically. |
- scrollDelta = gfx::Vector2d(0, 5); |
- EXPECT_EQ(InputHandlerClient::ScrollStarted, m_hostImpl->scrollBegin(gfx::Point(0, 0), InputHandlerClient::Gesture)); |
- m_hostImpl->scrollBy(gfx::Point(), scrollDelta); |
- m_hostImpl->scrollEnd(); |
- |
- EXPECT_EQ(true, m_didRequestCommit); |
- EXPECT_EQ(true, m_didRequestRedraw); |
-} |
- |
-TEST_P(LayerTreeHostImplTest, pinchZoomPanViewportForcesCommitDeviceScaleFactor1) |
-{ |
- pinchZoomPanViewportForcesCommitRedraw(1); |
-} |
- |
-TEST_P(LayerTreeHostImplTest, pinchZoomPanViewportForcesCommitDeviceScaleFactor2) |
-{ |
- pinchZoomPanViewportForcesCommitRedraw(2); |
-} |
- |
-// The following test confirms correct operation of scroll of the pinchZoomViewport. |
-// The device scale factor directly affects computation of the implTransform, so |
-// we test the two most common use cases. |
-void LayerTreeHostImplTest::pinchZoomPanViewportTest(const float deviceScaleFactor) |
-{ |
- m_hostImpl->setDeviceScaleFactor(deviceScaleFactor); |
- |
- gfx::Size layoutSurfaceSize(10, 20); |
- gfx::Size deviceSurfaceSize(layoutSurfaceSize.width() * static_cast<int>(deviceScaleFactor), |
- layoutSurfaceSize.height() * static_cast<int>(deviceScaleFactor)); |
- float pageScale = 2; |
- scoped_ptr<LayerImpl> root = createScrollableLayer(1, layoutSurfaceSize); |
- // For this test we want to force scrolls to move the pinchZoomViewport so |
- // we can see the scroll component on the implTransform. |
- root->setMaxScrollOffset(gfx::Vector2d()); |
- m_hostImpl->activeTree()->SetRootLayer(root.Pass()); |
- m_hostImpl->activeTree()->DidBecomeActive(); |
- m_hostImpl->setViewportSize(layoutSurfaceSize, deviceSurfaceSize); |
- m_hostImpl->setPageScaleFactorAndLimits(1, 1, pageScale); |
- initializeRendererAndDrawFrame(); |
- |
- // Set new page scale on impl thread by pinching. |
- m_hostImpl->pinchGestureBegin(); |
- m_hostImpl->pinchGestureUpdate(pageScale, gfx::Point()); |
- m_hostImpl->pinchGestureEnd(); |
- drawOneFrame(); |
- |
- gfx::Transform expectedImplTransform; |
- expectedImplTransform.Scale(pageScale, pageScale); |
- |
- EXPECT_EQ(m_hostImpl->rootLayer()->implTransform(), expectedImplTransform); |
- |
- // The implTransform ignores the scroll if !pageScalePinchZoomEnabled, |
- // so no point in continuing without it. |
- if (!m_hostImpl->settings().pageScalePinchZoomEnabled) |
- return; |
- |
- gfx::Vector2d scrollDelta(5, 0); |
- // TODO(wjmaclean): Fix the math here so that the expectedTranslation is |
- // scaled instead of the scroll input. |
- gfx::Vector2d scrollDeltaInZoomedViewport = ToFlooredVector2d(gfx::ScaleVector2d(scrollDelta, m_hostImpl->totalPageScaleFactorForTesting())); |
- gfx::Vector2d expectedMaxScroll(m_hostImpl->rootLayer()->maxScrollOffset()); |
- EXPECT_EQ(InputHandlerClient::ScrollStarted, m_hostImpl->scrollBegin(gfx::Point(0, 0), InputHandlerClient::Gesture)); |
- m_hostImpl->scrollBy(gfx::Point(), scrollDeltaInZoomedViewport); |
- m_hostImpl->scrollEnd(); |
- drawOneFrame(); |
- |
- gfx::Vector2dF expectedTranslation = gfx::ScaleVector2d(scrollDelta, m_hostImpl->deviceScaleFactor()); |
- expectedImplTransform.Translate(-expectedTranslation.x(), -expectedTranslation.y()); |
- |
- EXPECT_EQ(expectedImplTransform, m_hostImpl->rootLayer()->implTransform()); |
- // No change expected. |
- EXPECT_EQ(expectedMaxScroll, m_hostImpl->rootLayer()->maxScrollOffset()); |
- // None of the scroll delta should have been used for document scroll. |
- scoped_ptr<ScrollAndScaleSet> scrollInfo = m_hostImpl->processScrollDeltas(); |
- expectNone(*scrollInfo.get(), m_hostImpl->rootLayer()->id()); |
- |
- // Test scroll in y-direction also. |
- scrollDelta = gfx::Vector2d(0, 5); |
- scrollDeltaInZoomedViewport = ToFlooredVector2d(gfx::ScaleVector2d(scrollDelta, m_hostImpl->totalPageScaleFactorForTesting())); |
- EXPECT_EQ(InputHandlerClient::ScrollStarted, m_hostImpl->scrollBegin(gfx::Point(0, 0), InputHandlerClient::Gesture)); |
- m_hostImpl->scrollBy(gfx::Point(), scrollDeltaInZoomedViewport); |
- m_hostImpl->scrollEnd(); |
- drawOneFrame(); |
- |
- expectedTranslation = gfx::ScaleVector2d(scrollDelta, m_hostImpl->deviceScaleFactor()); |
- expectedImplTransform.Translate(-expectedTranslation.x(), -expectedTranslation.y()); |
- |
- EXPECT_EQ(expectedImplTransform, m_hostImpl->rootLayer()->implTransform()); |
- // No change expected. |
- EXPECT_EQ(expectedMaxScroll, m_hostImpl->rootLayer()->maxScrollOffset()); |
- // None of the scroll delta should have been used for document scroll. |
- scrollInfo = m_hostImpl->processScrollDeltas(); |
- expectNone(*scrollInfo.get(), m_hostImpl->rootLayer()->id()); |
-} |
- |
-TEST_P(LayerTreeHostImplTest, pinchZoomPanViewportWithDeviceScaleFactor1) |
-{ |
- pinchZoomPanViewportTest(1); |
-} |
- |
-TEST_P(LayerTreeHostImplTest, pinchZoomPanViewportWithDeviceScaleFactor2) |
-{ |
- pinchZoomPanViewportTest(2); |
-} |
- |
-// This test verifies the correct behaviour of the document-then-pinchZoomViewport |
-// scrolling model, in both x- and y-directions. |
-void LayerTreeHostImplTest::pinchZoomPanViewportAndScrollTest(const float deviceScaleFactor) |
-{ |
- m_hostImpl->setDeviceScaleFactor(deviceScaleFactor); |
- |
- gfx::Size layoutSurfaceSize(10, 20); |
- gfx::Size deviceSurfaceSize(layoutSurfaceSize.width() * static_cast<int>(deviceScaleFactor), |
- layoutSurfaceSize.height() * static_cast<int>(deviceScaleFactor)); |
- float pageScale = 2; |
- scoped_ptr<LayerImpl> root = createScrollableLayer(1, layoutSurfaceSize); |
- // For this test we want to scrolls to move both the document and the |
- // pinchZoomViewport so we can see some scroll component on the implTransform. |
- root->setMaxScrollOffset(gfx::Vector2d(3, 4)); |
- m_hostImpl->activeTree()->SetRootLayer(root.Pass()); |
- m_hostImpl->activeTree()->DidBecomeActive(); |
- m_hostImpl->setViewportSize(layoutSurfaceSize, deviceSurfaceSize); |
- m_hostImpl->setPageScaleFactorAndLimits(1, 1, pageScale); |
- initializeRendererAndDrawFrame(); |
- |
- // Set new page scale on impl thread by pinching. |
- m_hostImpl->pinchGestureBegin(); |
- m_hostImpl->pinchGestureUpdate(pageScale, gfx::Point()); |
- m_hostImpl->pinchGestureEnd(); |
- drawOneFrame(); |
- |
- gfx::Transform expectedImplTransform; |
- expectedImplTransform.Scale(pageScale, pageScale); |
- |
- EXPECT_EQ(expectedImplTransform, m_hostImpl->rootLayer()->implTransform()); |
- |
- // The implTransform ignores the scroll if !pageScalePinchZoomEnabled, |
- // so no point in continuing without it. |
- if (!m_hostImpl->settings().pageScalePinchZoomEnabled) |
- return; |
- |
- // Scroll document only: scrollDelta chosen to move document horizontally |
- // to its max scroll offset. |
- gfx::Vector2d scrollDelta(3, 0); |
- gfx::Vector2d scrollDeltaInZoomedViewport = ToFlooredVector2d(gfx::ScaleVector2d(scrollDelta, m_hostImpl->totalPageScaleFactorForTesting())); |
- gfx::Vector2d expectedScrollDelta(scrollDelta); |
- gfx::Vector2d expectedMaxScroll(m_hostImpl->rootLayer()->maxScrollOffset()); |
- EXPECT_EQ(InputHandlerClient::ScrollStarted, m_hostImpl->scrollBegin(gfx::Point(0, 0), InputHandlerClient::Gesture)); |
- m_hostImpl->scrollBy(gfx::Point(), scrollDeltaInZoomedViewport); |
- m_hostImpl->scrollEnd(); |
- drawOneFrame(); |
- |
- // The scroll delta is not scaled because the main thread did not scale. |
- scoped_ptr<ScrollAndScaleSet> scrollInfo = m_hostImpl->processScrollDeltas(); |
- expectContains(*scrollInfo.get(), m_hostImpl->rootLayer()->id(), expectedScrollDelta); |
- EXPECT_EQ(expectedMaxScroll, m_hostImpl->rootLayer()->maxScrollOffset()); |
- |
- // Verify we did not change the implTransform this time. |
- EXPECT_EQ(expectedImplTransform, m_hostImpl->rootLayer()->implTransform()); |
- |
- // Further scrolling should move the pinchZoomViewport only. |
- scrollDelta = gfx::Vector2d(2, 0); |
- scrollDeltaInZoomedViewport = ToFlooredVector2d(gfx::ScaleVector2d(scrollDelta, m_hostImpl->totalPageScaleFactorForTesting())); |
- EXPECT_EQ(InputHandlerClient::ScrollStarted, m_hostImpl->scrollBegin(gfx::Point(0, 0), InputHandlerClient::Gesture)); |
- m_hostImpl->scrollBy(gfx::Point(), scrollDeltaInZoomedViewport); |
- m_hostImpl->scrollEnd(); |
- drawOneFrame(); |
- |
- gfx::Vector2d expectedPanDelta(scrollDelta); |
- gfx::Vector2dF expectedTranslation = gfx::ScaleVector2d(expectedPanDelta, m_hostImpl->deviceScaleFactor()); |
- expectedImplTransform.Translate(-expectedTranslation.x(), -expectedTranslation.y()); |
- |
- EXPECT_EQ(m_hostImpl->rootLayer()->implTransform(), expectedImplTransform); |
- |
- // The scroll delta on the main thread should not have been affected by this. |
- scrollInfo = m_hostImpl->processScrollDeltas(); |
- expectContains(*scrollInfo.get(), m_hostImpl->rootLayer()->id(), expectedScrollDelta); |
- EXPECT_EQ(expectedMaxScroll, m_hostImpl->rootLayer()->maxScrollOffset()); |
- |
- // Perform same test sequence in y-direction also. |
- // Document only scroll. |
- scrollDelta = gfx::Vector2d(0, 4); |
- scrollDeltaInZoomedViewport = ToFlooredVector2d(gfx::ScaleVector2d(scrollDelta, m_hostImpl->totalPageScaleFactorForTesting())); |
- expectedScrollDelta += scrollDelta; |
- EXPECT_EQ(InputHandlerClient::ScrollStarted, m_hostImpl->scrollBegin(gfx::Point(0, 0), InputHandlerClient::Gesture)); |
- m_hostImpl->scrollBy(gfx::Point(), scrollDeltaInZoomedViewport); |
- m_hostImpl->scrollEnd(); |
- drawOneFrame(); |
- |
- // The scroll delta is not scaled because the main thread did not scale. |
- scrollInfo = m_hostImpl->processScrollDeltas(); |
- expectContains(*scrollInfo.get(), m_hostImpl->rootLayer()->id(), expectedScrollDelta); |
- EXPECT_EQ(expectedMaxScroll, m_hostImpl->rootLayer()->maxScrollOffset()); |
- |
- // Verify we did not change the implTransform this time. |
- EXPECT_EQ(expectedImplTransform, m_hostImpl->rootLayer()->implTransform()); |
- |
- // pinchZoomViewport scroll only. |
- scrollDelta = gfx::Vector2d(0, 1); |
- scrollDeltaInZoomedViewport = ToFlooredVector2d(gfx::ScaleVector2d(scrollDelta, m_hostImpl->totalPageScaleFactorForTesting())); |
- EXPECT_EQ(InputHandlerClient::ScrollStarted, m_hostImpl->scrollBegin(gfx::Point(0, 0), InputHandlerClient::Gesture)); |
- m_hostImpl->scrollBy(gfx::Point(), scrollDeltaInZoomedViewport); |
- m_hostImpl->scrollEnd(); |
- drawOneFrame(); |
- |
- expectedPanDelta = scrollDelta; |
- expectedTranslation = gfx::ScaleVector2d(expectedPanDelta, m_hostImpl->deviceScaleFactor()); |
- expectedImplTransform.Translate(-expectedTranslation.x(), -expectedTranslation.y()); |
- |
- EXPECT_EQ(expectedImplTransform, m_hostImpl->rootLayer()->implTransform()); |
- |
- // The scroll delta on the main thread should not have been affected by this. |
- scrollInfo = m_hostImpl->processScrollDeltas(); |
- expectContains(*scrollInfo.get(), m_hostImpl->rootLayer()->id(), expectedScrollDelta); |
- EXPECT_EQ(expectedMaxScroll, m_hostImpl->rootLayer()->maxScrollOffset()); |
-} |
- |
-TEST_P(LayerTreeHostImplTest, pinchZoomPanViewportAndScrollWithDeviceScaleFactor) |
-{ |
- pinchZoomPanViewportAndScrollTest(1); |
-} |
- |
-TEST_P(LayerTreeHostImplTest, pinchZoomPanViewportAndScrollWithDeviceScaleFactor2) |
-{ |
- pinchZoomPanViewportAndScrollTest(2); |
-} |
- |
-// This test verifies the correct behaviour of the document-then-pinchZoomViewport |
-// scrolling model, in both x- and y-directions, but this time using a single scroll |
-// that crosses the 'boundary' of what will cause document-only scroll and what will |
-// cause both document-scroll and zoomViewport panning. |
-void LayerTreeHostImplTest::pinchZoomPanViewportAndScrollBoundaryTest(const float deviceScaleFactor) |
-{ |
- m_hostImpl->setDeviceScaleFactor(deviceScaleFactor); |
- |
- gfx::Size layoutSurfaceSize(10, 20); |
- gfx::Size deviceSurfaceSize(layoutSurfaceSize.width() * static_cast<int>(deviceScaleFactor), |
- layoutSurfaceSize.height() * static_cast<int>(deviceScaleFactor)); |
- float pageScale = 2; |
- scoped_ptr<LayerImpl> root = createScrollableLayer(1, layoutSurfaceSize); |
- // For this test we want to scrolls to move both the document and the |
- // pinchZoomViewport so we can see some scroll component on the implTransform. |
- root->setMaxScrollOffset(gfx::Vector2d(3, 4)); |
- m_hostImpl->activeTree()->SetRootLayer(root.Pass()); |
- m_hostImpl->activeTree()->DidBecomeActive(); |
- m_hostImpl->setViewportSize(layoutSurfaceSize, deviceSurfaceSize); |
- m_hostImpl->setPageScaleFactorAndLimits(1, 1, pageScale); |
- initializeRendererAndDrawFrame(); |
- |
- // Set new page scale on impl thread by pinching. |
- m_hostImpl->pinchGestureBegin(); |
- m_hostImpl->pinchGestureUpdate(pageScale, gfx::Point()); |
- m_hostImpl->pinchGestureEnd(); |
- drawOneFrame(); |
- |
- gfx::Transform expectedImplTransform; |
- expectedImplTransform.Scale(pageScale, pageScale); |
- |
- EXPECT_EQ(expectedImplTransform, m_hostImpl->rootLayer()->implTransform()); |
- |
- // The implTransform ignores the scroll if !pageScalePinchZoomEnabled, |
- // so no point in continuing without it. |
- if (!m_hostImpl->settings().pageScalePinchZoomEnabled) |
- return; |
- |
- // Scroll document and pann zoomViewport in one scroll-delta. |
- gfx::Vector2d scrollDelta(5, 0); |
- gfx::Vector2d scrollDeltaInZoomedViewport = ToFlooredVector2d(gfx::ScaleVector2d(scrollDelta, m_hostImpl->totalPageScaleFactorForTesting())); |
- gfx::Vector2d expectedScrollDelta(gfx::Vector2d(3, 0)); // This component gets handled by document scroll. |
- gfx::Vector2d expectedMaxScroll(m_hostImpl->rootLayer()->maxScrollOffset()); |
- |
- EXPECT_EQ(InputHandlerClient::ScrollStarted, m_hostImpl->scrollBegin(gfx::Point(0, 0), InputHandlerClient::Gesture)); |
- m_hostImpl->scrollBy(gfx::Point(), scrollDeltaInZoomedViewport); |
- m_hostImpl->scrollEnd(); |
- drawOneFrame(); |
- |
- // The scroll delta is not scaled because the main thread did not scale. |
- scoped_ptr<ScrollAndScaleSet> scrollInfo = m_hostImpl->processScrollDeltas(); |
- expectContains(*scrollInfo.get(), m_hostImpl->rootLayer()->id(), expectedScrollDelta); |
- EXPECT_EQ(expectedMaxScroll, m_hostImpl->rootLayer()->maxScrollOffset()); |
- |
- gfx::Vector2d expectedPanDelta(2, 0); // This component gets handled by zoomViewport pan. |
- gfx::Vector2dF expectedTranslation = gfx::ScaleVector2d(expectedPanDelta, m_hostImpl->deviceScaleFactor()); |
- expectedImplTransform.Translate(-expectedTranslation.x(), -expectedTranslation.y()); |
- |
- EXPECT_EQ(m_hostImpl->rootLayer()->implTransform(), expectedImplTransform); |
- |
- // Perform same test sequence in y-direction also. |
- scrollDelta = gfx::Vector2d(0, 5); |
- scrollDeltaInZoomedViewport = ToFlooredVector2d(gfx::ScaleVector2d(scrollDelta, m_hostImpl->totalPageScaleFactorForTesting())); |
- expectedScrollDelta += gfx::Vector2d(0, 4); // This component gets handled by document scroll. |
- EXPECT_EQ(InputHandlerClient::ScrollStarted, m_hostImpl->scrollBegin(gfx::Point(0, 0), InputHandlerClient::Gesture)); |
- m_hostImpl->scrollBy(gfx::Point(), scrollDeltaInZoomedViewport); |
- m_hostImpl->scrollEnd(); |
- drawOneFrame(); |
- |
- // The scroll delta is not scaled because the main thread did not scale. |
- scrollInfo = m_hostImpl->processScrollDeltas(); // This component gets handled by zoomViewport pan. |
- expectContains(*scrollInfo.get(), m_hostImpl->rootLayer()->id(), expectedScrollDelta); |
- EXPECT_EQ(expectedMaxScroll, m_hostImpl->rootLayer()->maxScrollOffset()); |
- |
- expectedPanDelta = gfx::Vector2d(0, 1); |
- expectedTranslation = gfx::ScaleVector2d(expectedPanDelta, m_hostImpl->deviceScaleFactor()); |
- expectedImplTransform.Translate(-expectedTranslation.x(), -expectedTranslation.y()); |
- |
- EXPECT_EQ(expectedImplTransform, m_hostImpl->rootLayer()->implTransform()); |
-} |
- |
-TEST_P(LayerTreeHostImplTest, pinchZoomPanViewportAndScrollBoundaryWithDeviceScaleFactor) |
-{ |
- pinchZoomPanViewportAndScrollBoundaryTest(1); |
-} |
- |
-TEST_P(LayerTreeHostImplTest, pinchZoomPanViewportAndScrollBoundaryWithDeviceScaleFactor2) |
-{ |
- pinchZoomPanViewportAndScrollBoundaryTest(2); |
-} |
- |
class LayerTreeHostImplTestWithDelegatingRenderer : public LayerTreeHostImplTest { |
protected: |
virtual scoped_ptr<OutputSurface> createOutputSurface() |