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..deac3835e5c016b2379d6f82b1bfa541c7404d48 100644 |
--- a/ui/events/blink/input_handler_proxy_unittest.cc |
+++ b/ui/events/blink/input_handler_proxy_unittest.cc |
@@ -21,6 +21,7 @@ |
#include "third_party/WebKit/public/platform/WebGestureCurve.h" |
#include "third_party/WebKit/public/platform/WebInputEvent.h" |
#include "third_party/WebKit/public/platform/WebPoint.h" |
+#include "ui/events/blink/blink_event_util.h" |
#include "ui/events/blink/compositor_thread_event_queue.h" |
#include "ui/events/blink/did_overscroll_params.h" |
#include "ui/events/blink/event_with_callback.h" |
@@ -3087,6 +3088,54 @@ 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]->event().type); |
+ EXPECT_EQ( |
+ -35, |
+ ToWebGestureEvent(event_queue()[0]->event()).data.scrollUpdate.deltaY); |
+ EXPECT_EQ(WebInputEvent::GesturePinchUpdate, event_queue()[1]->event().type); |
+ EXPECT_EQ( |
+ 2.0f, |
+ ToWebGestureEvent(event_queue()[1]->event()).data.pinchUpdate.scale); |
+ EXPECT_EQ(WebInputEvent::GestureScrollEnd, event_queue()[2]->event().type); |
+ EXPECT_EQ(WebInputEvent::GesturePinchBegin, event_queue()[3]->event().type); |
+ EXPECT_EQ(WebInputEvent::GestureScrollUpdate, event_queue()[4]->event().type); |
+ EXPECT_EQ( |
+ -85, |
+ ToWebGestureEvent(event_queue()[4]->event()).data.scrollUpdate.deltaY); |
+ EXPECT_EQ(WebInputEvent::GesturePinchUpdate, event_queue()[5]->event().type); |
+ EXPECT_EQ( |
+ 0.5f, |
+ ToWebGestureEvent(event_queue()[5]->event()).data.pinchUpdate.scale); |
+ EXPECT_EQ(WebInputEvent::GesturePinchEnd, event_queue()[6]->event().type); |
+ testing::Mock::VerifyAndClearExpectations(&mock_input_handler_); |
+} |
+ |
INSTANTIATE_TEST_CASE_P(AnimateInput, |
InputHandlerProxyTest, |
testing::ValuesIn(test_types)); |