| Index: content/renderer/input/main_thread_event_queue_unittest.cc
|
| diff --git a/content/renderer/input/main_thread_event_queue_unittest.cc b/content/renderer/input/main_thread_event_queue_unittest.cc
|
| index 2cdd7c4215f8cb7cfab0f84a58611e75036c9d62..1fe94ddd0c00acf6c9038170752db78726f559c6 100644
|
| --- a/content/renderer/input/main_thread_event_queue_unittest.cc
|
| +++ b/content/renderer/input/main_thread_event_queue_unittest.cc
|
| @@ -42,6 +42,9 @@ namespace {
|
| const unsigned kRafAlignedEnabledTouch = 1;
|
| const unsigned kRafAlignedEnabledMouse = 1 << 1;
|
|
|
| +// Simulate a 16ms frame signal.
|
| +const base::TimeDelta kFrameInterval = base::TimeDelta::FromMilliseconds(16);
|
| +
|
| const int kTestRoutingID = 13;
|
| const char* kCoalescedCountHistogram =
|
| "Event.MainThreadEventQueue.CoalescedCount";
|
| @@ -114,14 +117,16 @@ class MainThreadEventQueueTest : public testing::TestWithParam<unsigned>,
|
| while (needs_main_frame_ || main_task_runner_->HasPendingTask()) {
|
| main_task_runner_->RunUntilIdle();
|
| needs_main_frame_ = false;
|
| - queue_->DispatchRafAlignedInput();
|
| + frame_time_ += kFrameInterval;
|
| + queue_->DispatchRafAlignedInput(frame_time_);
|
| }
|
| }
|
|
|
| void RunSimulatedRafOnce() {
|
| if (needs_main_frame_) {
|
| needs_main_frame_ = false;
|
| - queue_->DispatchRafAlignedInput();
|
| + frame_time_ += kFrameInterval;
|
| + queue_->DispatchRafAlignedInput(frame_time_);
|
| }
|
| }
|
|
|
| @@ -135,6 +140,7 @@ class MainThreadEventQueueTest : public testing::TestWithParam<unsigned>,
|
| std::vector<uint32_t> additional_acked_events_;
|
| int raf_aligned_input_setting_;
|
| bool needs_main_frame_;
|
| + base::TimeTicks frame_time_;
|
| };
|
|
|
| TEST_P(MainThreadEventQueueTest, NonBlockingWheel) {
|
| @@ -582,6 +588,47 @@ TEST_P(MainThreadEventQueueTest, RafAlignedTouchInputCoalescedMoves) {
|
| EXPECT_EQ(0u, additional_acked_events_.size());
|
| }
|
|
|
| +TEST_P(MainThreadEventQueueTest, RafAlignedTouchInputThrottlingMoves) {
|
| + // Don't run the test when we aren't supporting rAF aligned input.
|
| + if ((raf_aligned_input_setting_ & kRafAlignedEnabledTouch) == 0)
|
| + return;
|
| +
|
| + SyntheticWebTouchEvent kEvents[2];
|
| + kEvents[0].PressPoint(10, 10);
|
| + kEvents[0].MovePoint(0, 50, 50);
|
| + kEvents[0].dispatchType = WebInputEvent::EventNonBlocking;
|
| + kEvents[1].PressPoint(10, 10);
|
| + kEvents[1].MovePoint(0, 20, 20);
|
| + kEvents[1].dispatchType = WebInputEvent::EventNonBlocking;
|
| +
|
| + EXPECT_FALSE(main_task_runner_->HasPendingTask());
|
| + EXPECT_EQ(0u, event_queue().size());
|
| +
|
| + // Send a non-cancelable touch move and then send it another one. The
|
| + // second one shouldn't go out with the next rAF call and should be throttled.
|
| + EXPECT_TRUE(HandleEvent(kEvents[0], INPUT_EVENT_ACK_STATE_NOT_CONSUMED));
|
| + EXPECT_EQ(1u, event_queue().size());
|
| + EXPECT_FALSE(main_task_runner_->HasPendingTask());
|
| + EXPECT_TRUE(needs_main_frame_);
|
| + RunPendingTasksWithSimulatedRaf();
|
| + EXPECT_TRUE(HandleEvent(kEvents[0], INPUT_EVENT_ACK_STATE_NOT_CONSUMED));
|
| + EXPECT_TRUE(HandleEvent(kEvents[1], INPUT_EVENT_ACK_STATE_NOT_CONSUMED));
|
| + EXPECT_EQ(1u, event_queue().size());
|
| + EXPECT_FALSE(main_task_runner_->HasPendingTask());
|
| + EXPECT_TRUE(needs_main_frame_);
|
| +
|
| + // Event should still be in queue after handling a single rAF call.
|
| + RunSimulatedRafOnce();
|
| + EXPECT_EQ(1u, event_queue().size());
|
| + EXPECT_FALSE(main_task_runner_->HasPendingTask());
|
| + EXPECT_TRUE(needs_main_frame_);
|
| +
|
| + // And should eventually flush.
|
| + RunPendingTasksWithSimulatedRaf();
|
| + EXPECT_EQ(0u, event_queue().size());
|
| + EXPECT_EQ(0u, additional_acked_events_.size());
|
| +}
|
| +
|
| TEST_P(MainThreadEventQueueTest, BlockingTouchesDuringFling) {
|
| SyntheticWebTouchEvent kEvents;
|
| kEvents.PressPoint(10, 10);
|
|
|