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

Unified Diff: content/browser/renderer_host/input/touch_event_queue.cc

Issue 188833004: [Android] Properly disable the touch ack timeout during a touch sequence (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@input_log_verbose
Patch Set: Timeout tweaks Created 6 years, 9 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/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 14118d0e0c0d9f22d5d14afbf2450433a9315481..ecac867df010c896a497e7f370863aa107592502 100644
--- a/content/browser/renderer_host/input/touch_event_queue.cc
+++ b/content/browser/renderer_host/input/touch_event_queue.cc
@@ -47,9 +47,10 @@ bool ShouldTouchTypeTriggerTimeout(WebInputEvent::Type type) {
// sufficiently delayed.
class TouchEventQueue::TouchTimeoutHandler {
public:
- TouchTimeoutHandler(TouchEventQueue* touch_queue, size_t timeout_delay_ms)
+ TouchTimeoutHandler(TouchEventQueue* touch_queue,
+ base::TimeDelta timeout_delay)
: touch_queue_(touch_queue),
- timeout_delay_(base::TimeDelta::FromMilliseconds(timeout_delay_ms)),
+ timeout_delay_(timeout_delay),
pending_ack_state_(PENDING_ACK_NONE),
timeout_monitor_(base::Bind(&TouchTimeoutHandler::OnTimeOut,
base::Unretained(this))) {}
@@ -99,6 +100,10 @@ class TouchEventQueue::TouchTimeoutHandler {
timeout_monitor_.Stop();
}
+ void set_timeout_delay(base::TimeDelta timeout_delay) {
+ timeout_delay_ = timeout_delay;
+ }
+
private:
enum PendingAckState {
PENDING_ACK_NONE,
@@ -506,17 +511,24 @@ bool TouchEventQueue::IsPendingAckTouchStart() const {
}
void TouchEventQueue::SetAckTimeoutEnabled(bool enabled,
- size_t ack_timeout_delay_ms) {
+ base::TimeDelta ack_timeout_delay) {
if (!enabled) {
- // Avoid resetting |timeout_handler_|, as an outstanding timeout may
- // be active and must be completed for ack handling consistency.
ack_timeout_enabled_ = false;
+ if (touch_filtering_state_ == FORWARD_TOUCHES_UNTIL_TIMEOUT)
+ touch_filtering_state_ = FORWARD_ALL_TOUCHES;
+ // Only reset the |timeout_handler_| if the timer is running and has not yet
+ // timed out. This ensures that an already timed out sequence is properly
+ // flushed by the handler.
+ if (timeout_handler_ && timeout_handler_->IsTimeoutTimerRunning())
+ timeout_handler_->Reset();
return;
}
ack_timeout_enabled_ = true;
if (!timeout_handler_)
- timeout_handler_.reset(new TouchTimeoutHandler(this, ack_timeout_delay_ms));
+ timeout_handler_.reset(new TouchTimeoutHandler(this, ack_timeout_delay));
+ else
+ timeout_handler_->set_timeout_delay(ack_timeout_delay);
}
bool TouchEventQueue::IsTimeoutRunningForTesting() const {

Powered by Google App Engine
This is Rietveld 408576698