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

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

Issue 628763003: Support InputRouter recycling (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Updates Created 6 years, 2 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/touch_event_queue.h" 5 #include "content/browser/renderer_host/input/touch_event_queue.h"
6 6
7 #include "base/auto_reset.h" 7 #include "base/auto_reset.h"
8 #include "base/debug/trace_event.h" 8 #include "base/debug/trace_event.h"
9 #include "base/stl_util.h" 9 #include "base/stl_util.h"
10 #include "content/browser/renderer_host/input/timeout_monitor.h" 10 #include "content/browser/renderer_host/input/timeout_monitor.h"
(...skipping 139 matching lines...) Expand 10 before | Expand all | Expand 10 after
150 150
151 private: 151 private:
152 enum PendingAckState { 152 enum PendingAckState {
153 PENDING_ACK_NONE, 153 PENDING_ACK_NONE,
154 PENDING_ACK_ORIGINAL_EVENT, 154 PENDING_ACK_ORIGINAL_EVENT,
155 PENDING_ACK_CANCEL_EVENT, 155 PENDING_ACK_CANCEL_EVENT,
156 }; 156 };
157 157
158 void OnTimeOut() { 158 void OnTimeOut() {
159 SetPendingAckState(PENDING_ACK_ORIGINAL_EVENT); 159 SetPendingAckState(PENDING_ACK_ORIGINAL_EVENT);
160 touch_queue_->FlushQueue(); 160 touch_queue_->Flush(INPUT_EVENT_ACK_STATE_NO_CONSUMER_EXISTS);
161 } 161 }
162 162
163 // Skip a cancel event if the timed-out event had no consumer and was the 163 // Skip a cancel event if the timed-out event had no consumer and was the
164 // initial event in the gesture. 164 // initial event in the gesture.
165 bool AckedTimeoutEventRequiresCancel(InputEventAckState ack_result) const { 165 bool AckedTimeoutEventRequiresCancel(InputEventAckState ack_result) const {
166 DCHECK(HasTimeoutEvent()); 166 DCHECK(HasTimeoutEvent());
167 if (ack_result != INPUT_EVENT_ACK_STATE_NO_CONSUMER_EXISTS) 167 if (ack_result != INPUT_EVENT_ACK_STATE_NO_CONSUMER_EXISTS)
168 return true; 168 return true;
169 return !WebTouchEventTraits::IsTouchSequenceStart(timeout_event_.event); 169 return !WebTouchEventTraits::IsTouchSequenceStart(timeout_event_.event);
170 } 170 }
(...skipping 451 matching lines...) Expand 10 before | Expand all | Expand 10 after
622 if (!send_touch_events_async_) 622 if (!send_touch_events_async_)
623 needs_async_touchmove_for_outer_slop_region_ = false; 623 needs_async_touchmove_for_outer_slop_region_ = false;
624 } 624 }
625 625
626 void TouchEventQueue::OnHasTouchEventHandlers(bool has_handlers) { 626 void TouchEventQueue::OnHasTouchEventHandlers(bool has_handlers) {
627 DCHECK(!dispatching_touch_ack_); 627 DCHECK(!dispatching_touch_ack_);
628 DCHECK(!dispatching_touch_); 628 DCHECK(!dispatching_touch_);
629 has_handlers_ = has_handlers; 629 has_handlers_ = has_handlers;
630 } 630 }
631 631
632 void TouchEventQueue::Flush(InputEventAckState flush_ack) {
633 DCHECK(!dispatching_touch_ack_);
634 DCHECK(!dispatching_touch_);
635 pending_async_touchmove_.reset();
636 drop_remaining_touches_in_sequence_ = true;
637 while (!touch_queue_.empty())
638 PopTouchEventToClient(flush_ack);
639 }
640
632 bool TouchEventQueue::IsPendingAckTouchStart() const { 641 bool TouchEventQueue::IsPendingAckTouchStart() const {
633 DCHECK(!dispatching_touch_ack_); 642 DCHECK(!dispatching_touch_ack_);
634 if (touch_queue_.empty()) 643 if (touch_queue_.empty())
635 return false; 644 return false;
636 645
637 const blink::WebTouchEvent& event = 646 const blink::WebTouchEvent& event =
638 touch_queue_.front()->coalesced_event().event; 647 touch_queue_.front()->coalesced_event().event;
639 return (event.type == WebInputEvent::TouchStart); 648 return (event.type == WebInputEvent::TouchStart);
640 } 649 }
641 650
(...skipping 12 matching lines...) Expand all
654 663
655 bool TouchEventQueue::IsTimeoutRunningForTesting() const { 664 bool TouchEventQueue::IsTimeoutRunningForTesting() const {
656 return timeout_handler_ && timeout_handler_->IsTimeoutTimerRunning(); 665 return timeout_handler_ && timeout_handler_->IsTimeoutTimerRunning();
657 } 666 }
658 667
659 const TouchEventWithLatencyInfo& 668 const TouchEventWithLatencyInfo&
660 TouchEventQueue::GetLatestEventForTesting() const { 669 TouchEventQueue::GetLatestEventForTesting() const {
661 return touch_queue_.back()->coalesced_event(); 670 return touch_queue_.back()->coalesced_event();
662 } 671 }
663 672
664 void TouchEventQueue::FlushQueue() {
665 DCHECK(!dispatching_touch_ack_);
666 DCHECK(!dispatching_touch_);
667 pending_async_touchmove_.reset();
668 drop_remaining_touches_in_sequence_ = true;
669 while (!touch_queue_.empty())
670 PopTouchEventToClient(INPUT_EVENT_ACK_STATE_NO_CONSUMER_EXISTS);
671 }
672
673 void TouchEventQueue::PopTouchEventToClient(InputEventAckState ack_result) { 673 void TouchEventQueue::PopTouchEventToClient(InputEventAckState ack_result) {
674 AckTouchEventToClient(ack_result, PopTouchEvent(), NULL); 674 AckTouchEventToClient(ack_result, PopTouchEvent(), NULL);
675 } 675 }
676 676
677 void TouchEventQueue::PopTouchEventToClient( 677 void TouchEventQueue::PopTouchEventToClient(
678 InputEventAckState ack_result, 678 InputEventAckState ack_result,
679 const LatencyInfo& renderer_latency_info) { 679 const LatencyInfo& renderer_latency_info) {
680 AckTouchEventToClient(ack_result, PopTouchEvent(), &renderer_latency_info); 680 AckTouchEventToClient(ack_result, PopTouchEvent(), &renderer_latency_info);
681 } 681 }
682 682
(...skipping 94 matching lines...) Expand 10 before | Expand all | Expand 10 after
777 if (ack_result != INPUT_EVENT_ACK_STATE_NO_CONSUMER_EXISTS) 777 if (ack_result != INPUT_EVENT_ACK_STATE_NO_CONSUMER_EXISTS)
778 touch_consumer_states_.mark_bit(point.id); 778 touch_consumer_states_.mark_bit(point.id);
779 else 779 else
780 touch_consumer_states_.clear_bit(point.id); 780 touch_consumer_states_.clear_bit(point.id);
781 } 781 }
782 } 782 }
783 } 783 }
784 } 784 }
785 785
786 } // namespace content 786 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698