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

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

Issue 2265393002: Refactor compositor event handling path to be callback-based (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: 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 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_handler_manager.h" 5 #include "content/renderer/input/input_handler_manager.h"
6 6
7 #include <utility> 7 #include <utility>
8 8
9 #include "base/bind.h" 9 #include "base/bind.h"
10 #include "base/location.h" 10 #include "base/location.h"
11 #include "base/single_thread_task_runner.h" 11 #include "base/single_thread_task_runner.h"
12 #include "base/threading/thread_task_runner_handle.h" 12 #include "base/threading/thread_task_runner_handle.h"
13 #include "base/trace_event/trace_event.h" 13 #include "base/trace_event/trace_event.h"
14 #include "cc/input/input_handler.h" 14 #include "cc/input/input_handler.h"
15 #include "content/renderer/input/input_event_filter.h" 15 #include "content/renderer/input/input_event_filter.h"
16 #include "content/renderer/input/input_handler_manager_client.h"
17 #include "content/renderer/input/input_handler_wrapper.h" 16 #include "content/renderer/input/input_handler_wrapper.h"
18 #include "third_party/WebKit/public/platform/scheduler/renderer/renderer_schedul er.h" 17 #include "third_party/WebKit/public/platform/scheduler/renderer/renderer_schedul er.h"
19 #include "ui/events/blink/did_overscroll_params.h" 18 #include "ui/events/blink/did_overscroll_params.h"
20 #include "ui/events/blink/input_handler_proxy.h" 19 #include "ui/events/blink/input_handler_proxy.h"
21 #include "ui/events/blink/web_input_event_traits.h" 20 #include "ui/events/blink/web_input_event_traits.h"
22 21
23 using blink::WebInputEvent; 22 using blink::WebInputEvent;
24 using ui::InputHandlerProxy; 23 using ui::InputHandlerProxy;
25 using blink::scheduler::RendererScheduler; 24 using blink::scheduler::RendererScheduler;
26 25
(...skipping 159 matching lines...) Expand 10 before | Expand all | Expand 10 after
186 gesture_event, scroll_result); 185 gesture_event, scroll_result);
187 } 186 }
188 187
189 void InputHandlerManager::NotifyInputEventHandledOnMainThread( 188 void InputHandlerManager::NotifyInputEventHandledOnMainThread(
190 int routing_id, 189 int routing_id,
191 blink::WebInputEvent::Type type, 190 blink::WebInputEvent::Type type,
192 InputEventAckState ack_result) { 191 InputEventAckState ack_result) {
193 client_->NotifyInputEventHandled(routing_id, type, ack_result); 192 client_->NotifyInputEventHandled(routing_id, type, ack_result);
194 } 193 }
195 194
196 InputEventAckState InputHandlerManager::HandleInputEvent( 195 void InputHandlerManager::HandleInputEvent(
197 int routing_id, 196 int routing_id,
198 const WebInputEvent* input_event, 197 ui::ScopedWebInputEvent input_event,
199 ui::LatencyInfo* latency_info) { 198 const ui::LatencyInfo& latency_info,
199 const InputEventAckStateCallback& callback) {
200 DCHECK(task_runner_->BelongsToCurrentThread()); 200 DCHECK(task_runner_->BelongsToCurrentThread());
201 TRACE_EVENT1("input,benchmark,rail", "InputHandlerManager::HandleInputEvent", 201 TRACE_EVENT1("input,benchmark,rail", "InputHandlerManager::HandleInputEvent",
202 "type", ui::WebInputEventTraits::GetName(input_event->type)); 202 "type", ui::WebInputEventTraits::GetName(input_event->type));
203 203
204 auto it = input_handlers_.find(routing_id); 204 auto it = input_handlers_.find(routing_id);
205 if (it == input_handlers_.end()) { 205 if (it == input_handlers_.end()) {
206 TRACE_EVENT1("input,rail", "InputHandlerManager::HandleInputEvent", 206 TRACE_EVENT1("input,rail", "InputHandlerManager::HandleInputEvent",
207 "result", "NoInputHandlerFound"); 207 "result", "NoInputHandlerFound");
208 // Oops, we no longer have an interested input handler.. 208 // Oops, we no longer have an interested input handler..
209 return INPUT_EVENT_ACK_STATE_NOT_CONSUMED; 209 callback.Run(INPUT_EVENT_ACK_STATE_NOT_CONSUMED, std::move(input_event),
210 latency_info, nullptr);
211 return;
210 } 212 }
211 213
212 TRACE_EVENT1("input,rail", "InputHandlerManager::HandleInputEvent", 214 TRACE_EVENT1("input,rail", "InputHandlerManager::HandleInputEvent",
213 "result", "EventSentToInputHandlerProxy"); 215 "result", "EventSentToInputHandlerProxy");
214 InputHandlerProxy* proxy = it->second->input_handler_proxy(); 216 InputHandlerProxy* proxy = it->second->input_handler_proxy();
215 InputEventAckState input_event_ack_state = InputEventDispositionToAck( 217 proxy->HandleInputEventWithLatencyInfo(
216 proxy->HandleInputEventWithLatencyInfo(*input_event, latency_info)); 218 std::move(input_event), latency_info,
219 base::Bind(&InputHandlerManager::DidHandleInputEvent,
220 base::Unretained(this), callback));
221 }
222
223 void InputHandlerManager::DidHandleInputEvent(
224 const InputEventAckStateCallback& callback,
225 EventDisposition event_disposition,
226 ui::ScopedWebInputEvent input_event,
227 const ui::LatencyInfo& latency_info,
228 std::unique_ptr<ui::DidOverscrollParams> overscroll_params) {
229 InputEventAckState input_event_ack_state =
230 InputEventDispositionToAck(event_disposition);
217 switch (input_event_ack_state) { 231 switch (input_event_ack_state) {
218 case INPUT_EVENT_ACK_STATE_CONSUMED: 232 case INPUT_EVENT_ACK_STATE_CONSUMED:
219 renderer_scheduler_->DidHandleInputEventOnCompositorThread( 233 renderer_scheduler_->DidHandleInputEventOnCompositorThread(
220 *input_event, 234 *input_event,
221 RendererScheduler::InputEventState::EVENT_CONSUMED_BY_COMPOSITOR); 235 RendererScheduler::InputEventState::EVENT_CONSUMED_BY_COMPOSITOR);
222 break; 236 break;
223 case INPUT_EVENT_ACK_STATE_NOT_CONSUMED: 237 case INPUT_EVENT_ACK_STATE_NOT_CONSUMED:
224 renderer_scheduler_->DidHandleInputEventOnCompositorThread( 238 renderer_scheduler_->DidHandleInputEventOnCompositorThread(
225 *input_event, 239 *input_event,
226 RendererScheduler::InputEventState::EVENT_FORWARDED_TO_MAIN_THREAD); 240 RendererScheduler::InputEventState::EVENT_FORWARDED_TO_MAIN_THREAD);
227 break; 241 break;
228 default: 242 default:
229 break; 243 break;
230 } 244 }
231 return input_event_ack_state; 245 callback.Run(input_event_ack_state, std::move(input_event), latency_info,
246 std::move(overscroll_params));
232 } 247 }
233 248
234 void InputHandlerManager::DidOverscroll(int routing_id, 249 void InputHandlerManager::DidOverscroll(int routing_id,
235 const ui::DidOverscrollParams& params) { 250 const ui::DidOverscrollParams& params,
236 client_->DidOverscroll(routing_id, params); 251 bool bundle_ack_with_triggering_event) {
252 client_->DidOverscroll(routing_id, params, bundle_ack_with_triggering_event);
237 } 253 }
238 254
239 void InputHandlerManager::DidStartFlinging(int routing_id) { 255 void InputHandlerManager::DidStartFlinging(int routing_id) {
240 client_->DidStartFlinging(routing_id); 256 client_->DidStartFlinging(routing_id);
241 } 257 }
242 258
243 void InputHandlerManager::DidStopFlinging(int routing_id) { 259 void InputHandlerManager::DidStopFlinging(int routing_id) {
244 client_->DidStopFlinging(routing_id); 260 client_->DidStopFlinging(routing_id);
245 } 261 }
246 262
247 void InputHandlerManager::DidAnimateForInput() { 263 void InputHandlerManager::DidAnimateForInput() {
248 renderer_scheduler_->DidAnimateForInputOnCompositorThread(); 264 renderer_scheduler_->DidAnimateForInputOnCompositorThread();
249 } 265 }
250 266
251 } // namespace content 267 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698