OLD | NEW |
---|---|
1 // Copyright 2016 The Chromium Authors. All rights reserved. | 1 // Copyright 2016 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "content/browser/renderer_host/input/mouse_wheel_event_queue.h" | 5 #include "content/browser/renderer_host/input/mouse_wheel_event_queue.h" |
6 | 6 |
7 #include <stddef.h> | 7 #include <stddef.h> |
8 | 8 |
9 #include <memory> | 9 #include <memory> |
10 #include <utility> | 10 #include <utility> |
(...skipping 12 matching lines...) Expand all Loading... | |
23 using blink::WebInputEvent; | 23 using blink::WebInputEvent; |
24 using blink::WebMouseWheelEvent; | 24 using blink::WebMouseWheelEvent; |
25 | 25 |
26 namespace content { | 26 namespace content { |
27 namespace { | 27 namespace { |
28 | 28 |
29 const float kWheelScrollX = 10; | 29 const float kWheelScrollX = 10; |
30 const float kWheelScrollY = 12; | 30 const float kWheelScrollY = 12; |
31 const float kWheelScrollGlobalX = 50; | 31 const float kWheelScrollGlobalX = 50; |
32 const float kWheelScrollGlobalY = 72; | 32 const float kWheelScrollGlobalY = 72; |
33 const int64_t kScrollEndTimeoutMs = 100; | 33 const bool kTouchpadScrollLating = true; |
tdresser
2016/07/22 15:43:15
Spelling.
sahel
2016/07/25 15:54:53
Done.
| |
34 const int64_t kScrollEndTimeoutMs = kTouchpadScrollLating ? 100 : 0; | |
34 | 35 |
35 base::TimeDelta DefaultScrollEndTimeoutDelay() { | 36 base::TimeDelta DefaultScrollEndTimeoutDelay() { |
36 return base::TimeDelta::FromMilliseconds(kScrollEndTimeoutMs); | 37 return base::TimeDelta::FromMilliseconds(kScrollEndTimeoutMs); |
37 } | 38 } |
38 | 39 |
39 #define EXPECT_GESTURE_SCROLL_BEGIN_IMPL(event) \ | 40 #define EXPECT_GESTURE_SCROLL_BEGIN_IMPL(event) \ |
40 EXPECT_EQ(WebInputEvent::GestureScrollBegin, event->type); \ | 41 EXPECT_EQ(WebInputEvent::GestureScrollBegin, event->type); \ |
41 EXPECT_EQ(kWheelScrollX, event->x); \ | 42 EXPECT_EQ(kWheelScrollX, event->x); \ |
42 EXPECT_EQ(kWheelScrollY, event->y); \ | 43 EXPECT_EQ(kWheelScrollY, event->y); \ |
43 EXPECT_EQ(kWheelScrollGlobalX, event->globalX); \ | 44 EXPECT_EQ(kWheelScrollGlobalX, event->globalX); \ |
(...skipping 95 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
139 EXPECT_EQ(WebInputEvent::MouseWheel, event->type); | 140 EXPECT_EQ(WebInputEvent::MouseWheel, event->type); |
140 | 141 |
141 } // namespace | 142 } // namespace |
142 | 143 |
143 class MouseWheelEventQueueTest : public testing::Test, | 144 class MouseWheelEventQueueTest : public testing::Test, |
144 public MouseWheelEventQueueClient { | 145 public MouseWheelEventQueueClient { |
145 public: | 146 public: |
146 MouseWheelEventQueueTest() | 147 MouseWheelEventQueueTest() |
147 : acked_event_count_(0), | 148 : acked_event_count_(0), |
148 last_acked_event_state_(INPUT_EVENT_ACK_STATE_UNKNOWN) { | 149 last_acked_event_state_(INPUT_EVENT_ACK_STATE_UNKNOWN) { |
149 queue_.reset(new MouseWheelEventQueue(this, kScrollEndTimeoutMs)); | 150 queue_.reset(new MouseWheelEventQueue(this, kTouchpadScrollLating)); |
150 } | 151 } |
151 | 152 |
152 ~MouseWheelEventQueueTest() override {} | 153 ~MouseWheelEventQueueTest() override {} |
153 | 154 |
154 // MouseWheelEventQueueClient | 155 // MouseWheelEventQueueClient |
155 void SendMouseWheelEventImmediately( | 156 void SendMouseWheelEventImmediately( |
156 const MouseWheelEventWithLatencyInfo& event) override { | 157 const MouseWheelEventWithLatencyInfo& event) override { |
157 WebMouseWheelEvent* cloned_event = new WebMouseWheelEvent(); | 158 WebMouseWheelEvent* cloned_event = new WebMouseWheelEvent(); |
158 std::unique_ptr<WebInputEvent> cloned_event_holder(cloned_event); | 159 std::unique_ptr<WebInputEvent> cloned_event_holder(cloned_event); |
159 *cloned_event = event.event; | 160 *cloned_event = event.event; |
(...skipping 148 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
308 const WebGestureEvent::ScrollUnits scroll_units = | 309 const WebGestureEvent::ScrollUnits scroll_units = |
309 high_precision ? WebGestureEvent::PrecisePixels | 310 high_precision ? WebGestureEvent::PrecisePixels |
310 : WebGestureEvent::Pixels; | 311 : WebGestureEvent::Pixels; |
311 | 312 |
312 SendMouseWheelWithPhase(kWheelScrollX, kWheelScrollY, kWheelScrollGlobalX, | 313 SendMouseWheelWithPhase(kWheelScrollX, kWheelScrollY, kWheelScrollGlobalX, |
313 kWheelScrollGlobalY, 1, 1, 0, high_precision, | 314 kWheelScrollGlobalY, 1, 1, 0, high_precision, |
314 WebMouseWheelEvent::PhaseBegan, | 315 WebMouseWheelEvent::PhaseBegan, |
315 WebMouseWheelEvent::PhaseNone); | 316 WebMouseWheelEvent::PhaseNone); |
316 EXPECT_EQ(1U, GetAndResetSentEventCount()); | 317 EXPECT_EQ(1U, GetAndResetSentEventCount()); |
317 SendMouseWheelEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); | 318 SendMouseWheelEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); |
318 EXPECT_EQ(3U, all_sent_events().size()); | 319 EXPECT_EQ(2U, all_sent_events().size()); |
319 EXPECT_GESTURE_SCROLL_BEGIN_WITH_PHASE(sent_gesture_event(0)); | 320 EXPECT_GESTURE_SCROLL_BEGIN_WITH_PHASE(sent_gesture_event(0)); |
320 EXPECT_GESTURE_SCROLL_UPDATE_WITH_PHASE(sent_gesture_event(1)); | 321 EXPECT_GESTURE_SCROLL_UPDATE_WITH_PHASE(sent_gesture_event(1)); |
321 EXPECT_SYNTHETIC_GESTURE_SCROLL_END(sent_gesture_event(2)); | 322 EXPECT_EQ(2U, GetAndResetSentEventCount()); |
322 EXPECT_EQ(3U, GetAndResetSentEventCount()); | |
323 | 323 |
324 SendMouseWheelWithPhase(kWheelScrollX, kWheelScrollY, kWheelScrollGlobalX, | 324 SendMouseWheelWithPhase(kWheelScrollX, kWheelScrollY, kWheelScrollGlobalX, |
325 kWheelScrollGlobalY, 5, 5, 0, high_precision, | 325 kWheelScrollGlobalY, 5, 5, 0, high_precision, |
326 WebMouseWheelEvent::PhaseChanged, | 326 WebMouseWheelEvent::PhaseChanged, |
327 WebMouseWheelEvent::PhaseNone); | 327 WebMouseWheelEvent::PhaseNone); |
328 EXPECT_EQ(1U, GetAndResetSentEventCount()); | 328 EXPECT_EQ(1U, GetAndResetSentEventCount()); |
329 SendMouseWheelEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); | 329 SendMouseWheelEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); |
330 EXPECT_EQ(3U, all_sent_events().size()); | 330 EXPECT_EQ(1U, all_sent_events().size()); |
331 EXPECT_SYNTHETIC_GESTURE_SCROLL_BEGIN(sent_gesture_event(0)); | 331 EXPECT_GESTURE_SCROLL_UPDATE_WITH_PHASE(sent_gesture_event(0)); |
332 EXPECT_GESTURE_SCROLL_UPDATE_WITH_PHASE(sent_gesture_event(1)); | 332 EXPECT_EQ(1U, GetAndResetSentEventCount()); |
333 EXPECT_SYNTHETIC_GESTURE_SCROLL_END(sent_gesture_event(2)); | |
334 EXPECT_EQ(3U, GetAndResetSentEventCount()); | |
335 | 333 |
336 SendMouseWheelWithPhase(kWheelScrollX, kWheelScrollY, kWheelScrollGlobalX, | 334 SendMouseWheelWithPhase(kWheelScrollX, kWheelScrollY, kWheelScrollGlobalX, |
337 kWheelScrollGlobalY, 0, 0, 0, high_precision, | 335 kWheelScrollGlobalY, 0, 0, 0, high_precision, |
338 WebMouseWheelEvent::PhaseEnded, | 336 WebMouseWheelEvent::PhaseEnded, |
339 WebMouseWheelEvent::PhaseNone); | 337 WebMouseWheelEvent::PhaseNone); |
340 EXPECT_EQ(1U, GetAndResetSentEventCount()); | 338 EXPECT_EQ(1U, GetAndResetSentEventCount()); |
341 SendMouseWheelEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); | 339 SendMouseWheelEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); |
342 EXPECT_EQ(2U, all_sent_events().size()); | 340 EXPECT_EQ(1U, all_sent_events().size()); |
343 EXPECT_SYNTHETIC_GESTURE_SCROLL_BEGIN(sent_gesture_event(0)); | 341 EXPECT_GESTURE_SCROLL_END_WITH_PHASE(sent_gesture_event(0)); |
344 EXPECT_GESTURE_SCROLL_END_WITH_PHASE(sent_gesture_event(1)); | 342 EXPECT_EQ(1U, GetAndResetSentEventCount()); |
345 EXPECT_EQ(2U, GetAndResetSentEventCount()); | |
346 | 343 |
347 // Send a double phase end; OSX does it consistently. | 344 // Send a double phase end; OSX does it consistently. |
348 SendMouseWheelWithPhase(kWheelScrollX, kWheelScrollY, kWheelScrollGlobalX, | 345 SendMouseWheelWithPhase(kWheelScrollX, kWheelScrollY, kWheelScrollGlobalX, |
349 kWheelScrollGlobalY, 0, 0, 0, high_precision, | 346 kWheelScrollGlobalY, 0, 0, 0, high_precision, |
350 WebMouseWheelEvent::PhaseEnded, | 347 WebMouseWheelEvent::PhaseEnded, |
351 WebMouseWheelEvent::PhaseNone); | 348 WebMouseWheelEvent::PhaseNone); |
352 EXPECT_EQ(1U, GetAndResetSentEventCount()); | 349 EXPECT_EQ(1U, GetAndResetSentEventCount()); |
353 SendMouseWheelEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); | 350 SendMouseWheelEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); |
354 EXPECT_EQ(0U, all_sent_events().size()); | 351 EXPECT_EQ(0U, all_sent_events().size()); |
355 EXPECT_EQ(0U, GetAndResetSentEventCount()); | 352 EXPECT_EQ(0U, GetAndResetSentEventCount()); |
356 | 353 |
357 SendMouseWheelWithPhase(kWheelScrollX, kWheelScrollY, kWheelScrollGlobalX, | 354 SendMouseWheelWithPhase(kWheelScrollX, kWheelScrollY, kWheelScrollGlobalX, |
358 kWheelScrollGlobalY, 5, 5, 0, high_precision, | 355 kWheelScrollGlobalY, 5, 5, 0, high_precision, |
359 WebMouseWheelEvent::PhaseNone, | 356 WebMouseWheelEvent::PhaseNone, |
360 WebMouseWheelEvent::PhaseBegan); | 357 WebMouseWheelEvent::PhaseBegan); |
361 EXPECT_EQ(1U, GetAndResetSentEventCount()); | 358 EXPECT_EQ(1U, GetAndResetSentEventCount()); |
362 SendMouseWheelEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); | 359 SendMouseWheelEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); |
363 EXPECT_EQ(3U, all_sent_events().size()); | 360 EXPECT_EQ(2U, all_sent_events().size()); |
364 EXPECT_INERTIAL_GESTURE_SCROLL_BEGIN(sent_gesture_event(0)); | 361 EXPECT_INERTIAL_GESTURE_SCROLL_BEGIN(sent_gesture_event(0)); |
365 EXPECT_INERTIAL_GESTURE_SCROLL_UPDATE(sent_gesture_event(1)); | 362 EXPECT_INERTIAL_GESTURE_SCROLL_UPDATE(sent_gesture_event(1)); |
366 EXPECT_SYNTHETIC_INERTIAL_GESTURE_SCROLL_END(sent_gesture_event(2)); | 363 EXPECT_EQ(2U, GetAndResetSentEventCount()); |
367 EXPECT_EQ(3U, GetAndResetSentEventCount()); | |
368 | 364 |
369 SendMouseWheelWithPhase(kWheelScrollX, kWheelScrollY, kWheelScrollGlobalX, | 365 SendMouseWheelWithPhase(kWheelScrollX, kWheelScrollY, kWheelScrollGlobalX, |
370 kWheelScrollGlobalY, 5, 5, 0, high_precision, | 366 kWheelScrollGlobalY, 5, 5, 0, high_precision, |
371 WebMouseWheelEvent::PhaseNone, | 367 WebMouseWheelEvent::PhaseNone, |
372 WebMouseWheelEvent::PhaseChanged); | 368 WebMouseWheelEvent::PhaseChanged); |
373 EXPECT_EQ(1U, GetAndResetSentEventCount()); | 369 EXPECT_EQ(1U, GetAndResetSentEventCount()); |
374 SendMouseWheelEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); | 370 SendMouseWheelEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); |
375 EXPECT_EQ(3U, all_sent_events().size()); | 371 EXPECT_EQ(1U, all_sent_events().size()); |
376 EXPECT_SYNTHETIC_INERTIAL_GESTURE_SCROLL_BEGIN(sent_gesture_event(0)); | 372 EXPECT_INERTIAL_GESTURE_SCROLL_UPDATE(sent_gesture_event(0)); |
377 EXPECT_INERTIAL_GESTURE_SCROLL_UPDATE(sent_gesture_event(1)); | 373 EXPECT_EQ(1U, GetAndResetSentEventCount()); |
378 EXPECT_SYNTHETIC_INERTIAL_GESTURE_SCROLL_END(sent_gesture_event(2)); | |
379 EXPECT_EQ(3U, GetAndResetSentEventCount()); | |
380 | 374 |
381 SendMouseWheelWithPhase(kWheelScrollX, kWheelScrollY, kWheelScrollGlobalX, | 375 SendMouseWheelWithPhase(kWheelScrollX, kWheelScrollY, kWheelScrollGlobalX, |
382 kWheelScrollGlobalY, 0, 0, 0, high_precision, | 376 kWheelScrollGlobalY, 0, 0, 0, high_precision, |
383 WebMouseWheelEvent::PhaseNone, | 377 WebMouseWheelEvent::PhaseNone, |
384 WebMouseWheelEvent::PhaseEnded); | 378 WebMouseWheelEvent::PhaseEnded); |
385 EXPECT_EQ(1U, GetAndResetSentEventCount()); | 379 EXPECT_EQ(1U, GetAndResetSentEventCount()); |
386 SendMouseWheelEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); | 380 SendMouseWheelEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); |
387 EXPECT_EQ(2U, all_sent_events().size()); | 381 EXPECT_EQ(1U, all_sent_events().size()); |
388 EXPECT_SYNTHETIC_INERTIAL_GESTURE_SCROLL_BEGIN(sent_gesture_event(0)); | 382 EXPECT_INERTIAL_GESTURE_SCROLL_END(sent_gesture_event(0)); |
389 EXPECT_INERTIAL_GESTURE_SCROLL_END(sent_gesture_event(1)); | 383 EXPECT_EQ(1U, GetAndResetSentEventCount()); |
390 EXPECT_EQ(2U, GetAndResetSentEventCount()); | |
391 } | 384 } |
392 | 385 |
393 std::unique_ptr<MouseWheelEventQueue> queue_; | 386 std::unique_ptr<MouseWheelEventQueue> queue_; |
394 std::vector<std::unique_ptr<WebInputEvent>> sent_events_; | 387 std::vector<std::unique_ptr<WebInputEvent>> sent_events_; |
395 size_t acked_event_count_; | 388 size_t acked_event_count_; |
396 InputEventAckState last_acked_event_state_; | 389 InputEventAckState last_acked_event_state_; |
397 base::MessageLoopForUI message_loop_; | 390 base::MessageLoopForUI message_loop_; |
398 WebMouseWheelEvent last_acked_event_; | 391 WebMouseWheelEvent last_acked_event_; |
399 }; | 392 }; |
400 | 393 |
(...skipping 151 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
552 EXPECT_EQ(1U, GetAndResetAckedEventCount()); | 545 EXPECT_EQ(1U, GetAndResetAckedEventCount()); |
553 EXPECT_EQ(2U, all_sent_events().size()); | 546 EXPECT_EQ(2U, all_sent_events().size()); |
554 EXPECT_GESTURE_SCROLL_BEGIN(sent_gesture_event(0)); | 547 EXPECT_GESTURE_SCROLL_BEGIN(sent_gesture_event(0)); |
555 EXPECT_GESTURE_SCROLL_UPDATE(sent_gesture_event(1)); | 548 EXPECT_GESTURE_SCROLL_UPDATE(sent_gesture_event(1)); |
556 EXPECT_EQ(0U, sent_gesture_event(1)->data.scrollUpdate.deltaX); | 549 EXPECT_EQ(0U, sent_gesture_event(1)->data.scrollUpdate.deltaX); |
557 EXPECT_EQ(1U, sent_gesture_event(1)->data.scrollUpdate.deltaY); | 550 EXPECT_EQ(1U, sent_gesture_event(1)->data.scrollUpdate.deltaY); |
558 EXPECT_EQ(2U, GetAndResetSentEventCount()); | 551 EXPECT_EQ(2U, GetAndResetSentEventCount()); |
559 } | 552 } |
560 | 553 |
561 } // namespace content | 554 } // namespace content |
OLD | NEW |