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

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

Issue 2162143002: Don't use PostTask queueing between compositor and main thread. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Rebase 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
11 #include "base/macros.h" 11 #include "base/macros.h"
12 #include "base/test/test_simple_task_runner.h"
12 #include "build/build_config.h" 13 #include "build/build_config.h"
13 #include "content/common/input/synthetic_web_input_event_builders.h" 14 #include "content/common/input/synthetic_web_input_event_builders.h"
14 #include "content/renderer/input/main_thread_event_queue.h" 15 #include "content/renderer/input/main_thread_event_queue.h"
15 #include "testing/gtest/include/gtest/gtest.h" 16 #include "testing/gtest/include/gtest/gtest.h"
16 17
17 using blink::WebInputEvent; 18 using blink::WebInputEvent;
18 using blink::WebMouseEvent; 19 using blink::WebMouseEvent;
19 using blink::WebMouseWheelEvent; 20 using blink::WebMouseWheelEvent;
20 using blink::WebTouchEvent; 21 using blink::WebTouchEvent;
21 22
22 namespace content { 23 namespace content {
23 namespace { 24 namespace {
24 25
25 const int kTestRoutingID = 13; 26 const int kTestRoutingID = 13;
26 } 27 }
27 28
28 class MainThreadEventQueueTest : public testing::Test, 29 class MainThreadEventQueueTest : public testing::Test,
29 public MainThreadEventQueueClient { 30 public MainThreadEventQueueClient {
30 public: 31 public:
31 MainThreadEventQueueTest() : queue_(kTestRoutingID, this) {} 32 MainThreadEventQueueTest()
33 : main_task_runner_(new base::TestSimpleTaskRunner()),
34 queue_(kTestRoutingID, this, main_task_runner_) {}
32 35
33 void SendEventToMainThread(int routing_id, 36 void HandleEventOnMainThread(int routing_id,
34 const blink::WebInputEvent* event, 37 const blink::WebInputEvent* event,
35 const ui::LatencyInfo& latency, 38 const ui::LatencyInfo& latency,
36 InputEventDispatchType type) override { 39 InputEventDispatchType type) override {
37 ASSERT_EQ(kTestRoutingID, routing_id); 40 ASSERT_EQ(kTestRoutingID, routing_id);
38 const unsigned char* eventPtr = 41 last_event_ = WebInputEventTraits::Clone(*event);
39 reinterpret_cast<const unsigned char*>(event); 42 queue_.EventHandled(event->type, INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
40 last_event_.assign(eventPtr, eventPtr + event->size);
41 } 43 }
42 44
43 void SendInputEventAck(int routing_id, 45 void SendInputEventAck(int routing_id,
44 blink::WebInputEvent::Type type, 46 blink::WebInputEvent::Type type,
45 InputEventAckState ack_result, 47 InputEventAckState ack_result,
46 uint32_t touch_event_id) override { 48 uint32_t touch_event_id) override {
47 additional_acked_events_.push_back(touch_event_id); 49 additional_acked_events_.push_back(touch_event_id);
48 } 50 }
49 51
50 WebInputEventQueue<EventWithDispatchType>& event_queue() { 52 WebInputEventQueue<EventWithDispatchType>& event_queue() {
51 return queue_.events_; 53 return queue_.events_;
52 } 54 }
53 55
54 bool eventPendingToMain() const { return queue_.sent_notification_to_main_; } 56 bool eventPendingToMain() const { return queue_.sent_notification_to_main_; }
55 57
56 protected: 58 protected:
59 scoped_refptr<base::TestSimpleTaskRunner> main_task_runner_;
57 MainThreadEventQueue queue_; 60 MainThreadEventQueue queue_;
58 std::vector<unsigned char> last_event_; 61 ScopedWebInputEvent last_event_;
59 std::vector<uint32_t> additional_acked_events_; 62 std::vector<uint32_t> additional_acked_events_;
60 }; 63 };
61 64
62 TEST_F(MainThreadEventQueueTest, NonBlockingWheel) { 65 TEST_F(MainThreadEventQueueTest, NonBlockingWheel) {
63 WebMouseWheelEvent kEvents[4] = { 66 WebMouseWheelEvent kEvents[4] = {
64 SyntheticWebMouseWheelEventBuilder::Build(10, 10, 0, 53, 0, false), 67 SyntheticWebMouseWheelEventBuilder::Build(10, 10, 0, 53, 0, false),
65 SyntheticWebMouseWheelEventBuilder::Build(20, 20, 0, 53, 0, false), 68 SyntheticWebMouseWheelEventBuilder::Build(20, 20, 0, 53, 0, false),
66 SyntheticWebMouseWheelEventBuilder::Build(30, 30, 0, 53, 1, false), 69 SyntheticWebMouseWheelEventBuilder::Build(30, 30, 0, 53, 1, false),
67 SyntheticWebMouseWheelEventBuilder::Build(30, 30, 0, 53, 1, false), 70 SyntheticWebMouseWheelEventBuilder::Build(30, 30, 0, 53, 1, false),
68 }; 71 };
69 72
70 ASSERT_FALSE(eventPendingToMain()); 73 ASSERT_FALSE(main_task_runner_->HasPendingTask());
tdresser 2016/07/27 13:51:51 Why are we using ASSERT instead of EXPECT througho
dtapuska 2016/08/03 20:20:54 Done.
74 ASSERT_EQ(0u, event_queue().size());
71 queue_.HandleEvent(&kEvents[0], ui::LatencyInfo(), DISPATCH_TYPE_BLOCKING, 75 queue_.HandleEvent(&kEvents[0], ui::LatencyInfo(), DISPATCH_TYPE_BLOCKING,
72 INPUT_EVENT_ACK_STATE_SET_NON_BLOCKING); 76 INPUT_EVENT_ACK_STATE_SET_NON_BLOCKING);
73 ASSERT_TRUE(eventPendingToMain());
74 queue_.HandleEvent(&kEvents[1], ui::LatencyInfo(), DISPATCH_TYPE_BLOCKING, 77 queue_.HandleEvent(&kEvents[1], ui::LatencyInfo(), DISPATCH_TYPE_BLOCKING,
75 INPUT_EVENT_ACK_STATE_SET_NON_BLOCKING); 78 INPUT_EVENT_ACK_STATE_SET_NON_BLOCKING);
76 ASSERT_EQ(kEvents[0].size, last_event_.size());
77 kEvents[0].dispatchType =
78 WebInputEvent::DispatchType::ListenersNonBlockingPassive;
79 ASSERT_TRUE(memcmp(&last_event_[0], &kEvents[0], kEvents[0].size) == 0);
80 queue_.EventHandled(blink::WebInputEvent::MouseWheel,
81 INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
82 ASSERT_EQ(kEvents[1].size, last_event_.size());
83 kEvents[1].dispatchType =
84 WebInputEvent::DispatchType::ListenersNonBlockingPassive;
85 ASSERT_TRUE(memcmp(&last_event_[0], &kEvents[1], kEvents[1].size) == 0);
86 ASSERT_TRUE(eventPendingToMain());
87 queue_.EventHandled(blink::WebInputEvent::MouseWheel,
88 INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
89 ASSERT_FALSE(eventPendingToMain());
90
91 // Ensure that coalescing takes place.
92 queue_.HandleEvent(&kEvents[0], ui::LatencyInfo(), DISPATCH_TYPE_BLOCKING,
93 INPUT_EVENT_ACK_STATE_SET_NON_BLOCKING);
94 queue_.HandleEvent(&kEvents[2], ui::LatencyInfo(), DISPATCH_TYPE_BLOCKING, 79 queue_.HandleEvent(&kEvents[2], ui::LatencyInfo(), DISPATCH_TYPE_BLOCKING,
95 INPUT_EVENT_ACK_STATE_SET_NON_BLOCKING); 80 INPUT_EVENT_ACK_STATE_SET_NON_BLOCKING);
96 queue_.HandleEvent(&kEvents[3], ui::LatencyInfo(), DISPATCH_TYPE_BLOCKING, 81 queue_.HandleEvent(&kEvents[3], ui::LatencyInfo(), DISPATCH_TYPE_BLOCKING,
97 INPUT_EVENT_ACK_STATE_SET_NON_BLOCKING); 82 INPUT_EVENT_ACK_STATE_SET_NON_BLOCKING);
98 ASSERT_EQ(1u, event_queue().size()); 83 ASSERT_EQ(2u, event_queue().size());
99 ASSERT_TRUE(eventPendingToMain()); 84 ASSERT_TRUE(main_task_runner_->HasPendingTask());
85 main_task_runner_->RunPendingTasks();
86 ASSERT_TRUE(main_task_runner_->HasPendingTask());
87
88 {
89 ASSERT_EQ(kEvents[0].size, last_event_->size);
90 ASSERT_EQ(kEvents[0].type, last_event_->type);
91 const WebMouseWheelEvent* last_wheel_event =
92 static_cast<const WebMouseWheelEvent*>(last_event_.get());
93 ASSERT_EQ(WebInputEvent::DispatchType::ListenersNonBlockingPassive,
94 last_wheel_event->dispatchType);
95 WebMouseWheelEvent coalesced_event = kEvents[0];
96 internal::Coalesce(kEvents[1], &coalesced_event);
97 coalesced_event.dispatchType =
98 WebInputEvent::DispatchType::ListenersNonBlockingPassive;
99 ASSERT_TRUE(
100 memcmp(&coalesced_event, last_wheel_event, coalesced_event.size) == 0);
tdresser 2016/07/27 13:51:51 Do we not have a usable equality check? We could d
dtapuska 2016/08/03 20:20:54 Done
101 }
102
103 ASSERT_TRUE(main_task_runner_->HasPendingTask());
104 main_task_runner_->RunPendingTasks();
105 ASSERT_FALSE(main_task_runner_->HasPendingTask());
106 ASSERT_EQ(0u, event_queue().size());
107 {
108 const WebMouseWheelEvent* last_wheel_event =
109 static_cast<const WebMouseWheelEvent*>(last_event_.get());
110 WebMouseWheelEvent coalesced_event = kEvents[2];
111 internal::Coalesce(kEvents[3], &coalesced_event);
112 coalesced_event.dispatchType =
113 WebInputEvent::DispatchType::ListenersNonBlockingPassive;
114 ASSERT_TRUE(
115 memcmp(&coalesced_event, last_wheel_event, coalesced_event.size) == 0);
116 }
100 } 117 }
101 118
102 TEST_F(MainThreadEventQueueTest, NonBlockingTouch) { 119 TEST_F(MainThreadEventQueueTest, NonBlockingTouch) {
103 SyntheticWebTouchEvent kEvents[4]; 120 SyntheticWebTouchEvent kEvents[4];
104 kEvents[0].PressPoint(10, 10); 121 kEvents[0].PressPoint(10, 10);
105 kEvents[1].PressPoint(10, 10); 122 kEvents[1].PressPoint(10, 10);
106 kEvents[1].modifiers = 1; 123 kEvents[1].modifiers = 1;
107 kEvents[1].MovePoint(0, 20, 20); 124 kEvents[1].MovePoint(0, 20, 20);
108 kEvents[2].PressPoint(10, 10); 125 kEvents[2].PressPoint(10, 10);
109 kEvents[2].MovePoint(0, 30, 30); 126 kEvents[2].MovePoint(0, 30, 30);
110 kEvents[3].PressPoint(10, 10); 127 kEvents[3].PressPoint(10, 10);
111 kEvents[3].MovePoint(0, 35, 35); 128 kEvents[3].MovePoint(0, 35, 35);
112
113 ASSERT_FALSE(eventPendingToMain());
114 queue_.HandleEvent(&kEvents[0], ui::LatencyInfo(), DISPATCH_TYPE_BLOCKING, 129 queue_.HandleEvent(&kEvents[0], ui::LatencyInfo(), DISPATCH_TYPE_BLOCKING,
115 INPUT_EVENT_ACK_STATE_SET_NON_BLOCKING); 130 INPUT_EVENT_ACK_STATE_SET_NON_BLOCKING);
116 ASSERT_TRUE(eventPendingToMain());
117 queue_.HandleEvent(&kEvents[1], ui::LatencyInfo(), DISPATCH_TYPE_BLOCKING, 131 queue_.HandleEvent(&kEvents[1], ui::LatencyInfo(), DISPATCH_TYPE_BLOCKING,
118 INPUT_EVENT_ACK_STATE_SET_NON_BLOCKING); 132 INPUT_EVENT_ACK_STATE_SET_NON_BLOCKING);
119 ASSERT_EQ(kEvents[0].size, last_event_.size());
120 kEvents[0].dispatchType =
121 WebInputEvent::DispatchType::ListenersNonBlockingPassive;
122 ASSERT_TRUE(memcmp(&last_event_[0], &kEvents[0], kEvents[0].size) == 0);
123 queue_.EventHandled(blink::WebInputEvent::TouchStart,
124 INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
125 ASSERT_EQ(kEvents[1].size, last_event_.size());
126 kEvents[1].dispatchType =
127 WebInputEvent::DispatchType::ListenersNonBlockingPassive;
128 ASSERT_TRUE(memcmp(&last_event_[0], &kEvents[1], kEvents[1].size) == 0);
129 ASSERT_TRUE(eventPendingToMain());
130 queue_.EventHandled(blink::WebInputEvent::TouchMove,
131 INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
132 ASSERT_FALSE(eventPendingToMain());
133
134 // Ensure that coalescing takes place.
135 queue_.HandleEvent(&kEvents[0], ui::LatencyInfo(), DISPATCH_TYPE_BLOCKING,
136 INPUT_EVENT_ACK_STATE_SET_NON_BLOCKING);
137 queue_.HandleEvent(&kEvents[2], ui::LatencyInfo(), DISPATCH_TYPE_BLOCKING, 133 queue_.HandleEvent(&kEvents[2], ui::LatencyInfo(), DISPATCH_TYPE_BLOCKING,
138 INPUT_EVENT_ACK_STATE_SET_NON_BLOCKING); 134 INPUT_EVENT_ACK_STATE_SET_NON_BLOCKING);
139 queue_.HandleEvent(&kEvents[3], ui::LatencyInfo(), DISPATCH_TYPE_BLOCKING, 135 queue_.HandleEvent(&kEvents[3], ui::LatencyInfo(), DISPATCH_TYPE_BLOCKING,
140 INPUT_EVENT_ACK_STATE_SET_NON_BLOCKING); 136 INPUT_EVENT_ACK_STATE_SET_NON_BLOCKING);
137
138 ASSERT_EQ(3u, event_queue().size());
139 ASSERT_TRUE(main_task_runner_->HasPendingTask());
140 main_task_runner_->RunPendingTasks();
141 ASSERT_TRUE(main_task_runner_->HasPendingTask());
142 ASSERT_EQ(2u, event_queue().size());
143
144 ASSERT_EQ(kEvents[0].size, last_event_->size);
145 kEvents[0].dispatchType =
146 WebInputEvent::DispatchType::ListenersNonBlockingPassive;
147 ASSERT_TRUE(memcmp(&kEvents[0], last_event_.get(), kEvents[0].size) == 0);
148
149 main_task_runner_->RunPendingTasks();
150 ASSERT_TRUE(main_task_runner_->HasPendingTask());
141 ASSERT_EQ(1u, event_queue().size()); 151 ASSERT_EQ(1u, event_queue().size());
142 ASSERT_TRUE(eventPendingToMain()); 152
153 ASSERT_EQ(kEvents[1].size, last_event_->size);
154 kEvents[1].dispatchType =
155 WebInputEvent::DispatchType::ListenersNonBlockingPassive;
156 ASSERT_TRUE(memcmp(&kEvents[1], last_event_.get(), kEvents[1].size) == 0);
157
158 main_task_runner_->RunPendingTasks();
159 ASSERT_FALSE(main_task_runner_->HasPendingTask());
160 ASSERT_EQ(0u, event_queue().size());
161 {
162 ASSERT_EQ(kEvents[2].size, last_event_->size);
163 ASSERT_EQ(kEvents[2].type, last_event_->type);
164 const WebTouchEvent* last_touch_event =
165 static_cast<const WebTouchEvent*>(last_event_.get());
166 WebTouchEvent coalesced_event = kEvents[2];
167 internal::Coalesce(kEvents[3], &coalesced_event);
168 coalesced_event.dispatchType =
169 WebInputEvent::DispatchType::ListenersNonBlockingPassive;
170 ASSERT_TRUE(
171 memcmp(&coalesced_event, last_touch_event, coalesced_event.size) == 0);
172 }
143 } 173 }
144 174
145 TEST_F(MainThreadEventQueueTest, BlockingTouch) { 175 TEST_F(MainThreadEventQueueTest, BlockingTouch) {
146 SyntheticWebTouchEvent kEvents[4]; 176 SyntheticWebTouchEvent kEvents[4];
147 kEvents[0].PressPoint(10, 10); 177 kEvents[0].PressPoint(10, 10);
148 kEvents[1].PressPoint(10, 10); 178 kEvents[1].PressPoint(10, 10);
149 kEvents[1].MovePoint(0, 20, 20); 179 kEvents[1].MovePoint(0, 20, 20);
150 kEvents[2].PressPoint(10, 10); 180 kEvents[2].PressPoint(10, 10);
151 kEvents[2].MovePoint(0, 30, 30); 181 kEvents[2].MovePoint(0, 30, 30);
152 kEvents[3].PressPoint(10, 10); 182 kEvents[3].PressPoint(10, 10);
153 kEvents[3].MovePoint(0, 35, 35); 183 kEvents[3].MovePoint(0, 35, 35);
154
155 ASSERT_FALSE(eventPendingToMain());
156 // Ensure that coalescing takes place. 184 // Ensure that coalescing takes place.
157 queue_.HandleEvent(&kEvents[0], ui::LatencyInfo(), DISPATCH_TYPE_BLOCKING, 185 queue_.HandleEvent(&kEvents[0], ui::LatencyInfo(), DISPATCH_TYPE_BLOCKING,
158 INPUT_EVENT_ACK_STATE_SET_NON_BLOCKING); 186 INPUT_EVENT_ACK_STATE_SET_NON_BLOCKING);
159 queue_.HandleEvent(&kEvents[1], ui::LatencyInfo(), DISPATCH_TYPE_BLOCKING, 187 queue_.HandleEvent(&kEvents[1], ui::LatencyInfo(), DISPATCH_TYPE_BLOCKING,
160 INPUT_EVENT_ACK_STATE_NOT_CONSUMED); 188 INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
161 queue_.HandleEvent(&kEvents[2], ui::LatencyInfo(), DISPATCH_TYPE_BLOCKING, 189 queue_.HandleEvent(&kEvents[2], ui::LatencyInfo(), DISPATCH_TYPE_BLOCKING,
162 INPUT_EVENT_ACK_STATE_NOT_CONSUMED); 190 INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
163 queue_.HandleEvent(&kEvents[3], ui::LatencyInfo(), DISPATCH_TYPE_BLOCKING, 191 queue_.HandleEvent(&kEvents[3], ui::LatencyInfo(), DISPATCH_TYPE_BLOCKING,
164 INPUT_EVENT_ACK_STATE_NOT_CONSUMED); 192 INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
193 ASSERT_EQ(2u, event_queue().size());
194 ASSERT_TRUE(main_task_runner_->HasPendingTask());
195 main_task_runner_->RunPendingTasks();
196 ASSERT_TRUE(main_task_runner_->HasPendingTask());
165 ASSERT_EQ(1u, event_queue().size()); 197 ASSERT_EQ(1u, event_queue().size());
166 ASSERT_TRUE(eventPendingToMain()); 198 main_task_runner_->RunPendingTasks();
167 queue_.EventHandled(kEvents[0].type, INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
168 ASSERT_EQ(0u, event_queue().size()); 199 ASSERT_EQ(0u, event_queue().size());
169 queue_.EventHandled(kEvents[1].type, INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
170 ASSERT_EQ(2u, additional_acked_events_.size()); 200 ASSERT_EQ(2u, additional_acked_events_.size());
171 ASSERT_EQ(kEvents[2].uniqueTouchEventId, additional_acked_events_.at(0)); 201 ASSERT_EQ(kEvents[2].uniqueTouchEventId, additional_acked_events_.at(0));
172 ASSERT_EQ(kEvents[3].uniqueTouchEventId, additional_acked_events_.at(1)); 202 ASSERT_EQ(kEvents[3].uniqueTouchEventId, additional_acked_events_.at(1));
173 } 203 }
174 204
205 TEST_F(MainThreadEventQueueTest, InterleavedEvents) {
206 WebMouseWheelEvent kWheelEvents[2] = {
207 SyntheticWebMouseWheelEventBuilder::Build(10, 10, 0, 53, 0, false),
208 SyntheticWebMouseWheelEventBuilder::Build(20, 20, 0, 53, 0, false),
209 };
210 SyntheticWebTouchEvent kTouchEvents[2];
211 kTouchEvents[0].PressPoint(10, 10);
212 kTouchEvents[0].MovePoint(0, 20, 20);
213 kTouchEvents[1].PressPoint(10, 10);
214 kTouchEvents[1].MovePoint(0, 30, 30);
215
216 ASSERT_FALSE(main_task_runner_->HasPendingTask());
217 ASSERT_EQ(0u, event_queue().size());
218 queue_.HandleEvent(&kWheelEvents[0], ui::LatencyInfo(),
219 DISPATCH_TYPE_BLOCKING,
220 INPUT_EVENT_ACK_STATE_SET_NON_BLOCKING);
221 queue_.HandleEvent(&kTouchEvents[0], ui::LatencyInfo(),
222 DISPATCH_TYPE_BLOCKING,
223 INPUT_EVENT_ACK_STATE_SET_NON_BLOCKING);
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 ASSERT_EQ(2u, event_queue().size());
231 ASSERT_TRUE(main_task_runner_->HasPendingTask());
232 main_task_runner_->RunPendingTasks();
233 ASSERT_TRUE(main_task_runner_->HasPendingTask());
234
235 {
236 ASSERT_EQ(kWheelEvents[0].size, last_event_->size);
237 ASSERT_EQ(kWheelEvents[0].type, last_event_->type);
238 const WebMouseWheelEvent* last_wheel_event =
239 static_cast<const WebMouseWheelEvent*>(last_event_.get());
240 ASSERT_EQ(WebInputEvent::DispatchType::ListenersNonBlockingPassive,
241 last_wheel_event->dispatchType);
242 WebMouseWheelEvent coalesced_event = kWheelEvents[0];
243 internal::Coalesce(kWheelEvents[1], &coalesced_event);
244 coalesced_event.dispatchType =
245 WebInputEvent::DispatchType::ListenersNonBlockingPassive;
246 ASSERT_TRUE(
247 memcmp(&coalesced_event, last_wheel_event, coalesced_event.size) == 0);
248 }
249
250 ASSERT_TRUE(main_task_runner_->HasPendingTask());
251 main_task_runner_->RunPendingTasks();
252 ASSERT_FALSE(main_task_runner_->HasPendingTask());
253 ASSERT_EQ(0u, event_queue().size());
254 {
255 ASSERT_EQ(kTouchEvents[0].size, last_event_->size);
256 ASSERT_EQ(kTouchEvents[0].type, last_event_->type);
257 const WebTouchEvent* last_touch_event =
258 static_cast<const WebTouchEvent*>(last_event_.get());
259 WebTouchEvent coalesced_event = kTouchEvents[0];
260 internal::Coalesce(kTouchEvents[1], &coalesced_event);
261 coalesced_event.dispatchType =
262 WebInputEvent::DispatchType::ListenersNonBlockingPassive;
263 ASSERT_TRUE(
264 memcmp(&coalesced_event, last_touch_event, coalesced_event.size) == 0);
265 }
266 }
267
175 } // namespace content 268 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698