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 22 matching lines...) Expand all Loading... |
33 void SendEventToMainThread(int routing_id, | 33 void SendEventToMainThread(int routing_id, |
34 const blink::WebInputEvent* event, | 34 const blink::WebInputEvent* event, |
35 const ui::LatencyInfo& latency, | 35 const ui::LatencyInfo& latency, |
36 InputEventDispatchType type) override { | 36 InputEventDispatchType type) override { |
37 ASSERT_EQ(kTestRoutingID, routing_id); | 37 ASSERT_EQ(kTestRoutingID, routing_id); |
38 const unsigned char* eventPtr = | 38 const unsigned char* eventPtr = |
39 reinterpret_cast<const unsigned char*>(event); | 39 reinterpret_cast<const unsigned char*>(event); |
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, |
| 44 blink::WebInputEvent::Type type, |
| 45 InputEventAckState ack_result, |
| 46 uint32_t touch_event_id) override { |
| 47 additional_acked_events_.push_back(touch_event_id); |
| 48 } |
| 49 |
43 WebInputEventQueue<PendingMouseWheelEvent>& wheel_event_queue() { | 50 WebInputEventQueue<PendingMouseWheelEvent>& wheel_event_queue() { |
44 return queue_.wheel_events_; | 51 return queue_.wheel_events_; |
45 } | 52 } |
46 | 53 |
47 WebInputEventQueue<PendingTouchEvent>& touch_event_queue() { | 54 WebInputEventQueue<PendingTouchEvent>& touch_event_queue() { |
48 return queue_.touch_events_; | 55 return queue_.touch_events_; |
49 } | 56 } |
50 | 57 |
51 protected: | 58 protected: |
52 MainThreadEventQueue queue_; | 59 MainThreadEventQueue queue_; |
53 std::vector<unsigned char> last_event_; | 60 std::vector<unsigned char> last_event_; |
| 61 std::vector<uint32_t> additional_acked_events_; |
54 }; | 62 }; |
55 | 63 |
56 TEST_F(MainThreadEventQueueTest, NonBlockingWheel) { | 64 TEST_F(MainThreadEventQueueTest, NonBlockingWheel) { |
57 WebMouseWheelEvent kEvents[4] = { | 65 WebMouseWheelEvent kEvents[4] = { |
58 SyntheticWebMouseWheelEventBuilder::Build(10, 10, 0, 53, 0, false), | 66 SyntheticWebMouseWheelEventBuilder::Build(10, 10, 0, 53, 0, false), |
59 SyntheticWebMouseWheelEventBuilder::Build(20, 20, 0, 53, 0, false), | 67 SyntheticWebMouseWheelEventBuilder::Build(20, 20, 0, 53, 0, false), |
60 SyntheticWebMouseWheelEventBuilder::Build(30, 30, 0, 53, 1, false), | 68 SyntheticWebMouseWheelEventBuilder::Build(30, 30, 0, 53, 1, false), |
61 SyntheticWebMouseWheelEventBuilder::Build(30, 30, 0, 53, 1, false), | 69 SyntheticWebMouseWheelEventBuilder::Build(30, 30, 0, 53, 1, false), |
62 }; | 70 }; |
63 | 71 |
64 ASSERT_EQ(WebInputEventQueueState::ITEM_NOT_PENDING, | 72 ASSERT_EQ(WebInputEventQueueState::ITEM_NOT_PENDING, |
65 wheel_event_queue().state()); | 73 wheel_event_queue().state()); |
66 queue_.HandleEvent(&kEvents[0], ui::LatencyInfo(), DISPATCH_TYPE_BLOCKING, | 74 queue_.HandleEvent(&kEvents[0], ui::LatencyInfo(), DISPATCH_TYPE_BLOCKING, |
67 INPUT_EVENT_ACK_STATE_SET_NON_BLOCKING); | 75 INPUT_EVENT_ACK_STATE_SET_NON_BLOCKING); |
68 ASSERT_EQ(WebInputEventQueueState::ITEM_PENDING, wheel_event_queue().state()); | 76 ASSERT_EQ(WebInputEventQueueState::ITEM_PENDING, wheel_event_queue().state()); |
69 queue_.HandleEvent(&kEvents[1], ui::LatencyInfo(), DISPATCH_TYPE_BLOCKING, | 77 queue_.HandleEvent(&kEvents[1], ui::LatencyInfo(), DISPATCH_TYPE_BLOCKING, |
70 INPUT_EVENT_ACK_STATE_SET_NON_BLOCKING); | 78 INPUT_EVENT_ACK_STATE_SET_NON_BLOCKING); |
71 ASSERT_EQ(kEvents[0].size, last_event_.size()); | 79 ASSERT_EQ(kEvents[0].size, last_event_.size()); |
72 kEvents[0].dispatchType = | 80 kEvents[0].dispatchType = |
73 WebInputEvent::DispatchType::ListenersNonBlockingPassive; | 81 WebInputEvent::DispatchType::ListenersNonBlockingPassive; |
74 ASSERT_TRUE(memcmp(&last_event_[0], &kEvents[0], kEvents[0].size) == 0); | 82 ASSERT_TRUE(memcmp(&last_event_[0], &kEvents[0], kEvents[0].size) == 0); |
75 queue_.EventHandled(blink::WebInputEvent::MouseWheel); | 83 queue_.EventHandled(blink::WebInputEvent::MouseWheel, |
| 84 INPUT_EVENT_ACK_STATE_NOT_CONSUMED); |
76 ASSERT_EQ(kEvents[1].size, last_event_.size()); | 85 ASSERT_EQ(kEvents[1].size, last_event_.size()); |
77 kEvents[1].dispatchType = | 86 kEvents[1].dispatchType = |
78 WebInputEvent::DispatchType::ListenersNonBlockingPassive; | 87 WebInputEvent::DispatchType::ListenersNonBlockingPassive; |
79 ASSERT_TRUE(memcmp(&last_event_[0], &kEvents[1], kEvents[1].size) == 0); | 88 ASSERT_TRUE(memcmp(&last_event_[0], &kEvents[1], kEvents[1].size) == 0); |
80 ASSERT_EQ(WebInputEventQueueState::ITEM_PENDING, wheel_event_queue().state()); | 89 ASSERT_EQ(WebInputEventQueueState::ITEM_PENDING, wheel_event_queue().state()); |
81 queue_.EventHandled(blink::WebInputEvent::MouseWheel); | 90 queue_.EventHandled(blink::WebInputEvent::MouseWheel, |
| 91 INPUT_EVENT_ACK_STATE_NOT_CONSUMED); |
82 ASSERT_EQ(WebInputEventQueueState::ITEM_NOT_PENDING, | 92 ASSERT_EQ(WebInputEventQueueState::ITEM_NOT_PENDING, |
83 wheel_event_queue().state()); | 93 wheel_event_queue().state()); |
84 | 94 |
85 // Ensure that coalescing takes place. | 95 // Ensure that coalescing takes place. |
86 queue_.HandleEvent(&kEvents[0], ui::LatencyInfo(), DISPATCH_TYPE_BLOCKING, | 96 queue_.HandleEvent(&kEvents[0], ui::LatencyInfo(), DISPATCH_TYPE_BLOCKING, |
87 INPUT_EVENT_ACK_STATE_SET_NON_BLOCKING); | 97 INPUT_EVENT_ACK_STATE_SET_NON_BLOCKING); |
88 queue_.HandleEvent(&kEvents[2], ui::LatencyInfo(), DISPATCH_TYPE_BLOCKING, | 98 queue_.HandleEvent(&kEvents[2], ui::LatencyInfo(), DISPATCH_TYPE_BLOCKING, |
89 INPUT_EVENT_ACK_STATE_SET_NON_BLOCKING); | 99 INPUT_EVENT_ACK_STATE_SET_NON_BLOCKING); |
90 queue_.HandleEvent(&kEvents[3], ui::LatencyInfo(), DISPATCH_TYPE_BLOCKING, | 100 queue_.HandleEvent(&kEvents[3], ui::LatencyInfo(), DISPATCH_TYPE_BLOCKING, |
91 INPUT_EVENT_ACK_STATE_SET_NON_BLOCKING); | 101 INPUT_EVENT_ACK_STATE_SET_NON_BLOCKING); |
(...skipping 16 matching lines...) Expand all Loading... |
108 touch_event_queue().state()); | 118 touch_event_queue().state()); |
109 queue_.HandleEvent(&kEvents[0], ui::LatencyInfo(), DISPATCH_TYPE_BLOCKING, | 119 queue_.HandleEvent(&kEvents[0], ui::LatencyInfo(), DISPATCH_TYPE_BLOCKING, |
110 INPUT_EVENT_ACK_STATE_SET_NON_BLOCKING); | 120 INPUT_EVENT_ACK_STATE_SET_NON_BLOCKING); |
111 ASSERT_EQ(WebInputEventQueueState::ITEM_PENDING, touch_event_queue().state()); | 121 ASSERT_EQ(WebInputEventQueueState::ITEM_PENDING, touch_event_queue().state()); |
112 queue_.HandleEvent(&kEvents[1], ui::LatencyInfo(), DISPATCH_TYPE_BLOCKING, | 122 queue_.HandleEvent(&kEvents[1], ui::LatencyInfo(), DISPATCH_TYPE_BLOCKING, |
113 INPUT_EVENT_ACK_STATE_SET_NON_BLOCKING); | 123 INPUT_EVENT_ACK_STATE_SET_NON_BLOCKING); |
114 ASSERT_EQ(kEvents[0].size, last_event_.size()); | 124 ASSERT_EQ(kEvents[0].size, last_event_.size()); |
115 kEvents[0].dispatchType = | 125 kEvents[0].dispatchType = |
116 WebInputEvent::DispatchType::ListenersNonBlockingPassive; | 126 WebInputEvent::DispatchType::ListenersNonBlockingPassive; |
117 ASSERT_TRUE(memcmp(&last_event_[0], &kEvents[0], kEvents[0].size) == 0); | 127 ASSERT_TRUE(memcmp(&last_event_[0], &kEvents[0], kEvents[0].size) == 0); |
118 queue_.EventHandled(blink::WebInputEvent::TouchStart); | 128 queue_.EventHandled(blink::WebInputEvent::TouchStart, |
| 129 INPUT_EVENT_ACK_STATE_NOT_CONSUMED); |
119 ASSERT_EQ(kEvents[1].size, last_event_.size()); | 130 ASSERT_EQ(kEvents[1].size, last_event_.size()); |
120 kEvents[1].dispatchType = | 131 kEvents[1].dispatchType = |
121 WebInputEvent::DispatchType::ListenersNonBlockingPassive; | 132 WebInputEvent::DispatchType::ListenersNonBlockingPassive; |
122 ASSERT_TRUE(memcmp(&last_event_[0], &kEvents[1], kEvents[1].size) == 0); | 133 ASSERT_TRUE(memcmp(&last_event_[0], &kEvents[1], kEvents[1].size) == 0); |
123 ASSERT_EQ(WebInputEventQueueState::ITEM_PENDING, touch_event_queue().state()); | 134 ASSERT_EQ(WebInputEventQueueState::ITEM_PENDING, touch_event_queue().state()); |
124 queue_.EventHandled(blink::WebInputEvent::TouchMove); | 135 queue_.EventHandled(blink::WebInputEvent::TouchMove, |
| 136 INPUT_EVENT_ACK_STATE_NOT_CONSUMED); |
125 ASSERT_EQ(WebInputEventQueueState::ITEM_NOT_PENDING, | 137 ASSERT_EQ(WebInputEventQueueState::ITEM_NOT_PENDING, |
126 touch_event_queue().state()); | 138 touch_event_queue().state()); |
127 | 139 |
128 // Ensure that coalescing takes place. | 140 // Ensure that coalescing takes place. |
129 queue_.HandleEvent(&kEvents[0], ui::LatencyInfo(), DISPATCH_TYPE_BLOCKING, | 141 queue_.HandleEvent(&kEvents[0], ui::LatencyInfo(), DISPATCH_TYPE_BLOCKING, |
130 INPUT_EVENT_ACK_STATE_SET_NON_BLOCKING); | 142 INPUT_EVENT_ACK_STATE_SET_NON_BLOCKING); |
131 queue_.HandleEvent(&kEvents[2], ui::LatencyInfo(), DISPATCH_TYPE_BLOCKING, | 143 queue_.HandleEvent(&kEvents[2], ui::LatencyInfo(), DISPATCH_TYPE_BLOCKING, |
132 INPUT_EVENT_ACK_STATE_SET_NON_BLOCKING); | 144 INPUT_EVENT_ACK_STATE_SET_NON_BLOCKING); |
133 queue_.HandleEvent(&kEvents[3], ui::LatencyInfo(), DISPATCH_TYPE_BLOCKING, | 145 queue_.HandleEvent(&kEvents[3], ui::LatencyInfo(), DISPATCH_TYPE_BLOCKING, |
134 INPUT_EVENT_ACK_STATE_SET_NON_BLOCKING); | 146 INPUT_EVENT_ACK_STATE_SET_NON_BLOCKING); |
135 ASSERT_EQ(1u, touch_event_queue().size()); | 147 ASSERT_EQ(1u, touch_event_queue().size()); |
136 ASSERT_EQ(WebInputEventQueueState::ITEM_PENDING, touch_event_queue().state()); | 148 ASSERT_EQ(WebInputEventQueueState::ITEM_PENDING, touch_event_queue().state()); |
137 } | 149 } |
138 | 150 |
| 151 TEST_F(MainThreadEventQueueTest, BlockingTouch) { |
| 152 SyntheticWebTouchEvent kEvents[4]; |
| 153 kEvents[0].PressPoint(10, 10); |
| 154 kEvents[1].PressPoint(10, 10); |
| 155 kEvents[1].MovePoint(0, 20, 20); |
| 156 kEvents[2].PressPoint(10, 10); |
| 157 kEvents[2].MovePoint(0, 30, 30); |
| 158 kEvents[3].PressPoint(10, 10); |
| 159 kEvents[3].MovePoint(0, 35, 35); |
| 160 |
| 161 ASSERT_EQ(WebInputEventQueueState::ITEM_NOT_PENDING, |
| 162 touch_event_queue().state()); |
| 163 // Ensure that coalescing takes place. |
| 164 queue_.HandleEvent(&kEvents[0], ui::LatencyInfo(), DISPATCH_TYPE_BLOCKING, |
| 165 INPUT_EVENT_ACK_STATE_SET_NON_BLOCKING); |
| 166 queue_.HandleEvent(&kEvents[1], ui::LatencyInfo(), DISPATCH_TYPE_BLOCKING, |
| 167 INPUT_EVENT_ACK_STATE_NOT_CONSUMED); |
| 168 queue_.HandleEvent(&kEvents[2], ui::LatencyInfo(), DISPATCH_TYPE_BLOCKING, |
| 169 INPUT_EVENT_ACK_STATE_NOT_CONSUMED); |
| 170 queue_.HandleEvent(&kEvents[3], ui::LatencyInfo(), DISPATCH_TYPE_BLOCKING, |
| 171 INPUT_EVENT_ACK_STATE_NOT_CONSUMED); |
| 172 ASSERT_EQ(1u, touch_event_queue().size()); |
| 173 ASSERT_EQ(WebInputEventQueueState::ITEM_PENDING, touch_event_queue().state()); |
| 174 queue_.EventHandled(kEvents[0].type, INPUT_EVENT_ACK_STATE_NOT_CONSUMED); |
| 175 ASSERT_EQ(0u, touch_event_queue().size()); |
| 176 queue_.EventHandled(kEvents[1].type, INPUT_EVENT_ACK_STATE_NOT_CONSUMED); |
| 177 ASSERT_EQ(2u, additional_acked_events_.size()); |
| 178 ASSERT_EQ(kEvents[2].uniqueTouchEventId, additional_acked_events_.at(0)); |
| 179 ASSERT_EQ(kEvents[3].uniqueTouchEventId, additional_acked_events_.at(1)); |
| 180 } |
| 181 |
139 } // namespace content | 182 } // namespace content |
OLD | NEW |