Chromium Code Reviews| 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 |