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

Unified Diff: ui/events/gesture_detection/touch_disposition_gesture_filter.cc

Issue 680413006: Re-enable Eager Gesture Recognition on Aura (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Address sadrul's comments. Created 6 years, 1 month 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 side-by-side diff with in-line comments
Download patch
Index: ui/events/gesture_detection/touch_disposition_gesture_filter.cc
diff --git a/ui/events/gesture_detection/touch_disposition_gesture_filter.cc b/ui/events/gesture_detection/touch_disposition_gesture_filter.cc
index 564d014a4c5f94c28a7bd9a72be4ec1c8c84d594..18377d21798051dcb81f2ea36c5eecb56ac29763 100644
--- a/ui/events/gesture_detection/touch_disposition_gesture_filter.cc
+++ b/ui/events/gesture_detection/touch_disposition_gesture_filter.cc
@@ -170,7 +170,8 @@ TouchDispositionGestureFilter::OnGesturePacket(
return SUCCESS;
}
-void TouchDispositionGestureFilter::OnTouchEventAck(bool event_consumed) {
+void TouchDispositionGestureFilter::OnTouchEventAckForQueueFront(
+ bool event_consumed) {
// Spurious touch acks from the renderer should not trigger a crash.
if (IsEmpty() || (Head().empty() && sequences_.size() == 1))
return;
@@ -178,12 +179,33 @@ void TouchDispositionGestureFilter::OnTouchEventAck(bool event_consumed) {
if (Head().empty())
PopGestureSequence();
- GestureSequence& sequence = Head();
+ Head().front().Ack(event_consumed);
+ SendAckedEvents();
+}
+
+void TouchDispositionGestureFilter::OnTouchEventAckForQueueBack(
+ bool event_consumed) {
+ // Make sure there is an event to ack.
+ CHECK(!IsEmpty() && !Tail().empty());
jdduke (slow) 2014/12/02 16:21:59 Nit: Make this 2 checks so it's immediately clear
tdresser 2014/12/02 21:29:27 Done.
+
+ Tail().back().Ack(event_consumed);
+
+ if (Head().empty())
+ PopGestureSequence();
+
+ if (sequences_.size() == 1 && Tail().size() == 1)
+ SendAckedEvents();
+}
- // Dispatch the packet corresponding to the ack'ed touch, as well as any
- // additional timeout-based packets queued before the ack was received.
+void TouchDispositionGestureFilter::SendAckedEvents() {
+ // Dispatch all packets corresponding to ack'ed touches, as well as
+ // any pending timeout-based packets.
bool touch_packet_for_current_ack_handled = false;
- while (!sequence.empty()) {
+ while (!IsEmpty() && (!Head().empty() || sequences_.size() != 1)) {
+ if (Head().empty())
+ PopGestureSequence();
+ GestureSequence& sequence = Head();
+
DCHECK_NE(sequence.front().gesture_source(),
GestureEventDataPacket::UNDEFINED);
DCHECK_NE(sequence.front().gesture_source(),
@@ -191,17 +213,21 @@ void TouchDispositionGestureFilter::OnTouchEventAck(bool event_consumed) {
GestureEventDataPacket::GestureSource source =
sequence.front().gesture_source();
+ GestureEventDataPacket::AckState ack_state = sequence.front().ack_state();
+
if (source != GestureEventDataPacket::TOUCH_TIMEOUT) {
- // We should handle at most one non-timeout based packet.
- if (touch_packet_for_current_ack_handled)
+ // We've sent all packets which aren't pending their ack.
+ if (ack_state == GestureEventDataPacket::AckState::PENDING)
break;
- state_.OnTouchEventAck(event_consumed, IsTouchStartEvent(source));
- touch_packet_for_current_ack_handled = true;
+ state_.OnTouchEventAck(
+ ack_state == GestureEventDataPacket::AckState::CONSUMED,
+ IsTouchStartEvent(source));
}
// We need to pop the current sequence before sending the packet, because
// sending the packet could result in this method being re-entered (e.g. on
// Aura, we could trigger a touch-cancel). As popping the sequence destroys
// the packet, we copy the packet before popping it.
+ touch_packet_for_current_ack_handled = true;
const GestureEventDataPacket packet = sequence.front();
sequence.pop();
FilterAndSendPacket(packet);

Powered by Google App Engine
This is Rietveld 408576698