| OLD | NEW |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 |
| OLD | NEW |