summaryrefslogtreecommitdiffstats
path: root/cc/layer_tree_host_impl_unittest.cc
diff options
context:
space:
mode:
authoraelias@chromium.org <aelias@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-01-29 23:47:24 +0000
committeraelias@chromium.org <aelias@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-01-29 23:47:24 +0000
commit257abfa88bc09c0cb2c95efdb6777d7d40bfe8f2 (patch)
tree85dbc8e2b027baa6305fa4bae17ce15c8803e245 /cc/layer_tree_host_impl_unittest.cc
parentda2bfa49bd7721d552a8623fe826b438d2411ad8 (diff)
downloadchromium_src-257abfa88bc09c0cb2c95efdb6777d7d40bfe8f2.zip
chromium_src-257abfa88bc09c0cb2c95efdb6777d7d40bfe8f2.tar.gz
chromium_src-257abfa88bc09c0cb2c95efdb6777d7d40bfe8f2.tar.bz2
Delete zoomed_viewport_offset_ and its users.
After http://webk.it/107424 lands, there is no longer any need to conceal the true scroll offset from WebKit. We can use the normal root layer scroll offset for almost everything and avoid needing to apply this extra transformation. NOTRY=true BUG=171183 Review URL: https://chromiumcodereview.appspot.com/12045002 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@179467 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'cc/layer_tree_host_impl_unittest.cc')
-rw-r--r--cc/layer_tree_host_impl_unittest.cc505
1 files changed, 0 insertions, 505 deletions
diff --git a/cc/layer_tree_host_impl_unittest.cc b/cc/layer_tree_host_impl_unittest.cc
index d707b46..7eb9813 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()