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

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: dtapuska's review, rename to DidHandleInputEventAndOverScroll Created 4 years, 3 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"
(...skipping 178 matching lines...) Expand 10 before | Expand all | Expand 10 after
189 int routing_id, 189 int routing_id,
190 blink::WebInputEvent::Type type, 190 blink::WebInputEvent::Type type,
191 InputEventAckState ack_result) { 191 InputEventAckState ack_result) {
192 client_->NotifyInputEventHandled(routing_id, type, ack_result); 192 client_->NotifyInputEventHandled(routing_id, type, ack_result);
193 } 193 }
194 194
195 void InputHandlerManager::ProcessRafAlignedInputOnMainThread(int routing_id) { 195 void InputHandlerManager::ProcessRafAlignedInputOnMainThread(int routing_id) {
196 client_->ProcessRafAlignedInput(routing_id); 196 client_->ProcessRafAlignedInput(routing_id);
197 } 197 }
198 198
199 InputEventAckState InputHandlerManager::HandleInputEvent( 199 void InputHandlerManager::HandleInputEvent(
200 int routing_id, 200 int routing_id,
201 const WebInputEvent* input_event, 201 ui::ScopedWebInputEvent input_event,
202 ui::LatencyInfo* latency_info) { 202 const ui::LatencyInfo& latency_info,
203 const InputEventAckStateCallback& callback) {
203 DCHECK(task_runner_->BelongsToCurrentThread()); 204 DCHECK(task_runner_->BelongsToCurrentThread());
204 TRACE_EVENT1("input,benchmark,rail", "InputHandlerManager::HandleInputEvent", 205 TRACE_EVENT1("input,benchmark,rail", "InputHandlerManager::HandleInputEvent",
205 "type", WebInputEvent::GetName(input_event->type)); 206 "type", WebInputEvent::GetName(input_event->type));
206 207
207 auto it = input_handlers_.find(routing_id); 208 auto it = input_handlers_.find(routing_id);
208 if (it == input_handlers_.end()) { 209 if (it == input_handlers_.end()) {
209 TRACE_EVENT1("input,rail", "InputHandlerManager::HandleInputEvent", 210 TRACE_EVENT1("input,rail", "InputHandlerManager::HandleInputEvent",
210 "result", "NoInputHandlerFound"); 211 "result", "NoInputHandlerFound");
211 // Oops, we no longer have an interested input handler.. 212 // Oops, we no longer have an interested input handler..
212 return INPUT_EVENT_ACK_STATE_NOT_CONSUMED; 213 callback.Run(INPUT_EVENT_ACK_STATE_NOT_CONSUMED, std::move(input_event),
214 latency_info, nullptr);
215 return;
213 } 216 }
214 217
215 TRACE_EVENT1("input,rail", "InputHandlerManager::HandleInputEvent", 218 TRACE_EVENT1("input,rail", "InputHandlerManager::HandleInputEvent",
216 "result", "EventSentToInputHandlerProxy"); 219 "result", "EventSentToInputHandlerProxy");
217 InputHandlerProxy* proxy = it->second->input_handler_proxy(); 220 InputHandlerProxy* proxy = it->second->input_handler_proxy();
218 InputEventAckState input_event_ack_state = InputEventDispositionToAck( 221 proxy->HandleInputEventWithLatencyInfo(
219 proxy->HandleInputEventWithLatencyInfo(*input_event, latency_info)); 222 std::move(input_event), latency_info,
223 base::Bind(&InputHandlerManager::DidHandleInputEventAndOverscroll,
224 base::Unretained(this), callback));
dtapuska 2016/08/30 18:33:50 What is the life cycle here?
chongz 2016/08/30 19:47:03 According to my knowledge |InputHandlerManager| wa
225 }
226
227 void InputHandlerManager::DidHandleInputEventAndOverscroll(
228 const InputEventAckStateCallback& callback,
229 EventDisposition event_disposition,
230 ui::ScopedWebInputEvent input_event,
231 const ui::LatencyInfo& latency_info,
232 std::unique_ptr<ui::DidOverscrollParams> overscroll_params) {
233 InputEventAckState input_event_ack_state =
234 InputEventDispositionToAck(event_disposition);
220 switch (input_event_ack_state) { 235 switch (input_event_ack_state) {
221 case INPUT_EVENT_ACK_STATE_CONSUMED: 236 case INPUT_EVENT_ACK_STATE_CONSUMED:
222 renderer_scheduler_->DidHandleInputEventOnCompositorThread( 237 renderer_scheduler_->DidHandleInputEventOnCompositorThread(
223 *input_event, 238 *input_event,
224 RendererScheduler::InputEventState::EVENT_CONSUMED_BY_COMPOSITOR); 239 RendererScheduler::InputEventState::EVENT_CONSUMED_BY_COMPOSITOR);
225 break; 240 break;
226 case INPUT_EVENT_ACK_STATE_NOT_CONSUMED: 241 case INPUT_EVENT_ACK_STATE_NOT_CONSUMED:
227 renderer_scheduler_->DidHandleInputEventOnCompositorThread( 242 renderer_scheduler_->DidHandleInputEventOnCompositorThread(
228 *input_event, 243 *input_event,
229 RendererScheduler::InputEventState::EVENT_FORWARDED_TO_MAIN_THREAD); 244 RendererScheduler::InputEventState::EVENT_FORWARDED_TO_MAIN_THREAD);
230 break; 245 break;
231 default: 246 default:
232 break; 247 break;
233 } 248 }
234 return input_event_ack_state; 249 callback.Run(input_event_ack_state, std::move(input_event), latency_info,
250 std::move(overscroll_params));
235 } 251 }
236 252
237 void InputHandlerManager::DidOverscroll(int routing_id, 253 void InputHandlerManager::DidOverscroll(int routing_id,
238 const ui::DidOverscrollParams& params) { 254 const ui::DidOverscrollParams& params) {
239 client_->DidOverscroll(routing_id, params); 255 client_->DidOverscroll(routing_id, params);
240 } 256 }
241 257
242 void InputHandlerManager::DidStartFlinging(int routing_id) { 258 void InputHandlerManager::DidStartFlinging(int routing_id) {
243 client_->DidStartFlinging(routing_id); 259 client_->DidStartFlinging(routing_id);
244 } 260 }
245 261
246 void InputHandlerManager::DidStopFlinging(int routing_id) { 262 void InputHandlerManager::DidStopFlinging(int routing_id) {
247 client_->DidStopFlinging(routing_id); 263 client_->DidStopFlinging(routing_id);
248 } 264 }
249 265
250 void InputHandlerManager::DidAnimateForInput() { 266 void InputHandlerManager::DidAnimateForInput() {
251 renderer_scheduler_->DidAnimateForInputOnCompositorThread(); 267 renderer_scheduler_->DidAnimateForInputOnCompositorThread();
252 } 268 }
253 269
254 void InputHandlerManager::NeedsMainFrame(int routing_id) { 270 void InputHandlerManager::NeedsMainFrame(int routing_id) {
255 DCHECK(task_runner_->BelongsToCurrentThread()); 271 DCHECK(task_runner_->BelongsToCurrentThread());
256 auto it = input_handlers_.find(routing_id); 272 auto it = input_handlers_.find(routing_id);
257 if (it == input_handlers_.end()) 273 if (it == input_handlers_.end())
258 return; 274 return;
259 it->second->NeedsMainFrame(); 275 it->second->NeedsMainFrame();
260 } 276 }
261 277
262 } // namespace content 278 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698