Chromium Code Reviews| 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 6993fa40b41b653c3b20992d1f4224c6e1b8986e..5984a6932362b19d1a878b479e434de554cdd96b 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)); |
|
danakj
2013/01/24 16:11:09
Can you keep this test and compare to 100, 100 her
|
| - } |
| - |
| // 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() |