Index: ui/events/blink/input_handler_proxy_unittest.cc |
diff --git a/ui/events/blink/input_handler_proxy_unittest.cc b/ui/events/blink/input_handler_proxy_unittest.cc |
index 8a0f7e1c902b6cd7be803ed3ac26761ffb1038e8..2fb0050c28ef7bf3d8140db192657702181b6e47 100644 |
--- a/ui/events/blink/input_handler_proxy_unittest.cc |
+++ b/ui/events/blink/input_handler_proxy_unittest.cc |
@@ -3087,6 +3087,55 @@ TEST_F(InputHandlerProxyEventQueueTest, VSyncAlignedQueueingTime) { |
1); |
} |
+TEST_F(InputHandlerProxyEventQueueTest, VSyncAlignedCoalesceScrollAndPinch) { |
+ // Start scroll in the first frame. |
+ EXPECT_CALL(mock_input_handler_, ScrollBegin(testing::_, testing::_)) |
+ .WillOnce(testing::Return(kImplThreadScrollState)); |
+ EXPECT_CALL(mock_input_handler_, SetNeedsAnimateInput()).Times(1); |
+ |
+ // GSUs and GPUs in one sequence should be coalesced into 1 GSU and 1 GPU. |
+ HandleGestureEvent(WebInputEvent::GestureScrollBegin); |
+ HandleGestureEvent(WebInputEvent::GestureScrollUpdate, -20); |
+ HandleGestureEvent(WebInputEvent::GestureScrollUpdate, -7); |
+ HandleGestureEvent(WebInputEvent::GesturePinchUpdate, 2.0f, 13, 10); |
+ HandleGestureEvent(WebInputEvent::GestureScrollUpdate, -10); |
+ HandleGestureEvent(WebInputEvent::GestureScrollUpdate, -6); |
+ HandleGestureEvent(WebInputEvent::GestureScrollEnd); |
+ HandleGestureEvent(WebInputEvent::GesturePinchBegin); |
+ HandleGestureEvent(WebInputEvent::GesturePinchUpdate, 0.2f, 2, 20); |
+ HandleGestureEvent(WebInputEvent::GesturePinchUpdate, 10.0f, 1, 10); |
+ HandleGestureEvent(WebInputEvent::GestureScrollUpdate, -30); |
+ HandleGestureEvent(WebInputEvent::GesturePinchUpdate, 0.25f, 3, 30); |
+ HandleGestureEvent(WebInputEvent::GestureScrollUpdate, -10); |
+ HandleGestureEvent(WebInputEvent::GesturePinchEnd); |
+ |
+ // Only the first GSB was dispatched. |
+ EXPECT_EQ(7ul, event_queue().size()); |
+ EXPECT_EQ(1ul, event_disposition_recorder_.size()); |
+ |
+ EXPECT_EQ(WebInputEvent::GestureScrollUpdate, |
+ event_queue()[0]->ToWebGestureEvent().type); |
+ EXPECT_EQ(-35, |
+ event_queue()[0]->ToWebGestureEvent().data.scrollUpdate.deltaY); |
+ EXPECT_EQ(WebInputEvent::GesturePinchUpdate, |
+ event_queue()[1]->ToWebGestureEvent().type); |
+ EXPECT_EQ(2.0f, event_queue()[1]->ToWebGestureEvent().data.pinchUpdate.scale); |
+ EXPECT_EQ(WebInputEvent::GestureScrollEnd, |
+ event_queue()[2]->ToWebGestureEvent().type); |
+ EXPECT_EQ(WebInputEvent::GesturePinchBegin, |
+ event_queue()[3]->ToWebGestureEvent().type); |
+ EXPECT_EQ(WebInputEvent::GestureScrollUpdate, |
+ event_queue()[4]->ToWebGestureEvent().type); |
+ EXPECT_EQ(-85, |
+ event_queue()[4]->ToWebGestureEvent().data.scrollUpdate.deltaY); |
+ EXPECT_EQ(WebInputEvent::GesturePinchUpdate, |
+ event_queue()[5]->ToWebGestureEvent().type); |
+ EXPECT_EQ(0.5f, event_queue()[5]->ToWebGestureEvent().data.pinchUpdate.scale); |
+ EXPECT_EQ(WebInputEvent::GesturePinchEnd, |
+ event_queue()[6]->ToWebGestureEvent().type); |
+ testing::Mock::VerifyAndClearExpectations(&mock_input_handler_); |
+} |
+ |
INSTANTIATE_TEST_CASE_P(AnimateInput, |
InputHandlerProxyTest, |
testing::ValuesIn(test_types)); |