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

Unified Diff: content/renderer/input/main_thread_event_queue_unittest.cc

Issue 2557153002: Fix issues related to a continuous event getting coalesced with a discrete event. (Closed)
Patch Set: Fix nits Created 4 years 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/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 778eec043421ad08be1e1410bab9afc3d1354ef4..84d3e9e9cd2259ce6e42c6ca2f8390248009d60c 100644
--- a/content/renderer/input/main_thread_event_queue_unittest.cc
+++ b/content/renderer/input/main_thread_event_queue_unittest.cc
@@ -85,9 +85,10 @@ class MainThreadEventQueueTest : public testing::TestWithParam<unsigned>,
additional_acked_events_.push_back(touch_event_id);
}
- void HandleEvent(WebInputEvent& event, InputEventAckState ack_result) {
- queue_->HandleEvent(ui::WebInputEventTraits::Clone(event),
- ui::LatencyInfo(), DISPATCH_TYPE_BLOCKING, ack_result);
+ bool HandleEvent(WebInputEvent& event, InputEventAckState ack_result) {
+ return queue_->HandleEvent(ui::WebInputEventTraits::Clone(event),
+ ui::LatencyInfo(), DISPATCH_TYPE_BLOCKING,
+ ack_result);
}
void NeedsMainFrame(int routing_id) override { needs_main_frame_ = true; }
@@ -430,6 +431,66 @@ TEST_P(MainThreadEventQueueTest, RafAlignedTouchInput) {
main_task_runner_->RunUntilIdle();
}
+TEST_P(MainThreadEventQueueTest, RafAlignedTouchInputCoalescedMoves) {
+ // 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[1].PressPoint(10, 10);
+ kEvents[1].MovePoint(0, 20, 20);
+ kEvents[0].dispatchType = WebInputEvent::EventNonBlocking;
+
+ EXPECT_FALSE(main_task_runner_->HasPendingTask());
+ EXPECT_EQ(0u, event_queue().size());
+
+ // Send a continuous input event (ack required) and then
+ // a discrete event. The events should coalesce together
+ // and a post task should be on the queue at the end.
+ 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_);
+ HandleEvent(kEvents[1], INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
+ EXPECT_EQ(1u, event_queue().size());
+ EXPECT_TRUE(main_task_runner_->HasPendingTask());
+ EXPECT_TRUE(needs_main_frame_);
+ RunPendingTasksWithSimulatedRaf();
+ EXPECT_EQ(0u, event_queue().size());
+ EXPECT_EQ(1u, additional_acked_events_.size());
+ additional_acked_events_.clear();
+
+ // Send a non-cancelable ack required event, and then a non-ack
+ // required event they should be coalesced together.
+ 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_);
+ EXPECT_TRUE(HandleEvent(kEvents[1], INPUT_EVENT_ACK_STATE_SET_NON_BLOCKING));
+ EXPECT_EQ(1u, event_queue().size());
+ EXPECT_FALSE(main_task_runner_->HasPendingTask());
+ EXPECT_TRUE(needs_main_frame_);
+ RunPendingTasksWithSimulatedRaf();
+ EXPECT_EQ(0u, event_queue().size());
+ EXPECT_EQ(0u, additional_acked_events_.size());
+
+ // Send a non-ack required event, and then a non-cancelable ack
+ // required event they should be coalesced together.
+ EXPECT_TRUE(HandleEvent(kEvents[1], INPUT_EVENT_ACK_STATE_SET_NON_BLOCKING));
+ EXPECT_EQ(1u, event_queue().size());
+ EXPECT_FALSE(main_task_runner_->HasPendingTask());
+ EXPECT_TRUE(needs_main_frame_);
+ 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_EQ(0u, event_queue().size());
+ EXPECT_EQ(0u, additional_acked_events_.size());
+}
+
TEST_P(MainThreadEventQueueTest, BlockingTouchesDuringFling) {
SyntheticWebTouchEvent kEvents;
kEvents.PressPoint(10, 10);
« no previous file with comments | « content/renderer/input/main_thread_event_queue.cc ('k') | content/renderer/input/render_widget_input_handler.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698