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

Side by Side Diff: content/browser/renderer_host/input/input_router_impl.cc

Issue 999423003: Set the unique_event_id when converting from TouchEvent to WebTouchEvent (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 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
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/browser/renderer_host/input/input_router_impl.h" 5 #include "content/browser/renderer_host/input/input_router_impl.h"
6 6
7 #include <math.h> 7 #include <math.h>
8 8
9 #include "base/auto_reset.h" 9 #include "base/auto_reset.h"
10 #include "base/command_line.h" 10 #include "base/command_line.h"
(...skipping 339 matching lines...) Expand 10 before | Expand all | Expand 10 after
350 output_stream_validator_.Validate(input_event); 350 output_stream_validator_.Validate(input_event);
351 351
352 if (OfferToClient(input_event, latency_info)) 352 if (OfferToClient(input_event, latency_info))
353 return; 353 return;
354 354
355 OfferToRenderer(input_event, latency_info, is_keyboard_shortcut); 355 OfferToRenderer(input_event, latency_info, is_keyboard_shortcut);
356 356
357 // Touch events should always indicate in the event whether they are 357 // Touch events should always indicate in the event whether they are
358 // cancelable (respect ACK disposition) or not. 358 // cancelable (respect ACK disposition) or not.
359 bool ignores_ack = WebInputEventTraits::IgnoresAckDisposition(input_event); 359 bool ignores_ack = WebInputEventTraits::IgnoresAckDisposition(input_event);
360 uint64 unique_touch_event_id = 0;
360 if (WebInputEvent::isTouchEventType(input_event.type)) { 361 if (WebInputEvent::isTouchEventType(input_event.type)) {
361 const WebTouchEvent& touch = static_cast<const WebTouchEvent&>(input_event); 362 const WebTouchEvent& touch = static_cast<const WebTouchEvent&>(input_event);
363 unique_touch_event_id = touch.uniqueTouchEventId;
364 DCHECK_NE(unique_touch_event_id, 0UL);
362 DCHECK_NE(ignores_ack, !!touch.cancelable); 365 DCHECK_NE(ignores_ack, !!touch.cancelable);
363 } 366 }
364 367
365 // If we don't care about the ack disposition, send the ack immediately. 368 // If we don't care about the ack disposition, send the ack immediately.
366 if (ignores_ack) { 369 if (ignores_ack) {
367 ProcessInputEventAck(input_event.type, 370 ProcessInputEventAck(input_event.type,
368 INPUT_EVENT_ACK_STATE_IGNORED, 371 INPUT_EVENT_ACK_STATE_IGNORED,
369 latency_info, 372 latency_info,
373 unique_touch_event_id,
370 IGNORING_DISPOSITION); 374 IGNORING_DISPOSITION);
371 } 375 }
372 } 376 }
373 377
374 bool InputRouterImpl::OfferToClient(const WebInputEvent& input_event, 378 bool InputRouterImpl::OfferToClient(const WebInputEvent& input_event,
375 const ui::LatencyInfo& latency_info) { 379 const ui::LatencyInfo& latency_info) {
376 bool consumed = false; 380 bool consumed = false;
381 uint64 unique_touch_event_id = 0;
377 382
378 InputEventAckState filter_ack = 383 InputEventAckState filter_ack =
379 client_->FilterInputEvent(input_event, latency_info); 384 client_->FilterInputEvent(input_event, latency_info);
380 switch (filter_ack) { 385 switch (filter_ack) {
381 case INPUT_EVENT_ACK_STATE_CONSUMED: 386 case INPUT_EVENT_ACK_STATE_CONSUMED:
382 case INPUT_EVENT_ACK_STATE_NO_CONSUMER_EXISTS: 387 case INPUT_EVENT_ACK_STATE_NO_CONSUMER_EXISTS:
383 // Send the ACK and early exit. 388 // Send the ACK and early exit.
384 next_mouse_move_.reset(); 389 next_mouse_move_.reset();
385 ProcessInputEventAck(input_event.type, filter_ack, latency_info, CLIENT); 390 if (WebInputEvent::isTouchEventType(input_event.type)) {
391 const WebTouchEvent& touch =
392 static_cast<const WebTouchEvent&>(input_event);
393 unique_touch_event_id = touch.uniqueTouchEventId;
394 }
395 ProcessInputEventAck(input_event.type, filter_ack, latency_info,
396 unique_touch_event_id, CLIENT);
386 // WARNING: |this| may be deleted at this point. 397 // WARNING: |this| may be deleted at this point.
387 consumed = true; 398 consumed = true;
388 break; 399 break;
389 case INPUT_EVENT_ACK_STATE_UNKNOWN: 400 case INPUT_EVENT_ACK_STATE_UNKNOWN:
390 // Simply drop the event. 401 // Simply drop the event.
391 consumed = true; 402 consumed = true;
392 break; 403 break;
393 default: 404 default:
394 break; 405 break;
395 } 406 }
(...skipping 24 matching lines...) Expand all
420 431
421 // Log the time delta for processing an input event. 432 // Log the time delta for processing an input event.
422 TimeDelta delta = TimeTicks::Now() - input_event_start_time_; 433 TimeDelta delta = TimeTicks::Now() - input_event_start_time_;
423 UMA_HISTOGRAM_TIMES("MPArch.IIR_InputEventDelta", delta); 434 UMA_HISTOGRAM_TIMES("MPArch.IIR_InputEventDelta", delta);
424 435
425 if (ack.overscroll) { 436 if (ack.overscroll) {
426 DCHECK(ack.type == WebInputEvent::MouseWheel || 437 DCHECK(ack.type == WebInputEvent::MouseWheel ||
427 ack.type == WebInputEvent::GestureScrollUpdate); 438 ack.type == WebInputEvent::GestureScrollUpdate);
428 OnDidOverscroll(*ack.overscroll); 439 OnDidOverscroll(*ack.overscroll);
429 } 440 }
430 441 ProcessInputEventAck(ack.type, ack.state, ack.latency,
431 ProcessInputEventAck(ack.type, ack.state, ack.latency, RENDERER); 442 ack.unique_touch_event_id, RENDERER);
432 // WARNING: |this| may be deleted at this point. 443 // WARNING: |this| may be deleted at this point.
433 444
434 // This is used only for testing, and the other end does not use the 445 // This is used only for testing, and the other end does not use the
435 // source object. On linux, specifying 446 // source object. On linux, specifying
436 // Source<RenderWidgetHost> results in a very strange 447 // Source<RenderWidgetHost> results in a very strange
437 // runtime error in the epilogue of the enclosing 448 // runtime error in the epilogue of the enclosing
438 // (ProcessInputEventAck) method, but not on other platforms; using 449 // (ProcessInputEventAck) method, but not on other platforms; using
439 // 'void' instead is just as safe (since NotificationSource 450 // 'void' instead is just as safe (since NotificationSource
440 // is not actually typesafe) and avoids this error. 451 // is not actually typesafe) and avoids this error.
441 int type = static_cast<int>(ack.type); 452 int type = static_cast<int>(ack.type);
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after
498 void InputRouterImpl::OnDidStopFlinging() { 509 void InputRouterImpl::OnDidStopFlinging() {
499 gesture_event_queue_.DidStopFlinging(); 510 gesture_event_queue_.DidStopFlinging();
500 SignalFlushedIfNecessary(); 511 SignalFlushedIfNecessary();
501 client_->DidStopFlinging(); 512 client_->DidStopFlinging();
502 } 513 }
503 514
504 void InputRouterImpl::ProcessInputEventAck( 515 void InputRouterImpl::ProcessInputEventAck(
505 WebInputEvent::Type event_type, 516 WebInputEvent::Type event_type,
506 InputEventAckState ack_result, 517 InputEventAckState ack_result,
507 const ui::LatencyInfo& latency_info, 518 const ui::LatencyInfo& latency_info,
519 uint64 uniqueEventId,
tdresser 2015/04/09 12:33:06 unique_touch_event_id
508 AckSource ack_source) { 520 AckSource ack_source) {
509 TRACE_EVENT2("input", "InputRouterImpl::ProcessInputEventAck", 521 TRACE_EVENT2("input", "InputRouterImpl::ProcessInputEventAck",
510 "type", WebInputEventTraits::GetName(event_type), 522 "type", WebInputEventTraits::GetName(event_type),
511 "ack", GetEventAckName(ack_result)); 523 "ack", GetEventAckName(ack_result));
512 524
513 // Note: The keyboard ack must be treated carefully, as it may result in 525 // Note: The keyboard ack must be treated carefully, as it may result in
514 // synchronous destruction of |this|. Handling immediately guards against 526 // synchronous destruction of |this|. Handling immediately guards against
515 // future references to |this|, as with |auto_reset_current_ack_source| below. 527 // future references to |this|, as with |auto_reset_current_ack_source| below.
516 if (WebInputEvent::isKeyboardEventType(event_type)) { 528 if (WebInputEvent::isKeyboardEventType(event_type)) {
517 ProcessKeyboardAck(event_type, ack_result); 529 ProcessKeyboardAck(event_type, ack_result);
518 // WARNING: |this| may be deleted at this point. 530 // WARNING: |this| may be deleted at this point.
519 return; 531 return;
520 } 532 }
521 533
522 base::AutoReset<AckSource> auto_reset_current_ack_source( 534 base::AutoReset<AckSource> auto_reset_current_ack_source(
523 &current_ack_source_, ack_source); 535 &current_ack_source_, ack_source);
524 536
525 if (WebInputEvent::isMouseEventType(event_type)) { 537 if (WebInputEvent::isMouseEventType(event_type)) {
526 ProcessMouseAck(event_type, ack_result); 538 ProcessMouseAck(event_type, ack_result);
527 } else if (event_type == WebInputEvent::MouseWheel) { 539 } else if (event_type == WebInputEvent::MouseWheel) {
528 ProcessWheelAck(ack_result, latency_info); 540 ProcessWheelAck(ack_result, latency_info);
529 } else if (WebInputEvent::isTouchEventType(event_type)) { 541 } else if (WebInputEvent::isTouchEventType(event_type)) {
530 ProcessTouchAck(ack_result, latency_info); 542 ProcessTouchAck(ack_result, latency_info, uniqueEventId);
531 } else if (WebInputEvent::isGestureEventType(event_type)) { 543 } else if (WebInputEvent::isGestureEventType(event_type)) {
532 ProcessGestureAck(event_type, ack_result, latency_info); 544 ProcessGestureAck(event_type, ack_result, latency_info);
533 } else if (event_type != WebInputEvent::Undefined) { 545 } else if (event_type != WebInputEvent::Undefined) {
534 ack_handler_->OnUnexpectedEventAck(InputAckHandler::BAD_ACK_MESSAGE); 546 ack_handler_->OnUnexpectedEventAck(InputAckHandler::BAD_ACK_MESSAGE);
535 } 547 }
536 548
537 SignalFlushedIfNecessary(); 549 SignalFlushedIfNecessary();
538 } 550 }
539 551
540 void InputRouterImpl::ProcessKeyboardAck(blink::WebInputEvent::Type type, 552 void InputRouterImpl::ProcessKeyboardAck(blink::WebInputEvent::Type type,
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after
601 613
602 void InputRouterImpl::ProcessGestureAck(WebInputEvent::Type type, 614 void InputRouterImpl::ProcessGestureAck(WebInputEvent::Type type,
603 InputEventAckState ack_result, 615 InputEventAckState ack_result,
604 const ui::LatencyInfo& latency) { 616 const ui::LatencyInfo& latency) {
605 // |gesture_event_queue_| will forward to OnGestureEventAck when appropriate. 617 // |gesture_event_queue_| will forward to OnGestureEventAck when appropriate.
606 gesture_event_queue_.ProcessGestureAck(ack_result, type, latency); 618 gesture_event_queue_.ProcessGestureAck(ack_result, type, latency);
607 } 619 }
608 620
609 void InputRouterImpl::ProcessTouchAck( 621 void InputRouterImpl::ProcessTouchAck(
610 InputEventAckState ack_result, 622 InputEventAckState ack_result,
611 const ui::LatencyInfo& latency) { 623 const ui::LatencyInfo& latency,
624 uint64 unique_touch_event_id) {
612 // |touch_event_queue_| will forward to OnTouchEventAck when appropriate. 625 // |touch_event_queue_| will forward to OnTouchEventAck when appropriate.
613 touch_event_queue_.ProcessTouchAck(ack_result, latency); 626 touch_event_queue_.ProcessTouchAck(ack_result, latency,
627 unique_touch_event_id);
614 } 628 }
615 629
616 void InputRouterImpl::UpdateTouchAckTimeoutEnabled() { 630 void InputRouterImpl::UpdateTouchAckTimeoutEnabled() {
617 // Mobile sites tend to be well-behaved with respect to touch handling, so 631 // Mobile sites tend to be well-behaved with respect to touch handling, so
618 // they have less need for the touch timeout fallback. 632 // they have less need for the touch timeout fallback.
619 const bool fixed_page_scale = (current_view_flags_ & FIXED_PAGE_SCALE) != 0; 633 const bool fixed_page_scale = (current_view_flags_ & FIXED_PAGE_SCALE) != 0;
620 const bool mobile_viewport = (current_view_flags_ & MOBILE_VIEWPORT) != 0; 634 const bool mobile_viewport = (current_view_flags_ & MOBILE_VIEWPORT) != 0;
621 635
622 // TOUCH_ACTION_NONE will prevent scrolling, in which case the timeout serves 636 // TOUCH_ACTION_NONE will prevent scrolling, in which case the timeout serves
623 // little purpose. It's also a strong signal that touch handling is critical 637 // little purpose. It's also a strong signal that touch handling is critical
(...skipping 12 matching lines...) Expand all
636 return; 650 return;
637 651
638 if (HasPendingEvents()) 652 if (HasPendingEvents())
639 return; 653 return;
640 654
641 flush_requested_ = false; 655 flush_requested_ = false;
642 client_->DidFlush(); 656 client_->DidFlush();
643 } 657 }
644 658
645 } // namespace content 659 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698