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

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: set non_blocking to true 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 136 matching lines...) Expand 10 before | Expand all | Expand 10 after
147 EXPECT_FALSE(main_task_runner_->HasPendingTask()); 147 EXPECT_FALSE(main_task_runner_->HasPendingTask());
148 EXPECT_EQ(0u, event_queue().size()); 148 EXPECT_EQ(0u, event_queue().size());
149 EXPECT_EQ(3u, handled_events_.size()); 149 EXPECT_EQ(3u, handled_events_.size());
150 150
151 EXPECT_EQ(kEvents[0].size, handled_events_.at(0)->size); 151 EXPECT_EQ(kEvents[0].size, handled_events_.at(0)->size);
152 EXPECT_EQ(kEvents[0].type, handled_events_.at(0)->type); 152 EXPECT_EQ(kEvents[0].type, handled_events_.at(0)->type);
153 const WebTouchEvent* last_touch_event = 153 const WebTouchEvent* last_touch_event =
154 static_cast<const WebTouchEvent*>(handled_events_.at(0).get()); 154 static_cast<const WebTouchEvent*>(handled_events_.at(0).get());
155 kEvents[0].dispatchType = 155 kEvents[0].dispatchType =
156 WebInputEvent::DispatchType::ListenersNonBlockingPassive; 156 WebInputEvent::DispatchType::ListenersNonBlockingPassive;
157 kEvents[0].touchStartOrFirstTouchMove = true;
157 EXPECT_EQ(kEvents[0], *last_touch_event); 158 EXPECT_EQ(kEvents[0], *last_touch_event);
158 159
159 EXPECT_EQ(kEvents[1].size, handled_events_.at(1)->size); 160 EXPECT_EQ(kEvents[1].size, handled_events_.at(1)->size);
160 EXPECT_EQ(kEvents[1].type, handled_events_.at(1)->type); 161 EXPECT_EQ(kEvents[1].type, handled_events_.at(1)->type);
161 last_touch_event = 162 last_touch_event =
162 static_cast<const WebTouchEvent*>(handled_events_.at(1).get()); 163 static_cast<const WebTouchEvent*>(handled_events_.at(1).get());
163 kEvents[1].dispatchType = 164 kEvents[1].dispatchType =
164 WebInputEvent::DispatchType::ListenersNonBlockingPassive; 165 WebInputEvent::DispatchType::ListenersNonBlockingPassive;
166 kEvents[1].touchStartOrFirstTouchMove = true;
165 EXPECT_EQ(kEvents[1], *last_touch_event); 167 EXPECT_EQ(kEvents[1], *last_touch_event);
166 168
167 EXPECT_EQ(kEvents[2].size, handled_events_.at(1)->size); 169 EXPECT_EQ(kEvents[2].size, handled_events_.at(1)->size);
168 EXPECT_EQ(kEvents[2].type, handled_events_.at(2)->type); 170 EXPECT_EQ(kEvents[2].type, handled_events_.at(2)->type);
169 last_touch_event = 171 last_touch_event =
170 static_cast<const WebTouchEvent*>(handled_events_.at(2).get()); 172 static_cast<const WebTouchEvent*>(handled_events_.at(2).get());
171 WebTouchEvent coalesced_event = kEvents[2]; 173 WebTouchEvent coalesced_event = kEvents[2];
172 internal::Coalesce(kEvents[3], &coalesced_event); 174 internal::Coalesce(kEvents[3], &coalesced_event);
173 coalesced_event.dispatchType = 175 coalesced_event.dispatchType =
174 WebInputEvent::DispatchType::ListenersNonBlockingPassive; 176 WebInputEvent::DispatchType::ListenersNonBlockingPassive;
(...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after
246 WebInputEvent::DispatchType::ListenersNonBlockingPassive; 248 WebInputEvent::DispatchType::ListenersNonBlockingPassive;
247 EXPECT_EQ(coalesced_event, *last_wheel_event); 249 EXPECT_EQ(coalesced_event, *last_wheel_event);
248 } 250 }
249 { 251 {
250 EXPECT_EQ(kTouchEvents[0].size, handled_events_.at(1)->size); 252 EXPECT_EQ(kTouchEvents[0].size, handled_events_.at(1)->size);
251 EXPECT_EQ(kTouchEvents[0].type, handled_events_.at(1)->type); 253 EXPECT_EQ(kTouchEvents[0].type, handled_events_.at(1)->type);
252 const WebTouchEvent* last_touch_event = 254 const WebTouchEvent* last_touch_event =
253 static_cast<const WebTouchEvent*>(handled_events_.at(1).get()); 255 static_cast<const WebTouchEvent*>(handled_events_.at(1).get());
254 WebTouchEvent coalesced_event = kTouchEvents[0]; 256 WebTouchEvent coalesced_event = kTouchEvents[0];
255 internal::Coalesce(kTouchEvents[1], &coalesced_event); 257 internal::Coalesce(kTouchEvents[1], &coalesced_event);
256 coalesced_event.dispatchType = 258 coalesced_event.dispatchType = WebInputEvent::ListenersNonBlockingPassive;
257 WebInputEvent::DispatchType::ListenersNonBlockingPassive;
258 EXPECT_EQ(coalesced_event, *last_touch_event); 259 EXPECT_EQ(coalesced_event, *last_touch_event);
259 } 260 }
260 } 261 }
261 262
263 TEST_F(MainThreadEventQueueTest, BlockingTouchesDuringFling) {
264 SyntheticWebTouchEvent kEvents[1];
265 kEvents[0].PressPoint(10, 10);
266 queue_->set_is_flinging(true);
267
268 EXPECT_FALSE(main_task_runner_->HasPendingTask());
269 EXPECT_EQ(0u, event_queue().size());
270 queue_->HandleEvent(&kEvents[0], ui::LatencyInfo(), DISPATCH_TYPE_BLOCKING,
271 INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
272 EXPECT_EQ(1u, event_queue().size());
273 EXPECT_TRUE(main_task_runner_->HasPendingTask());
274 main_task_runner_->RunUntilIdle();
275 EXPECT_FALSE(main_task_runner_->HasPendingTask());
276 EXPECT_EQ(0u, event_queue().size());
277 EXPECT_EQ(1u, handled_events_.size());
278 EXPECT_EQ(kEvents[0].size, handled_events_.at(0)->size);
279 EXPECT_EQ(kEvents[0].type, handled_events_.at(0)->type);
280 const WebTouchEvent* last_touch_event =
281 static_cast<const WebTouchEvent*>(handled_events_.at(0).get());
282 kEvents[0].dispatchedDuringFling = true;
283 kEvents[0].touchStartOrFirstTouchMove = true;
284 kEvents[0].dispatchType =
285 WebInputEvent::ListenersForcedNonBlockingPassiveDueToFling;
286 EXPECT_EQ(kEvents[0], *last_touch_event);
287
288 kEvents[0].MovePoint(0, 30, 30);
289 queue_->HandleEvent(&kEvents[0], ui::LatencyInfo(), DISPATCH_TYPE_BLOCKING,
290 INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
291 EXPECT_EQ(1u, event_queue().size());
292 EXPECT_TRUE(main_task_runner_->HasPendingTask());
293 main_task_runner_->RunUntilIdle();
294 EXPECT_FALSE(main_task_runner_->HasPendingTask());
295 EXPECT_EQ(0u, event_queue().size());
296 EXPECT_EQ(2u, handled_events_.size());
297 EXPECT_EQ(kEvents[0].size, handled_events_.at(1)->size);
298 EXPECT_EQ(kEvents[0].type, handled_events_.at(1)->type);
299 last_touch_event =
300 static_cast<const WebTouchEvent*>(handled_events_.at(1).get());
301 kEvents[0].dispatchedDuringFling = true;
302 kEvents[0].touchStartOrFirstTouchMove = true;
303 kEvents[0].dispatchType =
304 WebInputEvent::ListenersForcedNonBlockingPassiveDueToFling;
305 EXPECT_EQ(kEvents[0], *last_touch_event);
306
307 kEvents[0].MovePoint(0, 50, 50);
308 queue_->HandleEvent(&kEvents[0], ui::LatencyInfo(), DISPATCH_TYPE_BLOCKING,
309 INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
310 EXPECT_EQ(1u, event_queue().size());
311 EXPECT_TRUE(main_task_runner_->HasPendingTask());
312 main_task_runner_->RunUntilIdle();
313 EXPECT_FALSE(main_task_runner_->HasPendingTask());
314 EXPECT_EQ(0u, event_queue().size());
315 EXPECT_EQ(3u, handled_events_.size());
316 EXPECT_EQ(kEvents[0].size, handled_events_.at(2)->size);
317 EXPECT_EQ(kEvents[0].type, handled_events_.at(2)->type);
318 EXPECT_TRUE(kEvents[0].dispatchedDuringFling);
319 EXPECT_EQ(kEvents[0].dispatchType, WebInputEvent::Blocking);
320 last_touch_event =
321 static_cast<const WebTouchEvent*>(handled_events_.at(2).get());
322 kEvents[0].touchStartOrFirstTouchMove = false;
323 EXPECT_EQ(kEvents[0], *last_touch_event);
324
325 kEvents[0].ReleasePoint(0);
326 queue_->HandleEvent(&kEvents[0], ui::LatencyInfo(), DISPATCH_TYPE_BLOCKING,
327 INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
328 EXPECT_EQ(1u, event_queue().size());
329 EXPECT_TRUE(main_task_runner_->HasPendingTask());
330 main_task_runner_->RunUntilIdle();
331 EXPECT_FALSE(main_task_runner_->HasPendingTask());
332 EXPECT_EQ(0u, event_queue().size());
333 EXPECT_EQ(4u, handled_events_.size());
334 EXPECT_EQ(kEvents[0].size, handled_events_.at(3)->size);
335 EXPECT_EQ(kEvents[0].type, handled_events_.at(3)->type);
336 EXPECT_TRUE(kEvents[0].dispatchedDuringFling);
337 EXPECT_EQ(kEvents[0].dispatchType, WebInputEvent::Blocking);
338 last_touch_event =
339 static_cast<const WebTouchEvent*>(handled_events_.at(3).get());
340 kEvents[0].touchStartOrFirstTouchMove = false;
341 EXPECT_EQ(kEvents[0], *last_touch_event);
342 }
343
262 } // namespace content 344 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698