| Index: content/browser/renderer_host/gesture_event_filter.cc
|
| diff --git a/content/browser/renderer_host/gesture_event_filter.cc b/content/browser/renderer_host/gesture_event_filter.cc
|
| index 02ed0c31cfdceae33470d2c4be1a953caeaee534..8c09451763c8f52d572a14b5b88cb6913c970e72 100644
|
| --- a/content/browser/renderer_host/gesture_event_filter.cc
|
| +++ b/content/browser/renderer_host/gesture_event_filter.cc
|
| @@ -75,7 +75,7 @@ GestureEventFilter::GestureEventFilter(RenderWidgetHostImpl* rwhv)
|
| GestureEventFilter::~GestureEventFilter() { }
|
|
|
| bool GestureEventFilter::ShouldDiscardFlingCancelEvent(
|
| - const WebKit::WebGestureEvent& gesture_event) {
|
| + const GestureEventLatency& gesture_event) {
|
| if (coalesced_gesture_events_.empty() && fling_in_progress_)
|
| return false;
|
| GestureEventQueue::reverse_iterator it =
|
| @@ -91,7 +91,7 @@ bool GestureEventFilter::ShouldDiscardFlingCancelEvent(
|
| }
|
|
|
| bool GestureEventFilter::ShouldForwardForBounceReduction(
|
| - const WebGestureEvent& gesture_event) {
|
| + const GestureEventLatency& gesture_event) {
|
| if (debounce_interval_time_ms_ == 0)
|
| return true;
|
| switch (gesture_event.type) {
|
| @@ -127,7 +127,8 @@ bool GestureEventFilter::ShouldForwardForBounceReduction(
|
| }
|
|
|
| // NOTE: The filters are applied successively. This simplifies the change.
|
| -bool GestureEventFilter::ShouldForward(const WebGestureEvent& gesture_event) {
|
| +bool GestureEventFilter::ShouldForward(
|
| + const GestureEventLatency& gesture_event) {
|
| return ShouldForwardForZeroVelocityFlingStart(gesture_event) &&
|
| ShouldForwardForBounceReduction(gesture_event) &&
|
| ShouldForwardForGFCFiltering(gesture_event) &&
|
| @@ -137,7 +138,7 @@ bool GestureEventFilter::ShouldForward(const WebGestureEvent& gesture_event) {
|
| }
|
|
|
| bool GestureEventFilter::ShouldForwardForZeroVelocityFlingStart(
|
| - const WebGestureEvent& gesture_event) {
|
| + const GestureEventLatency& gesture_event) {
|
| return gesture_event.type != WebInputEvent::GestureFlingStart ||
|
| gesture_event.sourceDevice != WebGestureEvent::Touchpad ||
|
| gesture_event.data.flingStart.velocityX != 0 ||
|
| @@ -145,13 +146,13 @@ bool GestureEventFilter::ShouldForwardForZeroVelocityFlingStart(
|
| }
|
|
|
| bool GestureEventFilter::ShouldForwardForGFCFiltering(
|
| - const WebGestureEvent& gesture_event) {
|
| + const GestureEventLatency& gesture_event) {
|
| return gesture_event.type != WebInputEvent::GestureFlingCancel ||
|
| !ShouldDiscardFlingCancelEvent(gesture_event);
|
| }
|
|
|
| bool GestureEventFilter::ShouldForwardForTapSuppression(
|
| - const WebGestureEvent& gesture_event) {
|
| + const GestureEventLatency& gesture_event) {
|
| switch (gesture_event.type) {
|
| case WebInputEvent::GestureFlingCancel:
|
| if (gesture_event.sourceDevice == WebGestureEvent::Touchscreen)
|
| @@ -176,7 +177,7 @@ bool GestureEventFilter::ShouldForwardForTapSuppression(
|
| }
|
|
|
| bool GestureEventFilter::ShouldForwardForTapDeferral(
|
| - const WebGestureEvent& gesture_event) {
|
| + const GestureEventLatency& gesture_event) {
|
| switch (gesture_event.type) {
|
| case WebInputEvent::GestureTapDown:
|
| // GestureTapDown is always paired with either a Tap, or TapCancel, so it
|
| @@ -221,7 +222,7 @@ bool GestureEventFilter::ShouldForwardForTapDeferral(
|
| }
|
|
|
| bool GestureEventFilter::ShouldForwardForCoalescing(
|
| - const WebGestureEvent& gesture_event) {
|
| + const GestureEventLatency& gesture_event) {
|
| switch (gesture_event.type) {
|
| case WebInputEvent::GestureFlingCancel:
|
| fling_in_progress_ = false;
|
| @@ -270,13 +271,13 @@ void GestureEventFilter::ProcessGestureAck(bool processed, int type) {
|
| if (ignore_next_ack_) {
|
| ignore_next_ack_ = false;
|
| } else if (!coalesced_gesture_events_.empty()) {
|
| - const WebGestureEvent& next_gesture_event =
|
| + const GestureEventLatency& next_gesture_event =
|
| coalesced_gesture_events_.front();
|
| render_widget_host_->ForwardGestureEventImmediately(next_gesture_event);
|
| // TODO(yusufo): Introduce GesturePanScroll so that these can be combined
|
| // into one gesture and kept inside the queue that way.
|
| if (coalesced_gesture_events_.size() > 1) {
|
| - const WebGestureEvent& second_gesture_event =
|
| + const GestureEventLatency& second_gesture_event =
|
| coalesced_gesture_events_[1];
|
| if (next_gesture_event.type == WebInputEvent::GestureScrollUpdate &&
|
| second_gesture_event.type == WebInputEvent::GesturePinchUpdate) {
|
| @@ -316,13 +317,13 @@ bool GestureEventFilter::ShouldHandleEventNow() {
|
| }
|
|
|
| void GestureEventFilter::ForwardGestureEventForDeferral(
|
| - const WebGestureEvent& gesture_event) {
|
| + const GestureEventLatency& gesture_event) {
|
| if (ShouldForwardForTapDeferral(gesture_event))
|
| ForwardGestureEventSkipDeferral(gesture_event);
|
| }
|
|
|
| void GestureEventFilter::ForwardGestureEventSkipDeferral(
|
| - const WebGestureEvent& gesture_event) {
|
| + const GestureEventLatency& gesture_event) {
|
| if (ShouldForwardForCoalescing(gesture_event))
|
| render_widget_host_->ForwardGestureEventImmediately(gesture_event);
|
| }
|
| @@ -352,12 +353,12 @@ void GestureEventFilter::SendScrollEndingEventsNow() {
|
| }
|
|
|
| void GestureEventFilter::MergeOrInsertScrollAndPinchEvent(
|
| - const WebGestureEvent& gesture_event) {
|
| + const GestureEventLatency& gesture_event) {
|
| if (coalesced_gesture_events_.size() <= 1) {
|
| coalesced_gesture_events_.push_back(gesture_event);
|
| return;
|
| }
|
| - WebGestureEvent* last_event = &coalesced_gesture_events_.back();
|
| + GestureEventLatency* last_event = &coalesced_gesture_events_.back();
|
| if (gesture_event.type == WebInputEvent::GestureScrollUpdate &&
|
| last_event->type == WebInputEvent::GestureScrollUpdate &&
|
| last_event->modifiers == gesture_event.modifiers) {
|
| @@ -365,6 +366,7 @@ void GestureEventFilter::MergeOrInsertScrollAndPinchEvent(
|
| gesture_event.data.scrollUpdate.deltaX;
|
| last_event->data.scrollUpdate.deltaY +=
|
| gesture_event.data.scrollUpdate.deltaY;
|
| + last_event->latency_info.MergeWith(gesture_event.latency_info);
|
| return;
|
| }
|
| if (coalesced_gesture_events_.size() == 2 ||
|
| @@ -373,10 +375,12 @@ void GestureEventFilter::MergeOrInsertScrollAndPinchEvent(
|
| coalesced_gesture_events_.push_back(gesture_event);
|
| return;
|
| }
|
| - WebGestureEvent scroll_event;
|
| - WebGestureEvent pinch_event;
|
| + GestureEventLatency scroll_event;
|
| + GestureEventLatency pinch_event;
|
| scroll_event.modifiers |= gesture_event.modifiers;
|
| scroll_event.timeStampSeconds = gesture_event.timeStampSeconds;
|
| + scroll_event.latency_info = gesture_event.latency_info;
|
| + scroll_event.latency_info.MergeWith(last_event->latency_info);
|
| pinch_event = scroll_event;
|
| scroll_event.type = WebInputEvent::GestureScrollUpdate;
|
| pinch_event.type = WebInputEvent::GesturePinchUpdate;
|
| @@ -386,9 +390,11 @@ void GestureEventFilter::MergeOrInsertScrollAndPinchEvent(
|
| gesture_event.y : last_event->y;
|
|
|
| combined_scroll_pinch_.ConcatTransform(GetTransformForEvent(gesture_event));
|
| - WebGestureEvent* second_last_event = &coalesced_gesture_events_
|
| + GestureEventLatency* second_last_event = &coalesced_gesture_events_
|
| [coalesced_gesture_events_.size() - 2];
|
| if (ShouldTryMerging(gesture_event, *second_last_event)) {
|
| + scroll_event.latency_info.MergeWith(second_last_event->latency_info);
|
| + pinch_event.latency_info.MergeWith(second_last_event->latency_info);
|
| coalesced_gesture_events_.pop_back();
|
| } else {
|
| DCHECK(combined_scroll_pinch_ == GetTransformForEvent(gesture_event));
|
| @@ -408,8 +414,8 @@ void GestureEventFilter::MergeOrInsertScrollAndPinchEvent(
|
| coalesced_gesture_events_.push_back(pinch_event);
|
| }
|
|
|
| -bool GestureEventFilter::ShouldTryMerging(const WebGestureEvent& new_event,
|
| - const WebGestureEvent& event_in_queue) {
|
| +bool GestureEventFilter::ShouldTryMerging(const GestureEventLatency& new_event,
|
| + const GestureEventLatency& event_in_queue) {
|
| DLOG_IF(WARNING,
|
| new_event.timeStampSeconds <
|
| event_in_queue.timeStampSeconds)
|
| @@ -420,7 +426,7 @@ bool GestureEventFilter::ShouldTryMerging(const WebGestureEvent& new_event,
|
| }
|
|
|
| gfx::Transform GestureEventFilter::GetTransformForEvent(
|
| - const WebGestureEvent& gesture_event) {
|
| + const GestureEventLatency& gesture_event) {
|
| gfx::Transform gesture_transform = gfx::Transform();
|
| if (gesture_event.type == WebInputEvent::GestureScrollUpdate) {
|
| gesture_transform.Translate(gesture_event.data.scrollUpdate.deltaX,
|
|
|