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

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

Issue 2663493003: Move the TouchEventQueue to be completely virtual. (Closed)
Patch Set: Fix nits Created 3 years, 11 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/legacy_touch_event_queue.cc
diff --git a/content/browser/renderer_host/input/touch_event_queue.cc b/content/browser/renderer_host/input/legacy_touch_event_queue.cc
similarity index 89%
rename from content/browser/renderer_host/input/touch_event_queue.cc
rename to content/browser/renderer_host/input/legacy_touch_event_queue.cc
index 5b594addabcb2a729098642010cedc4c7f277e12..9c3a1e55735ea5f708fa26987e5996729305e67f 100644
--- a/content/browser/renderer_host/input/touch_event_queue.cc
+++ b/content/browser/renderer_host/input/legacy_touch_event_queue.cc
@@ -2,7 +2,7 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-#include "content/browser/renderer_host/input/touch_event_queue.h"
+#include "content/browser/renderer_host/input/legacy_touch_event_queue.h"
#include <utility>
@@ -50,15 +50,14 @@ bool ShouldTouchTriggerTimeout(const WebTouchEvent& event) {
// Compare all properties of touch points to determine the state.
bool HasPointChanged(const WebTouchPoint& point_1,
- const WebTouchPoint& point_2) {
+ const WebTouchPoint& point_2) {
DCHECK_EQ(point_1.id, point_2.id);
if (point_1.screenPosition != point_2.screenPosition ||
point_1.position != point_2.position ||
point_1.radiusX != point_2.radiusX ||
point_1.radiusY != point_2.radiusY ||
point_1.rotationAngle != point_2.rotationAngle ||
- point_1.force != point_2.force ||
- point_1.tiltX != point_2.tiltX ||
+ point_1.force != point_2.force || point_1.tiltX != point_2.tiltX ||
point_1.tiltY != point_2.tiltY) {
return true;
}
@@ -67,12 +66,11 @@ bool HasPointChanged(const WebTouchPoint& point_1,
} // namespace
-
// Cancels a touch sequence if a touchstart or touchmove ack response is
// sufficiently delayed.
-class TouchEventQueue::TouchTimeoutHandler {
+class LegacyTouchEventQueue::TouchTimeoutHandler {
public:
- TouchTimeoutHandler(TouchEventQueue* touch_queue,
+ TouchTimeoutHandler(LegacyTouchEventQueue* touch_queue,
base::TimeDelta desktop_timeout_delay,
base::TimeDelta mobile_timeout_delay)
: touch_queue_(touch_queue),
@@ -89,9 +87,7 @@ class TouchEventQueue::TouchTimeoutHandler {
SetUseMobileTimeout(false);
}
- ~TouchTimeoutHandler() {
- LogSequenceEndForUMAIfNecessary(false);
- }
+ ~TouchTimeoutHandler() { LogSequenceEndForUMAIfNecessary(false); }
void StartIfNecessary(const TouchEventWithLatencyInfo& event) {
if (pending_ack_state_ != PENDING_ACK_NONE)
@@ -184,9 +180,7 @@ class TouchEventQueue::TouchTimeoutHandler {
bool IsTimeoutTimerRunning() const { return timeout_monitor_.IsRunning(); }
- bool IsEnabled() const {
- return enabled_ && !GetTimeoutDelay().is_zero();
- }
+ bool IsEnabled() const { return enabled_ && !GetTimeoutDelay().is_zero(); }
private:
enum PendingAckState {
@@ -221,8 +215,8 @@ class TouchEventQueue::TouchTimeoutHandler {
DCHECK_EQ(pending_ack_state_, PENDING_ACK_ORIGINAL_EVENT);
DCHECK(!timeout_monitor_.IsRunning());
DCHECK(touch_queue_->empty());
- TRACE_EVENT_ASYNC_STEP_INTO0(
- "input", "TouchEventTimeout", this, "CancelEvent");
+ TRACE_EVENT_ASYNC_STEP_INTO0("input", "TouchEventTimeout", this,
+ "CancelEvent");
break;
case PENDING_ACK_NONE:
DCHECK(!timeout_monitor_.IsRunning());
@@ -261,7 +255,7 @@ class TouchEventQueue::TouchTimeoutHandler {
return pending_ack_state_ != PENDING_ACK_NONE;
}
- TouchEventQueue* touch_queue_;
+ LegacyTouchEventQueue* touch_queue_;
// How long to wait on a touch ack before cancelling the touch sequence.
const base::TimeDelta desktop_timeout_delay_;
@@ -287,7 +281,7 @@ class TouchEventQueue::TouchTimeoutHandler {
// Provides touchmove slop suppression for a touch sequence until a
// (unprevented) touch will trigger immediate scrolling.
-class TouchEventQueue::TouchMoveSlopSuppressor {
+class LegacyTouchEventQueue::TouchMoveSlopSuppressor {
public:
TouchMoveSlopSuppressor() : suppressing_touchmoves_(false) {}
@@ -311,9 +305,10 @@ class TouchEventQueue::TouchMoveSlopSuppressor {
suppressing_touchmoves_ = false;
} else {
// No sane slop region should be larger than 60 DIPs.
- DCHECK_LT((gfx::PointF(event.touches[0].position) -
- touch_start_location_).LengthSquared(),
- kMaxConceivablePlatformSlopRegionLengthDipsSquared);
+ DCHECK_LT(
+ (gfx::PointF(event.touches[0].position) - touch_start_location_)
+ .LengthSquared(),
+ kMaxConceivablePlatformSlopRegionLengthDipsSquared);
}
}
@@ -347,11 +342,12 @@ class CoalescedWebTouchEvent {
CoalescedWebTouchEvent(const TouchEventWithLatencyInfo& event,
bool suppress_client_ack)
: coalesced_event_(event), suppress_client_ack_(suppress_client_ack) {
- TRACE_EVENT_ASYNC_BEGIN0("input", "TouchEventQueue::QueueEvent", this);
+ TRACE_EVENT_ASYNC_BEGIN0("input", "LegacyTouchEventQueue::QueueEvent",
+ this);
}
~CoalescedWebTouchEvent() {
- TRACE_EVENT_ASYNC_END0("input", "TouchEventQueue::QueueEvent", this);
+ TRACE_EVENT_ASYNC_END0("input", "LegacyTouchEventQueue::QueueEvent", this);
}
// Coalesces the event with the existing event if possible. Returns whether
@@ -370,8 +366,8 @@ class CoalescedWebTouchEvent {
if (uncoaleseced_events_to_ack_.empty())
uncoaleseced_events_to_ack_.push_back(coalesced_event_);
- TRACE_EVENT_INSTANT0(
- "input", "TouchEventQueue::MoveCoalesced", TRACE_EVENT_SCOPE_THREAD);
+ TRACE_EVENT_INSTANT0("input", "LegacyTouchEventQueue::MoveCoalesced",
+ TRACE_EVENT_SCOPE_THREAD);
coalesced_event_.CoalesceWith(event_with_latency);
uncoaleseced_events_to_ack_.push_back(event_with_latency);
DCHECK_GE(uncoaleseced_events_to_ack_.size(), 2U);
@@ -396,8 +392,7 @@ class CoalescedWebTouchEvent {
for (WebTouchEventWithLatencyList::iterator
iter = uncoaleseced_events_to_ack_.begin(),
end = uncoaleseced_events_to_ack_.end();
- iter != end;
- ++iter) {
+ iter != end; ++iter) {
if (optional_latency_info)
iter->latency.AddNewLatencyFrom(*optional_latency_info);
client->OnTouchEventAck(*iter, ack_result);
@@ -423,14 +418,8 @@ class CoalescedWebTouchEvent {
DISALLOW_COPY_AND_ASSIGN(CoalescedWebTouchEvent);
};
-TouchEventQueue::Config::Config()
- : desktop_touch_ack_timeout_delay(base::TimeDelta::FromMilliseconds(200)),
- mobile_touch_ack_timeout_delay(base::TimeDelta::FromMilliseconds(1000)),
- touch_ack_timeout_supported(false) {
-}
-
-TouchEventQueue::TouchEventQueue(TouchEventQueueClient* client,
- const Config& config)
+LegacyTouchEventQueue::LegacyTouchEventQueue(TouchEventQueueClient* client,
+ const Config& config)
: client_(client),
dispatching_touch_ack_(false),
dispatching_touch_(false),
@@ -440,20 +429,17 @@ TouchEventQueue::TouchEventQueue(TouchEventQueueClient* client,
touchmove_slop_suppressor_(new TouchMoveSlopSuppressor),
send_touch_events_async_(false),
last_sent_touch_timestamp_sec_(0) {
- DCHECK(client);
if (config.touch_ack_timeout_supported) {
timeout_handler_.reset(
- new TouchTimeoutHandler(this,
- config.desktop_touch_ack_timeout_delay,
+ new TouchTimeoutHandler(this, config.desktop_touch_ack_timeout_delay,
config.mobile_touch_ack_timeout_delay));
}
}
-TouchEventQueue::~TouchEventQueue() {
-}
+LegacyTouchEventQueue::~LegacyTouchEventQueue() {}
-void TouchEventQueue::QueueEvent(const TouchEventWithLatencyInfo& event) {
- TRACE_EVENT0("input", "TouchEventQueue::QueueEvent");
+void LegacyTouchEventQueue::QueueEvent(const TouchEventWithLatencyInfo& event) {
+ TRACE_EVENT0("input", "LegacyTouchEventQueue::QueueEvent");
// If the queueing of |event| was triggered by an ack dispatch, defer
// processing the event until the dispatch has finished.
@@ -489,12 +475,13 @@ void TouchEventQueue::QueueEvent(const TouchEventWithLatencyInfo& event) {
base::MakeUnique<CoalescedWebTouchEvent>(event, false));
}
-void TouchEventQueue::PrependTouchScrollNotification() {
- TRACE_EVENT0("input", "TouchEventQueue::PrependTouchScrollNotification");
+void LegacyTouchEventQueue::PrependTouchScrollNotification() {
+ TRACE_EVENT0("input",
+ "LegacyTouchEventQueue::PrependTouchScrollNotification");
// The queue should have an in-flight event when this method is called because
// this method is triggered by InputRouterImpl::SendGestureEvent, which is
- // triggered by TouchEventQueue::AckTouchEventToClient, which has just
+ // triggered by LegacyTouchEventQueue::AckTouchEventToClient, which has just
// received an ack for the in-flight event. We leave the head of the queue
// untouched since it is the in-flight event.
//
@@ -516,10 +503,11 @@ void TouchEventQueue::PrependTouchScrollNotification() {
}
}
-void TouchEventQueue::ProcessTouchAck(InputEventAckState ack_result,
- const LatencyInfo& latency_info,
- const uint32_t unique_touch_event_id) {
- TRACE_EVENT0("input", "TouchEventQueue::ProcessTouchAck");
+void LegacyTouchEventQueue::ProcessTouchAck(
+ InputEventAckState ack_result,
+ const LatencyInfo& latency_info,
+ const uint32_t unique_touch_event_id) {
+ TRACE_EVENT0("input", "LegacyTouchEventQueue::ProcessTouchAck");
// We receive an ack for async touchmove from render.
if (!ack_pending_async_touchmove_ids_.empty() &&
@@ -563,7 +551,7 @@ void TouchEventQueue::ProcessTouchAck(InputEventAckState ack_result,
TryForwardNextEventToRenderer();
}
-void TouchEventQueue::TryForwardNextEventToRenderer() {
+void LegacyTouchEventQueue::TryForwardNextEventToRenderer() {
DCHECK(!dispatching_touch_ack_);
// If there are queued touch events, then try to forward them to the renderer
// immediately, or ACK the events back to the client if appropriate.
@@ -586,8 +574,8 @@ void TouchEventQueue::TryForwardNextEventToRenderer() {
}
}
-void TouchEventQueue::ForwardNextEventToRenderer() {
- TRACE_EVENT0("input", "TouchEventQueue::ForwardNextEventToRenderer");
+void LegacyTouchEventQueue::ForwardNextEventToRenderer() {
+ TRACE_EVENT0("input", "LegacyTouchEventQueue::ForwardNextEventToRenderer");
DCHECK(!empty());
DCHECK(!dispatching_touch_);
@@ -655,7 +643,7 @@ void TouchEventQueue::ForwardNextEventToRenderer() {
SendTouchEventImmediately(&touch);
}
-void TouchEventQueue::FlushPendingAsyncTouchmove() {
+void LegacyTouchEventQueue::FlushPendingAsyncTouchmove() {
DCHECK(!dispatching_touch_);
std::unique_ptr<TouchEventWithLatencyInfo> touch =
std::move(pending_async_touchmove_);
@@ -665,13 +653,13 @@ void TouchEventQueue::FlushPendingAsyncTouchmove() {
SendTouchEventImmediately(touch.get());
}
-void TouchEventQueue::OnGestureScrollEvent(
+void LegacyTouchEventQueue::OnGestureScrollEvent(
const GestureEventWithLatencyInfo& gesture_event) {
if (gesture_event.event.type() == blink::WebInputEvent::GestureScrollBegin) {
if (has_handler_for_current_sequence_ &&
!drop_remaining_touches_in_sequence_) {
DCHECK(!touchmove_slop_suppressor_->suppressing_touchmoves())
- << "A touch handler should be offered a touchmove before scrolling.";
+ << "A touch handler should be offered a touchmove before scrolling.";
}
pending_async_touchmove_.reset();
@@ -685,7 +673,7 @@ void TouchEventQueue::OnGestureScrollEvent(
}
}
-void TouchEventQueue::OnGestureEventAck(
+void LegacyTouchEventQueue::OnGestureEventAck(
const GestureEventWithLatencyInfo& event,
InputEventAckState ack_result) {
// Throttle sending touchmove events as long as the scroll events are handled.
@@ -701,13 +689,13 @@ void TouchEventQueue::OnGestureEventAck(
}
}
-void TouchEventQueue::OnHasTouchEventHandlers(bool has_handlers) {
+void LegacyTouchEventQueue::OnHasTouchEventHandlers(bool has_handlers) {
DCHECK(!dispatching_touch_ack_);
DCHECK(!dispatching_touch_);
has_handlers_ = has_handlers;
}
-bool TouchEventQueue::IsPendingAckTouchStart() const {
+bool LegacyTouchEventQueue::IsPendingAckTouchStart() const {
DCHECK(!dispatching_touch_ack_);
if (touch_queue_.empty())
return false;
@@ -717,34 +705,39 @@ bool TouchEventQueue::IsPendingAckTouchStart() const {
return (event.type() == WebInputEvent::TouchStart);
}
-void TouchEventQueue::SetAckTimeoutEnabled(bool enabled) {
+void LegacyTouchEventQueue::SetAckTimeoutEnabled(bool enabled) {
if (timeout_handler_)
timeout_handler_->SetEnabled(enabled);
}
-void TouchEventQueue::SetIsMobileOptimizedSite(bool mobile_optimized_site) {
+void LegacyTouchEventQueue::SetIsMobileOptimizedSite(
+ bool mobile_optimized_site) {
if (timeout_handler_)
timeout_handler_->SetUseMobileTimeout(mobile_optimized_site);
}
-bool TouchEventQueue::IsAckTimeoutEnabled() const {
+bool LegacyTouchEventQueue::IsAckTimeoutEnabled() const {
return timeout_handler_ && timeout_handler_->IsEnabled();
}
-bool TouchEventQueue::HasPendingAsyncTouchMoveForTesting() const {
+bool LegacyTouchEventQueue::Empty() const {
+ return touch_queue_.empty();
+}
+
+bool LegacyTouchEventQueue::HasPendingAsyncTouchMoveForTesting() const {
return !!pending_async_touchmove_;
}
-bool TouchEventQueue::IsTimeoutRunningForTesting() const {
+bool LegacyTouchEventQueue::IsTimeoutRunningForTesting() const {
return timeout_handler_ && timeout_handler_->IsTimeoutTimerRunning();
}
const TouchEventWithLatencyInfo&
-TouchEventQueue::GetLatestEventForTesting() const {
+LegacyTouchEventQueue::GetLatestEventForTesting() const {
return touch_queue_.back()->coalesced_event();
}
-void TouchEventQueue::FlushQueue() {
+void LegacyTouchEventQueue::FlushQueue() {
DCHECK(!dispatching_touch_ack_);
DCHECK(!dispatching_touch_);
pending_async_touchmove_.reset();
@@ -753,17 +746,18 @@ void TouchEventQueue::FlushQueue() {
PopTouchEventToClient(INPUT_EVENT_ACK_STATE_NO_CONSUMER_EXISTS);
}
-void TouchEventQueue::PopTouchEventToClient(InputEventAckState ack_result) {
+void LegacyTouchEventQueue::PopTouchEventToClient(
+ InputEventAckState ack_result) {
AckTouchEventToClient(ack_result, nullptr);
}
-void TouchEventQueue::PopTouchEventToClient(
+void LegacyTouchEventQueue::PopTouchEventToClient(
InputEventAckState ack_result,
const LatencyInfo& renderer_latency_info) {
AckTouchEventToClient(ack_result, &renderer_latency_info);
}
-void TouchEventQueue::AckTouchEventToClient(
+void LegacyTouchEventQueue::AckTouchEventToClient(
InputEventAckState ack_result,
const ui::LatencyInfo* optional_latency_info) {
DCHECK(!dispatching_touch_ack_);
@@ -791,7 +785,7 @@ void TouchEventQueue::AckTouchEventToClient(
touch_queue_.pop_front();
}
-void TouchEventQueue::SendTouchEventImmediately(
+void LegacyTouchEventQueue::SendTouchEventImmediately(
TouchEventWithLatencyInfo* touch) {
// TODO(crbug.com/600773): Hack to avoid cyclic reentry to this method.
if (dispatching_touch_)
@@ -807,8 +801,7 @@ void TouchEventQueue::SendTouchEventImmediately(
if (last_sent_touchevent_->type() == WebInputEvent::TouchStart)
touch->event.touchStartOrFirstTouchMove = true;
for (unsigned int i = 0; i < last_sent_touchevent_->touchesLength; ++i) {
- const WebTouchPoint& last_touch_point =
- last_sent_touchevent_->touches[i];
+ const WebTouchPoint& last_touch_point = last_sent_touchevent_->touches[i];
// Touches with same id may not have same index in Touches array.
for (unsigned int j = 0; j < touch->event.touchesLength; ++j) {
const WebTouchPoint& current_touchmove_point = touch->event.touches[j];
@@ -856,8 +849,8 @@ void TouchEventQueue::SendTouchEventImmediately(
}
}
-TouchEventQueue::PreFilterResult
-TouchEventQueue::FilterBeforeForwarding(const WebTouchEvent& event) {
+LegacyTouchEventQueue::PreFilterResult
+LegacyTouchEventQueue::FilterBeforeForwarding(const WebTouchEvent& event) {
if (event.type() == WebInputEvent::TouchScrollStarted)
return FORWARD_TO_RENDERER;
@@ -923,15 +916,15 @@ TouchEventQueue::FilterBeforeForwarding(const WebTouchEvent& event) {
// in the |event|.
break;
}
-
}
}
return ACK_WITH_NO_CONSUMER_EXISTS;
}
-void TouchEventQueue::UpdateTouchConsumerStates(const WebTouchEvent& event,
- InputEventAckState ack_result) {
+void LegacyTouchEventQueue::UpdateTouchConsumerStates(
+ const WebTouchEvent& event,
+ InputEventAckState ack_result) {
if (event.type() == WebInputEvent::TouchStart) {
if (ack_result == INPUT_EVENT_ACK_STATE_CONSUMED)
send_touch_events_async_ = false;

Powered by Google App Engine
This is Rietveld 408576698