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

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

Issue 1780953003: Change the non-blocking event queue to the main thread event queue. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master_wheel_regression_5
Patch Set: Fix android Created 4 years, 9 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 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 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/render_widget_input_handler.h" 5 #include "content/renderer/input/render_widget_input_handler.h"
6 6
7 #include <stddef.h> 7 #include <stddef.h>
8 #include <stdint.h> 8 #include <stdint.h>
9 #include <utility> 9 #include <utility>
10 10
(...skipping 288 matching lines...) Expand 10 before | Expand all | Expand 10 after
299 WebInputEventResult processed = prevent_default 299 WebInputEventResult processed = prevent_default
300 ? WebInputEventResult::HandledSuppressed 300 ? WebInputEventResult::HandledSuppressed
301 : WebInputEventResult::NotHandled; 301 : WebInputEventResult::NotHandled;
302 if (input_event.type != WebInputEvent::Char || !suppress_next_char_events_) { 302 if (input_event.type != WebInputEvent::Char || !suppress_next_char_events_) {
303 suppress_next_char_events_ = false; 303 suppress_next_char_events_ = false;
304 if (processed == WebInputEventResult::NotHandled && widget_->webwidget()) 304 if (processed == WebInputEventResult::NotHandled && widget_->webwidget())
305 processed = widget_->webwidget()->handleInputEvent(input_event); 305 processed = widget_->webwidget()->handleInputEvent(input_event);
306 } 306 }
307 307
308 bool non_blocking = 308 bool non_blocking =
309 dispatch_type ==
310 InputEventDispatchType::DISPATCH_TYPE_NON_BLOCKING_NOTIFY_MAIN ||
309 dispatch_type == InputEventDispatchType::DISPATCH_TYPE_NON_BLOCKING; 311 dispatch_type == InputEventDispatchType::DISPATCH_TYPE_NON_BLOCKING;
310 // TODO(dtapuska): Use the input_event.timeStampSeconds as the start 312 // TODO(dtapuska): Use the input_event.timeStampSeconds as the start
311 // ideally this should be when the event was sent by the compositor to the 313 // ideally this should be when the event was sent by the compositor to the
312 // renderer. crbug.com/565348 314 // renderer. crbug.com/565348
313 if (input_event.type == WebInputEvent::TouchStart || 315 if (input_event.type == WebInputEvent::TouchStart ||
314 input_event.type == WebInputEvent::TouchMove || 316 input_event.type == WebInputEvent::TouchMove ||
315 input_event.type == WebInputEvent::TouchEnd) { 317 input_event.type == WebInputEvent::TouchEnd) {
316 LogPassiveEventListenersUma( 318 LogPassiveEventListenersUma(
317 processed, non_blocking, 319 processed, non_blocking,
318 static_cast<const WebTouchEvent&>(input_event).cancelable, 320 static_cast<const WebTouchEvent&>(input_event).cancelable,
(...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after
390 total_input_handling_time_this_frame_ += (end_time - start_time); 392 total_input_handling_time_this_frame_ += (end_time - start_time);
391 rate_limiting_wanted = 393 rate_limiting_wanted =
392 total_input_handling_time_this_frame_.InMicroseconds() > 394 total_input_handling_time_this_frame_.InMicroseconds() >
393 kInputHandlingTimeThrottlingThresholdMicroseconds; 395 kInputHandlingTimeThrottlingThresholdMicroseconds;
394 } 396 }
395 397
396 TRACE_EVENT_SYNTHETIC_DELAY_END("blink.HandleInputEvent"); 398 TRACE_EVENT_SYNTHETIC_DELAY_END("blink.HandleInputEvent");
397 399
398 // Note that we can't use handling_event_type_ here since it will be overriden 400 // Note that we can't use handling_event_type_ here since it will be overriden
399 // by reentrant calls for events after the paused one. 401 // by reentrant calls for events after the paused one.
400 bool no_ack = ignore_ack_for_mouse_move_from_debugger_ && 402 bool can_send_ack = !(ignore_ack_for_mouse_move_from_debugger_ &&
401 input_event.type == WebInputEvent::MouseMove; 403 input_event.type == WebInputEvent::MouseMove);
402 if (non_blocking) { 404 if (dispatch_type == DISPATCH_TYPE_BLOCKING_NOTIFY_MAIN ||
405 dispatch_type == DISPATCH_TYPE_NON_BLOCKING_NOTIFY_MAIN) {
403 // |non_blocking| means it was ack'd already by the InputHandlerProxy 406 // |non_blocking| means it was ack'd already by the InputHandlerProxy
404 // so let the delegate know the event has been handled. 407 // so let the delegate know the event has been handled.
405 delegate_->NonBlockingInputEventHandled(input_event.type); 408 delegate_->NotifyInputEventHandled(input_event.type);
406 } else if (WebInputEventTraits::WillReceiveAckFromRenderer(input_event) && 409 }
407 !no_ack) { 410
411 if ((dispatch_type == DISPATCH_TYPE_BLOCKING ||
412 dispatch_type == DISPATCH_TYPE_BLOCKING_NOTIFY_MAIN) &&
413 can_send_ack) {
408 scoped_ptr<InputEventAck> response(new InputEventAck( 414 scoped_ptr<InputEventAck> response(new InputEventAck(
409 input_event.type, ack_result, swap_latency_info, 415 input_event.type, ack_result, swap_latency_info,
410 std::move(event_overscroll), 416 std::move(event_overscroll),
411 WebInputEventTraits::GetUniqueTouchEventId(input_event))); 417 WebInputEventTraits::GetUniqueTouchEventId(input_event)));
412 if (rate_limiting_wanted && frame_pending && !widget_->is_hidden()) { 418 if (rate_limiting_wanted && frame_pending && !widget_->is_hidden()) {
413 // We want to rate limit the input events in this case, so we'll wait for 419 // We want to rate limit the input events in this case, so we'll wait for
414 // painting to finish before ACKing this message. 420 // painting to finish before ACKing this message.
415 TRACE_EVENT_INSTANT0( 421 TRACE_EVENT_INSTANT0(
416 "renderer", 422 "renderer",
417 "RenderWidgetInputHandler::OnHandleInputEvent ack throttled", 423 "RenderWidgetInputHandler::OnHandleInputEvent ack throttled",
(...skipping 12 matching lines...) Expand all
430 "input", "RenderWidgetInputHandler::ThrottledInputEventAck", 436 "input", "RenderWidgetInputHandler::ThrottledInputEventAck",
431 pending_input_event_ack_.get()); 437 pending_input_event_ack_.get());
432 if (widget_->compositor()) 438 if (widget_->compositor())
433 widget_->compositor()->NotifyInputThrottledUntilCommit(); 439 widget_->compositor()->NotifyInputThrottledUntilCommit();
434 } else { 440 } else {
435 delegate_->OnInputEventAck(std::move(response)); 441 delegate_->OnInputEventAck(std::move(response));
436 } 442 }
437 } else { 443 } else {
438 DCHECK(!event_overscroll) << "Unexpected overscroll for un-acked event"; 444 DCHECK(!event_overscroll) << "Unexpected overscroll for un-acked event";
439 } 445 }
440 if (!no_ack && RenderThreadImpl::current()) { 446 if (can_send_ack && RenderThreadImpl::current()) {
441 RenderThreadImpl::current() 447 RenderThreadImpl::current()
442 ->GetRendererScheduler() 448 ->GetRendererScheduler()
443 ->DidHandleInputEventOnMainThread(input_event); 449 ->DidHandleInputEventOnMainThread(input_event);
444 } 450 }
445 if (input_event.type == WebInputEvent::MouseMove) 451 if (input_event.type == WebInputEvent::MouseMove)
446 ignore_ack_for_mouse_move_from_debugger_ = false; 452 ignore_ack_for_mouse_move_from_debugger_ = false;
447 453
448 #if defined(OS_ANDROID) 454 #if defined(OS_ANDROID)
449 // Allow the IME to be shown when the focus changes as a consequence 455 // Allow the IME to be shown when the focus changes as a consequence
450 // of a processed touch end event. 456 // of a processed touch end event.
(...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after
526 if (pending_input_event_ack_) { 532 if (pending_input_event_ack_) {
527 TRACE_EVENT_ASYNC_END0("input", 533 TRACE_EVENT_ASYNC_END0("input",
528 "RenderWidgetInputHandler::ThrottledInputEventAck", 534 "RenderWidgetInputHandler::ThrottledInputEventAck",
529 pending_input_event_ack_.get()); 535 pending_input_event_ack_.get());
530 delegate_->OnInputEventAck(std::move(pending_input_event_ack_)); 536 delegate_->OnInputEventAck(std::move(pending_input_event_ack_));
531 } 537 }
532 total_input_handling_time_this_frame_ = base::TimeDelta(); 538 total_input_handling_time_this_frame_ = base::TimeDelta();
533 } 539 }
534 540
535 } // namespace content 541 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698