author | Kartikaya Gupta <kgupta@mozilla.com> |
Fri, 29 May 2015 11:04:22 -0400 | |
changeset 246297 | cba82f19ba1f3447e8dd38c32e7fd5c1806fce3e |
parent 246296 | ce3eba7648ce1f2f19363fb8416e7d549e0004e1 |
child 246298 | dd59362ef8ea697f2d219ed40a8f31be4ed9a682 |
push id | 60396 |
push user | kgupta@mozilla.com |
push date | Fri, 29 May 2015 15:04:52 +0000 |
treeherder | mozilla-inbound@dd59362ef8ea [default view] [failures only] |
perfherder | [talos] [build metrics] [platform microbench] (compared to previous push) |
reviewers | botond |
bugs | 1166871 |
milestone | 41.0a1 |
first release with | nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
|
last release without | nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
|
gfx/layers/apz/src/AsyncPanZoomController.cpp | file | annotate | diff | comparison | revisions | |
gfx/tests/gtest/TestAsyncPanZoomController.cpp | file | annotate | diff | comparison | revisions |
--- a/gfx/layers/apz/src/AsyncPanZoomController.cpp +++ b/gfx/layers/apz/src/AsyncPanZoomController.cpp @@ -1500,16 +1500,17 @@ AsyncPanZoomController::AllowScrollHando { WheelBlockState* block = mInputQueue->CurrentWheelBlock(); return block->AllowScrollHandoff(); } nsEventStatus AsyncPanZoomController::OnScrollWheel(const ScrollWheelInput& aEvent) { LayoutDevicePoint delta = GetScrollWheelDelta(aEvent); + APZC_LOG("%p got a scroll-wheel with delta %s\n", this, Stringify(delta).c_str()); if ((delta.x || delta.y) && !CanScrollWithWheel(delta) && mInputQueue->GetCurrentWheelTransaction()) { // We can't scroll this apz anymore, so we simply drop the event. if (gfxPrefs::MouseScrollTestingEnabled()) { if (nsRefPtr<GeckoContentController> controller = GetGeckoContentController()) {
--- a/gfx/tests/gtest/TestAsyncPanZoomController.cpp +++ b/gfx/tests/gtest/TestAsyncPanZoomController.cpp @@ -1894,16 +1894,18 @@ protected: CSSRect aScrollableRect = CSSRect(-1, -1, -1, -1)) { FrameMetrics metrics; metrics.SetScrollId(aScrollId); IntRect layerBound = aLayer->GetVisibleRegion().GetBounds(); metrics.SetCompositionBounds(ParentLayerRect(layerBound.x, layerBound.y, layerBound.width, layerBound.height)); metrics.SetScrollableRect(aScrollableRect); metrics.SetScrollOffset(CSSPoint(0, 0)); + metrics.SetPageScrollAmount(LayoutDeviceIntSize(50, 100)); + metrics.SetAllowVerticalScrollWithWheel(); aLayer->SetFrameMetrics(metrics); aLayer->SetClipRect(Some(ViewAs<ParentLayerPixel>(layerBound))); if (!aScrollableRect.IsEqualEdges(CSSRect(-1, -1, -1, -1))) { // The purpose of this is to roughly mimic what layout would do in the // case of a scrollable frame with the event regions and clip. This lets // us exercise the hit-testing code in APZCTreeManager EventRegions er = aLayer->GetEventRegions(); IntRect scrollRect = LayerIntRect::ToUntyped(RoundedToInt(aScrollableRect * metrics.LayersPixelsPerCSSPixel())); @@ -2419,16 +2421,47 @@ TEST_F(APZHitTestingTester, TestRepaintF mti.mType = MultiTouchInput::MULTITOUCH_END; EXPECT_EQ(nsEventStatus_eConsumeDoDefault, manager->ReceiveInputEvent(mti, nullptr, nullptr)); EXPECT_EQ(touchPoint, mti.mTouches[0].mScreenPoint); mcc->RunThroughDelayedTasks(); } +TEST_F(APZHitTestingTester, TestRepaintFlushOnWheelEvents) { + // The purpose of this test is to ensure that wheel events trigger a repaint + // flush as per bug 1166871, and that the wheel event untransform is a no-op. + + CreateSimpleScrollingLayer(); + ScopedLayerTreeRegistration registration(0, root, mcc); + manager->UpdateHitTestingTree(nullptr, root, false, 0, 0); + TestAsyncPanZoomController* apzcroot = ApzcOf(root); + + EXPECT_CALL(*mcc, RequestContentRepaint(_)).Times(AtLeast(3)); + ScreenPoint origin(100, 50); + for (int i = 0; i < 3; i++) { + ScrollWheelInput swi(MillisecondsSinceStartup(mTime), mTime, 0, + ScrollWheelInput::SCROLLMODE_INSTANT, ScrollWheelInput::SCROLLDELTA_PIXEL, + origin, 0, 10); + EXPECT_EQ(nsEventStatus_eConsumeDoDefault, manager->ReceiveInputEvent(swi, nullptr, nullptr)); + EXPECT_EQ(origin, swi.mOrigin); + + ViewTransform viewTransform; + ParentLayerPoint point; + apzcroot->SampleContentTransformForFrame(mTime, &viewTransform, point); + EXPECT_EQ(0, point.x); + EXPECT_EQ((i + 1) * 10, point.y); + EXPECT_EQ(0, viewTransform.mTranslation.x); + EXPECT_EQ((i + 1) * -10, viewTransform.mTranslation.y); + + mTime += TimeDuration::FromMilliseconds(5); + } + mcc->RunThroughDelayedTasks(); +} + TEST_F(APZHitTestingTester, Bug1148350) { CreateBug1148350LayerTree(); ScopedLayerTreeRegistration registration(0, root, mcc); manager->UpdateHitTestingTree(nullptr, root, false, 0, 0); MockFunction<void(std::string checkPointName)> check; { InSequence s;