Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(161)

Unified Diff: content/browser/renderer_host/input/mouse_wheel_event_queue_unittest.cc

Issue 2158423002: Wheel scroll latching enabled behind flag. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: content/browser/renderer_host/input/mouse_wheel_event_queue_unittest.cc
diff --git a/content/browser/renderer_host/input/mouse_wheel_event_queue_unittest.cc b/content/browser/renderer_host/input/mouse_wheel_event_queue_unittest.cc
index 319563c4afd0d5f5ba951c9f437210c0bc381e97..fc6995e8fe35477e02163d8223199eae7c880015 100644
--- a/content/browser/renderer_host/input/mouse_wheel_event_queue_unittest.cc
+++ b/content/browser/renderer_host/input/mouse_wheel_event_queue_unittest.cc
@@ -30,11 +30,6 @@ const float kWheelScrollX = 10;
const float kWheelScrollY = 12;
const float kWheelScrollGlobalX = 50;
const float kWheelScrollGlobalY = 72;
-const int64_t kScrollEndTimeoutMs = 100;
-
-base::TimeDelta DefaultScrollEndTimeoutDelay() {
- return base::TimeDelta::FromMilliseconds(kScrollEndTimeoutMs);
-}
#define EXPECT_GESTURE_SCROLL_BEGIN_IMPL(event) \
EXPECT_EQ(WebInputEvent::GestureScrollBegin, event->type); \
@@ -140,13 +135,15 @@ base::TimeDelta DefaultScrollEndTimeoutDelay() {
} // namespace
-class MouseWheelEventQueueTest : public testing::Test,
+class MouseWheelEventQueueTest : public testing::TestWithParam<bool>,
public MouseWheelEventQueueClient {
public:
MouseWheelEventQueueTest()
: acked_event_count_(0),
last_acked_event_state_(INPUT_EVENT_ACK_STATE_UNKNOWN) {
- queue_.reset(new MouseWheelEventQueue(this, kScrollEndTimeoutMs));
+ scroll_latching_enabled_ = GetParam();
+ queue_.reset(new MouseWheelEventQueue(this, scroll_latching_enabled_));
+ scroll_end_timeout_ms_ = scroll_latching_enabled_ ? 100 : 0;
}
~MouseWheelEventQueueTest() override {}
@@ -176,6 +173,12 @@ class MouseWheelEventQueueTest : public testing::Test,
last_acked_event_state_ = ack_result;
}
+ base::TimeDelta DefaultScrollEndTimeoutDelay() {
+ return base::TimeDelta::FromMilliseconds(scroll_end_timeout_ms_);
+ }
+
+ bool scroll_latching_enabled() { return scroll_latching_enabled_; }
+
protected:
size_t queued_event_count() const { return queue_->queued_size(); }
@@ -396,10 +399,12 @@ class MouseWheelEventQueueTest : public testing::Test,
InputEventAckState last_acked_event_state_;
base::MessageLoopForUI message_loop_;
WebMouseWheelEvent last_acked_event_;
+ int64_t scroll_end_timeout_ms_;
+ bool scroll_latching_enabled_;
};
// Tests that mouse wheel events are queued properly.
-TEST_F(MouseWheelEventQueueTest, Basic) {
+TEST_P(MouseWheelEventQueueTest, Basic) {
SendMouseWheel(kWheelScrollX, kWheelScrollY, kWheelScrollGlobalX,
kWheelScrollGlobalY, 1, 1, 0, false);
EXPECT_EQ(0U, queued_event_count());
@@ -430,24 +435,24 @@ TEST_F(MouseWheelEventQueueTest, Basic) {
EXPECT_EQ(WebInputEvent::MouseWheel, acked_event().type);
}
-TEST_F(MouseWheelEventQueueTest, GestureSending) {
+TEST_P(MouseWheelEventQueueTest, GestureSending) {
GestureSendingTest(false);
}
-TEST_F(MouseWheelEventQueueTest, GestureSendingPrecisePixels) {
+TEST_P(MouseWheelEventQueueTest, GestureSendingPrecisePixels) {
GestureSendingTest(false);
}
-TEST_F(MouseWheelEventQueueTest, GestureSendingWithPhaseInformation) {
+TEST_P(MouseWheelEventQueueTest, GestureSendingWithPhaseInformation) {
PhaseGestureSendingTest(false);
}
-TEST_F(MouseWheelEventQueueTest,
+TEST_P(MouseWheelEventQueueTest,
GestureSendingWithPhaseInformationPrecisePixels) {
PhaseGestureSendingTest(true);
}
-TEST_F(MouseWheelEventQueueTest, GestureSendingInterrupted) {
+TEST_P(MouseWheelEventQueueTest, GestureSendingInterrupted) {
const WebGestureEvent::ScrollUnits scroll_units = WebGestureEvent::Pixels;
SendMouseWheel(kWheelScrollX, kWheelScrollY, kWheelScrollGlobalX,
@@ -509,7 +514,7 @@ TEST_F(MouseWheelEventQueueTest, GestureSendingInterrupted) {
EXPECT_EQ(2U, GetAndResetSentEventCount());
}
-TEST_F(MouseWheelEventQueueTest, GestureRailScrolling) {
+TEST_P(MouseWheelEventQueueTest, GestureRailScrolling) {
const WebGestureEvent::ScrollUnits scroll_units = WebGestureEvent::Pixels;
SendMouseWheel(kWheelScrollX, kWheelScrollY, kWheelScrollGlobalX,
@@ -558,4 +563,69 @@ TEST_F(MouseWheelEventQueueTest, GestureRailScrolling) {
EXPECT_EQ(2U, GetAndResetSentEventCount());
}
+TEST_P(MouseWheelEventQueueTest, WheelScrollLatching) {
+ const WebGestureEvent::ScrollUnits scroll_units = WebGestureEvent::Pixels;
+ SendMouseWheel(kWheelScrollX, kWheelScrollY, kWheelScrollGlobalX,
+ kWheelScrollGlobalY, 1, 1, 0, false,
+ WebInputEvent::RailsModeVertical);
+ EXPECT_EQ(0U, queued_event_count());
+ EXPECT_TRUE(event_in_flight());
+ EXPECT_EQ(1U, GetAndResetSentEventCount());
+
+ // Receive an ACK for the mouse wheel event.
+ SendMouseWheelEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
+ EXPECT_EQ(0U, queued_event_count());
+ EXPECT_FALSE(event_in_flight());
+ EXPECT_EQ(WebInputEvent::MouseWheel, acked_event().type);
+ EXPECT_EQ(1U, GetAndResetAckedEventCount());
+ EXPECT_EQ(2U, all_sent_events().size());
+ EXPECT_GESTURE_SCROLL_BEGIN(sent_gesture_event(0));
+ EXPECT_GESTURE_SCROLL_UPDATE(sent_gesture_event(1));
+ EXPECT_EQ(0U, sent_gesture_event(1)->data.scrollUpdate.deltaX);
+ EXPECT_EQ(1U, sent_gesture_event(1)->data.scrollUpdate.deltaY);
+ EXPECT_EQ(2U, GetAndResetSentEventCount());
+
+ RunTasksAndWait(base::TimeDelta::FromMilliseconds(1));
+ if (!scroll_latching_enabled_) {
+ EXPECT_GESTURE_SCROLL_END(sent_gesture_event(0));
+ EXPECT_EQ(1U, GetAndResetSentEventCount());
+ } else {
+ EXPECT_EQ(0U, GetAndResetSentEventCount());
+ }
+ SendMouseWheel(kWheelScrollX, kWheelScrollY, kWheelScrollGlobalX,
+ kWheelScrollGlobalY, 1, 1, 0, false,
+ WebInputEvent::RailsModeVertical);
+ EXPECT_EQ(0U, queued_event_count());
+ EXPECT_TRUE(event_in_flight());
+ EXPECT_EQ(1U, GetAndResetSentEventCount());
+
+ // Receive an ACK for the mouse wheel event.
+ SendMouseWheelEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
+ EXPECT_EQ(0U, queued_event_count());
+ EXPECT_FALSE(event_in_flight());
+ EXPECT_EQ(WebInputEvent::MouseWheel, acked_event().type);
+ EXPECT_EQ(1U, GetAndResetAckedEventCount());
+
+ int updateEventIndex = -1;
+ if (!scroll_latching_enabled_) {
+ EXPECT_EQ(2U, all_sent_events().size());
+ EXPECT_GESTURE_SCROLL_BEGIN(sent_gesture_event(0));
+ updateEventIndex = 1;
+ } else {
+ // Scroll latching: no new scroll begin expected.
+ EXPECT_EQ(1U, all_sent_events().size());
+ updateEventIndex = 0;
+ }
+ EXPECT_GE(updateEventIndex, 0);
+ EXPECT_GESTURE_SCROLL_UPDATE(sent_gesture_event(updateEventIndex));
+ EXPECT_EQ(0U, sent_gesture_event(updateEventIndex)->data.scrollUpdate.deltaX);
+ EXPECT_EQ(1U, sent_gesture_event(updateEventIndex)->data.scrollUpdate.deltaY);
+ EXPECT_EQ(static_cast<size_t>(updateEventIndex + 1),
+ GetAndResetSentEventCount());
+}
+
+INSTANTIATE_TEST_CASE_P(MouseWheelEventQueueTests,
+ MouseWheelEventQueueTest,
+ testing::Bool());
+
} // namespace content
« no previous file with comments | « content/browser/renderer_host/input/mouse_wheel_event_queue.cc ('k') | content/public/common/content_features.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698