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

Unified Diff: content/browser/renderer_host/render_widget_host_view_aura_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: Format input_message Created 5 years, 7 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/render_widget_host_view_aura_unittest.cc
diff --git a/content/browser/renderer_host/render_widget_host_view_aura_unittest.cc b/content/browser/renderer_host/render_widget_host_view_aura_unittest.cc
index c4f8429deab9f7b40a8ff2ec2b24d9e845c2a803..8fff5bc748f164f2c53013a4da061f763c5b094b 100644
--- a/content/browser/renderer_host/render_widget_host_view_aura_unittest.cc
+++ b/content/browser/renderer_host/render_widget_host_view_aura_unittest.cc
@@ -445,9 +445,17 @@ class RenderWidgetHostViewAuraTest : public testing::Test {
void SendInputEventACK(WebInputEvent::Type type,
InputEventAckState ack_result) {
- InputHostMsg_HandleInputEvent_ACK_Params ack;
- ack.type = type;
- ack.state = ack_result;
+ DCHECK(!WebInputEvent::isTouchEventType(type));
+ InputEventAck ack(type, ack_result);
+ InputHostMsg_HandleInputEvent_ACK response(0, ack);
+ widget_host_->OnMessageReceived(response);
+ }
+
+ void SendTouchEventACK(WebInputEvent::Type type,
+ InputEventAckState ack_result,
+ uint32 event_id) {
+ DCHECK(WebInputEvent::isTouchEventType(type));
+ InputEventAck ack(type, ack_result, event_id);
InputHostMsg_HandleInputEvent_ACK response(0, ack);
widget_host_->OnMessageReceived(response);
}
@@ -468,10 +476,12 @@ class RenderWidgetHostViewAuraTest : public testing::Test {
return;
}
- if (WebInputEventTraits::IgnoresAckDisposition(*get<0>(params)))
+ if (!WebInputEventTraits::WillReceiveAckFromRenderer(*get<0>(params)))
return;
- SendInputEventACK(get<0>(params)->type, ack_result);
+ const blink::WebInputEvent* event = get<0>(params);
+ SendTouchEventACK(event->type, ack_result,
+ WebInputEventTraits::GetUniqueTouchEventId(*event));
}
protected:
@@ -698,25 +708,24 @@ class RenderWidgetHostViewAuraOverscrollTest
return overscroll_delegate_.get();
}
- void SendTouchEvent() {
+ uint32 SendTouchEvent() {
+ uint32 touch_event_id = touch_event_.uniqueTouchEventId;
widget_host_->ForwardTouchEventWithLatencyInfo(touch_event_,
ui::LatencyInfo());
touch_event_.ResetPoints();
+ return touch_event_id;
}
void PressTouchPoint(int x, int y) {
touch_event_.PressPoint(x, y);
- SendTouchEvent();
}
void MoveTouchPoint(int index, int x, int y) {
touch_event_.MovePoint(index, x, y);
- SendTouchEvent();
}
void ReleaseTouchPoint(int index) {
touch_event_.ReleasePoint(index);
- SendTouchEvent();
}
SyntheticWebTouchEvent touch_event_;
@@ -1104,9 +1113,9 @@ TEST_F(RenderWidgetHostViewAuraTest, TouchEventState) {
widget_host_->OnMessageReceived(ViewHostMsg_HasTouchEventHandlers(0, false));
// Ack'ing the outstanding event should flush the pending touch queue.
- InputHostMsg_HandleInputEvent_ACK_Params ack;
- ack.type = blink::WebInputEvent::TouchStart;
- ack.state = INPUT_EVENT_ACK_STATE_NO_CONSUMER_EXISTS;
+ InputEventAck ack(blink::WebInputEvent::TouchStart,
+ INPUT_EVENT_ACK_STATE_NO_CONSUMER_EXISTS,
+ press.unique_event_id());
widget_host_->OnMessageReceived(InputHostMsg_HandleInputEvent_ACK(0, ack));
EXPECT_EQ(0U, GetSentMessageCountAndResetSink());
@@ -1138,8 +1147,9 @@ TEST_F(RenderWidgetHostViewAuraTest, MultiTouchPointsStates) {
ui::EventTimeForNow());
view_->OnTouchEvent(&press0);
- SendInputEventACK(blink::WebInputEvent::TouchStart,
- INPUT_EVENT_ACK_STATE_CONSUMED);
+ SendTouchEventACK(blink::WebInputEvent::TouchStart,
+ INPUT_EVENT_ACK_STATE_CONSUMED,
+ press0.unique_event_id());
EXPECT_EQ(blink::WebInputEvent::TouchStart, view_->touch_event_->type);
EXPECT_EQ(1U, view_->touch_event_->touchesLength);
EXPECT_EQ(1U, view_->dispatcher_->GetAndResetProcessedTouchEventCount());
@@ -1148,8 +1158,9 @@ TEST_F(RenderWidgetHostViewAuraTest, MultiTouchPointsStates) {
ui::EventTimeForNow());
view_->OnTouchEvent(&move0);
- SendInputEventACK(blink::WebInputEvent::TouchMove,
- INPUT_EVENT_ACK_STATE_CONSUMED);
+ SendTouchEventACK(blink::WebInputEvent::TouchMove,
+ INPUT_EVENT_ACK_STATE_CONSUMED,
+ move0.unique_event_id());
EXPECT_EQ(blink::WebInputEvent::TouchMove, view_->touch_event_->type);
EXPECT_EQ(1U, view_->touch_event_->touchesLength);
EXPECT_EQ(1U, view_->dispatcher_->GetAndResetProcessedTouchEventCount());
@@ -1160,8 +1171,9 @@ TEST_F(RenderWidgetHostViewAuraTest, MultiTouchPointsStates) {
ui::EventTimeForNow());
view_->OnTouchEvent(&press1);
- SendInputEventACK(blink::WebInputEvent::TouchStart,
- INPUT_EVENT_ACK_STATE_CONSUMED);
+ SendTouchEventACK(blink::WebInputEvent::TouchStart,
+ INPUT_EVENT_ACK_STATE_CONSUMED,
+ press1.unique_event_id());
EXPECT_EQ(blink::WebInputEvent::TouchStart, view_->touch_event_->type);
EXPECT_EQ(2U, view_->touch_event_->touchesLength);
EXPECT_EQ(1U, view_->dispatcher_->GetAndResetProcessedTouchEventCount());
@@ -1172,8 +1184,9 @@ TEST_F(RenderWidgetHostViewAuraTest, MultiTouchPointsStates) {
ui::EventTimeForNow());
view_->OnTouchEvent(&move1);
- SendInputEventACK(blink::WebInputEvent::TouchMove,
- INPUT_EVENT_ACK_STATE_CONSUMED);
+ SendTouchEventACK(blink::WebInputEvent::TouchMove,
+ INPUT_EVENT_ACK_STATE_CONSUMED,
+ move1.unique_event_id());
EXPECT_EQ(blink::WebInputEvent::TouchMove, view_->touch_event_->type);
EXPECT_EQ(2U, view_->touch_event_->touchesLength);
EXPECT_EQ(1U, view_->dispatcher_->GetAndResetProcessedTouchEventCount());
@@ -1184,8 +1197,9 @@ TEST_F(RenderWidgetHostViewAuraTest, MultiTouchPointsStates) {
ui::EventTimeForNow());
view_->OnTouchEvent(&move2);
- SendInputEventACK(blink::WebInputEvent::TouchMove,
- INPUT_EVENT_ACK_STATE_CONSUMED);
+ SendTouchEventACK(blink::WebInputEvent::TouchMove,
+ INPUT_EVENT_ACK_STATE_CONSUMED,
+ move2.unique_event_id());
EXPECT_EQ(blink::WebInputEvent::TouchMove, view_->touch_event_->type);
EXPECT_EQ(2U, view_->touch_event_->touchesLength);
EXPECT_EQ(1U, view_->dispatcher_->GetAndResetProcessedTouchEventCount());
@@ -2864,14 +2878,16 @@ TEST_F(RenderWidgetHostViewAuraOverscrollTest, OverscrollWithTouchEvents) {
// The test sends an intermingled sequence of touch and gesture events.
PressTouchPoint(0, 1);
- SendInputEventACK(WebInputEvent::TouchStart,
- INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
+ uint32 touch_press_event_id1 = SendTouchEvent();
+ SendTouchEventACK(WebInputEvent::TouchStart,
+ INPUT_EVENT_ACK_STATE_NOT_CONSUMED, touch_press_event_id1);
EXPECT_EQ(1U, GetSentMessageCountAndResetSink());
MoveTouchPoint(0, 20, 5);
+ uint32 touch_move_event_id1 = SendTouchEvent();
+ SendTouchEventACK(WebInputEvent::TouchMove,
+ INPUT_EVENT_ACK_STATE_NOT_CONSUMED, touch_move_event_id1);
EXPECT_EQ(1U, GetSentMessageCountAndResetSink());
- SendInputEventACK(WebInputEvent::TouchMove,
- INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
EXPECT_EQ(OVERSCROLL_NONE, overscroll_mode());
EXPECT_EQ(OVERSCROLL_NONE, overscroll_delegate()->current_mode());
@@ -2890,6 +2906,7 @@ TEST_F(RenderWidgetHostViewAuraOverscrollTest, OverscrollWithTouchEvents) {
// started yet. Note that touch events sent during the scroll period may
// not require an ack (having been marked uncancelable).
MoveTouchPoint(0, 65, 10);
+ SendTouchEvent();
AckLastSentInputEventIfNecessary(INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
EXPECT_EQ(1U, GetSentMessageCountAndResetSink());
@@ -2906,6 +2923,7 @@ TEST_F(RenderWidgetHostViewAuraOverscrollTest, OverscrollWithTouchEvents) {
// Send another touch event. The page should get the touch-move event, even
// though overscroll has started.
MoveTouchPoint(0, 55, 5);
+ SendTouchEvent();
EXPECT_EQ(OVERSCROLL_EAST, overscroll_mode());
EXPECT_EQ(OVERSCROLL_EAST, overscroll_delegate()->current_mode());
EXPECT_EQ(65.f, overscroll_delta_x());
@@ -2923,6 +2941,7 @@ TEST_F(RenderWidgetHostViewAuraOverscrollTest, OverscrollWithTouchEvents) {
EXPECT_EQ(0.f, overscroll_delegate()->delta_y());
PressTouchPoint(255, 5);
+ SendTouchEvent();
AckLastSentInputEventIfNecessary(INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
EXPECT_EQ(1U, GetSentMessageCountAndResetSink());
@@ -2937,9 +2956,11 @@ TEST_F(RenderWidgetHostViewAuraOverscrollTest, OverscrollWithTouchEvents) {
// The touch-end/cancel event should always reach the renderer if the page has
// touch handlers.
ReleaseTouchPoint(1);
+ SendTouchEvent();
AckLastSentInputEventIfNecessary(INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
EXPECT_EQ(1U, GetSentMessageCountAndResetSink());
ReleaseTouchPoint(0);
+ SendTouchEvent();
AckLastSentInputEventIfNecessary(INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
EXPECT_EQ(1U, GetSentMessageCountAndResetSink());
@@ -3396,14 +3417,14 @@ TEST_F(RenderWidgetHostViewAuraTest, CorrectNumberOfAcksAreDispatched) {
ui::ET_TOUCH_PRESSED, gfx::Point(30, 30), 0, ui::EventTimeForNow());
view_->OnTouchEvent(&press1);
- SendInputEventACK(blink::WebInputEvent::TouchStart,
- INPUT_EVENT_ACK_STATE_CONSUMED);
+ SendTouchEventACK(blink::WebInputEvent::TouchStart,
+ INPUT_EVENT_ACK_STATE_CONSUMED, press1.unique_event_id());
ui::TouchEvent press2(
ui::ET_TOUCH_PRESSED, gfx::Point(20, 20), 1, ui::EventTimeForNow());
view_->OnTouchEvent(&press2);
- SendInputEventACK(blink::WebInputEvent::TouchStart,
- INPUT_EVENT_ACK_STATE_CONSUMED);
+ SendTouchEventACK(blink::WebInputEvent::TouchStart,
+ INPUT_EVENT_ACK_STATE_CONSUMED, press2.unique_event_id());
EXPECT_EQ(2U, view_->dispatcher_->GetAndResetProcessedTouchEventCount());
}

Powered by Google App Engine
This is Rietveld 408576698