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

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

Issue 2233543002: Make first TouchStart and first TouchMove events on a flinging layer non-blocking (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: fling intervetion Created 4 years, 4 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
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 223 matching lines...) Expand 10 before | Expand all | Expand 10 after
234 WebInputEvent::DispatchType::ListenersNonBlockingPassive; 234 WebInputEvent::DispatchType::ListenersNonBlockingPassive;
235 EXPECT_EQ(coalesced_event, *last_wheel_event); 235 EXPECT_EQ(coalesced_event, *last_wheel_event);
236 } 236 }
237 { 237 {
238 EXPECT_EQ(kTouchEvents[0].size, handled_events_.at(1)->size); 238 EXPECT_EQ(kTouchEvents[0].size, handled_events_.at(1)->size);
239 EXPECT_EQ(kTouchEvents[0].type, handled_events_.at(1)->type); 239 EXPECT_EQ(kTouchEvents[0].type, handled_events_.at(1)->type);
240 const WebTouchEvent* last_touch_event = 240 const WebTouchEvent* last_touch_event =
241 static_cast<const WebTouchEvent*>(handled_events_.at(1).get()); 241 static_cast<const WebTouchEvent*>(handled_events_.at(1).get());
242 WebTouchEvent coalesced_event = kTouchEvents[0]; 242 WebTouchEvent coalesced_event = kTouchEvents[0];
243 internal::Coalesce(kTouchEvents[1], &coalesced_event); 243 internal::Coalesce(kTouchEvents[1], &coalesced_event);
244 coalesced_event.dispatchType = 244 coalesced_event.dispatchType = WebInputEvent::ListenersNonBlockingPassive;
245 WebInputEvent::DispatchType::ListenersNonBlockingPassive;
246 EXPECT_EQ(coalesced_event, *last_touch_event); 245 EXPECT_EQ(coalesced_event, *last_touch_event);
247 } 246 }
248 } 247 }
249 248
249 TEST_F(MainThreadEventQueueTest, BlockingTouchesDuringFling) {
250 SyntheticWebTouchEvent kEvents[1];
251 kEvents[0].PressPoint(10, 10);
252 kEvents[0].touchStartOrFirstTouchMove = true;
253 queue_->set_is_flinging(true);
254
255 EXPECT_FALSE(main_task_runner_->HasPendingTask());
256 EXPECT_EQ(0u, event_queue().size());
257 HandleEvent(kEvents[0], INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
258 EXPECT_EQ(1u, event_queue().size());
259 EXPECT_TRUE(main_task_runner_->HasPendingTask());
260 main_task_runner_->RunUntilIdle();
261 EXPECT_FALSE(main_task_runner_->HasPendingTask());
262 EXPECT_EQ(0u, event_queue().size());
263 EXPECT_EQ(1u, handled_events_.size());
264 EXPECT_EQ(kEvents[0].size, handled_events_.at(0)->size);
265 EXPECT_EQ(kEvents[0].type, handled_events_.at(0)->type);
266 const WebTouchEvent* last_touch_event =
267 static_cast<const WebTouchEvent*>(handled_events_.at(0).get());
268 kEvents[0].dispatchedDuringFling = true;
269 kEvents[0].dispatchType =
270 WebInputEvent::ListenersForcedNonBlockingPassiveDueToFling;
271 EXPECT_EQ(kEvents[0], *last_touch_event);
272
273 kEvents[0].MovePoint(0, 30, 30);
274 HandleEvent(kEvents[0], INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
275 EXPECT_EQ(1u, event_queue().size());
276 EXPECT_TRUE(main_task_runner_->HasPendingTask());
277 main_task_runner_->RunUntilIdle();
278 EXPECT_FALSE(main_task_runner_->HasPendingTask());
279 EXPECT_EQ(0u, event_queue().size());
280 EXPECT_EQ(2u, handled_events_.size());
281 EXPECT_EQ(kEvents[0].size, handled_events_.at(1)->size);
282 EXPECT_EQ(kEvents[0].type, handled_events_.at(1)->type);
283 last_touch_event =
284 static_cast<const WebTouchEvent*>(handled_events_.at(1).get());
285 kEvents[0].dispatchedDuringFling = true;
286 kEvents[0].dispatchType =
287 WebInputEvent::ListenersForcedNonBlockingPassiveDueToFling;
288 EXPECT_EQ(kEvents[0], *last_touch_event);
289
290 kEvents[0].MovePoint(0, 50, 50);
291 kEvents[0].touchStartOrFirstTouchMove = false;
292 HandleEvent(kEvents[0], INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
293 EXPECT_EQ(1u, event_queue().size());
294 EXPECT_TRUE(main_task_runner_->HasPendingTask());
295 main_task_runner_->RunUntilIdle();
296 EXPECT_FALSE(main_task_runner_->HasPendingTask());
297 EXPECT_EQ(0u, event_queue().size());
298 EXPECT_EQ(3u, handled_events_.size());
299 EXPECT_EQ(kEvents[0].size, handled_events_.at(2)->size);
300 EXPECT_EQ(kEvents[0].type, handled_events_.at(2)->type);
301 EXPECT_TRUE(kEvents[0].dispatchedDuringFling);
302 EXPECT_EQ(kEvents[0].dispatchType, WebInputEvent::Blocking);
303 last_touch_event =
304 static_cast<const WebTouchEvent*>(handled_events_.at(2).get());
305 EXPECT_EQ(kEvents[0], *last_touch_event);
306
307 kEvents[0].ReleasePoint(0);
308 HandleEvent(kEvents[0], INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
309 EXPECT_EQ(1u, event_queue().size());
310 EXPECT_TRUE(main_task_runner_->HasPendingTask());
311 main_task_runner_->RunUntilIdle();
312 EXPECT_FALSE(main_task_runner_->HasPendingTask());
313 EXPECT_EQ(0u, event_queue().size());
314 EXPECT_EQ(4u, handled_events_.size());
315 EXPECT_EQ(kEvents[0].size, handled_events_.at(3)->size);
316 EXPECT_EQ(kEvents[0].type, handled_events_.at(3)->type);
317 EXPECT_TRUE(kEvents[0].dispatchedDuringFling);
318 EXPECT_EQ(kEvents[0].dispatchType, WebInputEvent::Blocking);
319 last_touch_event =
320 static_cast<const WebTouchEvent*>(handled_events_.at(3).get());
321 EXPECT_EQ(kEvents[0], *last_touch_event);
322 }
323
250 } // namespace content 324 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698