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

Side by Side 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 unified diff | Download patch
OLDNEW
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 67 matching lines...) Expand 10 before | Expand all | Expand 10 after
78 queue_->EventHandled(event->type, INPUT_EVENT_ACK_STATE_NOT_CONSUMED); 78 queue_->EventHandled(event->type, INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
79 } 79 }
80 80
81 void SendInputEventAck(int routing_id, 81 void SendInputEventAck(int routing_id,
82 blink::WebInputEvent::Type type, 82 blink::WebInputEvent::Type type,
83 InputEventAckState ack_result, 83 InputEventAckState ack_result,
84 uint32_t touch_event_id) override { 84 uint32_t touch_event_id) override {
85 additional_acked_events_.push_back(touch_event_id); 85 additional_acked_events_.push_back(touch_event_id);
86 } 86 }
87 87
88 void HandleEvent(WebInputEvent& event, InputEventAckState ack_result) { 88 bool HandleEvent(WebInputEvent& event, InputEventAckState ack_result) {
89 queue_->HandleEvent(ui::WebInputEventTraits::Clone(event), 89 return queue_->HandleEvent(ui::WebInputEventTraits::Clone(event),
90 ui::LatencyInfo(), DISPATCH_TYPE_BLOCKING, ack_result); 90 ui::LatencyInfo(), DISPATCH_TYPE_BLOCKING,
91 ack_result);
91 } 92 }
92 93
93 void NeedsMainFrame(int routing_id) override { needs_main_frame_ = true; } 94 void NeedsMainFrame(int routing_id) override { needs_main_frame_ = true; }
94 95
95 WebInputEventQueue<EventWithDispatchType>& event_queue() { 96 WebInputEventQueue<EventWithDispatchType>& event_queue() {
96 return queue_->shared_state_.events_; 97 return queue_->shared_state_.events_;
97 } 98 }
98 99
99 bool last_touch_start_forced_nonblocking_due_to_fling() { 100 bool last_touch_start_forced_nonblocking_due_to_fling() {
100 return queue_->last_touch_start_forced_nonblocking_due_to_fling_; 101 return queue_->last_touch_start_forced_nonblocking_due_to_fling_;
(...skipping 322 matching lines...) Expand 10 before | Expand all | Expand 10 after
423 424
424 for (SyntheticWebTouchEvent& event : kEvents) 425 for (SyntheticWebTouchEvent& event : kEvents)
425 HandleEvent(event, INPUT_EVENT_ACK_STATE_NOT_CONSUMED); 426 HandleEvent(event, INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
426 427
427 EXPECT_EQ(3u, event_queue().size()); 428 EXPECT_EQ(3u, event_queue().size());
428 EXPECT_TRUE(main_task_runner_->HasPendingTask()); 429 EXPECT_TRUE(main_task_runner_->HasPendingTask());
429 EXPECT_FALSE(needs_main_frame_); 430 EXPECT_FALSE(needs_main_frame_);
430 main_task_runner_->RunUntilIdle(); 431 main_task_runner_->RunUntilIdle();
431 } 432 }
432 433
434 TEST_P(MainThreadEventQueueTest, RafAlignedTouchInputCoalescedMoves) {
435 // Don't run the test when we aren't supporting rAF aligned input.
436 if ((raf_aligned_input_setting_ & kRafAlignedEnabledTouch) == 0)
437 return;
438
439 SyntheticWebTouchEvent kEvents[2];
440 kEvents[0].PressPoint(10, 10);
441 kEvents[0].MovePoint(0, 50, 50);
442 kEvents[1].PressPoint(10, 10);
443 kEvents[1].MovePoint(0, 20, 20);
444 kEvents[0].dispatchType = WebInputEvent::EventNonBlocking;
445
446 EXPECT_FALSE(main_task_runner_->HasPendingTask());
447 EXPECT_EQ(0u, event_queue().size());
448
449 // Send a continuous input event (ack required) and then
450 // a discrete event. The events should coalesce together
451 // and a post task should be on the queue at the end.
452 HandleEvent(kEvents[0], INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
453 EXPECT_EQ(1u, event_queue().size());
454 EXPECT_FALSE(main_task_runner_->HasPendingTask());
455 EXPECT_TRUE(needs_main_frame_);
456 HandleEvent(kEvents[1], INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
457 EXPECT_EQ(1u, event_queue().size());
458 EXPECT_TRUE(main_task_runner_->HasPendingTask());
459 EXPECT_TRUE(needs_main_frame_);
460 RunPendingTasksWithSimulatedRaf();
461 EXPECT_EQ(0u, event_queue().size());
462 EXPECT_EQ(1u, additional_acked_events_.size());
463 additional_acked_events_.clear();
464
465 // Send a non-cancelable ack required event, and then a non-ack
466 // required event they should be coalesced together.
467 EXPECT_TRUE(HandleEvent(kEvents[0], INPUT_EVENT_ACK_STATE_NOT_CONSUMED));
468 EXPECT_EQ(1u, event_queue().size());
469 EXPECT_FALSE(main_task_runner_->HasPendingTask());
470 EXPECT_TRUE(needs_main_frame_);
471 EXPECT_TRUE(HandleEvent(kEvents[1], INPUT_EVENT_ACK_STATE_SET_NON_BLOCKING));
472 EXPECT_EQ(1u, event_queue().size());
473 EXPECT_FALSE(main_task_runner_->HasPendingTask());
474 EXPECT_TRUE(needs_main_frame_);
475 RunPendingTasksWithSimulatedRaf();
476 EXPECT_EQ(0u, event_queue().size());
477 EXPECT_EQ(0u, additional_acked_events_.size());
478
479 // Send a non-ack required event, and then a non-cancelable ack
480 // required event they should be coalesced together.
481 EXPECT_TRUE(HandleEvent(kEvents[1], INPUT_EVENT_ACK_STATE_SET_NON_BLOCKING));
482 EXPECT_EQ(1u, event_queue().size());
483 EXPECT_FALSE(main_task_runner_->HasPendingTask());
484 EXPECT_TRUE(needs_main_frame_);
485 EXPECT_TRUE(HandleEvent(kEvents[0], INPUT_EVENT_ACK_STATE_NOT_CONSUMED));
486 EXPECT_EQ(1u, event_queue().size());
487 EXPECT_FALSE(main_task_runner_->HasPendingTask());
488 EXPECT_TRUE(needs_main_frame_);
489 RunPendingTasksWithSimulatedRaf();
490 EXPECT_EQ(0u, event_queue().size());
491 EXPECT_EQ(0u, additional_acked_events_.size());
492 }
493
433 TEST_P(MainThreadEventQueueTest, BlockingTouchesDuringFling) { 494 TEST_P(MainThreadEventQueueTest, BlockingTouchesDuringFling) {
434 SyntheticWebTouchEvent kEvents; 495 SyntheticWebTouchEvent kEvents;
435 kEvents.PressPoint(10, 10); 496 kEvents.PressPoint(10, 10);
436 kEvents.touchStartOrFirstTouchMove = true; 497 kEvents.touchStartOrFirstTouchMove = true;
437 set_enable_fling_passive_listener_flag(true); 498 set_enable_fling_passive_listener_flag(true);
438 499
439 EXPECT_FALSE(last_touch_start_forced_nonblocking_due_to_fling()); 500 EXPECT_FALSE(last_touch_start_forced_nonblocking_due_to_fling());
440 HandleEvent(kEvents, INPUT_EVENT_ACK_STATE_SET_NON_BLOCKING_DUE_TO_FLING); 501 HandleEvent(kEvents, INPUT_EVENT_ACK_STATE_SET_NON_BLOCKING_DUE_TO_FLING);
441 RunPendingTasksWithSimulatedRaf(); 502 RunPendingTasksWithSimulatedRaf();
442 EXPECT_FALSE(main_task_runner_->HasPendingTask()); 503 EXPECT_FALSE(main_task_runner_->HasPendingTask());
(...skipping 116 matching lines...) Expand 10 before | Expand all | Expand 10 after
559 620
560 // The boolean parameterized test varies whether rAF aligned input 621 // The boolean parameterized test varies whether rAF aligned input
561 // is enabled or not. 622 // is enabled or not.
562 INSTANTIATE_TEST_CASE_P( 623 INSTANTIATE_TEST_CASE_P(
563 MainThreadEventQueueTests, 624 MainThreadEventQueueTests,
564 MainThreadEventQueueTest, 625 MainThreadEventQueueTest,
565 testing::Range(0u, 626 testing::Range(0u,
566 (kRafAlignedEnabledTouch | kRafAlignedEnabledMouse) + 1)); 627 (kRafAlignedEnabledTouch | kRafAlignedEnabledMouse) + 1));
567 628
568 } // namespace content 629 } // namespace content
OLDNEW
« 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