| 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 <stddef.h> | 5 #include <stddef.h> |
| 6 | 6 |
| 7 #include <new> | 7 #include <new> |
| 8 #include <utility> | 8 #include <utility> |
| 9 #include <vector> | 9 #include <vector> |
| 10 | 10 |
| (...skipping 209 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 220 internal::Coalesce(kEvents[3], &coalesced_event); | 220 internal::Coalesce(kEvents[3], &coalesced_event); |
| 221 coalesced_event.dispatchType = | 221 coalesced_event.dispatchType = |
| 222 WebInputEvent::DispatchType::ListenersNonBlockingPassive; | 222 WebInputEvent::DispatchType::ListenersNonBlockingPassive; |
| 223 EXPECT_EQ(coalesced_event, *last_touch_event); | 223 EXPECT_EQ(coalesced_event, *last_touch_event); |
| 224 histogram_tester.ExpectBucketCount(kCoalescedCountHistogram, 0, 1); | 224 histogram_tester.ExpectBucketCount(kCoalescedCountHistogram, 0, 1); |
| 225 histogram_tester.ExpectBucketCount(kCoalescedCountHistogram, 1, 1); | 225 histogram_tester.ExpectBucketCount(kCoalescedCountHistogram, 1, 1); |
| 226 } | 226 } |
| 227 | 227 |
| 228 TEST_P(MainThreadEventQueueTest, BlockingTouch) { | 228 TEST_P(MainThreadEventQueueTest, BlockingTouch) { |
| 229 base::HistogramTester histogram_tester; | 229 base::HistogramTester histogram_tester; |
| 230 | |
| 231 SyntheticWebTouchEvent kEvents[4]; | 230 SyntheticWebTouchEvent kEvents[4]; |
| 232 kEvents[0].PressPoint(10, 10); | 231 kEvents[0].PressPoint(10, 10); |
| 233 kEvents[1].PressPoint(10, 10); | 232 kEvents[1].PressPoint(10, 10); |
| 234 kEvents[1].MovePoint(0, 20, 20); | 233 kEvents[1].MovePoint(0, 20, 20); |
| 235 kEvents[2].PressPoint(10, 10); | 234 kEvents[2].PressPoint(10, 10); |
| 236 kEvents[2].MovePoint(0, 30, 30); | 235 kEvents[2].MovePoint(0, 30, 30); |
| 237 kEvents[3].PressPoint(10, 10); | 236 kEvents[3].PressPoint(10, 10); |
| 238 kEvents[3].MovePoint(0, 35, 35); | 237 kEvents[3].MovePoint(0, 35, 35); |
| 239 | 238 |
| 240 EXPECT_CALL(renderer_scheduler_, DidHandleInputEventOnMainThread(testing::_)) | 239 EXPECT_CALL(renderer_scheduler_, DidHandleInputEventOnMainThread(testing::_)) |
| 241 .Times(2); | 240 .Times(2); |
| 242 // Ensure that coalescing takes place. | 241 // Ensure that coalescing takes place. |
| 243 HandleEvent(kEvents[0], INPUT_EVENT_ACK_STATE_SET_NON_BLOCKING); | 242 HandleEvent(kEvents[0], INPUT_EVENT_ACK_STATE_SET_NON_BLOCKING); |
| 244 HandleEvent(kEvents[1], INPUT_EVENT_ACK_STATE_NOT_CONSUMED); | 243 HandleEvent(kEvents[1], INPUT_EVENT_ACK_STATE_NOT_CONSUMED); |
| 245 HandleEvent(kEvents[2], INPUT_EVENT_ACK_STATE_NOT_CONSUMED); | 244 HandleEvent(kEvents[2], INPUT_EVENT_ACK_STATE_NOT_CONSUMED); |
| 246 HandleEvent(kEvents[3], INPUT_EVENT_ACK_STATE_NOT_CONSUMED); | 245 HandleEvent(kEvents[3], INPUT_EVENT_ACK_STATE_NOT_CONSUMED); |
| 247 | 246 |
| 248 EXPECT_EQ(2u, event_queue().size()); | 247 EXPECT_EQ(2u, event_queue().size()); |
| 249 EXPECT_TRUE(main_task_runner_->HasPendingTask()); | 248 EXPECT_TRUE(main_task_runner_->HasPendingTask()); |
| 250 RunPendingTasksWithSimulatedRaf(); | 249 RunPendingTasksWithSimulatedRaf(); |
| 251 | 250 |
| 252 EXPECT_EQ(0u, event_queue().size()); | 251 EXPECT_EQ(0u, event_queue().size()); |
| 253 EXPECT_EQ(2u, additional_acked_events_.size()); | 252 EXPECT_EQ(2u, additional_acked_events_.size()); |
| 254 EXPECT_EQ(kEvents[2].uniqueTouchEventId, additional_acked_events_.at(0)); | 253 EXPECT_EQ(kEvents[2].uniqueTouchEventId, additional_acked_events_.at(0)); |
| 255 EXPECT_EQ(kEvents[3].uniqueTouchEventId, additional_acked_events_.at(1)); | 254 EXPECT_EQ(kEvents[3].uniqueTouchEventId, additional_acked_events_.at(1)); |
| 256 | 255 |
| 256 HandleEvent(kEvents[1], INPUT_EVENT_ACK_STATE_SET_NON_BLOCKING); |
| 257 HandleEvent(kEvents[2], INPUT_EVENT_ACK_STATE_SET_NON_BLOCKING); |
| 258 HandleEvent(kEvents[3], INPUT_EVENT_ACK_STATE_SET_NON_BLOCKING); |
| 259 EXPECT_EQ(1u, event_queue().size()); |
| 260 RunPendingTasksWithSimulatedRaf(); |
| 257 histogram_tester.ExpectUniqueSample(kCoalescedCountHistogram, 2, 1); | 261 histogram_tester.ExpectUniqueSample(kCoalescedCountHistogram, 2, 1); |
| 258 } | 262 } |
| 259 | 263 |
| 260 TEST_P(MainThreadEventQueueTest, InterleavedEvents) { | 264 TEST_P(MainThreadEventQueueTest, InterleavedEvents) { |
| 261 WebMouseWheelEvent kWheelEvents[2] = { | 265 WebMouseWheelEvent kWheelEvents[2] = { |
| 262 SyntheticWebMouseWheelEventBuilder::Build(10, 10, 0, 53, 0, false), | 266 SyntheticWebMouseWheelEventBuilder::Build(10, 10, 0, 53, 0, false), |
| 263 SyntheticWebMouseWheelEventBuilder::Build(20, 20, 0, 53, 0, false), | 267 SyntheticWebMouseWheelEventBuilder::Build(20, 20, 0, 53, 0, false), |
| 264 }; | 268 }; |
| 265 SyntheticWebTouchEvent kTouchEvents[2]; | 269 SyntheticWebTouchEvent kTouchEvents[2]; |
| 266 kTouchEvents[0].PressPoint(10, 10); | 270 kTouchEvents[0].PressPoint(10, 10); |
| (...skipping 129 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 396 // shouldn't do anything. | 400 // shouldn't do anything. |
| 397 HandleEvent(kEvents[0], INPUT_EVENT_ACK_STATE_SET_NON_BLOCKING); | 401 HandleEvent(kEvents[0], INPUT_EVENT_ACK_STATE_SET_NON_BLOCKING); |
| 398 HandleEvent(kEvents[1], INPUT_EVENT_ACK_STATE_SET_NON_BLOCKING); | 402 HandleEvent(kEvents[1], INPUT_EVENT_ACK_STATE_SET_NON_BLOCKING); |
| 399 EXPECT_EQ(2u, event_queue().size()); | 403 EXPECT_EQ(2u, event_queue().size()); |
| 400 EXPECT_TRUE(needs_main_frame_); | 404 EXPECT_TRUE(needs_main_frame_); |
| 401 RunSimulatedRafOnce(); | 405 RunSimulatedRafOnce(); |
| 402 EXPECT_FALSE(needs_main_frame_); | 406 EXPECT_FALSE(needs_main_frame_); |
| 403 EXPECT_EQ(2u, event_queue().size()); | 407 EXPECT_EQ(2u, event_queue().size()); |
| 404 RunPendingTasksWithSimulatedRaf(); | 408 RunPendingTasksWithSimulatedRaf(); |
| 405 EXPECT_EQ(0u, event_queue().size()); | 409 EXPECT_EQ(0u, event_queue().size()); |
| 410 |
| 411 // Simulate the touch move being discrete |
| 412 kEvents[0].touchStartOrFirstTouchMove = true; |
| 413 kEvents[1].touchStartOrFirstTouchMove = true; |
| 414 |
| 415 for (SyntheticWebTouchEvent& event : kEvents) |
| 416 HandleEvent(event, INPUT_EVENT_ACK_STATE_NOT_CONSUMED); |
| 417 |
| 418 EXPECT_EQ(3u, event_queue().size()); |
| 419 EXPECT_TRUE(main_task_runner_->HasPendingTask()); |
| 420 EXPECT_FALSE(needs_main_frame_); |
| 421 main_task_runner_->RunUntilIdle(); |
| 406 } | 422 } |
| 407 | 423 |
| 408 TEST_P(MainThreadEventQueueTest, RafAlignedMaxSize) { | 424 TEST_P(MainThreadEventQueueTest, RafAlignedMaxSize) { |
| 409 // Don't run the test when we aren't supporting rAF aligned input. | 425 // Don't run the test when we aren't supporting rAF aligned input. |
| 410 if (!handle_raf_aligned_input_) | 426 if (!handle_raf_aligned_input_) |
| 411 return; | 427 return; |
| 412 | 428 |
| 413 const size_t kNumEventsToQueue = 16; | 429 const size_t kNumEventsToQueue = 16; |
| 414 WebMouseWheelEvent mouseEvent = | 430 WebMouseWheelEvent mouseEvent = |
| 415 SyntheticWebMouseWheelEventBuilder::Build(10, 10, 0, 53, 0, false); | 431 SyntheticWebMouseWheelEventBuilder::Build(10, 10, 0, 53, 0, false); |
| (...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 452 EXPECT_EQ(kEvents[0].type, handled_events_.at(0)->type); | 468 EXPECT_EQ(kEvents[0].type, handled_events_.at(0)->type); |
| 453 EXPECT_TRUE(last_touch_start_forced_nonblocking_due_to_fling()); | 469 EXPECT_TRUE(last_touch_start_forced_nonblocking_due_to_fling()); |
| 454 const WebTouchEvent* last_touch_event = | 470 const WebTouchEvent* last_touch_event = |
| 455 static_cast<const WebTouchEvent*>(handled_events_.at(0).get()); | 471 static_cast<const WebTouchEvent*>(handled_events_.at(0).get()); |
| 456 kEvents[0].dispatchedDuringFling = true; | 472 kEvents[0].dispatchedDuringFling = true; |
| 457 kEvents[0].dispatchType = WebInputEvent::ListenersForcedNonBlockingDueToFling; | 473 kEvents[0].dispatchType = WebInputEvent::ListenersForcedNonBlockingDueToFling; |
| 458 EXPECT_EQ(kEvents[0], *last_touch_event); | 474 EXPECT_EQ(kEvents[0], *last_touch_event); |
| 459 | 475 |
| 460 kEvents[0].MovePoint(0, 30, 30); | 476 kEvents[0].MovePoint(0, 30, 30); |
| 461 HandleEvent(kEvents[0], INPUT_EVENT_ACK_STATE_NOT_CONSUMED); | 477 HandleEvent(kEvents[0], INPUT_EVENT_ACK_STATE_NOT_CONSUMED); |
| 478 EXPECT_EQ(handle_raf_aligned_input_, !main_task_runner_->HasPendingTask()); |
| 462 RunPendingTasksWithSimulatedRaf(); | 479 RunPendingTasksWithSimulatedRaf(); |
| 463 EXPECT_FALSE(main_task_runner_->HasPendingTask()); | 480 EXPECT_FALSE(main_task_runner_->HasPendingTask()); |
| 464 EXPECT_EQ(0u, event_queue().size()); | 481 EXPECT_EQ(0u, event_queue().size()); |
| 465 EXPECT_EQ(2u, handled_events_.size()); | 482 EXPECT_EQ(2u, handled_events_.size()); |
| 466 EXPECT_EQ(kEvents[0].size, handled_events_.at(1)->size); | 483 EXPECT_EQ(kEvents[0].size, handled_events_.at(1)->size); |
| 467 EXPECT_EQ(kEvents[0].type, handled_events_.at(1)->type); | 484 EXPECT_EQ(kEvents[0].type, handled_events_.at(1)->type); |
| 468 EXPECT_TRUE(last_touch_start_forced_nonblocking_due_to_fling()); | 485 EXPECT_TRUE(last_touch_start_forced_nonblocking_due_to_fling()); |
| 469 last_touch_event = | 486 last_touch_event = |
| 470 static_cast<const WebTouchEvent*>(handled_events_.at(1).get()); | 487 static_cast<const WebTouchEvent*>(handled_events_.at(1).get()); |
| 471 kEvents[0].dispatchedDuringFling = true; | 488 kEvents[0].dispatchedDuringFling = true; |
| (...skipping 101 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 573 EXPECT_EQ(kEvents[0], *last_touch_event); | 590 EXPECT_EQ(kEvents[0], *last_touch_event); |
| 574 } | 591 } |
| 575 | 592 |
| 576 // The boolean parameterized test varies whether rAF aligned input | 593 // The boolean parameterized test varies whether rAF aligned input |
| 577 // is enabled or not. | 594 // is enabled or not. |
| 578 INSTANTIATE_TEST_CASE_P(MainThreadEventQueueTests, | 595 INSTANTIATE_TEST_CASE_P(MainThreadEventQueueTests, |
| 579 MainThreadEventQueueTest, | 596 MainThreadEventQueueTest, |
| 580 testing::Bool()); | 597 testing::Bool()); |
| 581 | 598 |
| 582 } // namespace content | 599 } // namespace content |
| OLD | NEW |