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

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

Issue 997283002: Coalesce async touch move events until the ack back from render (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Use queue to store the IDs for sent async touchmove Created 5 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/input/input_router_impl_unittest.cc
diff --git a/content/browser/renderer_host/input/input_router_impl_unittest.cc b/content/browser/renderer_host/input/input_router_impl_unittest.cc
index f56991892266ceeca85f3a84ec97a7d01d5d3f37..58f99f48fcac1cdd603f5d21a779c1c71190ff99 100644
--- a/content/browser/renderer_host/input/input_router_impl_unittest.cc
+++ b/content/browser/renderer_host/input/input_router_impl_unittest.cc
@@ -155,6 +155,8 @@ class InputRouterImplTest : public testing::Test {
config_));
client_->set_input_router(input_router());
ack_handler_->set_input_router(input_router());
+ sent_events_ids_.clear();
+ all_sent_events_ids_.clear();
}
void TearDown() override {
@@ -250,6 +252,7 @@ class InputRouterImplTest : public testing::Test {
void SendTouchEvent() {
input_router_->SendTouchEvent(TouchEventWithLatencyInfo(touch_event_));
touch_event_.ResetPoints();
+ SetLastEventID();
}
int PressTouchPoint(int x, int y) {
@@ -273,7 +276,13 @@ class InputRouterImplTest : public testing::Test {
InputHostMsg_HandleInputEvent_ACK_Params ack;
ack.type = type;
ack.state = ack_result;
+ if (WebInputEvent::isTouchEventType(type)) {
+ DCHECK(!sent_events_ids_.empty());
+ ack.unique_touch_event_id = sent_events_ids_.front();
+ sent_events_ids_.pop_front();
+ }
input_router_->OnMessageReceived(InputHostMsg_HandleInputEvent_ACK(0, ack));
+ SetLastEventID();
}
void NotifyDidStopFlinging() {
@@ -320,6 +329,22 @@ class InputRouterImplTest : public testing::Test {
return count;
}
+ bool TouchEventCancelable() { return touch_event_.cancelable; }
+
+ void SetLastEventID() {
+ size_t count = process_->sink().message_count();
+ for (size_t i = 0; i < count; ++i) {
+ const WebInputEvent* input_event =
+ GetInputEventFromMessage(*process_->sink().GetMessageAt(i));
+ uint32 id = WebInputEventTraits::GetUniqueTouchEventId(*input_event);
+ if (id != 0 &&
+ all_sent_events_ids_.find(id) == all_sent_events_ids_.end()) {
+ sent_events_ids_.push_back(id);
+ all_sent_events_ids_.insert(id);
+ }
+ }
+ }
+
static void RunTasksAndWait(base::TimeDelta delay) {
base::MessageLoop::current()->PostDelayedTask(
FROM_HERE, base::MessageLoop::QuitClosure(), delay);
@@ -337,6 +362,8 @@ class InputRouterImplTest : public testing::Test {
SyntheticWebTouchEvent touch_event_;
scoped_ptr<TestBrowserContext> browser_context_;
+ std::deque<uint32> sent_events_ids_;
+ std::set<uint32> all_sent_events_ids_;
};
TEST_F(InputRouterImplTest, CoalescesRangeSelection) {
@@ -961,11 +988,11 @@ TEST_F(InputRouterImplTest, UnhandledWheelEvent) {
TEST_F(InputRouterImplTest, TouchTypesIgnoringAck) {
OnHasTouchEventHandlers(true);
// Only acks for TouchCancel should always be ignored.
- ASSERT_FALSE(WebInputEventTraits::IgnoresAckDisposition(
+ ASSERT_TRUE(WebInputEventTraits::WillReceiveAckFromRenderer(
GetEventWithType(WebInputEvent::TouchStart)));
- ASSERT_FALSE(WebInputEventTraits::IgnoresAckDisposition(
+ ASSERT_TRUE(WebInputEventTraits::WillReceiveAckFromRenderer(
GetEventWithType(WebInputEvent::TouchMove)));
- ASSERT_FALSE(WebInputEventTraits::IgnoresAckDisposition(
+ ASSERT_TRUE(WebInputEventTraits::WillReceiveAckFromRenderer(
GetEventWithType(WebInputEvent::TouchEnd)));
// Precede the TouchCancel with an appropriate TouchStart;
@@ -1024,7 +1051,8 @@ TEST_F(InputRouterImplTest, GestureTypesIgnoringAck) {
for (size_t i = 0; i < arraysize(eventTypes); ++i) {
WebInputEvent::Type type = eventTypes[i];
SCOPED_TRACE(WebInputEventTraits::GetName(type));
- if (!WebInputEventTraits::IgnoresAckDisposition(GetEventWithType(type))) {
+ if (WebInputEventTraits::WillReceiveAckFromRenderer(
+ GetEventWithType(type))) {
SimulateGestureEvent(type, blink::WebGestureDeviceTouchscreen);
EXPECT_EQ(1U, GetSentMessageCountAndResetSink());
EXPECT_EQ(0U, ack_handler_->GetAndResetAckCount());
@@ -1063,8 +1091,9 @@ TEST_F(InputRouterImplTest, MouseTypesIgnoringAck) {
for (int i = start_type; i <= end_type; ++i) {
WebInputEvent::Type type = static_cast<WebInputEvent::Type>(i);
int expected_in_flight_event_count =
- WebInputEventTraits::IgnoresAckDisposition(GetEventWithType(type)) ? 0
- : 1;
+ !WebInputEventTraits::WillReceiveAckFromRenderer(GetEventWithType(type))
+ ? 0
+ : 1;
// Note: Mouse event acks are never forwarded to the ack handler, so the key
// result here is that ignored ack types don't affect the in-flight count.
@@ -1082,7 +1111,7 @@ TEST_F(InputRouterImplTest, MouseTypesIgnoringAck) {
}
// Guard against breaking changes to the list of ignored event ack types in
-// |WebInputEventTraits::IgnoresAckDisposition|.
+// |WebInputEventTraits::WillReceiveAckFromRenderer|.
TEST_F(InputRouterImplTest, RequiredEventAckTypes) {
const WebInputEvent::Type kRequiredEventAckTypes[] = {
WebInputEvent::MouseMove,
@@ -1100,7 +1129,7 @@ TEST_F(InputRouterImplTest, RequiredEventAckTypes) {
};
for (size_t i = 0; i < arraysize(kRequiredEventAckTypes); ++i) {
const WebInputEvent::Type required_ack_type = kRequiredEventAckTypes[i];
- EXPECT_FALSE(WebInputEventTraits::IgnoresAckDisposition(
+ ASSERT_TRUE(WebInputEventTraits::WillReceiveAckFromRenderer(
GetEventWithType(required_ack_type)));
}
}
@@ -1518,7 +1547,7 @@ TEST_F(InputRouterImplTest, DoubleTapGestureDependsOnFirstTap) {
blink::WebGestureDeviceTouchscreen);
EXPECT_EQ(1U, GetSentMessageCountAndResetSink());
// This test will become invalid if GestureTap stops requiring an ack.
- ASSERT_FALSE(WebInputEventTraits::IgnoresAckDisposition(
+ ASSERT_TRUE(WebInputEventTraits::WillReceiveAckFromRenderer(
GetEventWithType(WebInputEvent::GestureTap)));
EXPECT_EQ(2, client_->in_flight_event_count());
SendInputEventACK(WebInputEvent::GestureTap,
@@ -1546,7 +1575,7 @@ TEST_F(InputRouterImplTest, DoubleTapGestureDependsOnFirstTap) {
SimulateGestureEvent(WebInputEvent::GestureDoubleTap,
blink::WebGestureDeviceTouchscreen);
// This test will become invalid if GestureDoubleTap stops requiring an ack.
- ASSERT_FALSE(WebInputEventTraits::IgnoresAckDisposition(
+ ASSERT_TRUE(WebInputEventTraits::WillReceiveAckFromRenderer(
GetEventWithType(WebInputEvent::GestureDoubleTap)));
EXPECT_EQ(1, client_->in_flight_event_count());
SendInputEventACK(WebInputEvent::GestureTap, INPUT_EVENT_ACK_STATE_CONSUMED);

Powered by Google App Engine
This is Rietveld 408576698