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

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

Issue 2782553002: Fix priority of TaskQueue::QueueType::COMPOSITOR on touch events
Patch Set: Created 3 years, 8 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/input_handler_manager.cc ('k') | content/test/BUILD.gn » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
1 // Copyright 2017 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include <map>
6
7 #include "base/message_loop/message_loop.h"
8 #include "base/test/test_simple_task_runner.h"
9 #include "content/public/test/mock_render_thread.h"
10 #include "content/renderer/input/input_handler_manager.h"
11 #include "content/renderer/input/input_handler_manager_client.h"
12 #include "content/renderer/render_view_impl.h"
13 #include "content/test/fake_compositor_dependencies.h"
14 #include "testing/gmock/include/gmock/gmock.h"
15 #include "testing/gtest/include/gtest/gtest.h"
16 #include "third_party/WebKit/public/platform/WebTouchEvent.h"
17 #include "third_party/WebKit/public/platform/scheduler/test/fake_renderer_schedu ler.h"
18 #include "ui/events/latency_info.h"
19
20 namespace content {
21
22 namespace {
23
24 const int kTestRoutingID = 13;
25
26 class TestRendererScheduler : public blink::scheduler::FakeRendererScheduler {
27 public:
28 TestRendererScheduler() : input_event_handled_(false) {}
29 ~TestRendererScheduler() override {}
30
31 // RendererScheduler implementation:
32 void DidHandleInputEventOnCompositorThread(
33 const blink::WebInputEvent& web_input_event,
34 InputEventState event_state) override {
35 input_event_handled_ = true;
36 }
37
38 bool input_event_handled() const { return input_event_handled_; }
39
40 private:
41 bool input_event_handled_;
42 DISALLOW_COPY_AND_ASSIGN(TestRendererScheduler);
43 };
44
45 class TestInputHandlerManagerClient : public InputHandlerManagerClient {
46 public:
47 TestInputHandlerManagerClient() {}
48 ~TestInputHandlerManagerClient() override {}
49
50 void SetInputHandlerManager(InputHandlerManager*) override {}
51 void NotifyInputEventHandled(int routing_id,
52 blink::WebInputEvent::Type type,
53 blink::WebInputEventResult result,
54 InputEventAckState ack_result) override {}
55 void ProcessRafAlignedInput(int routing_id,
56 base::TimeTicks frame_time) override {}
57
58 void RegisterRoutingID(int routing_id) override {}
59 void UnregisterRoutingID(int routing_id) override {}
60
61 void DidOverscroll(int routing_id,
62 const ui::DidOverscrollParams& params) override {}
63 void DidStopFlinging(int routing_id) override {}
64 void DispatchNonBlockingEventToMainThread(
65 int routing_id,
66 ui::WebScopedInputEvent event,
67 const ui::LatencyInfo& latency_info) override {}
68
69 private:
70 DISALLOW_COPY_AND_ASSIGN(TestInputHandlerManagerClient);
71 };
72
73 class TestInputHandler : public cc::InputHandler,
74 public base::SupportsWeakPtr<TestInputHandler> {
75 public:
76 TestInputHandler() : factory_(this) {}
77 ~TestInputHandler() override {}
78
79 void BindToClient(cc::InputHandlerClient* client) override {}
80
81 ScrollStatus ScrollBegin(cc::ScrollState* scroll_state,
82 ScrollInputType type) override {
83 return ScrollStatus();
84 }
85
86 ScrollStatus RootScrollBegin(cc::ScrollState* scroll_state,
87 ScrollInputType type) override {
88 return ScrollStatus();
89 }
90
91 ScrollStatus ScrollAnimatedBegin(const gfx::Point& viewport_point) override {
92 return ScrollStatus();
93 }
94
95 ScrollStatus ScrollAnimated(const gfx::Point& viewport_point,
96 const gfx::Vector2dF& scroll_delta,
97 base::TimeDelta delayed_by) override {
98 return ScrollStatus();
99 }
100
101 cc::InputHandlerScrollResult ScrollBy(
102 cc::ScrollState* scroll_state) override {
103 return cc::InputHandlerScrollResult();
104 }
105
106 ScrollStatus FlingScrollBegin() override { return ScrollStatus(); }
107
108 void MouseMoveAt(const gfx::Point& mouse_position) override {}
109 void MouseDown() override {}
110 void MouseUp() override {}
111 void MouseLeave() override {}
112 void ScrollEnd(cc::ScrollState* scroll_state) override {}
113 void RequestUpdateForSynchronousInputHandler() override {}
114 void SetSynchronousInputHandlerRootScrollOffset(
115 const gfx::ScrollOffset& root_offset) override {}
116 void PinchGestureBegin() override {}
117 void PinchGestureUpdate(float magnify_delta,
118 const gfx::Point& anchor) override {}
119 void PinchGestureEnd() override {}
120 void SetNeedsAnimateInput() override {}
121 bool IsCurrentlyScrollingViewport() const override { return false; }
122
123 bool IsCurrentlyScrollingLayerAt(const gfx::Point& viewport_point,
124 ScrollInputType type) const override {
125 return false;
126 }
127
128 TouchStartEventListenerType EventListenerTypeForTouchStartAt(
129 const gfx::Point& viewport_point) override {
130 return TouchStartEventListenerType::NO_HANDLER;
131 }
132
133 std::unique_ptr<cc::SwapPromiseMonitor> CreateLatencyInfoSwapPromiseMonitor(
134 ui::LatencyInfo* latency) override {
135 return nullptr;
136 }
137
138 cc::ScrollElasticityHelper* CreateScrollElasticityHelper() override {
139 return nullptr;
140 }
141
142 bool GetScrollOffsetForLayer(int layer_id,
143 gfx::ScrollOffset* offset) override {
144 return false;
145 }
146
147 bool ScrollLayerTo(int layer_id, const gfx::ScrollOffset& offset) override {
148 return false;
149 }
150
151 cc::EventListenerProperties GetEventListenerProperties(
152 cc::EventListenerClass event_class) const override {
153 auto found = event_listeners_properties_.find(event_class);
154 if (found == event_listeners_properties_.end()) {
155 return cc::EventListenerProperties::kNone;
156 }
157 return found->second;
158 }
159
160 void SetEventListenerProperties(cc::EventListenerClass event_class,
161 cc::EventListenerProperties properties) {
162 event_listeners_properties_[event_class] = properties;
163 }
164
165 base::WeakPtr<TestInputHandler> AsWeakPtr() { return factory_.GetWeakPtr(); }
166
167 private:
168 std::map<cc::EventListenerClass, cc::EventListenerProperties>
169 event_listeners_properties_;
170
171 base::WeakPtrFactory<TestInputHandler> factory_;
172 DISALLOW_COPY_AND_ASSIGN(TestInputHandler);
173 };
174
175 } // namespace
176
177 class InputHandlerManagerTest : public testing::Test {
178 public:
179 void SetUp() override {
180 testing::Test::SetUp();
181
182 compositor_task_runner_ = new base::TestSimpleTaskRunner();
183
184 input_handler_manager_ = base::MakeUnique<InputHandlerManager>(
185 compositor_task_runner_, &client_, nullptr, &renderer_scheduler_);
186 input_handler_manager_->AddInputHandler(
187 kTestRoutingID, input_handler_.AsWeakPtr(), nullptr, false);
188 }
189
190 protected:
191 scoped_refptr<base::TestSimpleTaskRunner> compositor_task_runner_;
192 TestInputHandlerManagerClient client_;
193 TestRendererScheduler renderer_scheduler_;
194 TestInputHandler input_handler_;
195 base::MessageLoopForUI message_loop_;
196
197 std::unique_ptr<InputHandlerManager> input_handler_manager_;
198 };
199
200 TEST_F(InputHandlerManagerTest, NotifiesRendererSchedulerAboutTouchStart) {
201 input_handler_.SetEventListenerProperties(
202 cc::EventListenerClass::kTouchStartOrMove,
203 cc::EventListenerProperties::kBlockingAndPassive);
204
205 ui::WebScopedInputEvent input_event(new blink::WebTouchEvent());
206 input_event->setType(blink::WebTouchEvent::Type::TouchStart);
207 auto callback = [](InputEventAckState, ui::WebScopedInputEvent,
208 const ui::LatencyInfo&,
209 std::unique_ptr<ui::DidOverscrollParams>) {};
210
211 input_handler_manager_->HandleInputEvent(
212 kTestRoutingID, std::move(input_event), ui::LatencyInfo(),
213 base::Bind(callback));
214 ASSERT_TRUE(renderer_scheduler_.input_event_handled());
215 }
216
217 } // namespace content
OLDNEW
« no previous file with comments | « content/renderer/input/input_handler_manager.cc ('k') | content/test/BUILD.gn » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698