OLD | NEW |
1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 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 "content/renderer/input/input_event_filter.h" | 5 #include "content/renderer/input/input_event_filter.h" |
6 | 6 |
7 #include <tuple> | 7 #include <tuple> |
8 #include <utility> | 8 #include <utility> |
9 | 9 |
10 #include "base/auto_reset.h" | 10 #include "base/auto_reset.h" |
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
64 renderer_scheduler_ = | 64 renderer_scheduler_ = |
65 render_thread_impl ? render_thread_impl->GetRendererScheduler() : nullptr; | 65 render_thread_impl ? render_thread_impl->GetRendererScheduler() : nullptr; |
66 } | 66 } |
67 | 67 |
68 void InputEventFilter::SetInputHandlerManager( | 68 void InputEventFilter::SetInputHandlerManager( |
69 InputHandlerManager* input_handler_manager) { | 69 InputHandlerManager* input_handler_manager) { |
70 DCHECK(main_task_runner_->BelongsToCurrentThread()); | 70 DCHECK(main_task_runner_->BelongsToCurrentThread()); |
71 input_handler_manager_ = input_handler_manager; | 71 input_handler_manager_ = input_handler_manager; |
72 } | 72 } |
73 | 73 |
74 void InputEventFilter::SetIsFlingingInMainThreadEventQueue(int routing_id, | |
75 bool is_flinging) { | |
76 RouteQueueMap::iterator iter = route_queues_.find(routing_id); | |
77 if (iter == route_queues_.end() || !iter->second) | |
78 return; | |
79 | |
80 iter->second->set_is_flinging(is_flinging); | |
81 } | |
82 | |
83 void InputEventFilter::RegisterRoutingID(int routing_id) { | 74 void InputEventFilter::RegisterRoutingID(int routing_id) { |
84 base::AutoLock locked(routes_lock_); | 75 base::AutoLock locked(routes_lock_); |
85 routes_.insert(routing_id); | 76 routes_.insert(routing_id); |
86 route_queues_[routing_id] = new MainThreadEventQueue( | 77 route_queues_[routing_id] = new MainThreadEventQueue( |
87 routing_id, this, main_task_runner_, renderer_scheduler_); | 78 routing_id, this, main_task_runner_, renderer_scheduler_); |
88 } | 79 } |
89 | 80 |
90 void InputEventFilter::UnregisterRoutingID(int routing_id) { | 81 void InputEventFilter::UnregisterRoutingID(int routing_id) { |
91 base::AutoLock locked(routes_lock_); | 82 base::AutoLock locked(routes_lock_); |
92 routes_.erase(routing_id); | 83 routes_.erase(routing_id); |
93 route_queues_.erase(routing_id); | 84 route_queues_.erase(routing_id); |
94 } | 85 } |
95 | 86 |
96 void InputEventFilter::DidOverscroll(int routing_id, | 87 void InputEventFilter::DidOverscroll(int routing_id, |
97 const DidOverscrollParams& params) { | 88 const DidOverscrollParams& params) { |
98 SendMessage(std::unique_ptr<IPC::Message>( | 89 SendMessage(std::unique_ptr<IPC::Message>( |
99 new InputHostMsg_DidOverscroll(routing_id, params))); | 90 new InputHostMsg_DidOverscroll(routing_id, params))); |
100 } | 91 } |
101 | 92 |
102 void InputEventFilter::DidStartFlinging(int routing_id) { | |
103 SetIsFlingingInMainThreadEventQueue(routing_id, true); | |
104 } | |
105 | |
106 void InputEventFilter::DidStopFlinging(int routing_id) { | 93 void InputEventFilter::DidStopFlinging(int routing_id) { |
107 SetIsFlingingInMainThreadEventQueue(routing_id, false); | |
108 SendMessage(base::MakeUnique<InputHostMsg_DidStopFlinging>(routing_id)); | 94 SendMessage(base::MakeUnique<InputHostMsg_DidStopFlinging>(routing_id)); |
109 } | 95 } |
110 | 96 |
111 void InputEventFilter::DispatchNonBlockingEventToMainThread( | 97 void InputEventFilter::DispatchNonBlockingEventToMainThread( |
112 int routing_id, | 98 int routing_id, |
113 ui::ScopedWebInputEvent event, | 99 ui::ScopedWebInputEvent event, |
114 const ui::LatencyInfo& latency_info) { | 100 const ui::LatencyInfo& latency_info) { |
115 DCHECK(target_task_runner_->BelongsToCurrentThread()); | 101 DCHECK(target_task_runner_->BelongsToCurrentThread()); |
116 RouteQueueMap::iterator iter = route_queues_.find(routing_id); | 102 RouteQueueMap::iterator iter = route_queues_.find(routing_id); |
117 if (iter != route_queues_.end()) { | 103 if (iter != route_queues_.end()) { |
(...skipping 126 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
244 InputEventAckState ack_state, | 230 InputEventAckState ack_state, |
245 ui::ScopedWebInputEvent event, | 231 ui::ScopedWebInputEvent event, |
246 const ui::LatencyInfo& latency_info, | 232 const ui::LatencyInfo& latency_info, |
247 std::unique_ptr<DidOverscrollParams> overscroll_params) { | 233 std::unique_ptr<DidOverscrollParams> overscroll_params) { |
248 bool send_ack = dispatch_type == DISPATCH_TYPE_BLOCKING; | 234 bool send_ack = dispatch_type == DISPATCH_TYPE_BLOCKING; |
249 uint32_t unique_touch_event_id = | 235 uint32_t unique_touch_event_id = |
250 ui::WebInputEventTraits::GetUniqueTouchEventId(*event); | 236 ui::WebInputEventTraits::GetUniqueTouchEventId(*event); |
251 WebInputEvent::Type type = event->type; | 237 WebInputEvent::Type type = event->type; |
252 | 238 |
253 if (ack_state == INPUT_EVENT_ACK_STATE_SET_NON_BLOCKING || | 239 if (ack_state == INPUT_EVENT_ACK_STATE_SET_NON_BLOCKING || |
254 ack_state == INPUT_EVENT_ACK_STATE_NOT_CONSUMED) { | 240 ack_state == INPUT_EVENT_ACK_STATE_NOT_CONSUMED || |
| 241 ack_state == INPUT_EVENT_ACK_STATE_NOT_CONSUMED_NON_BLOCKING) { |
255 DCHECK(!overscroll_params); | 242 DCHECK(!overscroll_params); |
256 RouteQueueMap::iterator iter = route_queues_.find(routing_id); | 243 RouteQueueMap::iterator iter = route_queues_.find(routing_id); |
257 if (iter != route_queues_.end()) { | 244 if (iter != route_queues_.end()) { |
258 send_ack &= iter->second->HandleEvent(std::move(event), latency_info, | 245 send_ack &= iter->second->HandleEvent(std::move(event), latency_info, |
259 dispatch_type, ack_state); | 246 dispatch_type, ack_state); |
260 } | 247 } |
261 } | 248 } |
262 event.reset(); | 249 event.reset(); |
263 | 250 |
264 if (!send_ack) | 251 if (!send_ack) |
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
312 input_handler_manager_->NeedsMainFrame(routing_id); | 299 input_handler_manager_->NeedsMainFrame(routing_id); |
313 return; | 300 return; |
314 } | 301 } |
315 | 302 |
316 target_task_runner_->PostTask( | 303 target_task_runner_->PostTask( |
317 FROM_HERE, | 304 FROM_HERE, |
318 base::Bind(&InputEventFilter::NeedsMainFrame, this, routing_id)); | 305 base::Bind(&InputEventFilter::NeedsMainFrame, this, routing_id)); |
319 } | 306 } |
320 | 307 |
321 } // namespace content | 308 } // namespace content |
OLD | NEW |