| Index: content/browser/renderer_host/input/touch_event_queue.cc
|
| diff --git a/content/browser/renderer_host/input/touch_event_queue.cc b/content/browser/renderer_host/input/touch_event_queue.cc
|
| index c22cbc51f38e296809ac32f8f160864d6c63392b..0b183112be0caebe97c5c1d4c631768d3f3f81ae 100644
|
| --- a/content/browser/renderer_host/input/touch_event_queue.cc
|
| +++ b/content/browser/renderer_host/input/touch_event_queue.cc
|
| @@ -364,6 +364,7 @@ TouchEventQueue::TouchEventQueue(TouchEventQueueClient* client,
|
| : client_(client),
|
| dispatching_touch_ack_(NULL),
|
| dispatching_touch_(false),
|
| + processing_touch_ack_(false),
|
| has_handlers_(true),
|
| drop_remaining_touches_in_sequence_(false),
|
| touchmove_slop_suppressor_(new TouchMoveSlopSuppressor),
|
| @@ -420,6 +421,7 @@ void TouchEventQueue::QueueEvent(const TouchEventWithLatencyInfo& event) {
|
| void TouchEventQueue::ProcessTouchAck(InputEventAckState ack_result,
|
| const LatencyInfo& latency_info) {
|
| TRACE_EVENT0("input", "TouchEventQueue::ProcessTouchAck");
|
| + base::AutoReset<bool> processing_touch_ack(&processing_touch_ack_, true);
|
|
|
| DCHECK(!dispatching_touch_ack_);
|
| dispatching_touch_ = false;
|
| @@ -471,15 +473,20 @@ void TouchEventQueue::ForwardNextEventToRenderer() {
|
| // application be sent touches at key points in the gesture stream,
|
| // e.g., when the application slop region is exceeded or touchmove
|
| // coalescing fails because of different modifiers.
|
| - const bool send_touchmove_now =
|
| - size() > 1 ||
|
| - (touch.event.timeStampSeconds >=
|
| - last_sent_touch_timestamp_sec_ + kAsyncTouchMoveIntervalSec) ||
|
| - (needs_async_touchmove_for_outer_slop_region_ &&
|
| - OutsideApplicationSlopRegion(touch.event,
|
| - touch_sequence_start_position_)) ||
|
| - (pending_async_touchmove_ &&
|
| - !pending_async_touchmove_->CanCoalesceWith(touch));
|
| + bool send_touchmove_now = size() > 1;
|
| + send_touchmove_now |= pending_async_touchmove_ &&
|
| + !pending_async_touchmove_->CanCoalesceWith(touch);
|
| + // Avoid async touch dispatch immediately after receipt of a touch ack. This
|
| + // reduces the likelihood of the async touch contending with gestures
|
| + // (and gesture side effects) triggered by the touch ack.
|
| + if (!processing_touch_ack_) {
|
| + send_touchmove_now |=
|
| + touch.event.timeStampSeconds >=
|
| + last_sent_touch_timestamp_sec_ + kAsyncTouchMoveIntervalSec;
|
| + send_touchmove_now |= needs_async_touchmove_for_outer_slop_region_ &&
|
| + OutsideApplicationSlopRegion(
|
| + touch.event, touch_sequence_start_position_);
|
| + }
|
|
|
| if (!send_touchmove_now) {
|
| if (!pending_async_touchmove_) {
|
|
|