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

Unified Diff: content/browser/renderer_host/gesture_event_filter.cc

Issue 13931009: Add latency info to input events sent to RenderWidget. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 7 years, 8 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 side-by-side diff with in-line comments
Download patch
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,

Powered by Google App Engine
This is Rietveld 408576698