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

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

Issue 2170913002: Generalize the main thread event queue into a common event queue. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fix nits Created 4 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2016 The Chromium Authors. All rights reserved. 1 // Copyright 2016 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include <stddef.h> 5 #include <stddef.h>
6 6
7 #include <new> 7 #include <new>
8 #include <utility> 8 #include <utility>
9 #include <vector> 9 #include <vector>
10 10
(...skipping 29 matching lines...) Expand all
40 last_event_.assign(eventPtr, eventPtr + event->size); 40 last_event_.assign(eventPtr, eventPtr + event->size);
41 } 41 }
42 42
43 void SendInputEventAck(int routing_id, 43 void SendInputEventAck(int routing_id,
44 blink::WebInputEvent::Type type, 44 blink::WebInputEvent::Type type,
45 InputEventAckState ack_result, 45 InputEventAckState ack_result,
46 uint32_t touch_event_id) override { 46 uint32_t touch_event_id) override {
47 additional_acked_events_.push_back(touch_event_id); 47 additional_acked_events_.push_back(touch_event_id);
48 } 48 }
49 49
50 WebInputEventQueue<PendingMouseWheelEvent>& wheel_event_queue() { 50 WebInputEventQueue<EventWithDispatchType>& event_queue() {
51 return queue_.wheel_events_; 51 return queue_.events_;
52 } 52 }
53 53
54 WebInputEventQueue<PendingTouchEvent>& touch_event_queue() { 54 bool eventPendingToMain() const { return queue_.sent_notification_to_main_; }
55 return queue_.touch_events_;
56 }
57 55
58 protected: 56 protected:
59 MainThreadEventQueue queue_; 57 MainThreadEventQueue queue_;
60 std::vector<unsigned char> last_event_; 58 std::vector<unsigned char> last_event_;
61 std::vector<uint32_t> additional_acked_events_; 59 std::vector<uint32_t> additional_acked_events_;
62 }; 60 };
63 61
64 TEST_F(MainThreadEventQueueTest, NonBlockingWheel) { 62 TEST_F(MainThreadEventQueueTest, NonBlockingWheel) {
65 WebMouseWheelEvent kEvents[4] = { 63 WebMouseWheelEvent kEvents[4] = {
66 SyntheticWebMouseWheelEventBuilder::Build(10, 10, 0, 53, 0, false), 64 SyntheticWebMouseWheelEventBuilder::Build(10, 10, 0, 53, 0, false),
67 SyntheticWebMouseWheelEventBuilder::Build(20, 20, 0, 53, 0, false), 65 SyntheticWebMouseWheelEventBuilder::Build(20, 20, 0, 53, 0, false),
68 SyntheticWebMouseWheelEventBuilder::Build(30, 30, 0, 53, 1, 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 }; 68 };
71 69
72 ASSERT_EQ(WebInputEventQueueState::ITEM_NOT_PENDING, 70 ASSERT_FALSE(eventPendingToMain());
73 wheel_event_queue().state());
74 queue_.HandleEvent(&kEvents[0], ui::LatencyInfo(), DISPATCH_TYPE_BLOCKING, 71 queue_.HandleEvent(&kEvents[0], ui::LatencyInfo(), DISPATCH_TYPE_BLOCKING,
75 INPUT_EVENT_ACK_STATE_SET_NON_BLOCKING); 72 INPUT_EVENT_ACK_STATE_SET_NON_BLOCKING);
76 ASSERT_EQ(WebInputEventQueueState::ITEM_PENDING, wheel_event_queue().state()); 73 ASSERT_TRUE(eventPendingToMain());
77 queue_.HandleEvent(&kEvents[1], ui::LatencyInfo(), DISPATCH_TYPE_BLOCKING, 74 queue_.HandleEvent(&kEvents[1], ui::LatencyInfo(), DISPATCH_TYPE_BLOCKING,
78 INPUT_EVENT_ACK_STATE_SET_NON_BLOCKING); 75 INPUT_EVENT_ACK_STATE_SET_NON_BLOCKING);
79 ASSERT_EQ(kEvents[0].size, last_event_.size()); 76 ASSERT_EQ(kEvents[0].size, last_event_.size());
80 kEvents[0].dispatchType = 77 kEvents[0].dispatchType =
81 WebInputEvent::DispatchType::ListenersNonBlockingPassive; 78 WebInputEvent::DispatchType::ListenersNonBlockingPassive;
82 ASSERT_TRUE(memcmp(&last_event_[0], &kEvents[0], kEvents[0].size) == 0); 79 ASSERT_TRUE(memcmp(&last_event_[0], &kEvents[0], kEvents[0].size) == 0);
83 queue_.EventHandled(blink::WebInputEvent::MouseWheel, 80 queue_.EventHandled(blink::WebInputEvent::MouseWheel,
84 INPUT_EVENT_ACK_STATE_NOT_CONSUMED); 81 INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
85 ASSERT_EQ(kEvents[1].size, last_event_.size()); 82 ASSERT_EQ(kEvents[1].size, last_event_.size());
86 kEvents[1].dispatchType = 83 kEvents[1].dispatchType =
87 WebInputEvent::DispatchType::ListenersNonBlockingPassive; 84 WebInputEvent::DispatchType::ListenersNonBlockingPassive;
88 ASSERT_TRUE(memcmp(&last_event_[0], &kEvents[1], kEvents[1].size) == 0); 85 ASSERT_TRUE(memcmp(&last_event_[0], &kEvents[1], kEvents[1].size) == 0);
89 ASSERT_EQ(WebInputEventQueueState::ITEM_PENDING, wheel_event_queue().state()); 86 ASSERT_TRUE(eventPendingToMain());
90 queue_.EventHandled(blink::WebInputEvent::MouseWheel, 87 queue_.EventHandled(blink::WebInputEvent::MouseWheel,
91 INPUT_EVENT_ACK_STATE_NOT_CONSUMED); 88 INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
92 ASSERT_EQ(WebInputEventQueueState::ITEM_NOT_PENDING, 89 ASSERT_FALSE(eventPendingToMain());
93 wheel_event_queue().state());
94 90
95 // Ensure that coalescing takes place. 91 // Ensure that coalescing takes place.
96 queue_.HandleEvent(&kEvents[0], ui::LatencyInfo(), DISPATCH_TYPE_BLOCKING, 92 queue_.HandleEvent(&kEvents[0], ui::LatencyInfo(), DISPATCH_TYPE_BLOCKING,
97 INPUT_EVENT_ACK_STATE_SET_NON_BLOCKING); 93 INPUT_EVENT_ACK_STATE_SET_NON_BLOCKING);
98 queue_.HandleEvent(&kEvents[2], ui::LatencyInfo(), DISPATCH_TYPE_BLOCKING, 94 queue_.HandleEvent(&kEvents[2], ui::LatencyInfo(), DISPATCH_TYPE_BLOCKING,
99 INPUT_EVENT_ACK_STATE_SET_NON_BLOCKING); 95 INPUT_EVENT_ACK_STATE_SET_NON_BLOCKING);
100 queue_.HandleEvent(&kEvents[3], ui::LatencyInfo(), DISPATCH_TYPE_BLOCKING, 96 queue_.HandleEvent(&kEvents[3], ui::LatencyInfo(), DISPATCH_TYPE_BLOCKING,
101 INPUT_EVENT_ACK_STATE_SET_NON_BLOCKING); 97 INPUT_EVENT_ACK_STATE_SET_NON_BLOCKING);
102 ASSERT_EQ(1u, wheel_event_queue().size()); 98 ASSERT_EQ(1u, event_queue().size());
103 ASSERT_EQ(WebInputEventQueueState::ITEM_PENDING, wheel_event_queue().state()); 99 ASSERT_TRUE(eventPendingToMain());
104 } 100 }
105 101
106 TEST_F(MainThreadEventQueueTest, NonBlockingTouch) { 102 TEST_F(MainThreadEventQueueTest, NonBlockingTouch) {
107 SyntheticWebTouchEvent kEvents[4]; 103 SyntheticWebTouchEvent kEvents[4];
108 kEvents[0].PressPoint(10, 10); 104 kEvents[0].PressPoint(10, 10);
109 kEvents[1].PressPoint(10, 10); 105 kEvents[1].PressPoint(10, 10);
110 kEvents[1].modifiers = 1; 106 kEvents[1].modifiers = 1;
111 kEvents[1].MovePoint(0, 20, 20); 107 kEvents[1].MovePoint(0, 20, 20);
112 kEvents[2].PressPoint(10, 10); 108 kEvents[2].PressPoint(10, 10);
113 kEvents[2].MovePoint(0, 30, 30); 109 kEvents[2].MovePoint(0, 30, 30);
114 kEvents[3].PressPoint(10, 10); 110 kEvents[3].PressPoint(10, 10);
115 kEvents[3].MovePoint(0, 35, 35); 111 kEvents[3].MovePoint(0, 35, 35);
116 112
117 ASSERT_EQ(WebInputEventQueueState::ITEM_NOT_PENDING, 113 ASSERT_FALSE(eventPendingToMain());
118 touch_event_queue().state());
119 queue_.HandleEvent(&kEvents[0], ui::LatencyInfo(), DISPATCH_TYPE_BLOCKING, 114 queue_.HandleEvent(&kEvents[0], ui::LatencyInfo(), DISPATCH_TYPE_BLOCKING,
120 INPUT_EVENT_ACK_STATE_SET_NON_BLOCKING); 115 INPUT_EVENT_ACK_STATE_SET_NON_BLOCKING);
121 ASSERT_EQ(WebInputEventQueueState::ITEM_PENDING, touch_event_queue().state()); 116 ASSERT_TRUE(eventPendingToMain());
122 queue_.HandleEvent(&kEvents[1], ui::LatencyInfo(), DISPATCH_TYPE_BLOCKING, 117 queue_.HandleEvent(&kEvents[1], ui::LatencyInfo(), DISPATCH_TYPE_BLOCKING,
123 INPUT_EVENT_ACK_STATE_SET_NON_BLOCKING); 118 INPUT_EVENT_ACK_STATE_SET_NON_BLOCKING);
124 ASSERT_EQ(kEvents[0].size, last_event_.size()); 119 ASSERT_EQ(kEvents[0].size, last_event_.size());
125 kEvents[0].dispatchType = 120 kEvents[0].dispatchType =
126 WebInputEvent::DispatchType::ListenersNonBlockingPassive; 121 WebInputEvent::DispatchType::ListenersNonBlockingPassive;
127 ASSERT_TRUE(memcmp(&last_event_[0], &kEvents[0], kEvents[0].size) == 0); 122 ASSERT_TRUE(memcmp(&last_event_[0], &kEvents[0], kEvents[0].size) == 0);
128 queue_.EventHandled(blink::WebInputEvent::TouchStart, 123 queue_.EventHandled(blink::WebInputEvent::TouchStart,
129 INPUT_EVENT_ACK_STATE_NOT_CONSUMED); 124 INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
130 ASSERT_EQ(kEvents[1].size, last_event_.size()); 125 ASSERT_EQ(kEvents[1].size, last_event_.size());
131 kEvents[1].dispatchType = 126 kEvents[1].dispatchType =
132 WebInputEvent::DispatchType::ListenersNonBlockingPassive; 127 WebInputEvent::DispatchType::ListenersNonBlockingPassive;
133 ASSERT_TRUE(memcmp(&last_event_[0], &kEvents[1], kEvents[1].size) == 0); 128 ASSERT_TRUE(memcmp(&last_event_[0], &kEvents[1], kEvents[1].size) == 0);
134 ASSERT_EQ(WebInputEventQueueState::ITEM_PENDING, touch_event_queue().state()); 129 ASSERT_TRUE(eventPendingToMain());
135 queue_.EventHandled(blink::WebInputEvent::TouchMove, 130 queue_.EventHandled(blink::WebInputEvent::TouchMove,
136 INPUT_EVENT_ACK_STATE_NOT_CONSUMED); 131 INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
137 ASSERT_EQ(WebInputEventQueueState::ITEM_NOT_PENDING, 132 ASSERT_FALSE(eventPendingToMain());
138 touch_event_queue().state());
139 133
140 // Ensure that coalescing takes place. 134 // Ensure that coalescing takes place.
141 queue_.HandleEvent(&kEvents[0], ui::LatencyInfo(), DISPATCH_TYPE_BLOCKING, 135 queue_.HandleEvent(&kEvents[0], ui::LatencyInfo(), DISPATCH_TYPE_BLOCKING,
142 INPUT_EVENT_ACK_STATE_SET_NON_BLOCKING); 136 INPUT_EVENT_ACK_STATE_SET_NON_BLOCKING);
143 queue_.HandleEvent(&kEvents[2], ui::LatencyInfo(), DISPATCH_TYPE_BLOCKING, 137 queue_.HandleEvent(&kEvents[2], ui::LatencyInfo(), DISPATCH_TYPE_BLOCKING,
144 INPUT_EVENT_ACK_STATE_SET_NON_BLOCKING); 138 INPUT_EVENT_ACK_STATE_SET_NON_BLOCKING);
145 queue_.HandleEvent(&kEvents[3], ui::LatencyInfo(), DISPATCH_TYPE_BLOCKING, 139 queue_.HandleEvent(&kEvents[3], ui::LatencyInfo(), DISPATCH_TYPE_BLOCKING,
146 INPUT_EVENT_ACK_STATE_SET_NON_BLOCKING); 140 INPUT_EVENT_ACK_STATE_SET_NON_BLOCKING);
147 ASSERT_EQ(1u, touch_event_queue().size()); 141 ASSERT_EQ(1u, event_queue().size());
148 ASSERT_EQ(WebInputEventQueueState::ITEM_PENDING, touch_event_queue().state()); 142 ASSERT_TRUE(eventPendingToMain());
149 } 143 }
150 144
151 TEST_F(MainThreadEventQueueTest, BlockingTouch) { 145 TEST_F(MainThreadEventQueueTest, BlockingTouch) {
152 SyntheticWebTouchEvent kEvents[4]; 146 SyntheticWebTouchEvent kEvents[4];
153 kEvents[0].PressPoint(10, 10); 147 kEvents[0].PressPoint(10, 10);
154 kEvents[1].PressPoint(10, 10); 148 kEvents[1].PressPoint(10, 10);
155 kEvents[1].MovePoint(0, 20, 20); 149 kEvents[1].MovePoint(0, 20, 20);
156 kEvents[2].PressPoint(10, 10); 150 kEvents[2].PressPoint(10, 10);
157 kEvents[2].MovePoint(0, 30, 30); 151 kEvents[2].MovePoint(0, 30, 30);
158 kEvents[3].PressPoint(10, 10); 152 kEvents[3].PressPoint(10, 10);
159 kEvents[3].MovePoint(0, 35, 35); 153 kEvents[3].MovePoint(0, 35, 35);
160 154
161 ASSERT_EQ(WebInputEventQueueState::ITEM_NOT_PENDING, 155 ASSERT_FALSE(eventPendingToMain());
162 touch_event_queue().state());
163 // Ensure that coalescing takes place. 156 // Ensure that coalescing takes place.
164 queue_.HandleEvent(&kEvents[0], ui::LatencyInfo(), DISPATCH_TYPE_BLOCKING, 157 queue_.HandleEvent(&kEvents[0], ui::LatencyInfo(), DISPATCH_TYPE_BLOCKING,
165 INPUT_EVENT_ACK_STATE_SET_NON_BLOCKING); 158 INPUT_EVENT_ACK_STATE_SET_NON_BLOCKING);
166 queue_.HandleEvent(&kEvents[1], ui::LatencyInfo(), DISPATCH_TYPE_BLOCKING, 159 queue_.HandleEvent(&kEvents[1], ui::LatencyInfo(), DISPATCH_TYPE_BLOCKING,
167 INPUT_EVENT_ACK_STATE_NOT_CONSUMED); 160 INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
168 queue_.HandleEvent(&kEvents[2], ui::LatencyInfo(), DISPATCH_TYPE_BLOCKING, 161 queue_.HandleEvent(&kEvents[2], ui::LatencyInfo(), DISPATCH_TYPE_BLOCKING,
169 INPUT_EVENT_ACK_STATE_NOT_CONSUMED); 162 INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
170 queue_.HandleEvent(&kEvents[3], ui::LatencyInfo(), DISPATCH_TYPE_BLOCKING, 163 queue_.HandleEvent(&kEvents[3], ui::LatencyInfo(), DISPATCH_TYPE_BLOCKING,
171 INPUT_EVENT_ACK_STATE_NOT_CONSUMED); 164 INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
172 ASSERT_EQ(1u, touch_event_queue().size()); 165 ASSERT_EQ(1u, event_queue().size());
173 ASSERT_EQ(WebInputEventQueueState::ITEM_PENDING, touch_event_queue().state()); 166 ASSERT_TRUE(eventPendingToMain());
174 queue_.EventHandled(kEvents[0].type, INPUT_EVENT_ACK_STATE_NOT_CONSUMED); 167 queue_.EventHandled(kEvents[0].type, INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
175 ASSERT_EQ(0u, touch_event_queue().size()); 168 ASSERT_EQ(0u, event_queue().size());
176 queue_.EventHandled(kEvents[1].type, INPUT_EVENT_ACK_STATE_NOT_CONSUMED); 169 queue_.EventHandled(kEvents[1].type, INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
177 ASSERT_EQ(2u, additional_acked_events_.size()); 170 ASSERT_EQ(2u, additional_acked_events_.size());
178 ASSERT_EQ(kEvents[2].uniqueTouchEventId, additional_acked_events_.at(0)); 171 ASSERT_EQ(kEvents[2].uniqueTouchEventId, additional_acked_events_.at(0));
179 ASSERT_EQ(kEvents[3].uniqueTouchEventId, additional_acked_events_.at(1)); 172 ASSERT_EQ(kEvents[3].uniqueTouchEventId, additional_acked_events_.at(1));
180 } 173 }
181 174
182 } // namespace content 175 } // namespace content
OLDNEW
« no previous file with comments | « content/renderer/input/main_thread_event_queue.cc ('k') | third_party/WebKit/public/platform/WebInputEvent.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698