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

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

Issue 2240473002: Give MainThreadEventQueue a mutable WebInputEvent. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fixed consts 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
« 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 43 matching lines...) Expand 10 before | Expand all | Expand 10 after
54 queue_->EventHandled(event->type, INPUT_EVENT_ACK_STATE_NOT_CONSUMED); 54 queue_->EventHandled(event->type, INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
55 } 55 }
56 56
57 void SendInputEventAck(int routing_id, 57 void SendInputEventAck(int routing_id,
58 blink::WebInputEvent::Type type, 58 blink::WebInputEvent::Type type,
59 InputEventAckState ack_result, 59 InputEventAckState ack_result,
60 uint32_t touch_event_id) override { 60 uint32_t touch_event_id) override {
61 additional_acked_events_.push_back(touch_event_id); 61 additional_acked_events_.push_back(touch_event_id);
62 } 62 }
63 63
64 void HandleEvent(WebInputEvent& event, InputEventAckState ack_result) {
65 queue_->HandleEvent(WebInputEventTraits::Clone(event), ui::LatencyInfo(),
66 DISPATCH_TYPE_BLOCKING,
67 ack_result);
68 }
69
64 WebInputEventQueue<EventWithDispatchType>& event_queue() { 70 WebInputEventQueue<EventWithDispatchType>& event_queue() {
65 return queue_->events_; 71 return queue_->events_;
66 } 72 }
67 73
68 protected: 74 protected:
69 scoped_refptr<base::TestSimpleTaskRunner> main_task_runner_; 75 scoped_refptr<base::TestSimpleTaskRunner> main_task_runner_;
70 scoped_refptr<MainThreadEventQueue> queue_; 76 scoped_refptr<MainThreadEventQueue> queue_;
71 std::vector<ScopedWebInputEvent> handled_events_; 77 std::vector<ScopedWebInputEvent> handled_events_;
72 std::vector<uint32_t> additional_acked_events_; 78 std::vector<uint32_t> additional_acked_events_;
73 }; 79 };
74 80
75 TEST_F(MainThreadEventQueueTest, NonBlockingWheel) { 81 TEST_F(MainThreadEventQueueTest, NonBlockingWheel) {
76 WebMouseWheelEvent kEvents[4] = { 82 WebMouseWheelEvent kEvents[4] = {
77 SyntheticWebMouseWheelEventBuilder::Build(10, 10, 0, 53, 0, false), 83 SyntheticWebMouseWheelEventBuilder::Build(10, 10, 0, 53, 0, false),
78 SyntheticWebMouseWheelEventBuilder::Build(20, 20, 0, 53, 0, false), 84 SyntheticWebMouseWheelEventBuilder::Build(20, 20, 0, 53, 0, false),
79 SyntheticWebMouseWheelEventBuilder::Build(30, 30, 0, 53, 1, false), 85 SyntheticWebMouseWheelEventBuilder::Build(30, 30, 0, 53, 1, false),
80 SyntheticWebMouseWheelEventBuilder::Build(30, 30, 0, 53, 1, false), 86 SyntheticWebMouseWheelEventBuilder::Build(30, 30, 0, 53, 1, false),
81 }; 87 };
82 88
83 EXPECT_FALSE(main_task_runner_->HasPendingTask()); 89 EXPECT_FALSE(main_task_runner_->HasPendingTask());
84 EXPECT_EQ(0u, event_queue().size()); 90 EXPECT_EQ(0u, event_queue().size());
85 queue_->HandleEvent(&kEvents[0], ui::LatencyInfo(), DISPATCH_TYPE_BLOCKING, 91
86 INPUT_EVENT_ACK_STATE_SET_NON_BLOCKING); 92 for (WebMouseWheelEvent& event : kEvents)
87 queue_->HandleEvent(&kEvents[1], ui::LatencyInfo(), DISPATCH_TYPE_BLOCKING, 93 HandleEvent(event, INPUT_EVENT_ACK_STATE_SET_NON_BLOCKING);
88 INPUT_EVENT_ACK_STATE_SET_NON_BLOCKING); 94
89 queue_->HandleEvent(&kEvents[2], ui::LatencyInfo(), DISPATCH_TYPE_BLOCKING,
90 INPUT_EVENT_ACK_STATE_SET_NON_BLOCKING);
91 queue_->HandleEvent(&kEvents[3], ui::LatencyInfo(), DISPATCH_TYPE_BLOCKING,
92 INPUT_EVENT_ACK_STATE_SET_NON_BLOCKING);
93 EXPECT_EQ(2u, event_queue().size()); 95 EXPECT_EQ(2u, event_queue().size());
94 EXPECT_TRUE(main_task_runner_->HasPendingTask()); 96 EXPECT_TRUE(main_task_runner_->HasPendingTask());
95 main_task_runner_->RunUntilIdle(); 97 main_task_runner_->RunUntilIdle();
96 EXPECT_FALSE(main_task_runner_->HasPendingTask()); 98 EXPECT_FALSE(main_task_runner_->HasPendingTask());
97 EXPECT_EQ(0u, event_queue().size()); 99 EXPECT_EQ(0u, event_queue().size());
98 EXPECT_EQ(2u, handled_events_.size()); 100 EXPECT_EQ(2u, handled_events_.size());
99 101
100 { 102 {
101 EXPECT_EQ(kEvents[0].size, handled_events_.at(0)->size); 103 EXPECT_EQ(kEvents[0].size, handled_events_.at(0)->size);
102 EXPECT_EQ(kEvents[0].type, handled_events_.at(0)->type); 104 EXPECT_EQ(kEvents[0].type, handled_events_.at(0)->type);
(...skipping 22 matching lines...) Expand all
125 TEST_F(MainThreadEventQueueTest, NonBlockingTouch) { 127 TEST_F(MainThreadEventQueueTest, NonBlockingTouch) {
126 SyntheticWebTouchEvent kEvents[4]; 128 SyntheticWebTouchEvent kEvents[4];
127 kEvents[0].PressPoint(10, 10); 129 kEvents[0].PressPoint(10, 10);
128 kEvents[1].PressPoint(10, 10); 130 kEvents[1].PressPoint(10, 10);
129 kEvents[1].modifiers = 1; 131 kEvents[1].modifiers = 1;
130 kEvents[1].MovePoint(0, 20, 20); 132 kEvents[1].MovePoint(0, 20, 20);
131 kEvents[2].PressPoint(10, 10); 133 kEvents[2].PressPoint(10, 10);
132 kEvents[2].MovePoint(0, 30, 30); 134 kEvents[2].MovePoint(0, 30, 30);
133 kEvents[3].PressPoint(10, 10); 135 kEvents[3].PressPoint(10, 10);
134 kEvents[3].MovePoint(0, 35, 35); 136 kEvents[3].MovePoint(0, 35, 35);
135 queue_->HandleEvent(&kEvents[0], ui::LatencyInfo(), DISPATCH_TYPE_BLOCKING, 137
136 INPUT_EVENT_ACK_STATE_SET_NON_BLOCKING); 138 for (SyntheticWebTouchEvent& event : kEvents)
137 queue_->HandleEvent(&kEvents[1], ui::LatencyInfo(), DISPATCH_TYPE_BLOCKING, 139 HandleEvent(event, INPUT_EVENT_ACK_STATE_SET_NON_BLOCKING);
138 INPUT_EVENT_ACK_STATE_SET_NON_BLOCKING);
139 queue_->HandleEvent(&kEvents[2], ui::LatencyInfo(), DISPATCH_TYPE_BLOCKING,
140 INPUT_EVENT_ACK_STATE_SET_NON_BLOCKING);
141 queue_->HandleEvent(&kEvents[3], ui::LatencyInfo(), DISPATCH_TYPE_BLOCKING,
142 INPUT_EVENT_ACK_STATE_SET_NON_BLOCKING);
143 140
144 EXPECT_EQ(3u, event_queue().size()); 141 EXPECT_EQ(3u, event_queue().size());
145 EXPECT_TRUE(main_task_runner_->HasPendingTask()); 142 EXPECT_TRUE(main_task_runner_->HasPendingTask());
146 main_task_runner_->RunUntilIdle(); 143 main_task_runner_->RunUntilIdle();
147 EXPECT_FALSE(main_task_runner_->HasPendingTask()); 144 EXPECT_FALSE(main_task_runner_->HasPendingTask());
148 EXPECT_EQ(0u, event_queue().size()); 145 EXPECT_EQ(0u, event_queue().size());
149 EXPECT_EQ(3u, handled_events_.size()); 146 EXPECT_EQ(3u, handled_events_.size());
150 147
151 EXPECT_EQ(kEvents[0].size, handled_events_.at(0)->size); 148 EXPECT_EQ(kEvents[0].size, handled_events_.at(0)->size);
152 EXPECT_EQ(kEvents[0].type, handled_events_.at(0)->type); 149 EXPECT_EQ(kEvents[0].type, handled_events_.at(0)->type);
(...skipping 25 matching lines...) Expand all
178 TEST_F(MainThreadEventQueueTest, BlockingTouch) { 175 TEST_F(MainThreadEventQueueTest, BlockingTouch) {
179 SyntheticWebTouchEvent kEvents[4]; 176 SyntheticWebTouchEvent kEvents[4];
180 kEvents[0].PressPoint(10, 10); 177 kEvents[0].PressPoint(10, 10);
181 kEvents[1].PressPoint(10, 10); 178 kEvents[1].PressPoint(10, 10);
182 kEvents[1].MovePoint(0, 20, 20); 179 kEvents[1].MovePoint(0, 20, 20);
183 kEvents[2].PressPoint(10, 10); 180 kEvents[2].PressPoint(10, 10);
184 kEvents[2].MovePoint(0, 30, 30); 181 kEvents[2].MovePoint(0, 30, 30);
185 kEvents[3].PressPoint(10, 10); 182 kEvents[3].PressPoint(10, 10);
186 kEvents[3].MovePoint(0, 35, 35); 183 kEvents[3].MovePoint(0, 35, 35);
187 // Ensure that coalescing takes place. 184 // Ensure that coalescing takes place.
188 queue_->HandleEvent(&kEvents[0], ui::LatencyInfo(), DISPATCH_TYPE_BLOCKING, 185 HandleEvent(kEvents[0], INPUT_EVENT_ACK_STATE_SET_NON_BLOCKING);
189 INPUT_EVENT_ACK_STATE_SET_NON_BLOCKING); 186 HandleEvent(kEvents[1], INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
190 queue_->HandleEvent(&kEvents[1], ui::LatencyInfo(), DISPATCH_TYPE_BLOCKING, 187 HandleEvent(kEvents[2], INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
191 INPUT_EVENT_ACK_STATE_NOT_CONSUMED); 188 HandleEvent(kEvents[3], INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
192 queue_->HandleEvent(&kEvents[2], ui::LatencyInfo(), DISPATCH_TYPE_BLOCKING, 189
193 INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
194 queue_->HandleEvent(&kEvents[3], ui::LatencyInfo(), DISPATCH_TYPE_BLOCKING,
195 INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
196 EXPECT_EQ(2u, event_queue().size()); 190 EXPECT_EQ(2u, event_queue().size());
197 EXPECT_TRUE(main_task_runner_->HasPendingTask()); 191 EXPECT_TRUE(main_task_runner_->HasPendingTask());
198 main_task_runner_->RunUntilIdle(); 192 main_task_runner_->RunUntilIdle();
199 EXPECT_EQ(0u, event_queue().size()); 193 EXPECT_EQ(0u, event_queue().size());
200 EXPECT_EQ(2u, additional_acked_events_.size()); 194 EXPECT_EQ(2u, additional_acked_events_.size());
201 EXPECT_EQ(kEvents[2].uniqueTouchEventId, additional_acked_events_.at(0)); 195 EXPECT_EQ(kEvents[2].uniqueTouchEventId, additional_acked_events_.at(0));
202 EXPECT_EQ(kEvents[3].uniqueTouchEventId, additional_acked_events_.at(1)); 196 EXPECT_EQ(kEvents[3].uniqueTouchEventId, additional_acked_events_.at(1));
203 } 197 }
204 198
205 TEST_F(MainThreadEventQueueTest, InterleavedEvents) { 199 TEST_F(MainThreadEventQueueTest, InterleavedEvents) {
206 WebMouseWheelEvent kWheelEvents[2] = { 200 WebMouseWheelEvent kWheelEvents[2] = {
207 SyntheticWebMouseWheelEventBuilder::Build(10, 10, 0, 53, 0, false), 201 SyntheticWebMouseWheelEventBuilder::Build(10, 10, 0, 53, 0, false),
208 SyntheticWebMouseWheelEventBuilder::Build(20, 20, 0, 53, 0, false), 202 SyntheticWebMouseWheelEventBuilder::Build(20, 20, 0, 53, 0, false),
209 }; 203 };
210 SyntheticWebTouchEvent kTouchEvents[2]; 204 SyntheticWebTouchEvent kTouchEvents[2];
211 kTouchEvents[0].PressPoint(10, 10); 205 kTouchEvents[0].PressPoint(10, 10);
212 kTouchEvents[0].MovePoint(0, 20, 20); 206 kTouchEvents[0].MovePoint(0, 20, 20);
213 kTouchEvents[1].PressPoint(10, 10); 207 kTouchEvents[1].PressPoint(10, 10);
214 kTouchEvents[1].MovePoint(0, 30, 30); 208 kTouchEvents[1].MovePoint(0, 30, 30);
215 209
216 EXPECT_FALSE(main_task_runner_->HasPendingTask()); 210 EXPECT_FALSE(main_task_runner_->HasPendingTask());
217 EXPECT_EQ(0u, event_queue().size()); 211 EXPECT_EQ(0u, event_queue().size());
218 queue_->HandleEvent(&kWheelEvents[0], ui::LatencyInfo(), 212
219 DISPATCH_TYPE_BLOCKING, 213 HandleEvent(kWheelEvents[0], INPUT_EVENT_ACK_STATE_SET_NON_BLOCKING);
220 INPUT_EVENT_ACK_STATE_SET_NON_BLOCKING); 214 HandleEvent(kTouchEvents[0], INPUT_EVENT_ACK_STATE_SET_NON_BLOCKING);
221 queue_->HandleEvent(&kTouchEvents[0], ui::LatencyInfo(), 215 HandleEvent(kWheelEvents[1], INPUT_EVENT_ACK_STATE_SET_NON_BLOCKING);
222 DISPATCH_TYPE_BLOCKING, 216 HandleEvent(kTouchEvents[1], INPUT_EVENT_ACK_STATE_SET_NON_BLOCKING);
223 INPUT_EVENT_ACK_STATE_SET_NON_BLOCKING); 217
224 queue_->HandleEvent(&kWheelEvents[1], ui::LatencyInfo(),
225 DISPATCH_TYPE_BLOCKING,
226 INPUT_EVENT_ACK_STATE_SET_NON_BLOCKING);
227 queue_->HandleEvent(&kTouchEvents[1], ui::LatencyInfo(),
228 DISPATCH_TYPE_BLOCKING,
229 INPUT_EVENT_ACK_STATE_SET_NON_BLOCKING);
230 EXPECT_EQ(2u, event_queue().size()); 218 EXPECT_EQ(2u, event_queue().size());
231 EXPECT_TRUE(main_task_runner_->HasPendingTask()); 219 EXPECT_TRUE(main_task_runner_->HasPendingTask());
232 main_task_runner_->RunUntilIdle(); 220 main_task_runner_->RunUntilIdle();
233 EXPECT_FALSE(main_task_runner_->HasPendingTask()); 221 EXPECT_FALSE(main_task_runner_->HasPendingTask());
234 EXPECT_EQ(0u, event_queue().size()); 222 EXPECT_EQ(0u, event_queue().size());
235 EXPECT_EQ(2u, handled_events_.size()); 223 EXPECT_EQ(2u, handled_events_.size());
236 { 224 {
237 EXPECT_EQ(kWheelEvents[0].size, handled_events_.at(0)->size); 225 EXPECT_EQ(kWheelEvents[0].size, handled_events_.at(0)->size);
238 EXPECT_EQ(kWheelEvents[0].type, handled_events_.at(0)->type); 226 EXPECT_EQ(kWheelEvents[0].type, handled_events_.at(0)->type);
239 const WebMouseWheelEvent* last_wheel_event = 227 const WebMouseWheelEvent* last_wheel_event =
(...skipping 13 matching lines...) Expand all
253 static_cast<const WebTouchEvent*>(handled_events_.at(1).get()); 241 static_cast<const WebTouchEvent*>(handled_events_.at(1).get());
254 WebTouchEvent coalesced_event = kTouchEvents[0]; 242 WebTouchEvent coalesced_event = kTouchEvents[0];
255 internal::Coalesce(kTouchEvents[1], &coalesced_event); 243 internal::Coalesce(kTouchEvents[1], &coalesced_event);
256 coalesced_event.dispatchType = 244 coalesced_event.dispatchType =
257 WebInputEvent::DispatchType::ListenersNonBlockingPassive; 245 WebInputEvent::DispatchType::ListenersNonBlockingPassive;
258 EXPECT_EQ(coalesced_event, *last_touch_event); 246 EXPECT_EQ(coalesced_event, *last_touch_event);
259 } 247 }
260 } 248 }
261 249
262 } // namespace content 250 } // 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