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 |
11 #include "base/macros.h" | 11 #include "base/macros.h" |
12 #include "build/build_config.h" | 12 #include "build/build_config.h" |
13 #include "content/common/input/synthetic_web_input_event_builders.h" | 13 #include "content/common/input/synthetic_web_input_event_builders.h" |
14 #include "content/renderer/input/non_blocking_event_queue.h" | 14 #include "content/renderer/input/main_thread_event_queue.h" |
15 #include "testing/gtest/include/gtest/gtest.h" | 15 #include "testing/gtest/include/gtest/gtest.h" |
16 | 16 |
17 using blink::WebInputEvent; | 17 using blink::WebInputEvent; |
18 using blink::WebMouseEvent; | 18 using blink::WebMouseEvent; |
19 using blink::WebMouseWheelEvent; | 19 using blink::WebMouseWheelEvent; |
20 using blink::WebTouchEvent; | 20 using blink::WebTouchEvent; |
21 | 21 |
22 namespace content { | 22 namespace content { |
23 namespace { | 23 namespace { |
24 | 24 |
25 const int kTestRoutingID = 13; | 25 const int kTestRoutingID = 13; |
26 } | 26 } |
27 | 27 |
28 class NonBlockingEventQueueTest : public testing::Test, | 28 class MainThreadEventQueueTest : public testing::Test, |
29 public NonBlockingEventQueueClient { | 29 public MainThreadEventQueueClient { |
30 public: | 30 public: |
31 NonBlockingEventQueueTest() : queue_(kTestRoutingID, this) {} | 31 MainThreadEventQueueTest() : queue_(kTestRoutingID, this) {} |
32 | 32 |
33 void SendNonBlockingEvent(int routing_id, | 33 void SendEventToMainThread(int routing_id, |
34 const blink::WebInputEvent* event, | 34 const blink::WebInputEvent* event, |
35 const ui::LatencyInfo& latency) override { | 35 const ui::LatencyInfo& latency, |
| 36 InputEventDispatchType type) override { |
36 ASSERT_EQ(kTestRoutingID, routing_id); | 37 ASSERT_EQ(kTestRoutingID, routing_id); |
37 const unsigned char* eventPtr = | 38 const unsigned char* eventPtr = |
38 reinterpret_cast<const unsigned char*>(event); | 39 reinterpret_cast<const unsigned char*>(event); |
39 last_event_.assign(eventPtr, eventPtr + event->size); | 40 last_event_.assign(eventPtr, eventPtr + event->size); |
40 } | 41 } |
41 | 42 |
42 WebInputEventQueue<MouseWheelEventWithLatencyInfo>& wheel_event_queue() { | 43 WebInputEventQueue<PendingMouseWheelEvent>& wheel_event_queue() { |
43 return queue_.wheel_events_; | 44 return queue_.wheel_events_; |
44 } | 45 } |
45 | 46 |
46 WebInputEventQueue<TouchEventWithLatencyInfo>& touch_event_queue() { | 47 WebInputEventQueue<PendingTouchEvent>& touch_event_queue() { |
47 return queue_.touch_events_; | 48 return queue_.touch_events_; |
48 } | 49 } |
49 | 50 |
50 protected: | 51 protected: |
51 NonBlockingEventQueue queue_; | 52 MainThreadEventQueue queue_; |
52 std::vector<unsigned char> last_event_; | 53 std::vector<unsigned char> last_event_; |
53 }; | 54 }; |
54 | 55 |
55 TEST_F(NonBlockingEventQueueTest, NonBlockingWheel) { | 56 TEST_F(MainThreadEventQueueTest, NonBlockingWheel) { |
56 WebMouseWheelEvent kEvents[4] = { | 57 WebMouseWheelEvent kEvents[4] = { |
57 SyntheticWebMouseWheelEventBuilder::Build(10, 10, 0, 53, 0, false), | 58 SyntheticWebMouseWheelEventBuilder::Build(10, 10, 0, 53, 0, false), |
58 SyntheticWebMouseWheelEventBuilder::Build(20, 20, 0, 53, 0, false), | 59 SyntheticWebMouseWheelEventBuilder::Build(20, 20, 0, 53, 0, false), |
59 SyntheticWebMouseWheelEventBuilder::Build(30, 30, 0, 53, 1, false), | 60 SyntheticWebMouseWheelEventBuilder::Build(30, 30, 0, 53, 1, false), |
60 SyntheticWebMouseWheelEventBuilder::Build(30, 30, 0, 53, 1, false), | 61 SyntheticWebMouseWheelEventBuilder::Build(30, 30, 0, 53, 1, false), |
61 }; | 62 }; |
62 | 63 |
63 ASSERT_EQ(WebInputEventQueueState::ITEM_NOT_PENDING, | 64 ASSERT_EQ(WebInputEventQueueState::ITEM_NOT_PENDING, |
64 wheel_event_queue().state()); | 65 wheel_event_queue().state()); |
65 queue_.HandleEvent(&kEvents[0], ui::LatencyInfo()); | 66 queue_.HandleEvent(&kEvents[0], ui::LatencyInfo(), |
| 67 INPUT_EVENT_ACK_STATE_SET_NON_BLOCKING); |
66 ASSERT_EQ(WebInputEventQueueState::ITEM_PENDING, wheel_event_queue().state()); | 68 ASSERT_EQ(WebInputEventQueueState::ITEM_PENDING, wheel_event_queue().state()); |
67 queue_.HandleEvent(&kEvents[1], ui::LatencyInfo()); | 69 queue_.HandleEvent(&kEvents[1], ui::LatencyInfo(), |
| 70 INPUT_EVENT_ACK_STATE_SET_NON_BLOCKING); |
68 ASSERT_EQ(kEvents[0].size, last_event_.size()); | 71 ASSERT_EQ(kEvents[0].size, last_event_.size()); |
69 ASSERT_TRUE(memcmp(&last_event_[0], &kEvents[0], kEvents[0].size) == 0); | 72 ASSERT_TRUE(memcmp(&last_event_[0], &kEvents[0], kEvents[0].size) == 0); |
70 queue_.EventHandled(blink::WebInputEvent::MouseWheel); | 73 queue_.EventHandled(blink::WebInputEvent::MouseWheel); |
71 ASSERT_EQ(kEvents[1].size, last_event_.size()); | 74 ASSERT_EQ(kEvents[1].size, last_event_.size()); |
72 ASSERT_TRUE(memcmp(&last_event_[0], &kEvents[1], kEvents[1].size) == 0); | 75 ASSERT_TRUE(memcmp(&last_event_[0], &kEvents[1], kEvents[1].size) == 0); |
73 ASSERT_EQ(WebInputEventQueueState::ITEM_PENDING, wheel_event_queue().state()); | 76 ASSERT_EQ(WebInputEventQueueState::ITEM_PENDING, wheel_event_queue().state()); |
74 queue_.EventHandled(blink::WebInputEvent::MouseWheel); | 77 queue_.EventHandled(blink::WebInputEvent::MouseWheel); |
75 ASSERT_EQ(WebInputEventQueueState::ITEM_NOT_PENDING, | 78 ASSERT_EQ(WebInputEventQueueState::ITEM_NOT_PENDING, |
76 wheel_event_queue().state()); | 79 wheel_event_queue().state()); |
77 | 80 |
78 // Ensure that coalescing takes place. | 81 // Ensure that coalescing takes place. |
79 queue_.HandleEvent(&kEvents[0], ui::LatencyInfo()); | 82 queue_.HandleEvent(&kEvents[0], ui::LatencyInfo(), |
80 queue_.HandleEvent(&kEvents[2], ui::LatencyInfo()); | 83 INPUT_EVENT_ACK_STATE_SET_NON_BLOCKING); |
81 queue_.HandleEvent(&kEvents[3], ui::LatencyInfo()); | 84 queue_.HandleEvent(&kEvents[2], ui::LatencyInfo(), |
| 85 INPUT_EVENT_ACK_STATE_SET_NON_BLOCKING); |
| 86 queue_.HandleEvent(&kEvents[3], ui::LatencyInfo(), |
| 87 INPUT_EVENT_ACK_STATE_SET_NON_BLOCKING); |
82 ASSERT_EQ(1u, wheel_event_queue().size()); | 88 ASSERT_EQ(1u, wheel_event_queue().size()); |
83 ASSERT_EQ(WebInputEventQueueState::ITEM_PENDING, wheel_event_queue().state()); | 89 ASSERT_EQ(WebInputEventQueueState::ITEM_PENDING, wheel_event_queue().state()); |
84 } | 90 } |
85 | 91 |
86 TEST_F(NonBlockingEventQueueTest, NonBlockingTouch) { | 92 TEST_F(MainThreadEventQueueTest, NonBlockingTouch) { |
87 SyntheticWebTouchEvent kEvents[4]; | 93 SyntheticWebTouchEvent kEvents[4]; |
88 kEvents[0].PressPoint(10, 10); | 94 kEvents[0].PressPoint(10, 10); |
89 kEvents[1].PressPoint(10, 10); | 95 kEvents[1].PressPoint(10, 10); |
90 kEvents[1].modifiers = 1; | 96 kEvents[1].modifiers = 1; |
91 kEvents[1].MovePoint(0, 20, 20); | 97 kEvents[1].MovePoint(0, 20, 20); |
92 kEvents[2].PressPoint(10, 10); | 98 kEvents[2].PressPoint(10, 10); |
93 kEvents[2].MovePoint(0, 30, 30); | 99 kEvents[2].MovePoint(0, 30, 30); |
94 kEvents[3].PressPoint(10, 10); | 100 kEvents[3].PressPoint(10, 10); |
95 kEvents[3].MovePoint(0, 35, 35); | 101 kEvents[3].MovePoint(0, 35, 35); |
96 | 102 |
97 ASSERT_EQ(WebInputEventQueueState::ITEM_NOT_PENDING, | 103 ASSERT_EQ(WebInputEventQueueState::ITEM_NOT_PENDING, |
98 touch_event_queue().state()); | 104 touch_event_queue().state()); |
99 queue_.HandleEvent(&kEvents[0], ui::LatencyInfo()); | 105 queue_.HandleEvent(&kEvents[0], ui::LatencyInfo(), |
| 106 INPUT_EVENT_ACK_STATE_SET_NON_BLOCKING); |
100 ASSERT_EQ(WebInputEventQueueState::ITEM_PENDING, touch_event_queue().state()); | 107 ASSERT_EQ(WebInputEventQueueState::ITEM_PENDING, touch_event_queue().state()); |
101 queue_.HandleEvent(&kEvents[1], ui::LatencyInfo()); | 108 queue_.HandleEvent(&kEvents[1], ui::LatencyInfo(), |
| 109 INPUT_EVENT_ACK_STATE_SET_NON_BLOCKING); |
102 ASSERT_EQ(kEvents[0].size, last_event_.size()); | 110 ASSERT_EQ(kEvents[0].size, last_event_.size()); |
103 ASSERT_TRUE(memcmp(&last_event_[0], &kEvents[0], kEvents[0].size) == 0); | 111 ASSERT_TRUE(memcmp(&last_event_[0], &kEvents[0], kEvents[0].size) == 0); |
104 queue_.EventHandled(blink::WebInputEvent::TouchStart); | 112 queue_.EventHandled(blink::WebInputEvent::TouchStart); |
105 ASSERT_EQ(kEvents[1].size, last_event_.size()); | 113 ASSERT_EQ(kEvents[1].size, last_event_.size()); |
106 ASSERT_TRUE(memcmp(&last_event_[0], &kEvents[1], kEvents[1].size) == 0); | 114 ASSERT_TRUE(memcmp(&last_event_[0], &kEvents[1], kEvents[1].size) == 0); |
107 ASSERT_EQ(WebInputEventQueueState::ITEM_PENDING, touch_event_queue().state()); | 115 ASSERT_EQ(WebInputEventQueueState::ITEM_PENDING, touch_event_queue().state()); |
108 queue_.EventHandled(blink::WebInputEvent::TouchMove); | 116 queue_.EventHandled(blink::WebInputEvent::TouchMove); |
109 ASSERT_EQ(WebInputEventQueueState::ITEM_NOT_PENDING, | 117 ASSERT_EQ(WebInputEventQueueState::ITEM_NOT_PENDING, |
110 touch_event_queue().state()); | 118 touch_event_queue().state()); |
111 | 119 |
112 // Ensure that coalescing takes place. | 120 // Ensure that coalescing takes place. |
113 queue_.HandleEvent(&kEvents[0], ui::LatencyInfo()); | 121 queue_.HandleEvent(&kEvents[0], ui::LatencyInfo(), |
114 queue_.HandleEvent(&kEvents[2], ui::LatencyInfo()); | 122 INPUT_EVENT_ACK_STATE_SET_NON_BLOCKING); |
115 queue_.HandleEvent(&kEvents[3], ui::LatencyInfo()); | 123 queue_.HandleEvent(&kEvents[2], ui::LatencyInfo(), |
| 124 INPUT_EVENT_ACK_STATE_SET_NON_BLOCKING); |
| 125 queue_.HandleEvent(&kEvents[3], ui::LatencyInfo(), |
| 126 INPUT_EVENT_ACK_STATE_SET_NON_BLOCKING); |
116 ASSERT_EQ(1u, touch_event_queue().size()); | 127 ASSERT_EQ(1u, touch_event_queue().size()); |
117 ASSERT_EQ(WebInputEventQueueState::ITEM_PENDING, touch_event_queue().state()); | 128 ASSERT_EQ(WebInputEventQueueState::ITEM_PENDING, touch_event_queue().state()); |
118 } | 129 } |
119 | 130 |
120 } // namespace content | 131 } // namespace content |
OLD | NEW |