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

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 jdduke's comments (test fixes pending) 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..01b239ab8de0aa0334160d5cea9fb15011db71f2 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,29 @@ 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) {
+ // Spurious touch acks from the renderer should not trigger a crash.
+ if(IsEmpty() || Tail().empty())
jdduke (slow) 2014/11/26 16:07:09 Hmm, should an ack from the renderer ever hit the
tdresser 2014/11/27 18:26:25 Done.
+ return;
+ Tail().back().ack(event_consumed);
+ SendAckedEvents();
jdduke (slow) 2014/11/26 16:07:09 Hmm, I'm not sure about this. Don't we only want t
tdresser 2014/11/27 18:26:24 I haven't come up with a case where having that gu
+}
+
+void TouchDispositionGestureFilter::SendAckedEvents() {
jdduke (slow) 2014/11/26 16:07:09 Nice, the recursion avoidance may have been premat
tdresser 2014/11/27 18:26:25 I think its a fair bit clearer this way, yeah.
+ // Dispatch all packets corresponding to ack'ed touches, as well as
+ // any pending timeout-based packets.
+ while (true) {
jdduke (slow) 2014/11/26 16:07:09 Would it make sense to push the if condition below
tdresser 2014/11/27 18:26:24 Yuck. Fixed.
+ if (IsEmpty() || (Head().empty() && sequences_.size() == 1))
+ break;
+ if (Head().empty())
+ PopGestureSequence();
+ GestureSequence& sequence = Head();
- // Dispatch the packet corresponding to the ack'ed touch, as well as any
- // additional timeout-based packets queued before the ack was received.
- bool touch_packet_for_current_ack_handled = false;
- while (!sequence.empty()) {
DCHECK_NE(sequence.front().gesture_source(),
GestureEventDataPacket::UNDEFINED);
DCHECK_NE(sequence.front().gesture_source(),
@@ -191,12 +209,15 @@ 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(sequence.front().ack_state() ==
jdduke (slow) 2014/11/26 16:07:09 Nit: (ack_state == GestureEventDataPacket::AckStat
tdresser 2014/11/27 18:26:24 Done.
+ 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
@@ -206,7 +227,6 @@ void TouchDispositionGestureFilter::OnTouchEventAck(bool event_consumed) {
sequence.pop();
FilterAndSendPacket(packet);
}
- DCHECK(touch_packet_for_current_ack_handled);
jdduke (slow) 2014/11/26 16:07:09 Do we still want to validate that at least one pac
tdresser 2014/11/27 18:26:25 Done.
}
bool TouchDispositionGestureFilter::IsEmpty() const {

Powered by Google App Engine
This is Rietveld 408576698