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

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

Issue 2621303004: Keep track of coalesced events in main thread event queue (Closed)
Patch Set: Rebase Created 3 years, 11 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 52 matching lines...) Expand 10 before | Expand all | Expand 10 after
63 feature_list_.InitFromCommandLine(base::JoinString(features, ","), 63 feature_list_.InitFromCommandLine(base::JoinString(features, ","),
64 std::string()); 64 std::string());
65 } 65 }
66 66
67 void SetUp() override { 67 void SetUp() override {
68 queue_ = new MainThreadEventQueue(kTestRoutingID, this, main_task_runner_, 68 queue_ = new MainThreadEventQueue(kTestRoutingID, this, main_task_runner_,
69 &renderer_scheduler_); 69 &renderer_scheduler_);
70 } 70 }
71 71
72 void HandleEventOnMainThread(int routing_id, 72 void HandleEventOnMainThread(int routing_id,
73 const blink::WebInputEvent* event, 73 const blink::WebCoalescedInputEvent* event,
74 const ui::LatencyInfo& latency, 74 const ui::LatencyInfo& latency,
75 InputEventDispatchType type) override { 75 InputEventDispatchType type) override {
76 EXPECT_EQ(kTestRoutingID, routing_id); 76 EXPECT_EQ(kTestRoutingID, routing_id);
77 handled_events_.push_back(ui::WebInputEventTraits::Clone(*event)); 77 handled_events_.push_back(blink::WebCoalescedInputEvent(
78 queue_->EventHandled(event->type(), INPUT_EVENT_ACK_STATE_NOT_CONSUMED); 78 event->event(), event->getCoalescedEventsPointers()));
79
80 queue_->EventHandled(event->event().type(),
81 INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
79 } 82 }
80 83
81 void SendInputEventAck(int routing_id, 84 void SendInputEventAck(int routing_id,
82 blink::WebInputEvent::Type type, 85 blink::WebInputEvent::Type type,
83 InputEventAckState ack_result, 86 InputEventAckState ack_result,
84 uint32_t touch_event_id) override { 87 uint32_t touch_event_id) override {
85 additional_acked_events_.push_back(touch_event_id); 88 additional_acked_events_.push_back(touch_event_id);
86 } 89 }
87 90
88 bool HandleEvent(WebInputEvent& event, InputEventAckState ack_result) { 91 bool HandleEvent(WebInputEvent& event, InputEventAckState ack_result) {
(...skipping 29 matching lines...) Expand all
118 needs_main_frame_ = false; 121 needs_main_frame_ = false;
119 queue_->DispatchRafAlignedInput(); 122 queue_->DispatchRafAlignedInput();
120 } 123 }
121 } 124 }
122 125
123 protected: 126 protected:
124 base::test::ScopedFeatureList feature_list_; 127 base::test::ScopedFeatureList feature_list_;
125 scoped_refptr<base::TestSimpleTaskRunner> main_task_runner_; 128 scoped_refptr<base::TestSimpleTaskRunner> main_task_runner_;
126 blink::scheduler::MockRendererScheduler renderer_scheduler_; 129 blink::scheduler::MockRendererScheduler renderer_scheduler_;
127 scoped_refptr<MainThreadEventQueue> queue_; 130 scoped_refptr<MainThreadEventQueue> queue_;
128 std::vector<blink::WebScopedInputEvent> handled_events_; 131 std::vector<blink::WebCoalescedInputEvent> handled_events_;
132
129 std::vector<uint32_t> additional_acked_events_; 133 std::vector<uint32_t> additional_acked_events_;
130 int raf_aligned_input_setting_; 134 int raf_aligned_input_setting_;
131 bool needs_main_frame_; 135 bool needs_main_frame_;
132 }; 136 };
133 137
134 TEST_P(MainThreadEventQueueTest, NonBlockingWheel) { 138 TEST_P(MainThreadEventQueueTest, NonBlockingWheel) {
135 base::HistogramTester histogram_tester; 139 base::HistogramTester histogram_tester;
136 140
137 WebMouseWheelEvent kEvents[4] = { 141 WebMouseWheelEvent kEvents[4] = {
138 SyntheticWebMouseWheelEventBuilder::Build(10, 10, 0, 53, 0, false), 142 SyntheticWebMouseWheelEventBuilder::Build(10, 10, 0, 53, 0, false),
139 SyntheticWebMouseWheelEventBuilder::Build(20, 20, 0, 53, 0, false), 143 SyntheticWebMouseWheelEventBuilder::Build(20, 20, 0, 53, 0, false),
140 SyntheticWebMouseWheelEventBuilder::Build(30, 30, 0, 53, 1, false), 144 SyntheticWebMouseWheelEventBuilder::Build(30, 30, 0, 53, 1, false),
141 SyntheticWebMouseWheelEventBuilder::Build(30, 30, 0, 53, 1, false), 145 SyntheticWebMouseWheelEventBuilder::Build(30, 30, 0, 53, 1, false),
142 }; 146 };
143 147
144 EXPECT_FALSE(main_task_runner_->HasPendingTask()); 148 EXPECT_FALSE(main_task_runner_->HasPendingTask());
145 EXPECT_EQ(0u, event_queue().size()); 149 EXPECT_EQ(0u, event_queue().size());
146 150
147 for (WebMouseWheelEvent& event : kEvents) 151 for (WebMouseWheelEvent& event : kEvents)
148 HandleEvent(event, INPUT_EVENT_ACK_STATE_SET_NON_BLOCKING); 152 HandleEvent(event, INPUT_EVENT_ACK_STATE_SET_NON_BLOCKING);
149 153
150 EXPECT_EQ(2u, event_queue().size()); 154 EXPECT_EQ(2u, event_queue().size());
151 EXPECT_EQ((raf_aligned_input_setting_ & kRafAlignedEnabledMouse) == 0, 155 EXPECT_EQ((raf_aligned_input_setting_ & kRafAlignedEnabledMouse) == 0,
152 main_task_runner_->HasPendingTask()); 156 main_task_runner_->HasPendingTask());
153 RunPendingTasksWithSimulatedRaf(); 157 RunPendingTasksWithSimulatedRaf();
154 EXPECT_FALSE(main_task_runner_->HasPendingTask()); 158 EXPECT_FALSE(main_task_runner_->HasPendingTask());
155 EXPECT_EQ(0u, event_queue().size()); 159 EXPECT_EQ(0u, event_queue().size());
156 EXPECT_EQ(2u, handled_events_.size()); 160 EXPECT_EQ(2u, handled_events_.size());
161 for (const auto& coalesced_event : handled_events_) {
162 EXPECT_EQ(2u, coalesced_event.coalescedEventSize());
163 }
157 164
158 { 165 {
159 EXPECT_EQ(kEvents[0].size(), handled_events_.at(0)->size()); 166 EXPECT_EQ(kEvents[0].size(), handled_events_.at(0).event().size());
160 EXPECT_EQ(kEvents[0].type(), handled_events_.at(0)->type()); 167 EXPECT_EQ(kEvents[0].type(), handled_events_.at(0).event().type());
161 const WebMouseWheelEvent* last_wheel_event = 168 const WebMouseWheelEvent* last_wheel_event =
162 static_cast<const WebMouseWheelEvent*>(handled_events_.at(0).get()); 169 static_cast<const WebMouseWheelEvent*>(
170 handled_events_.at(0).eventPointer());
163 EXPECT_EQ(WebInputEvent::DispatchType::ListenersNonBlockingPassive, 171 EXPECT_EQ(WebInputEvent::DispatchType::ListenersNonBlockingPassive,
164 last_wheel_event->dispatchType); 172 last_wheel_event->dispatchType);
165 WebMouseWheelEvent coalesced_event = kEvents[0]; 173 WebMouseWheelEvent coalesced_event = kEvents[0];
166 ui::Coalesce(kEvents[1], &coalesced_event); 174 ui::Coalesce(kEvents[1], &coalesced_event);
167 coalesced_event.dispatchType = 175 coalesced_event.dispatchType =
168 WebInputEvent::DispatchType::ListenersNonBlockingPassive; 176 WebInputEvent::DispatchType::ListenersNonBlockingPassive;
169 EXPECT_EQ(coalesced_event, *last_wheel_event); 177 EXPECT_EQ(coalesced_event, *last_wheel_event);
170 } 178 }
171 179
172 { 180 {
181 WebMouseWheelEvent coalesced_event = kEvents[0];
182 std::vector<const WebInputEvent*> coalesced_events =
183 handled_events_[0].getCoalescedEventsPointers();
184 const WebMouseWheelEvent* coalesced_wheel_event0 =
185 static_cast<const WebMouseWheelEvent*>(coalesced_events[0]);
186 coalesced_event.dispatchType =
187 WebInputEvent::DispatchType::ListenersNonBlockingPassive;
188 EXPECT_EQ(coalesced_event, *coalesced_wheel_event0);
189
190 coalesced_event = kEvents[1];
191 const WebMouseWheelEvent* coalesced_wheel_event1 =
192 static_cast<const WebMouseWheelEvent*>(coalesced_events[1]);
193 coalesced_event.dispatchType =
194 WebInputEvent::DispatchType::ListenersNonBlockingPassive;
195 EXPECT_EQ(coalesced_event, *coalesced_wheel_event1);
196 }
197
198 {
173 const WebMouseWheelEvent* last_wheel_event = 199 const WebMouseWheelEvent* last_wheel_event =
174 static_cast<const WebMouseWheelEvent*>(handled_events_.at(1).get()); 200 static_cast<const WebMouseWheelEvent*>(
201 handled_events_.at(1).eventPointer());
175 WebMouseWheelEvent coalesced_event = kEvents[2]; 202 WebMouseWheelEvent coalesced_event = kEvents[2];
176 ui::Coalesce(kEvents[3], &coalesced_event); 203 ui::Coalesce(kEvents[3], &coalesced_event);
177 coalesced_event.dispatchType = 204 coalesced_event.dispatchType =
178 WebInputEvent::DispatchType::ListenersNonBlockingPassive; 205 WebInputEvent::DispatchType::ListenersNonBlockingPassive;
179 EXPECT_EQ(coalesced_event, *last_wheel_event); 206 EXPECT_EQ(coalesced_event, *last_wheel_event);
180 } 207 }
208
209 {
210 WebMouseWheelEvent coalesced_event = kEvents[2];
211 std::vector<const WebInputEvent*> coalesced_events =
212 handled_events_[1].getCoalescedEventsPointers();
213 const WebMouseWheelEvent* coalesced_wheel_event0 =
214 static_cast<const WebMouseWheelEvent*>(coalesced_events[0]);
215 coalesced_event.dispatchType =
216 WebInputEvent::DispatchType::ListenersNonBlockingPassive;
217 EXPECT_EQ(coalesced_event, *coalesced_wheel_event0);
218
219 coalesced_event = kEvents[3];
220 const WebMouseWheelEvent* coalesced_wheel_event1 =
221 static_cast<const WebMouseWheelEvent*>(coalesced_events[1]);
222 coalesced_event.dispatchType =
223 WebInputEvent::DispatchType::ListenersNonBlockingPassive;
224 EXPECT_EQ(coalesced_event, *coalesced_wheel_event1);
225 }
226
181 histogram_tester.ExpectUniqueSample(kCoalescedCountHistogram, 1, 2); 227 histogram_tester.ExpectUniqueSample(kCoalescedCountHistogram, 1, 2);
182 } 228 }
183 229
184 TEST_P(MainThreadEventQueueTest, NonBlockingTouch) { 230 TEST_P(MainThreadEventQueueTest, NonBlockingTouch) {
185 base::HistogramTester histogram_tester; 231 base::HistogramTester histogram_tester;
186 232
187 SyntheticWebTouchEvent kEvents[4]; 233 SyntheticWebTouchEvent kEvents[4];
188 kEvents[0].PressPoint(10, 10); 234 kEvents[0].PressPoint(10, 10);
189 kEvents[1].PressPoint(10, 10); 235 kEvents[1].PressPoint(10, 10);
190 kEvents[1].setModifiers(1); 236 kEvents[1].setModifiers(1);
191 kEvents[1].MovePoint(0, 20, 20); 237 kEvents[1].MovePoint(0, 20, 20);
192 kEvents[2].PressPoint(10, 10); 238 kEvents[2].PressPoint(10, 10);
193 kEvents[2].MovePoint(0, 30, 30); 239 kEvents[2].MovePoint(0, 30, 30);
194 kEvents[3].PressPoint(10, 10); 240 kEvents[3].PressPoint(10, 10);
195 kEvents[3].MovePoint(0, 35, 35); 241 kEvents[3].MovePoint(0, 35, 35);
196 242
197 for (SyntheticWebTouchEvent& event : kEvents) 243 for (SyntheticWebTouchEvent& event : kEvents)
198 HandleEvent(event, INPUT_EVENT_ACK_STATE_SET_NON_BLOCKING); 244 HandleEvent(event, INPUT_EVENT_ACK_STATE_SET_NON_BLOCKING);
199 245
200 EXPECT_EQ(3u, event_queue().size()); 246 EXPECT_EQ(3u, event_queue().size());
201 EXPECT_TRUE(main_task_runner_->HasPendingTask()); 247 EXPECT_TRUE(main_task_runner_->HasPendingTask());
202 RunPendingTasksWithSimulatedRaf(); 248 RunPendingTasksWithSimulatedRaf();
203 EXPECT_FALSE(main_task_runner_->HasPendingTask()); 249 EXPECT_FALSE(main_task_runner_->HasPendingTask());
204 EXPECT_EQ(0u, event_queue().size()); 250 EXPECT_EQ(0u, event_queue().size());
205 EXPECT_EQ(3u, handled_events_.size()); 251 EXPECT_EQ(3u, handled_events_.size());
206 252
207 EXPECT_EQ(kEvents[0].size(), handled_events_.at(0)->size()); 253 EXPECT_EQ(kEvents[0].size(), handled_events_.at(0).event().size());
208 EXPECT_EQ(kEvents[0].type(), handled_events_.at(0)->type()); 254 EXPECT_EQ(kEvents[0].type(), handled_events_.at(0).event().type());
209 const WebTouchEvent* last_touch_event = 255 const WebTouchEvent* last_touch_event =
210 static_cast<const WebTouchEvent*>(handled_events_.at(0).get()); 256 static_cast<const WebTouchEvent*>(handled_events_.at(0).eventPointer());
211 kEvents[0].dispatchType = 257 kEvents[0].dispatchType =
212 WebInputEvent::DispatchType::ListenersNonBlockingPassive; 258 WebInputEvent::DispatchType::ListenersNonBlockingPassive;
213 EXPECT_EQ(kEvents[0], *last_touch_event); 259 EXPECT_EQ(kEvents[0], *last_touch_event);
214 260
215 EXPECT_EQ(kEvents[1].size(), handled_events_.at(1)->size()); 261 {
216 EXPECT_EQ(kEvents[1].type(), handled_events_.at(1)->type()); 262 EXPECT_EQ(1u, handled_events_[0].coalescedEventSize());
263 const WebTouchEvent* coalesced_touch_event =
264 static_cast<const WebTouchEvent*>(
265 handled_events_[0].getCoalescedEventsPointers()[0]);
266 EXPECT_EQ(kEvents[0], *coalesced_touch_event);
267 }
268
269 EXPECT_EQ(kEvents[1].size(), handled_events_.at(1).event().size());
270 EXPECT_EQ(kEvents[1].type(), handled_events_.at(1).event().type());
217 last_touch_event = 271 last_touch_event =
218 static_cast<const WebTouchEvent*>(handled_events_.at(1).get()); 272 static_cast<const WebTouchEvent*>(handled_events_.at(1).eventPointer());
219 kEvents[1].dispatchType = 273 kEvents[1].dispatchType =
220 WebInputEvent::DispatchType::ListenersNonBlockingPassive; 274 WebInputEvent::DispatchType::ListenersNonBlockingPassive;
221 EXPECT_EQ(kEvents[1], *last_touch_event); 275 EXPECT_EQ(kEvents[1], *last_touch_event);
222 276
223 EXPECT_EQ(kEvents[2].size(), handled_events_.at(1)->size()); 277 {
224 EXPECT_EQ(kEvents[2].type(), handled_events_.at(2)->type()); 278 EXPECT_EQ(1u, handled_events_[1].coalescedEventSize());
279 const WebTouchEvent* coalesced_touch_event =
280 static_cast<const WebTouchEvent*>(
281 handled_events_[1].getCoalescedEventsPointers()[0]);
282 EXPECT_EQ(kEvents[1], *coalesced_touch_event);
283 }
284
285 EXPECT_EQ(kEvents[2].size(), handled_events_.at(1).event().size());
286 EXPECT_EQ(kEvents[2].type(), handled_events_.at(2).event().type());
225 last_touch_event = 287 last_touch_event =
226 static_cast<const WebTouchEvent*>(handled_events_.at(2).get()); 288 static_cast<const WebTouchEvent*>(handled_events_.at(2).eventPointer());
227 WebTouchEvent coalesced_event = kEvents[2]; 289 WebTouchEvent coalesced_event = kEvents[2];
228 ui::Coalesce(kEvents[3], &coalesced_event); 290 ui::Coalesce(kEvents[3], &coalesced_event);
229 coalesced_event.dispatchType = 291 coalesced_event.dispatchType =
230 WebInputEvent::DispatchType::ListenersNonBlockingPassive; 292 WebInputEvent::DispatchType::ListenersNonBlockingPassive;
231 EXPECT_EQ(coalesced_event, *last_touch_event); 293 EXPECT_EQ(coalesced_event, *last_touch_event);
294
295 {
296 EXPECT_EQ(2u, handled_events_[2].coalescedEventSize());
297 WebTouchEvent coalesced_event = kEvents[2];
298 std::vector<const WebInputEvent*> coalesced_events =
299 handled_events_[2].getCoalescedEventsPointers();
300 const WebTouchEvent* coalesced_touch_event0 =
301 static_cast<const WebTouchEvent*>(coalesced_events[0]);
302 coalesced_event.dispatchType =
303 WebInputEvent::DispatchType::ListenersNonBlockingPassive;
304 EXPECT_EQ(coalesced_event, *coalesced_touch_event0);
305
306 coalesced_event = kEvents[3];
307 const WebTouchEvent* coalesced_touch_event1 =
308 static_cast<const WebTouchEvent*>(coalesced_events[1]);
309 coalesced_event.dispatchType =
310 WebInputEvent::DispatchType::ListenersNonBlockingPassive;
311 EXPECT_EQ(coalesced_event, *coalesced_touch_event1);
312 }
313
232 histogram_tester.ExpectBucketCount(kCoalescedCountHistogram, 0, 1); 314 histogram_tester.ExpectBucketCount(kCoalescedCountHistogram, 0, 1);
233 histogram_tester.ExpectBucketCount(kCoalescedCountHistogram, 1, 1); 315 histogram_tester.ExpectBucketCount(kCoalescedCountHistogram, 1, 1);
234 } 316 }
235 317
236 TEST_P(MainThreadEventQueueTest, BlockingTouch) { 318 TEST_P(MainThreadEventQueueTest, BlockingTouch) {
237 base::HistogramTester histogram_tester; 319 base::HistogramTester histogram_tester;
238 SyntheticWebTouchEvent kEvents[4]; 320 SyntheticWebTouchEvent kEvents[4];
239 kEvents[0].PressPoint(10, 10); 321 kEvents[0].PressPoint(10, 10);
240 kEvents[1].PressPoint(10, 10); 322 kEvents[1].PressPoint(10, 10);
241 kEvents[1].MovePoint(0, 20, 20); 323 kEvents[1].MovePoint(0, 20, 20);
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after
290 372
291 EXPECT_EQ(2u, event_queue().size()); 373 EXPECT_EQ(2u, event_queue().size());
292 EXPECT_EQ(raf_aligned_input_setting_ != 374 EXPECT_EQ(raf_aligned_input_setting_ !=
293 (kRafAlignedEnabledMouse | kRafAlignedEnabledTouch), 375 (kRafAlignedEnabledMouse | kRafAlignedEnabledTouch),
294 main_task_runner_->HasPendingTask()); 376 main_task_runner_->HasPendingTask());
295 RunPendingTasksWithSimulatedRaf(); 377 RunPendingTasksWithSimulatedRaf();
296 EXPECT_FALSE(main_task_runner_->HasPendingTask()); 378 EXPECT_FALSE(main_task_runner_->HasPendingTask());
297 EXPECT_EQ(0u, event_queue().size()); 379 EXPECT_EQ(0u, event_queue().size());
298 EXPECT_EQ(2u, handled_events_.size()); 380 EXPECT_EQ(2u, handled_events_.size());
299 { 381 {
300 EXPECT_EQ(kWheelEvents[0].size(), handled_events_.at(0)->size()); 382 EXPECT_EQ(kWheelEvents[0].size(), handled_events_.at(0).event().size());
301 EXPECT_EQ(kWheelEvents[0].type(), handled_events_.at(0)->type()); 383 EXPECT_EQ(kWheelEvents[0].type(), handled_events_.at(0).event().type());
302 const WebMouseWheelEvent* last_wheel_event = 384 const WebMouseWheelEvent* last_wheel_event =
303 static_cast<const WebMouseWheelEvent*>(handled_events_.at(0).get()); 385 static_cast<const WebMouseWheelEvent*>(
386 handled_events_.at(0).eventPointer());
304 EXPECT_EQ(WebInputEvent::DispatchType::ListenersNonBlockingPassive, 387 EXPECT_EQ(WebInputEvent::DispatchType::ListenersNonBlockingPassive,
305 last_wheel_event->dispatchType); 388 last_wheel_event->dispatchType);
306 WebMouseWheelEvent coalesced_event = kWheelEvents[0]; 389 WebMouseWheelEvent coalesced_event = kWheelEvents[0];
307 ui::Coalesce(kWheelEvents[1], &coalesced_event); 390 ui::Coalesce(kWheelEvents[1], &coalesced_event);
308 coalesced_event.dispatchType = 391 coalesced_event.dispatchType =
309 WebInputEvent::DispatchType::ListenersNonBlockingPassive; 392 WebInputEvent::DispatchType::ListenersNonBlockingPassive;
310 EXPECT_EQ(coalesced_event, *last_wheel_event); 393 EXPECT_EQ(coalesced_event, *last_wheel_event);
311 } 394 }
312 { 395 {
313 EXPECT_EQ(kTouchEvents[0].size(), handled_events_.at(1)->size()); 396 EXPECT_EQ(kTouchEvents[0].size(), handled_events_.at(1).event().size());
314 EXPECT_EQ(kTouchEvents[0].type(), handled_events_.at(1)->type()); 397 EXPECT_EQ(kTouchEvents[0].type(), handled_events_.at(1).event().type());
315 const WebTouchEvent* last_touch_event = 398 const WebTouchEvent* last_touch_event =
316 static_cast<const WebTouchEvent*>(handled_events_.at(1).get()); 399 static_cast<const WebTouchEvent*>(handled_events_.at(1).eventPointer());
317 WebTouchEvent coalesced_event = kTouchEvents[0]; 400 WebTouchEvent coalesced_event = kTouchEvents[0];
318 ui::Coalesce(kTouchEvents[1], &coalesced_event); 401 ui::Coalesce(kTouchEvents[1], &coalesced_event);
319 coalesced_event.dispatchType = 402 coalesced_event.dispatchType =
320 WebInputEvent::DispatchType::ListenersNonBlockingPassive; 403 WebInputEvent::DispatchType::ListenersNonBlockingPassive;
321 EXPECT_EQ(coalesced_event, *last_touch_event); 404 EXPECT_EQ(coalesced_event, *last_touch_event);
322 } 405 }
323 } 406 }
324 407
325 TEST_P(MainThreadEventQueueTest, RafAlignedMouseInput) { 408 TEST_P(MainThreadEventQueueTest, RafAlignedMouseInput) {
326 // Don't run the test when we aren't supporting rAF aligned input. 409 // Don't run the test when we aren't supporting rAF aligned input.
(...skipping 169 matching lines...) Expand 10 before | Expand all | Expand 10 after
496 kEvents.PressPoint(10, 10); 579 kEvents.PressPoint(10, 10);
497 kEvents.touchStartOrFirstTouchMove = true; 580 kEvents.touchStartOrFirstTouchMove = true;
498 set_enable_fling_passive_listener_flag(true); 581 set_enable_fling_passive_listener_flag(true);
499 582
500 EXPECT_FALSE(last_touch_start_forced_nonblocking_due_to_fling()); 583 EXPECT_FALSE(last_touch_start_forced_nonblocking_due_to_fling());
501 HandleEvent(kEvents, INPUT_EVENT_ACK_STATE_SET_NON_BLOCKING_DUE_TO_FLING); 584 HandleEvent(kEvents, INPUT_EVENT_ACK_STATE_SET_NON_BLOCKING_DUE_TO_FLING);
502 RunPendingTasksWithSimulatedRaf(); 585 RunPendingTasksWithSimulatedRaf();
503 EXPECT_FALSE(main_task_runner_->HasPendingTask()); 586 EXPECT_FALSE(main_task_runner_->HasPendingTask());
504 EXPECT_EQ(0u, event_queue().size()); 587 EXPECT_EQ(0u, event_queue().size());
505 EXPECT_EQ(1u, handled_events_.size()); 588 EXPECT_EQ(1u, handled_events_.size());
506 EXPECT_EQ(kEvents.size(), handled_events_.at(0)->size()); 589 EXPECT_EQ(kEvents.size(), handled_events_.at(0).event().size());
507 EXPECT_EQ(kEvents.type(), handled_events_.at(0)->type()); 590 EXPECT_EQ(kEvents.type(), handled_events_.at(0).event().type());
508 EXPECT_TRUE(last_touch_start_forced_nonblocking_due_to_fling()); 591 EXPECT_TRUE(last_touch_start_forced_nonblocking_due_to_fling());
509 const WebTouchEvent* last_touch_event = 592 const WebTouchEvent* last_touch_event =
510 static_cast<const WebTouchEvent*>(handled_events_.at(0).get()); 593 static_cast<const WebTouchEvent*>(handled_events_.at(0).eventPointer());
511 kEvents.dispatchType = WebInputEvent::ListenersForcedNonBlockingDueToFling; 594 kEvents.dispatchType = WebInputEvent::ListenersForcedNonBlockingDueToFling;
512 EXPECT_EQ(kEvents, *last_touch_event); 595 EXPECT_EQ(kEvents, *last_touch_event);
513 596
514 kEvents.MovePoint(0, 30, 30); 597 kEvents.MovePoint(0, 30, 30);
515 EXPECT_FALSE(main_task_runner_->HasPendingTask()); 598 EXPECT_FALSE(main_task_runner_->HasPendingTask());
516 HandleEvent(kEvents, INPUT_EVENT_ACK_STATE_SET_NON_BLOCKING_DUE_TO_FLING); 599 HandleEvent(kEvents, INPUT_EVENT_ACK_STATE_SET_NON_BLOCKING_DUE_TO_FLING);
517 EXPECT_EQ((raf_aligned_input_setting_ & kRafAlignedEnabledTouch) == 0, 600 EXPECT_EQ((raf_aligned_input_setting_ & kRafAlignedEnabledTouch) == 0,
518 main_task_runner_->HasPendingTask()); 601 main_task_runner_->HasPendingTask());
519 RunPendingTasksWithSimulatedRaf(); 602 RunPendingTasksWithSimulatedRaf();
520 EXPECT_FALSE(main_task_runner_->HasPendingTask()); 603 EXPECT_FALSE(main_task_runner_->HasPendingTask());
521 EXPECT_EQ(0u, event_queue().size()); 604 EXPECT_EQ(0u, event_queue().size());
522 EXPECT_EQ(2u, handled_events_.size()); 605 EXPECT_EQ(2u, handled_events_.size());
523 EXPECT_EQ(kEvents.size(), handled_events_.at(1)->size()); 606 EXPECT_EQ(kEvents.size(), handled_events_.at(1).event().size());
524 EXPECT_EQ(kEvents.type(), handled_events_.at(1)->type()); 607 EXPECT_EQ(kEvents.type(), handled_events_.at(1).event().type());
525 EXPECT_TRUE(last_touch_start_forced_nonblocking_due_to_fling()); 608 EXPECT_TRUE(last_touch_start_forced_nonblocking_due_to_fling());
526 last_touch_event = 609 last_touch_event =
527 static_cast<const WebTouchEvent*>(handled_events_.at(1).get()); 610 static_cast<const WebTouchEvent*>(handled_events_.at(1).eventPointer());
528 kEvents.dispatchType = WebInputEvent::ListenersForcedNonBlockingDueToFling; 611 kEvents.dispatchType = WebInputEvent::ListenersForcedNonBlockingDueToFling;
529 EXPECT_EQ(kEvents, *last_touch_event); 612 EXPECT_EQ(kEvents, *last_touch_event);
530 613
531 kEvents.MovePoint(0, 50, 50); 614 kEvents.MovePoint(0, 50, 50);
532 kEvents.touchStartOrFirstTouchMove = false; 615 kEvents.touchStartOrFirstTouchMove = false;
533 HandleEvent(kEvents, INPUT_EVENT_ACK_STATE_SET_NON_BLOCKING_DUE_TO_FLING); 616 HandleEvent(kEvents, INPUT_EVENT_ACK_STATE_SET_NON_BLOCKING_DUE_TO_FLING);
534 RunPendingTasksWithSimulatedRaf(); 617 RunPendingTasksWithSimulatedRaf();
535 EXPECT_FALSE(main_task_runner_->HasPendingTask()); 618 EXPECT_FALSE(main_task_runner_->HasPendingTask());
536 EXPECT_EQ(0u, event_queue().size()); 619 EXPECT_EQ(0u, event_queue().size());
537 EXPECT_EQ(3u, handled_events_.size()); 620 EXPECT_EQ(3u, handled_events_.size());
538 EXPECT_EQ(kEvents.size(), handled_events_.at(2)->size()); 621 EXPECT_EQ(kEvents.size(), handled_events_.at(2).event().size());
539 EXPECT_EQ(kEvents.type(), handled_events_.at(2)->type()); 622 EXPECT_EQ(kEvents.type(), handled_events_.at(2).event().type());
540 EXPECT_EQ(kEvents.dispatchType, WebInputEvent::Blocking); 623 EXPECT_EQ(kEvents.dispatchType, WebInputEvent::Blocking);
541 last_touch_event = 624 last_touch_event =
542 static_cast<const WebTouchEvent*>(handled_events_.at(2).get()); 625 static_cast<const WebTouchEvent*>(handled_events_.at(2).eventPointer());
543 EXPECT_EQ(kEvents, *last_touch_event); 626 EXPECT_EQ(kEvents, *last_touch_event);
544 627
545 kEvents.ReleasePoint(0); 628 kEvents.ReleasePoint(0);
546 HandleEvent(kEvents, INPUT_EVENT_ACK_STATE_SET_NON_BLOCKING_DUE_TO_FLING); 629 HandleEvent(kEvents, INPUT_EVENT_ACK_STATE_SET_NON_BLOCKING_DUE_TO_FLING);
547 RunPendingTasksWithSimulatedRaf(); 630 RunPendingTasksWithSimulatedRaf();
548 EXPECT_FALSE(main_task_runner_->HasPendingTask()); 631 EXPECT_FALSE(main_task_runner_->HasPendingTask());
549 EXPECT_EQ(0u, event_queue().size()); 632 EXPECT_EQ(0u, event_queue().size());
550 EXPECT_EQ(4u, handled_events_.size()); 633 EXPECT_EQ(4u, handled_events_.size());
551 EXPECT_EQ(kEvents.size(), handled_events_.at(3)->size()); 634 EXPECT_EQ(kEvents.size(), handled_events_.at(3).event().size());
552 EXPECT_EQ(kEvents.type(), handled_events_.at(3)->type()); 635 EXPECT_EQ(kEvents.type(), handled_events_.at(3).event().type());
553 EXPECT_EQ(kEvents.dispatchType, WebInputEvent::Blocking); 636 EXPECT_EQ(kEvents.dispatchType, WebInputEvent::Blocking);
554 last_touch_event = 637 last_touch_event =
555 static_cast<const WebTouchEvent*>(handled_events_.at(3).get()); 638 static_cast<const WebTouchEvent*>(handled_events_.at(3).eventPointer());
556 EXPECT_EQ(kEvents, *last_touch_event); 639 EXPECT_EQ(kEvents, *last_touch_event);
557 } 640 }
558 641
559 TEST_P(MainThreadEventQueueTest, BlockingTouchesOutsideFling) { 642 TEST_P(MainThreadEventQueueTest, BlockingTouchesOutsideFling) {
560 SyntheticWebTouchEvent kEvents; 643 SyntheticWebTouchEvent kEvents;
561 kEvents.PressPoint(10, 10); 644 kEvents.PressPoint(10, 10);
562 kEvents.touchStartOrFirstTouchMove = true; 645 kEvents.touchStartOrFirstTouchMove = true;
563 set_enable_fling_passive_listener_flag(false); 646 set_enable_fling_passive_listener_flag(false);
564 647
565 HandleEvent(kEvents, INPUT_EVENT_ACK_STATE_NOT_CONSUMED); 648 HandleEvent(kEvents, INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
566 RunPendingTasksWithSimulatedRaf(); 649 RunPendingTasksWithSimulatedRaf();
567 EXPECT_FALSE(main_task_runner_->HasPendingTask()); 650 EXPECT_FALSE(main_task_runner_->HasPendingTask());
568 EXPECT_EQ(0u, event_queue().size()); 651 EXPECT_EQ(0u, event_queue().size());
569 EXPECT_EQ(1u, handled_events_.size()); 652 EXPECT_EQ(1u, handled_events_.size());
570 EXPECT_EQ(kEvents.size(), handled_events_.at(0)->size()); 653 EXPECT_EQ(kEvents.size(), handled_events_.at(0).event().size());
571 EXPECT_EQ(kEvents.type(), handled_events_.at(0)->type()); 654 EXPECT_EQ(kEvents.type(), handled_events_.at(0).event().type());
572 EXPECT_EQ(kEvents.dispatchType, WebInputEvent::Blocking); 655 EXPECT_EQ(kEvents.dispatchType, WebInputEvent::Blocking);
573 EXPECT_FALSE(last_touch_start_forced_nonblocking_due_to_fling()); 656 EXPECT_FALSE(last_touch_start_forced_nonblocking_due_to_fling());
574 const WebTouchEvent* last_touch_event = 657 const WebTouchEvent* last_touch_event =
575 static_cast<const WebTouchEvent*>(handled_events_.at(0).get()); 658 static_cast<const WebTouchEvent*>(handled_events_.at(0).eventPointer());
576 EXPECT_EQ(kEvents, *last_touch_event); 659 EXPECT_EQ(kEvents, *last_touch_event);
577 660
578 set_enable_fling_passive_listener_flag(false); 661 set_enable_fling_passive_listener_flag(false);
579 HandleEvent(kEvents, INPUT_EVENT_ACK_STATE_NOT_CONSUMED); 662 HandleEvent(kEvents, INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
580 RunPendingTasksWithSimulatedRaf(); 663 RunPendingTasksWithSimulatedRaf();
581 EXPECT_FALSE(main_task_runner_->HasPendingTask()); 664 EXPECT_FALSE(main_task_runner_->HasPendingTask());
582 EXPECT_EQ(0u, event_queue().size()); 665 EXPECT_EQ(0u, event_queue().size());
583 EXPECT_EQ(2u, handled_events_.size()); 666 EXPECT_EQ(2u, handled_events_.size());
584 EXPECT_EQ(kEvents.size(), handled_events_.at(1)->size()); 667 EXPECT_EQ(kEvents.size(), handled_events_.at(1).event().size());
585 EXPECT_EQ(kEvents.type(), handled_events_.at(1)->type()); 668 EXPECT_EQ(kEvents.type(), handled_events_.at(1).event().type());
586 EXPECT_EQ(kEvents.dispatchType, WebInputEvent::Blocking); 669 EXPECT_EQ(kEvents.dispatchType, WebInputEvent::Blocking);
587 EXPECT_FALSE(last_touch_start_forced_nonblocking_due_to_fling()); 670 EXPECT_FALSE(last_touch_start_forced_nonblocking_due_to_fling());
588 last_touch_event = 671 last_touch_event =
589 static_cast<const WebTouchEvent*>(handled_events_.at(1).get()); 672 static_cast<const WebTouchEvent*>(handled_events_.at(1).eventPointer());
590 EXPECT_EQ(kEvents, *last_touch_event); 673 EXPECT_EQ(kEvents, *last_touch_event);
591 674
592 set_enable_fling_passive_listener_flag(true); 675 set_enable_fling_passive_listener_flag(true);
593 HandleEvent(kEvents, INPUT_EVENT_ACK_STATE_NOT_CONSUMED); 676 HandleEvent(kEvents, INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
594 RunPendingTasksWithSimulatedRaf(); 677 RunPendingTasksWithSimulatedRaf();
595 EXPECT_FALSE(main_task_runner_->HasPendingTask()); 678 EXPECT_FALSE(main_task_runner_->HasPendingTask());
596 EXPECT_EQ(0u, event_queue().size()); 679 EXPECT_EQ(0u, event_queue().size());
597 EXPECT_EQ(3u, handled_events_.size()); 680 EXPECT_EQ(3u, handled_events_.size());
598 EXPECT_EQ(kEvents.size(), handled_events_.at(2)->size()); 681 EXPECT_EQ(kEvents.size(), handled_events_.at(2).event().size());
599 EXPECT_EQ(kEvents.type(), handled_events_.at(2)->type()); 682 EXPECT_EQ(kEvents.type(), handled_events_.at(2).event().type());
600 EXPECT_EQ(kEvents.dispatchType, WebInputEvent::Blocking); 683 EXPECT_EQ(kEvents.dispatchType, WebInputEvent::Blocking);
601 EXPECT_FALSE(last_touch_start_forced_nonblocking_due_to_fling()); 684 EXPECT_FALSE(last_touch_start_forced_nonblocking_due_to_fling());
602 last_touch_event = 685 last_touch_event =
603 static_cast<const WebTouchEvent*>(handled_events_.at(2).get()); 686 static_cast<const WebTouchEvent*>(handled_events_.at(2).eventPointer());
604 EXPECT_EQ(kEvents, *last_touch_event); 687 EXPECT_EQ(kEvents, *last_touch_event);
605 688
606 kEvents.MovePoint(0, 30, 30); 689 kEvents.MovePoint(0, 30, 30);
607 HandleEvent(kEvents, INPUT_EVENT_ACK_STATE_NOT_CONSUMED); 690 HandleEvent(kEvents, INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
608 RunPendingTasksWithSimulatedRaf(); 691 RunPendingTasksWithSimulatedRaf();
609 EXPECT_FALSE(main_task_runner_->HasPendingTask()); 692 EXPECT_FALSE(main_task_runner_->HasPendingTask());
610 EXPECT_EQ(0u, event_queue().size()); 693 EXPECT_EQ(0u, event_queue().size());
611 EXPECT_EQ(4u, handled_events_.size()); 694 EXPECT_EQ(4u, handled_events_.size());
612 EXPECT_EQ(kEvents.size(), handled_events_.at(3)->size()); 695 EXPECT_EQ(kEvents.size(), handled_events_.at(3).event().size());
613 EXPECT_EQ(kEvents.type(), handled_events_.at(3)->type()); 696 EXPECT_EQ(kEvents.type(), handled_events_.at(3).event().type());
614 EXPECT_EQ(kEvents.dispatchType, WebInputEvent::Blocking); 697 EXPECT_EQ(kEvents.dispatchType, WebInputEvent::Blocking);
615 EXPECT_FALSE(last_touch_start_forced_nonblocking_due_to_fling()); 698 EXPECT_FALSE(last_touch_start_forced_nonblocking_due_to_fling());
616 last_touch_event = 699 last_touch_event =
617 static_cast<const WebTouchEvent*>(handled_events_.at(3).get()); 700 static_cast<const WebTouchEvent*>(handled_events_.at(3).eventPointer());
618 EXPECT_EQ(kEvents, *last_touch_event); 701 EXPECT_EQ(kEvents, *last_touch_event);
619 } 702 }
620 703
621 // The boolean parameterized test varies whether rAF aligned input 704 // The boolean parameterized test varies whether rAF aligned input
622 // is enabled or not. 705 // is enabled or not.
623 INSTANTIATE_TEST_CASE_P( 706 INSTANTIATE_TEST_CASE_P(
624 MainThreadEventQueueTests, 707 MainThreadEventQueueTests,
625 MainThreadEventQueueTest, 708 MainThreadEventQueueTest,
626 testing::Range(0u, 709 testing::Range(0u,
627 (kRafAlignedEnabledTouch | kRafAlignedEnabledMouse) + 1)); 710 (kRafAlignedEnabledTouch | kRafAlignedEnabledMouse) + 1));
628 711
629 } // namespace content 712 } // namespace content
OLDNEW
« no previous file with comments | « content/renderer/input/main_thread_event_queue.cc ('k') | content/renderer/input/render_widget_input_handler.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698