Index: content/browser/renderer_host/input/gesture_event_queue.cc |
diff --git a/content/browser/renderer_host/input/gesture_event_queue.cc b/content/browser/renderer_host/input/gesture_event_queue.cc |
index 581301efa89a7d263c45ec04f1971923bcac611e..2fb46b6fa0eb88ea13efb88688679f7ae90197b3 100644 |
--- a/content/browser/renderer_host/input/gesture_event_queue.cc |
+++ b/content/browser/renderer_host/input/gesture_event_queue.cc |
@@ -4,6 +4,7 @@ |
#include "content/browser/renderer_host/input/gesture_event_queue.h" |
+#include "base/command_line.h" |
#include "base/debug/trace_event.h" |
#include "base/strings/string_number_conversions.h" |
#include "content/browser/renderer_host/input/input_router.h" |
@@ -15,25 +16,34 @@ |
using blink::WebInputEvent; |
namespace content { |
- |
-GestureEventQueue::Config::Config() { |
-} |
+namespace { |
+ |
+// Default debouncing interval duration: if a scroll is in progress, non-scroll |
+// events during this interval are deferred to either its end or discarded on |
+// receipt of another GestureScrollUpdate. |
+static const int kDebouncingIntervalTimeMs = 30; |
+ |
+} // namespace |
GestureEventQueue::GestureEventQueue( |
GestureEventQueueClient* client, |
- TouchpadTapSuppressionControllerClient* touchpad_client, |
- const Config& config) |
- : client_(client), |
- fling_in_progress_(false), |
- scrolling_in_progress_(false), |
- ignore_next_ack_(false), |
- touchpad_tap_suppression_controller_( |
- touchpad_client, config.touchpad_tap_suppression_config), |
- touchscreen_tap_suppression_controller_( |
- this, config.touchscreen_tap_suppression_config), |
- debounce_interval_(config.debounce_interval) { |
+ TouchpadTapSuppressionControllerClient* touchpad_client) |
+ : client_(client), |
+ fling_in_progress_(false), |
+ scrolling_in_progress_(false), |
+ ignore_next_ack_(false), |
+ touchpad_tap_suppression_controller_( |
+ new TouchpadTapSuppressionController(touchpad_client)), |
+ touchscreen_tap_suppression_controller_( |
+ new TouchscreenTapSuppressionController(this)), |
+ debounce_interval_time_ms_(kDebouncingIntervalTimeMs), |
+ debounce_enabled_(true) { |
DCHECK(client); |
- DCHECK(touchpad_client); |
+ DCHECK(touchpad_tap_suppression_controller_); |
+ if (CommandLine::ForCurrentProcess()->HasSwitch( |
+ switches::kDisableGestureDebounce)) { |
+ debounce_enabled_ = false; |
+ } |
} |
GestureEventQueue::~GestureEventQueue() { } |
@@ -56,14 +66,14 @@ |
bool GestureEventQueue::ShouldForwardForBounceReduction( |
const GestureEventWithLatencyInfo& gesture_event) { |
- if (debounce_interval_ <= base::TimeDelta()) |
+ if (!debounce_enabled_) |
return true; |
switch (gesture_event.event.type) { |
case WebInputEvent::GestureScrollUpdate: |
if (!scrolling_in_progress_) { |
debounce_deferring_timer_.Start( |
FROM_HERE, |
- debounce_interval_, |
+ base::TimeDelta::FromMilliseconds(debounce_interval_time_ms_), |
this, |
&GestureEventQueue::SendScrollEndingEventsNow); |
} else { |
@@ -117,9 +127,9 @@ |
switch (gesture_event.event.type) { |
case WebInputEvent::GestureFlingCancel: |
if (gesture_event.event.sourceDevice == WebGestureEvent::Touchscreen) |
- touchscreen_tap_suppression_controller_.GestureFlingCancel(); |
+ touchscreen_tap_suppression_controller_->GestureFlingCancel(); |
else |
- touchpad_tap_suppression_controller_.GestureFlingCancel(); |
+ touchpad_tap_suppression_controller_->GestureFlingCancel(); |
return true; |
case WebInputEvent::GestureTapDown: |
case WebInputEvent::GestureShowPress: |
@@ -128,8 +138,8 @@ |
case WebInputEvent::GestureTap: |
case WebInputEvent::GestureDoubleTap: |
if (gesture_event.event.sourceDevice == WebGestureEvent::Touchscreen) { |
- return !touchscreen_tap_suppression_controller_.FilterTapEvent( |
- gesture_event); |
+ return !touchscreen_tap_suppression_controller_-> |
+ FilterTapEvent(gesture_event); |
} |
return true; |
default: |
@@ -190,9 +200,9 @@ |
const bool processed = (INPUT_EVENT_ACK_STATE_CONSUMED == ack_result); |
if (type == WebInputEvent::GestureFlingCancel) { |
if (event_with_latency.event.sourceDevice == WebGestureEvent::Touchscreen) |
- touchscreen_tap_suppression_controller_.GestureFlingCancelAck(processed); |
+ touchscreen_tap_suppression_controller_->GestureFlingCancelAck(processed); |
else |
- touchpad_tap_suppression_controller_.GestureFlingCancelAck(processed); |
+ touchpad_tap_suppression_controller_->GestureFlingCancelAck(processed); |
} |
DCHECK_LT(event_index, coalesced_gesture_events_.size()); |
coalesced_gesture_events_.erase(coalesced_gesture_events_.begin() + |
@@ -228,7 +238,7 @@ |
TouchpadTapSuppressionController* |
GestureEventQueue::GetTouchpadTapSuppressionController() { |
- return &touchpad_tap_suppression_controller_; |
+ return touchpad_tap_suppression_controller_.get(); |
} |
bool GestureEventQueue::ExpectingGestureAck() const { |