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

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

Issue 2296693003: Don't RAF align touch moves that are blocking. (Closed)
Patch Set: Add comment Created 4 years, 3 months 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
« no previous file with comments | « content/renderer/input/main_thread_event_queue.cc ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 209 matching lines...) Expand 10 before | Expand all | Expand 10 after
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
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
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
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
OLDNEW
« no previous file with comments | « content/renderer/input/main_thread_event_queue.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698