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

Side by Side Diff: content/browser/renderer_host/input/touch_event_queue_unittest.cc

Issue 148453012: Chrome requires WebTouchPoint to store WebFloatPoint, instead of WebPoint. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Removing ugly floating point error fix 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "base/basictypes.h" 5 #include "base/basictypes.h"
6 #include "base/logging.h" 6 #include "base/logging.h"
7 #include "base/memory/scoped_ptr.h" 7 #include "base/memory/scoped_ptr.h"
8 #include "base/message_loop/message_loop.h" 8 #include "base/message_loop/message_loop.h"
9 #include "content/browser/renderer_host/input/timeout_monitor.h" 9 #include "content/browser/renderer_host/input/timeout_monitor.h"
10 #include "content/browser/renderer_host/input/touch_event_queue.h" 10 #include "content/browser/renderer_host/input/touch_event_queue.h"
(...skipping 107 matching lines...) Expand 10 before | Expand all | Expand 10 after
118 } 118 }
119 119
120 void SetFollowupEvent(const WebGestureEvent& event) { 120 void SetFollowupEvent(const WebGestureEvent& event) {
121 followup_gesture_event_.reset(new WebGestureEvent(event)); 121 followup_gesture_event_.reset(new WebGestureEvent(event));
122 } 122 }
123 123
124 void SetSyncAckResult(InputEventAckState sync_ack_result) { 124 void SetSyncAckResult(InputEventAckState sync_ack_result) {
125 sync_ack_result_.reset(new InputEventAckState(sync_ack_result)); 125 sync_ack_result_.reset(new InputEventAckState(sync_ack_result));
126 } 126 }
127 127
128 void PressTouchPoint(int x, int y) { 128 void PressTouchPoint(float x, float y) {
129 touch_event_.PressPoint(x, y); 129 touch_event_.PressPoint(x, y);
130 SendTouchEvent(); 130 SendTouchEvent();
131 } 131 }
132 132
133 void MoveTouchPoint(int index, int x, int y) { 133 void MoveTouchPoint(int index, float x, float y) {
134 touch_event_.MovePoint(index, x, y); 134 touch_event_.MovePoint(index, x, y);
135 SendTouchEvent(); 135 SendTouchEvent();
136 } 136 }
137 137
138 void MoveTouchPoints(int index0, int x0, int y0, int index1, int x1, int y1) { 138 void MoveTouchPoints(int index0,
139 float x0,
140 float y0,
141 int index1,
142 float x1,
143 float y1) {
139 touch_event_.MovePoint(index0, x0, y0); 144 touch_event_.MovePoint(index0, x0, y0);
140 touch_event_.MovePoint(index1, x1, y1); 145 touch_event_.MovePoint(index1, x1, y1);
141 SendTouchEvent(); 146 SendTouchEvent();
142 } 147 }
143 148
144 void ReleaseTouchPoint(int index) { 149 void ReleaseTouchPoint(int index) {
145 touch_event_.ReleasePoint(index); 150 touch_event_.ReleasePoint(index);
146 SendTouchEvent(); 151 SendTouchEvent();
147 } 152 }
148 153
(...skipping 1201 matching lines...) Expand 10 before | Expand all | Expand 10 after
1350 EXPECT_EQ(INPUT_EVENT_ACK_STATE_NOT_CONSUMED, acked_event_state()); 1355 EXPECT_EQ(INPUT_EVENT_ACK_STATE_NOT_CONSUMED, acked_event_state());
1351 1356
1352 MoveTouchPoint(0, -kHalfSlopLengthDips, 0); 1357 MoveTouchPoint(0, -kHalfSlopLengthDips, 0);
1353 EXPECT_EQ(0U, queued_event_count()); 1358 EXPECT_EQ(0U, queued_event_count());
1354 EXPECT_EQ(0U, GetAndResetSentEventCount()); 1359 EXPECT_EQ(0U, GetAndResetSentEventCount());
1355 EXPECT_EQ(1U, GetAndResetAckedEventCount()); 1360 EXPECT_EQ(1U, GetAndResetAckedEventCount());
1356 EXPECT_EQ(INPUT_EVENT_ACK_STATE_NOT_CONSUMED, acked_event_state()); 1361 EXPECT_EQ(INPUT_EVENT_ACK_STATE_NOT_CONSUMED, acked_event_state());
1357 1362
1358 // As soon as a TouchMove exceeds the (Euclidean) distance, no more 1363 // As soon as a TouchMove exceeds the (Euclidean) distance, no more
1359 // TouchMove's should be suppressed. 1364 // TouchMove's should be suppressed.
1360 // TODO(jdduke): Remove ceil with adoption of floating point touch coords,
1361 // crbug/336807.
1362 const double kFortyFiveDegreeSlopLengthXY = 1365 const double kFortyFiveDegreeSlopLengthXY =
1363 std::ceil(kSlopLengthDips * std::sqrt(2.) / 2.); 1366 kSlopLengthDips * std::sqrt(2.) / 2.;
1364 MoveTouchPoint(0, kFortyFiveDegreeSlopLengthXY + .1, 1367 MoveTouchPoint(0, kFortyFiveDegreeSlopLengthXY + .2,
1365 kFortyFiveDegreeSlopLengthXY + .1); 1368 kFortyFiveDegreeSlopLengthXY + .2);
1366 EXPECT_EQ(1U, queued_event_count()); 1369 EXPECT_EQ(1U, queued_event_count());
1367 EXPECT_EQ(1U, GetAndResetSentEventCount()); 1370 EXPECT_EQ(1U, GetAndResetSentEventCount());
1368 EXPECT_EQ(0U, GetAndResetAckedEventCount()); 1371 EXPECT_EQ(0U, GetAndResetAckedEventCount());
1369 SendTouchEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); 1372 SendTouchEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
1370 EXPECT_EQ(1U, GetAndResetAckedEventCount()); 1373 EXPECT_EQ(1U, GetAndResetAckedEventCount());
1371 1374
1372 // Even TouchMove's within the original slop region should now be forwarded. 1375 // Even TouchMove's within the original slop region should now be forwarded.
1373 MoveTouchPoint(0, 0, 0); 1376 MoveTouchPoint(0, 0, 0);
1374 EXPECT_EQ(1U, queued_event_count()); 1377 EXPECT_EQ(1U, queued_event_count());
1375 EXPECT_EQ(1U, GetAndResetSentEventCount()); 1378 EXPECT_EQ(1U, GetAndResetSentEventCount());
1376 EXPECT_EQ(0U, GetAndResetAckedEventCount()); 1379 EXPECT_EQ(0U, GetAndResetAckedEventCount());
1377 SendTouchEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); 1380 SendTouchEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
1378 EXPECT_EQ(1U, GetAndResetAckedEventCount()); 1381 EXPECT_EQ(1U, GetAndResetAckedEventCount());
1379 1382
1380 // A new touch sequence should reset suppression. 1383 // A new touch sequence should reset suppression.
1381 ReleaseTouchPoint(0); 1384 ReleaseTouchPoint(0);
1382 PressTouchPoint(0, 0); 1385 PressTouchPoint(0, 0);
1383 SendTouchEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); 1386 SendTouchEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
1384 SendTouchEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); 1387 SendTouchEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
1385 ASSERT_EQ(2U, GetAndResetSentEventCount()); 1388 ASSERT_EQ(2U, GetAndResetSentEventCount());
1386 ASSERT_EQ(2U, GetAndResetAckedEventCount()); 1389 ASSERT_EQ(2U, GetAndResetAckedEventCount());
1387 ASSERT_EQ(0U, queued_event_count()); 1390 ASSERT_EQ(0U, queued_event_count());
1388 1391
1389 // The slop region is boundary-exclusive. 1392 // The slop region is boundary-inclusive.
1390 // TODO(jdduke): Change to inclusive upon resolving crbug.com/336807.
1391 MoveTouchPoint(0, kSlopLengthDips - 1., 0); 1393 MoveTouchPoint(0, kSlopLengthDips - 1., 0);
1392 EXPECT_EQ(0U, queued_event_count()); 1394 EXPECT_EQ(0U, queued_event_count());
1393 EXPECT_EQ(0U, GetAndResetSentEventCount()); 1395 EXPECT_EQ(0U, GetAndResetSentEventCount());
1394 EXPECT_EQ(1U, GetAndResetAckedEventCount()); 1396 EXPECT_EQ(1U, GetAndResetAckedEventCount());
1395 1397
1396 MoveTouchPoint(0, kSlopLengthDips, 0); 1398 MoveTouchPoint(0, kSlopLengthDips, 0);
1397 EXPECT_EQ(1U, queued_event_count()); 1399 EXPECT_EQ(0U, queued_event_count());
1398 EXPECT_EQ(1U, GetAndResetSentEventCount()); 1400 EXPECT_EQ(0U, GetAndResetSentEventCount());
1399 EXPECT_EQ(0U, GetAndResetAckedEventCount()); 1401 EXPECT_EQ(1U, GetAndResetAckedEventCount());
1400 } 1402 }
1401 1403
1402 // Tests that TouchMove's are not dropped within the slop suppression region if 1404 // Tests that TouchMove's are not dropped within the slop suppression region if
1403 // the touchstart was consumed. 1405 // the touchstart was consumed.
1404 TEST_F(TouchEventQueueTest, NoTouchMoveSuppressionAfterTouchConsumed) { 1406 TEST_F(TouchEventQueueTest, NoTouchMoveSuppressionAfterTouchConsumed) {
1405 const double kSlopLengthDips = 10.; 1407 const double kSlopLengthDips = 10.;
1406 const double kHalfSlopLengthDips = kSlopLengthDips / 2; 1408 const double kHalfSlopLengthDips = kSlopLengthDips / 2;
1407 SetUpForTouchMoveSlopTesting(kSlopLengthDips); 1409 SetUpForTouchMoveSlopTesting(kSlopLengthDips);
1408 1410
1409 // Queue a TouchStart. 1411 // Queue a TouchStart.
1410 PressTouchPoint(0, 0); 1412 PressTouchPoint(0, 0);
1411 SendTouchEventAck(INPUT_EVENT_ACK_STATE_CONSUMED); 1413 SendTouchEventAck(INPUT_EVENT_ACK_STATE_CONSUMED);
1412 ASSERT_EQ(1U, GetAndResetSentEventCount()); 1414 ASSERT_EQ(1U, GetAndResetSentEventCount());
1413 ASSERT_EQ(1U, GetAndResetAckedEventCount()); 1415 ASSERT_EQ(1U, GetAndResetAckedEventCount());
1414 1416
1415 // TouchMove's within the region should not be suppressed, as a touch was 1417 // TouchMove's within the region should not be suppressed, as a touch was
1416 // consumed. 1418 // consumed.
1417 MoveTouchPoint(0, 0, kHalfSlopLengthDips); 1419 MoveTouchPoint(0, 0, kHalfSlopLengthDips);
1418 EXPECT_EQ(1U, queued_event_count()); 1420 EXPECT_EQ(1U, queued_event_count());
1419 EXPECT_EQ(1U, GetAndResetSentEventCount()); 1421 EXPECT_EQ(1U, GetAndResetSentEventCount());
1420 EXPECT_EQ(0U, GetAndResetAckedEventCount()); 1422 EXPECT_EQ(0U, GetAndResetAckedEventCount());
1421 } 1423 }
1422 1424
1423 // Tests that TouchMove's are not dropped due to integral truncation of 1425 // Tests that TouchMove's are not dropped due to incorrect handling of DPI
1424 // WebTouchPoint coordinates after DPI scaling. 1426 // scaling.
1425 TEST_F(TouchEventQueueTest, TouchMoveSuppressionWithDIPScaling) { 1427 TEST_F(TouchEventQueueTest, TouchMoveSuppressionWithDIPScaling) {
1426 const float kSlopLengthPixels = 7.f; 1428 const float kSlopLengthPixels = 7.f;
1427 const float kDPIScale = 3.f; 1429 const float kDPIScale = 3.f;
1428 SetUpForTouchMoveSlopTesting(kSlopLengthPixels / kDPIScale); 1430 SetUpForTouchMoveSlopTesting(kSlopLengthPixels / kDPIScale);
1429 1431
1430 // Queue a TouchStart. 1432 // Queue a TouchStart.
1431 PressTouchPoint(0, 0); 1433 PressTouchPoint(0, 0);
1432 SendTouchEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); 1434 SendTouchEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
1433 ASSERT_EQ(1U, GetAndResetSentEventCount()); 1435 ASSERT_EQ(1U, GetAndResetSentEventCount());
1434 ASSERT_EQ(1U, GetAndResetAckedEventCount()); 1436 ASSERT_EQ(1U, GetAndResetAckedEventCount());
1435 1437
1436 // TouchMove's along the slop boundary should not be suppresed. 1438 // TouchMove's along the slop boundary should be suppresed.
1437 // TODO(jdduke): These should be suppressed, crbug.com/336807.
1438 MoveTouchPoint(0, 0, kSlopLengthPixels / kDPIScale); 1439 MoveTouchPoint(0, 0, kSlopLengthPixels / kDPIScale);
1439 EXPECT_EQ(1U, queued_event_count()); 1440 EXPECT_EQ(0U, queued_event_count());
1440 EXPECT_EQ(1U, GetAndResetSentEventCount()); 1441 EXPECT_EQ(0U, GetAndResetSentEventCount());
1441 EXPECT_EQ(0U, GetAndResetAckedEventCount()); 1442 EXPECT_EQ(1U, GetAndResetAckedEventCount());
1442 1443
1443 // Reset the touch sequence. 1444 // Reset the touch sequence.
1444 ReleaseTouchPoint(0); 1445 ReleaseTouchPoint(0);
1445 SendTouchEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); 1446 SendTouchEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
1446 SendTouchEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); 1447 SendTouchEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
1447 GetAndResetSentEventCount(); 1448 GetAndResetSentEventCount();
1448 GetAndResetAckedEventCount(); 1449 GetAndResetAckedEventCount();
1449 1450
1450 // Queue a TouchStart. 1451 // Queue a TouchStart.
1451 PressTouchPoint(0, 0); 1452 PressTouchPoint(0, 0);
1452 SendTouchEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); 1453 SendTouchEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
1453 ASSERT_EQ(1U, GetAndResetSentEventCount()); 1454 ASSERT_EQ(1U, GetAndResetSentEventCount());
1454 ASSERT_EQ(1U, GetAndResetAckedEventCount()); 1455 ASSERT_EQ(1U, GetAndResetAckedEventCount());
1455 1456
1456 // TouchMove's outside the region should not be suppressed. 1457 // TouchMove's outside the region should not be suppressed.
1457 const float kPixelCoordOutsideSlopRegion = kSlopLengthPixels + 1.f; 1458 const float kPixelCoordOutsideSlopRegion = kSlopLengthPixels + 0.5f;
1458 MoveTouchPoint(0, 0, kPixelCoordOutsideSlopRegion / kDPIScale); 1459 MoveTouchPoint(0, 0, kPixelCoordOutsideSlopRegion / kDPIScale);
1459 EXPECT_EQ(1U, queued_event_count()); 1460 EXPECT_EQ(1U, queued_event_count());
1460 EXPECT_EQ(1U, GetAndResetSentEventCount()); 1461 EXPECT_EQ(1U, GetAndResetSentEventCount());
1461 EXPECT_EQ(0U, GetAndResetAckedEventCount()); 1462 EXPECT_EQ(0U, GetAndResetAckedEventCount());
1462 } 1463 }
1463 1464
1464
1465 // Tests that TouchMove's are not dropped if a secondary pointer is present 1465 // Tests that TouchMove's are not dropped if a secondary pointer is present
1466 // during any movement. 1466 // during any movement.
1467 TEST_F(TouchEventQueueTest, NoTouchMoveSuppressionAfterMultiTouch) { 1467 TEST_F(TouchEventQueueTest, NoTouchMoveSuppressionAfterMultiTouch) {
1468 const double kSlopLengthDips = 10.; 1468 const double kSlopLengthDips = 10.;
1469 const double kHalfSlopLengthDips = kSlopLengthDips / 2; 1469 const double kHalfSlopLengthDips = kSlopLengthDips / 2;
1470 const double kDoubleSlopLengthDips = 10.;
1471 SetUpForTouchMoveSlopTesting(kSlopLengthDips); 1470 SetUpForTouchMoveSlopTesting(kSlopLengthDips);
1472 1471
1473 // Queue a TouchStart. 1472 // Queue a TouchStart.
1474 PressTouchPoint(0, 0); 1473 PressTouchPoint(0, 0);
1475 SendTouchEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); 1474 SendTouchEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
1476 ASSERT_EQ(1U, GetAndResetSentEventCount()); 1475 ASSERT_EQ(1U, GetAndResetSentEventCount());
1477 ASSERT_EQ(1U, GetAndResetAckedEventCount()); 1476 ASSERT_EQ(1U, GetAndResetAckedEventCount());
1478 1477
1479 // TouchMove's within the region should be suppressed. 1478 // TouchMove's within the region should be suppressed.
1480 MoveTouchPoint(0, 0, kHalfSlopLengthDips); 1479 MoveTouchPoint(0, 0, kHalfSlopLengthDips);
1481 EXPECT_EQ(0U, queued_event_count()); 1480 EXPECT_EQ(0U, queued_event_count());
1482 EXPECT_EQ(0U, GetAndResetSentEventCount()); 1481 EXPECT_EQ(0U, GetAndResetSentEventCount());
1483 EXPECT_EQ(1U, GetAndResetAckedEventCount()); 1482 EXPECT_EQ(1U, GetAndResetAckedEventCount());
1484 1483
1485 // Simulate a secondary pointer press. 1484 // Simulate a secondary pointer press.
1486 PressTouchPoint(kDoubleSlopLengthDips, 0); 1485 PressTouchPoint(kSlopLengthDips, 0);
1487 SendTouchEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); 1486 SendTouchEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
1488 EXPECT_EQ(1U, GetAndResetSentEventCount()); 1487 EXPECT_EQ(1U, GetAndResetSentEventCount());
1489 EXPECT_EQ(1U, GetAndResetAckedEventCount()); 1488 EXPECT_EQ(1U, GetAndResetAckedEventCount());
1490 1489
1491 // TouchMove with a secondary pointer should not be suppressed. 1490 // TouchMove with a secondary pointer should not be suppressed.
1492 MoveTouchPoint(1, kDoubleSlopLengthDips, 0); 1491 MoveTouchPoint(1, kSlopLengthDips, 0);
1493 EXPECT_EQ(1U, queued_event_count()); 1492 EXPECT_EQ(1U, queued_event_count());
1494 EXPECT_EQ(1U, GetAndResetSentEventCount()); 1493 EXPECT_EQ(1U, GetAndResetSentEventCount());
1495 SendTouchEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); 1494 SendTouchEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
1496 EXPECT_EQ(1U, GetAndResetAckedEventCount()); 1495 EXPECT_EQ(1U, GetAndResetAckedEventCount());
1497 1496
1498 // Release the secondary pointer. 1497 // Release the secondary pointer.
1499 ReleaseTouchPoint(0); 1498 ReleaseTouchPoint(0);
1500 SendTouchEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); 1499 SendTouchEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
1501 EXPECT_EQ(1U, GetAndResetSentEventCount()); 1500 EXPECT_EQ(1U, GetAndResetSentEventCount());
1502 EXPECT_EQ(1U, GetAndResetAckedEventCount()); 1501 EXPECT_EQ(1U, GetAndResetAckedEventCount());
(...skipping 108 matching lines...) Expand 10 before | Expand all | Expand 10 after
1611 SendTouchEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); 1610 SendTouchEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
1612 EXPECT_EQ(1U, GetAndResetSentEventCount()); 1611 EXPECT_EQ(1U, GetAndResetSentEventCount());
1613 EXPECT_EQ(1U, GetAndResetAckedEventCount()); 1612 EXPECT_EQ(1U, GetAndResetAckedEventCount());
1614 MoveTouchPoint(0, 0, 10); 1613 MoveTouchPoint(0, 0, 10);
1615 SendTouchEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); 1614 SendTouchEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
1616 EXPECT_EQ(0U, queued_event_count()); 1615 EXPECT_EQ(0U, queued_event_count());
1617 EXPECT_EQ(0U, GetAndResetSentEventCount()); 1616 EXPECT_EQ(0U, GetAndResetSentEventCount());
1618 } 1617 }
1619 1618
1620 } // namespace content 1619 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698