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

Side by Side Diff: content/renderer/input/main_thread_event_queue_unittest.cc

Issue 2479023003: Remove is_fling flag for fling intervention (Closed)
Patch Set: Make enum explicitly Created 4 years, 1 month 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 78 matching lines...) Expand 10 before | Expand all | Expand 10 after
89 queue_->HandleEvent(ui::WebInputEventTraits::Clone(event), 89 queue_->HandleEvent(ui::WebInputEventTraits::Clone(event),
90 ui::LatencyInfo(), DISPATCH_TYPE_BLOCKING, ack_result); 90 ui::LatencyInfo(), DISPATCH_TYPE_BLOCKING, ack_result);
91 } 91 }
92 92
93 void NeedsMainFrame(int routing_id) override { needs_main_frame_ = true; } 93 void NeedsMainFrame(int routing_id) override { needs_main_frame_ = true; }
94 94
95 WebInputEventQueue<EventWithDispatchType>& event_queue() { 95 WebInputEventQueue<EventWithDispatchType>& event_queue() {
96 return queue_->shared_state_.events_; 96 return queue_->shared_state_.events_;
97 } 97 }
98 98
99 void set_is_flinging(bool is_flinging) {
100 queue_->set_is_flinging(is_flinging);
101 }
102
103 bool last_touch_start_forced_nonblocking_due_to_fling() { 99 bool last_touch_start_forced_nonblocking_due_to_fling() {
104 return queue_->last_touch_start_forced_nonblocking_due_to_fling_; 100 return queue_->last_touch_start_forced_nonblocking_due_to_fling_;
105 } 101 }
106 102
107 void set_enable_fling_passive_listener_flag(bool enable_flag) { 103 void set_enable_fling_passive_listener_flag(bool enable_flag) {
108 queue_->enable_fling_passive_listener_flag_ = enable_flag; 104 queue_->enable_fling_passive_listener_flag_ = enable_flag;
109 } 105 }
110 106
111 void RunPendingTasksWithSimulatedRaf() { 107 void RunPendingTasksWithSimulatedRaf() {
112 while (needs_main_frame_ || main_task_runner_->HasPendingTask()) { 108 while (needs_main_frame_ || main_task_runner_->HasPendingTask()) {
(...skipping 315 matching lines...) Expand 10 before | Expand all | Expand 10 after
428 for (SyntheticWebTouchEvent& event : kEvents) 424 for (SyntheticWebTouchEvent& event : kEvents)
429 HandleEvent(event, INPUT_EVENT_ACK_STATE_NOT_CONSUMED); 425 HandleEvent(event, INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
430 426
431 EXPECT_EQ(3u, event_queue().size()); 427 EXPECT_EQ(3u, event_queue().size());
432 EXPECT_TRUE(main_task_runner_->HasPendingTask()); 428 EXPECT_TRUE(main_task_runner_->HasPendingTask());
433 EXPECT_FALSE(needs_main_frame_); 429 EXPECT_FALSE(needs_main_frame_);
434 main_task_runner_->RunUntilIdle(); 430 main_task_runner_->RunUntilIdle();
435 } 431 }
436 432
437 TEST_P(MainThreadEventQueueTest, BlockingTouchesDuringFling) { 433 TEST_P(MainThreadEventQueueTest, BlockingTouchesDuringFling) {
438 SyntheticWebTouchEvent kEvents[1]; 434 SyntheticWebTouchEvent kEvents;
439 kEvents[0].PressPoint(10, 10); 435 kEvents.PressPoint(10, 10);
440 kEvents[0].touchStartOrFirstTouchMove = true; 436 kEvents.touchStartOrFirstTouchMove = true;
441 set_is_flinging(true);
442 set_enable_fling_passive_listener_flag(true); 437 set_enable_fling_passive_listener_flag(true);
443 438
444 EXPECT_FALSE(last_touch_start_forced_nonblocking_due_to_fling()); 439 EXPECT_FALSE(last_touch_start_forced_nonblocking_due_to_fling());
445 HandleEvent(kEvents[0], INPUT_EVENT_ACK_STATE_NOT_CONSUMED); 440 HandleEvent(kEvents, INPUT_EVENT_ACK_STATE_SET_NON_BLOCKING_DUE_TO_FLING);
446 RunPendingTasksWithSimulatedRaf(); 441 RunPendingTasksWithSimulatedRaf();
447 EXPECT_FALSE(main_task_runner_->HasPendingTask()); 442 EXPECT_FALSE(main_task_runner_->HasPendingTask());
448 EXPECT_EQ(0u, event_queue().size()); 443 EXPECT_EQ(0u, event_queue().size());
449 EXPECT_EQ(1u, handled_events_.size()); 444 EXPECT_EQ(1u, handled_events_.size());
450 EXPECT_EQ(kEvents[0].size, handled_events_.at(0)->size); 445 EXPECT_EQ(kEvents.size, handled_events_.at(0)->size);
451 EXPECT_EQ(kEvents[0].type, handled_events_.at(0)->type); 446 EXPECT_EQ(kEvents.type, handled_events_.at(0)->type);
452 EXPECT_TRUE(last_touch_start_forced_nonblocking_due_to_fling()); 447 EXPECT_TRUE(last_touch_start_forced_nonblocking_due_to_fling());
453 const WebTouchEvent* last_touch_event = 448 const WebTouchEvent* last_touch_event =
454 static_cast<const WebTouchEvent*>(handled_events_.at(0).get()); 449 static_cast<const WebTouchEvent*>(handled_events_.at(0).get());
455 kEvents[0].dispatchedDuringFling = true; 450 kEvents.dispatchType = WebInputEvent::ListenersForcedNonBlockingDueToFling;
456 kEvents[0].dispatchType = WebInputEvent::ListenersForcedNonBlockingDueToFling; 451 EXPECT_EQ(kEvents, *last_touch_event);
457 EXPECT_EQ(kEvents[0], *last_touch_event);
458 452
459 kEvents[0].MovePoint(0, 30, 30); 453 kEvents.MovePoint(0, 30, 30);
460 EXPECT_FALSE(main_task_runner_->HasPendingTask()); 454 EXPECT_FALSE(main_task_runner_->HasPendingTask());
461 HandleEvent(kEvents[0], INPUT_EVENT_ACK_STATE_NOT_CONSUMED); 455 HandleEvent(kEvents, INPUT_EVENT_ACK_STATE_SET_NON_BLOCKING_DUE_TO_FLING);
462 EXPECT_EQ((raf_aligned_input_setting_ & kRafAlignedEnabledTouch) == 0, 456 EXPECT_EQ((raf_aligned_input_setting_ & kRafAlignedEnabledTouch) == 0,
463 main_task_runner_->HasPendingTask()); 457 main_task_runner_->HasPendingTask());
464 RunPendingTasksWithSimulatedRaf(); 458 RunPendingTasksWithSimulatedRaf();
465 EXPECT_FALSE(main_task_runner_->HasPendingTask()); 459 EXPECT_FALSE(main_task_runner_->HasPendingTask());
466 EXPECT_EQ(0u, event_queue().size()); 460 EXPECT_EQ(0u, event_queue().size());
467 EXPECT_EQ(2u, handled_events_.size()); 461 EXPECT_EQ(2u, handled_events_.size());
468 EXPECT_EQ(kEvents[0].size, handled_events_.at(1)->size); 462 EXPECT_EQ(kEvents.size, handled_events_.at(1)->size);
469 EXPECT_EQ(kEvents[0].type, handled_events_.at(1)->type); 463 EXPECT_EQ(kEvents.type, handled_events_.at(1)->type);
470 EXPECT_TRUE(last_touch_start_forced_nonblocking_due_to_fling()); 464 EXPECT_TRUE(last_touch_start_forced_nonblocking_due_to_fling());
471 last_touch_event = 465 last_touch_event =
472 static_cast<const WebTouchEvent*>(handled_events_.at(1).get()); 466 static_cast<const WebTouchEvent*>(handled_events_.at(1).get());
473 kEvents[0].dispatchedDuringFling = true; 467 kEvents.dispatchType = WebInputEvent::ListenersForcedNonBlockingDueToFling;
474 kEvents[0].dispatchType = WebInputEvent::ListenersForcedNonBlockingDueToFling; 468 EXPECT_EQ(kEvents, *last_touch_event);
475 EXPECT_EQ(kEvents[0], *last_touch_event);
476 469
477 kEvents[0].MovePoint(0, 50, 50); 470 kEvents.MovePoint(0, 50, 50);
478 kEvents[0].touchStartOrFirstTouchMove = false; 471 kEvents.touchStartOrFirstTouchMove = false;
479 HandleEvent(kEvents[0], INPUT_EVENT_ACK_STATE_NOT_CONSUMED); 472 HandleEvent(kEvents, INPUT_EVENT_ACK_STATE_SET_NON_BLOCKING_DUE_TO_FLING);
480 RunPendingTasksWithSimulatedRaf(); 473 RunPendingTasksWithSimulatedRaf();
481 EXPECT_FALSE(main_task_runner_->HasPendingTask()); 474 EXPECT_FALSE(main_task_runner_->HasPendingTask());
482 EXPECT_EQ(0u, event_queue().size()); 475 EXPECT_EQ(0u, event_queue().size());
483 EXPECT_EQ(3u, handled_events_.size()); 476 EXPECT_EQ(3u, handled_events_.size());
484 EXPECT_EQ(kEvents[0].size, handled_events_.at(2)->size); 477 EXPECT_EQ(kEvents.size, handled_events_.at(2)->size);
485 EXPECT_EQ(kEvents[0].type, handled_events_.at(2)->type); 478 EXPECT_EQ(kEvents.type, handled_events_.at(2)->type);
486 EXPECT_TRUE(kEvents[0].dispatchedDuringFling); 479 EXPECT_EQ(kEvents.dispatchType, WebInputEvent::Blocking);
487 EXPECT_EQ(kEvents[0].dispatchType, WebInputEvent::Blocking);
488 last_touch_event = 480 last_touch_event =
489 static_cast<const WebTouchEvent*>(handled_events_.at(2).get()); 481 static_cast<const WebTouchEvent*>(handled_events_.at(2).get());
490 EXPECT_EQ(kEvents[0], *last_touch_event); 482 EXPECT_EQ(kEvents, *last_touch_event);
491 483
492 kEvents[0].ReleasePoint(0); 484 kEvents.ReleasePoint(0);
493 HandleEvent(kEvents[0], INPUT_EVENT_ACK_STATE_NOT_CONSUMED); 485 HandleEvent(kEvents, INPUT_EVENT_ACK_STATE_SET_NON_BLOCKING_DUE_TO_FLING);
494 RunPendingTasksWithSimulatedRaf(); 486 RunPendingTasksWithSimulatedRaf();
495 EXPECT_FALSE(main_task_runner_->HasPendingTask()); 487 EXPECT_FALSE(main_task_runner_->HasPendingTask());
496 EXPECT_EQ(0u, event_queue().size()); 488 EXPECT_EQ(0u, event_queue().size());
497 EXPECT_EQ(4u, handled_events_.size()); 489 EXPECT_EQ(4u, handled_events_.size());
498 EXPECT_EQ(kEvents[0].size, handled_events_.at(3)->size); 490 EXPECT_EQ(kEvents.size, handled_events_.at(3)->size);
499 EXPECT_EQ(kEvents[0].type, handled_events_.at(3)->type); 491 EXPECT_EQ(kEvents.type, handled_events_.at(3)->type);
500 EXPECT_TRUE(kEvents[0].dispatchedDuringFling); 492 EXPECT_EQ(kEvents.dispatchType, WebInputEvent::Blocking);
501 EXPECT_EQ(kEvents[0].dispatchType, WebInputEvent::Blocking);
502 last_touch_event = 493 last_touch_event =
503 static_cast<const WebTouchEvent*>(handled_events_.at(3).get()); 494 static_cast<const WebTouchEvent*>(handled_events_.at(3).get());
504 EXPECT_EQ(kEvents[0], *last_touch_event); 495 EXPECT_EQ(kEvents, *last_touch_event);
505 } 496 }
506 497
507 TEST_P(MainThreadEventQueueTest, BlockingTouchesOutsideFling) { 498 TEST_P(MainThreadEventQueueTest, BlockingTouchesOutsideFling) {
508 SyntheticWebTouchEvent kEvents[1]; 499 SyntheticWebTouchEvent kEvents;
509 kEvents[0].PressPoint(10, 10); 500 kEvents.PressPoint(10, 10);
510 kEvents[0].touchStartOrFirstTouchMove = true; 501 kEvents.touchStartOrFirstTouchMove = true;
511 set_is_flinging(false);
512 set_enable_fling_passive_listener_flag(false); 502 set_enable_fling_passive_listener_flag(false);
513 503
514 HandleEvent(kEvents[0], INPUT_EVENT_ACK_STATE_NOT_CONSUMED); 504 HandleEvent(kEvents, INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
515 RunPendingTasksWithSimulatedRaf(); 505 RunPendingTasksWithSimulatedRaf();
516 EXPECT_FALSE(main_task_runner_->HasPendingTask()); 506 EXPECT_FALSE(main_task_runner_->HasPendingTask());
517 EXPECT_EQ(0u, event_queue().size()); 507 EXPECT_EQ(0u, event_queue().size());
518 EXPECT_EQ(1u, handled_events_.size()); 508 EXPECT_EQ(1u, handled_events_.size());
519 EXPECT_EQ(kEvents[0].size, handled_events_.at(0)->size); 509 EXPECT_EQ(kEvents.size, handled_events_.at(0)->size);
520 EXPECT_EQ(kEvents[0].type, handled_events_.at(0)->type); 510 EXPECT_EQ(kEvents.type, handled_events_.at(0)->type);
521 EXPECT_FALSE(kEvents[0].dispatchedDuringFling); 511 EXPECT_EQ(kEvents.dispatchType, WebInputEvent::Blocking);
522 EXPECT_EQ(kEvents[0].dispatchType, WebInputEvent::Blocking);
523 EXPECT_FALSE(last_touch_start_forced_nonblocking_due_to_fling()); 512 EXPECT_FALSE(last_touch_start_forced_nonblocking_due_to_fling());
524 const WebTouchEvent* last_touch_event = 513 const WebTouchEvent* last_touch_event =
525 static_cast<const WebTouchEvent*>(handled_events_.at(0).get()); 514 static_cast<const WebTouchEvent*>(handled_events_.at(0).get());
526 EXPECT_EQ(kEvents[0], *last_touch_event); 515 EXPECT_EQ(kEvents, *last_touch_event);
527 516
528 set_is_flinging(true);
529 set_enable_fling_passive_listener_flag(false); 517 set_enable_fling_passive_listener_flag(false);
530 HandleEvent(kEvents[0], INPUT_EVENT_ACK_STATE_NOT_CONSUMED); 518 HandleEvent(kEvents, INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
531 RunPendingTasksWithSimulatedRaf(); 519 RunPendingTasksWithSimulatedRaf();
532 EXPECT_FALSE(main_task_runner_->HasPendingTask()); 520 EXPECT_FALSE(main_task_runner_->HasPendingTask());
533 EXPECT_EQ(0u, event_queue().size()); 521 EXPECT_EQ(0u, event_queue().size());
534 EXPECT_EQ(2u, handled_events_.size()); 522 EXPECT_EQ(2u, handled_events_.size());
535 EXPECT_EQ(kEvents[0].size, handled_events_.at(1)->size); 523 EXPECT_EQ(kEvents.size, handled_events_.at(1)->size);
536 EXPECT_EQ(kEvents[0].type, handled_events_.at(1)->type); 524 EXPECT_EQ(kEvents.type, handled_events_.at(1)->type);
537 EXPECT_FALSE(kEvents[0].dispatchedDuringFling); 525 EXPECT_EQ(kEvents.dispatchType, WebInputEvent::Blocking);
538 EXPECT_EQ(kEvents[0].dispatchType, WebInputEvent::Blocking);
539 EXPECT_FALSE(last_touch_start_forced_nonblocking_due_to_fling()); 526 EXPECT_FALSE(last_touch_start_forced_nonblocking_due_to_fling());
540 last_touch_event = 527 last_touch_event =
541 static_cast<const WebTouchEvent*>(handled_events_.at(1).get()); 528 static_cast<const WebTouchEvent*>(handled_events_.at(1).get());
542 kEvents[0].dispatchedDuringFling = true; 529 EXPECT_EQ(kEvents, *last_touch_event);
543 EXPECT_EQ(kEvents[0], *last_touch_event);
544 530
545 set_is_flinging(false);
546 set_enable_fling_passive_listener_flag(true); 531 set_enable_fling_passive_listener_flag(true);
547 HandleEvent(kEvents[0], INPUT_EVENT_ACK_STATE_NOT_CONSUMED); 532 HandleEvent(kEvents, INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
548 RunPendingTasksWithSimulatedRaf(); 533 RunPendingTasksWithSimulatedRaf();
549 EXPECT_FALSE(main_task_runner_->HasPendingTask()); 534 EXPECT_FALSE(main_task_runner_->HasPendingTask());
550 EXPECT_EQ(0u, event_queue().size()); 535 EXPECT_EQ(0u, event_queue().size());
551 EXPECT_EQ(3u, handled_events_.size()); 536 EXPECT_EQ(3u, handled_events_.size());
552 EXPECT_EQ(kEvents[0].size, handled_events_.at(2)->size); 537 EXPECT_EQ(kEvents.size, handled_events_.at(2)->size);
553 EXPECT_EQ(kEvents[0].type, handled_events_.at(2)->type); 538 EXPECT_EQ(kEvents.type, handled_events_.at(2)->type);
554 EXPECT_TRUE(kEvents[0].dispatchedDuringFling); 539 EXPECT_EQ(kEvents.dispatchType, WebInputEvent::Blocking);
555 EXPECT_EQ(kEvents[0].dispatchType, WebInputEvent::Blocking);
556 EXPECT_FALSE(last_touch_start_forced_nonblocking_due_to_fling()); 540 EXPECT_FALSE(last_touch_start_forced_nonblocking_due_to_fling());
557 last_touch_event = 541 last_touch_event =
558 static_cast<const WebTouchEvent*>(handled_events_.at(2).get()); 542 static_cast<const WebTouchEvent*>(handled_events_.at(2).get());
559 kEvents[0].dispatchedDuringFling = false; 543 EXPECT_EQ(kEvents, *last_touch_event);
560 EXPECT_EQ(kEvents[0], *last_touch_event);
561 544
562 kEvents[0].MovePoint(0, 30, 30); 545 kEvents.MovePoint(0, 30, 30);
563 HandleEvent(kEvents[0], INPUT_EVENT_ACK_STATE_NOT_CONSUMED); 546 HandleEvent(kEvents, INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
564 RunPendingTasksWithSimulatedRaf(); 547 RunPendingTasksWithSimulatedRaf();
565 EXPECT_FALSE(main_task_runner_->HasPendingTask()); 548 EXPECT_FALSE(main_task_runner_->HasPendingTask());
566 EXPECT_EQ(0u, event_queue().size()); 549 EXPECT_EQ(0u, event_queue().size());
567 EXPECT_EQ(4u, handled_events_.size()); 550 EXPECT_EQ(4u, handled_events_.size());
568 EXPECT_EQ(kEvents[0].size, handled_events_.at(3)->size); 551 EXPECT_EQ(kEvents.size, handled_events_.at(3)->size);
569 EXPECT_EQ(kEvents[0].type, handled_events_.at(3)->type); 552 EXPECT_EQ(kEvents.type, handled_events_.at(3)->type);
570 EXPECT_FALSE(kEvents[0].dispatchedDuringFling); 553 EXPECT_EQ(kEvents.dispatchType, WebInputEvent::Blocking);
571 EXPECT_EQ(kEvents[0].dispatchType, WebInputEvent::Blocking);
572 EXPECT_FALSE(last_touch_start_forced_nonblocking_due_to_fling()); 554 EXPECT_FALSE(last_touch_start_forced_nonblocking_due_to_fling());
573 last_touch_event = 555 last_touch_event =
574 static_cast<const WebTouchEvent*>(handled_events_.at(3).get()); 556 static_cast<const WebTouchEvent*>(handled_events_.at(3).get());
575 EXPECT_EQ(kEvents[0], *last_touch_event); 557 EXPECT_EQ(kEvents, *last_touch_event);
576 } 558 }
577 559
578 // The boolean parameterized test varies whether rAF aligned input 560 // The boolean parameterized test varies whether rAF aligned input
579 // is enabled or not. 561 // is enabled or not.
580 INSTANTIATE_TEST_CASE_P( 562 INSTANTIATE_TEST_CASE_P(
581 MainThreadEventQueueTests, 563 MainThreadEventQueueTests,
582 MainThreadEventQueueTest, 564 MainThreadEventQueueTest,
583 testing::Range(0u, 565 testing::Range(0u,
584 (kRafAlignedEnabledTouch | kRafAlignedEnabledMouse) + 1)); 566 (kRafAlignedEnabledTouch | kRafAlignedEnabledMouse) + 1));
585 567
586 } // namespace content 568 } // namespace content
OLDNEW
« no previous file with comments | « content/renderer/input/main_thread_event_queue.cc ('k') | content/renderer/mus/compositor_mus_connection_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698