| Index: ui/events/ozone/evdev/touch_event_converter_evdev_unittest.cc
|
| diff --git a/ui/events/ozone/evdev/touch_event_converter_evdev_unittest.cc b/ui/events/ozone/evdev/touch_event_converter_evdev_unittest.cc
|
| index da68c80e5693388eac1ab587a0f7766cf6d7d915..ec410bcfb8817e2c5648c8431025547c58b269c8 100644
|
| --- a/ui/events/ozone/evdev/touch_event_converter_evdev_unittest.cc
|
| +++ b/ui/events/ozone/evdev/touch_event_converter_evdev_unittest.cc
|
| @@ -20,6 +20,7 @@
|
| #include "ui/events/devices/device_data_manager.h"
|
| #include "ui/events/event_switches.h"
|
| #include "ui/events/ozone/evdev/device_event_dispatcher_evdev.h"
|
| +#include "ui/events/ozone/evdev/event_device_test_util.h"
|
| #include "ui/events/ozone/evdev/touch_evdev_types.h"
|
| #include "ui/events/ozone/evdev/touch_event_converter_evdev.h"
|
| #include "ui/events/ozone/evdev/touch_noise/touch_noise_filter.h"
|
| @@ -40,6 +41,12 @@ static int SetNonBlocking(int fd) {
|
|
|
| const char kTestDevicePath[] = "/dev/input/test-device";
|
|
|
| +void InitPixelTouchscreen(TouchEventConverterEvdev* device) {
|
| + EventDeviceInfo devinfo;
|
| + EXPECT_TRUE(CapabilitiesToDeviceInfo(kLinkTouchscreen, &devinfo));
|
| + device->Initialize(devinfo);
|
| +}
|
| +
|
| } // namespace
|
|
|
| class MockTouchEventConverterEvdev : public TouchEventConverterEvdev {
|
| @@ -59,7 +66,6 @@ class MockTouchEventConverterEvdev : public TouchEventConverterEvdev {
|
| base::RunLoop().RunUntilIdle();
|
| }
|
|
|
| - void Initialize(const EventDeviceInfo& device_info) override {}
|
| bool Reinitialize() override { return true; }
|
|
|
| TouchNoiseFinder* touch_noise_finder() { return touch_noise_finder_.get(); }
|
| @@ -107,15 +113,6 @@ MockTouchEventConverterEvdev::MockTouchEventConverterEvdev(
|
| base::FilePath path,
|
| DeviceEventDispatcherEvdev* dispatcher)
|
| : TouchEventConverterEvdev(fd, path, 1, INPUT_DEVICE_UNKNOWN, dispatcher) {
|
| - pressure_min_ = 30;
|
| - pressure_max_ = 60;
|
| -
|
| - // TODO(rjkroege): Check test axes.
|
| - x_min_tuxels_ = 0;
|
| - x_num_tuxels_ = std::numeric_limits<int>::max();
|
| - y_min_tuxels_ = 0;
|
| - y_num_tuxels_ = std::numeric_limits<int>::max();
|
| -
|
| int fds[2];
|
|
|
| if (pipe(fds))
|
| @@ -203,41 +200,6 @@ class TouchEventConverterEvdevTest : public testing::Test {
|
| DISALLOW_COPY_AND_ASSIGN(TouchEventConverterEvdevTest);
|
| };
|
|
|
| -// TODO(rjkroege): Test for valid handling of time stamps.
|
| -TEST_F(TouchEventConverterEvdevTest, TouchDown) {
|
| - ui::MockTouchEventConverterEvdev* dev = device();
|
| -
|
| - struct input_event mock_kernel_queue[] = {
|
| - {{0, 0}, EV_ABS, ABS_MT_TRACKING_ID, 684},
|
| - {{0, 0}, EV_ABS, ABS_MT_TOUCH_MAJOR, 3},
|
| - {{0, 0}, EV_ABS, ABS_MT_PRESSURE, 45},
|
| - {{0, 0}, EV_ABS, ABS_MT_POSITION_X, 42},
|
| - {{0, 0}, EV_ABS, ABS_MT_POSITION_Y, 51}, {{0, 0}, EV_SYN, SYN_REPORT, 0}
|
| - };
|
| -
|
| - dev->ConfigureReadMock(mock_kernel_queue, 1, 0);
|
| - dev->ReadNow();
|
| - EXPECT_EQ(0u, size());
|
| -
|
| - dev->ConfigureReadMock(mock_kernel_queue, 2, 1);
|
| - dev->ReadNow();
|
| - EXPECT_EQ(0u, size());
|
| -
|
| - dev->ConfigureReadMock(mock_kernel_queue, 3, 3);
|
| - dev->ReadNow();
|
| - EXPECT_EQ(1u, size());
|
| -
|
| - ui::TouchEventParams event = dispatched_event(0);
|
| -
|
| - EXPECT_EQ(ui::ET_TOUCH_PRESSED, event.type);
|
| - EXPECT_EQ(base::TimeDelta::FromMicroseconds(0), event.timestamp);
|
| - EXPECT_EQ(42, event.location.x());
|
| - EXPECT_EQ(51, event.location.y());
|
| - EXPECT_EQ(0, event.touch_id);
|
| - EXPECT_FLOAT_EQ(1.5f, event.radii.x());
|
| - EXPECT_FLOAT_EQ(.5f, event.pressure);
|
| -}
|
| -
|
| TEST_F(TouchEventConverterEvdevTest, NoEvents) {
|
| ui::MockTouchEventConverterEvdev* dev = device();
|
| dev->ConfigureReadMock(NULL, 0, 0);
|
| @@ -247,91 +209,93 @@ TEST_F(TouchEventConverterEvdevTest, NoEvents) {
|
| TEST_F(TouchEventConverterEvdevTest, TouchMove) {
|
| ui::MockTouchEventConverterEvdev* dev = device();
|
|
|
| + InitPixelTouchscreen(dev);
|
| +
|
| + // Captured from Chromebook Pixel (Link).
|
| + timeval time;
|
| + time = {1427323282, 19203};
|
| struct input_event mock_kernel_queue_press[] = {
|
| - {{0, 0}, EV_ABS, ABS_MT_TRACKING_ID, 684},
|
| - {{0, 0}, EV_ABS, ABS_MT_TOUCH_MAJOR, 3},
|
| - {{0, 0}, EV_ABS, ABS_MT_PRESSURE, 45},
|
| - {{0, 0}, EV_ABS, ABS_MT_POSITION_X, 42},
|
| - {{0, 0}, EV_ABS, ABS_MT_POSITION_Y, 51}, {{0, 0}, EV_SYN, SYN_REPORT, 0}
|
| + {time, EV_ABS, ABS_MT_TRACKING_ID, 3},
|
| + {time, EV_ABS, ABS_MT_POSITION_X, 295},
|
| + {time, EV_ABS, ABS_MT_POSITION_Y, 421},
|
| + {time, EV_ABS, ABS_MT_PRESSURE, 34},
|
| + {time, EV_ABS, ABS_MT_TOUCH_MAJOR, 116},
|
| + {time, EV_KEY, BTN_TOUCH, 1},
|
| + {time, EV_ABS, ABS_X, 295},
|
| + {time, EV_ABS, ABS_Y, 421},
|
| + {time, EV_ABS, ABS_PRESSURE, 34},
|
| + {time, EV_SYN, SYN_REPORT, 0},
|
| };
|
| -
|
| - struct input_event mock_kernel_queue_move1[] = {
|
| - {{0, 0}, EV_ABS, ABS_MT_PRESSURE, 50},
|
| - {{0, 0}, EV_ABS, ABS_MT_POSITION_X, 42},
|
| - {{0, 0}, EV_ABS, ABS_MT_POSITION_Y, 43}, {{0, 0}, EV_SYN, SYN_REPORT, 0}
|
| + time = {1427323282, 34693};
|
| + struct input_event mock_kernel_queue_move[] = {
|
| + {time, EV_ABS, ABS_MT_POSITION_X, 312},
|
| + {time, EV_ABS, ABS_MT_POSITION_Y, 432},
|
| + {time, EV_ABS, ABS_MT_PRESSURE, 43},
|
| + {time, EV_ABS, ABS_MT_TOUCH_MAJOR, 100},
|
| + {time, EV_ABS, ABS_X, 312},
|
| + {time, EV_ABS, ABS_Y, 432},
|
| + {time, EV_ABS, ABS_PRESSURE, 43},
|
| + {time, EV_SYN, SYN_REPORT, 0},
|
| };
|
| -
|
| - struct input_event mock_kernel_queue_move2[] = {
|
| - {{0, 0}, EV_ABS, ABS_MT_POSITION_Y, 42}, {{0, 0}, EV_SYN, SYN_REPORT, 0}
|
| + time = {1427323282, 144540};
|
| + struct input_event mock_kernel_queue_release[] = {
|
| + {time, EV_ABS, ABS_MT_TRACKING_ID, -1},
|
| + {time, EV_KEY, BTN_TOUCH, 0},
|
| + {time, EV_ABS, ABS_PRESSURE, 0},
|
| + {time, EV_SYN, SYN_REPORT, 0},
|
| };
|
|
|
| - // Setup and discard a press.
|
| - dev->ConfigureReadMock(mock_kernel_queue_press, 6, 0);
|
| + // Press.
|
| + dev->ConfigureReadMock(mock_kernel_queue_press,
|
| + arraysize(mock_kernel_queue_press), 0);
|
| dev->ReadNow();
|
| EXPECT_EQ(1u, size());
|
| + ui::TouchEventParams event = dispatched_event(0);
|
| + EXPECT_EQ(ui::ET_TOUCH_PRESSED, event.type);
|
| + EXPECT_EQ(base::TimeDelta::FromMicroseconds(1427323282019203),
|
| + event.timestamp);
|
| + EXPECT_EQ(295, event.location.x());
|
| + EXPECT_EQ(421, event.location.y());
|
| + EXPECT_EQ(0, event.touch_id);
|
| + EXPECT_FLOAT_EQ(58.f, event.radii.x());
|
| + EXPECT_FLOAT_EQ(0.13333334f, event.pressure);
|
|
|
| - dev->ConfigureReadMock(mock_kernel_queue_move1, 4, 0);
|
| + // Move.
|
| + dev->ConfigureReadMock(mock_kernel_queue_move,
|
| + arraysize(mock_kernel_queue_move), 0);
|
| dev->ReadNow();
|
| EXPECT_EQ(2u, size());
|
| - ui::TouchEventParams event = dispatched_event(1);
|
| -
|
| + event = dispatched_event(1);
|
| EXPECT_EQ(ui::ET_TOUCH_MOVED, event.type);
|
| - EXPECT_EQ(base::TimeDelta::FromMicroseconds(0), event.timestamp);
|
| - EXPECT_EQ(42, event.location.x());
|
| - EXPECT_EQ(43, event.location.y());
|
| + EXPECT_EQ(base::TimeDelta::FromMicroseconds(1427323282034693),
|
| + event.timestamp);
|
| + EXPECT_EQ(312, event.location.x());
|
| + EXPECT_EQ(432, event.location.y());
|
| EXPECT_EQ(0, event.touch_id);
|
| - EXPECT_FLOAT_EQ(2.f / 3.f, event.pressure);
|
| + EXPECT_FLOAT_EQ(50.f, event.radii.x());
|
| + EXPECT_FLOAT_EQ(0.16862745f, event.pressure);
|
|
|
| - dev->ConfigureReadMock(mock_kernel_queue_move2, 2, 0);
|
| + // Release.
|
| + dev->ConfigureReadMock(mock_kernel_queue_release,
|
| + arraysize(mock_kernel_queue_release), 0);
|
| dev->ReadNow();
|
| EXPECT_EQ(3u, size());
|
| event = dispatched_event(2);
|
| -
|
| - EXPECT_EQ(ui::ET_TOUCH_MOVED, event.type);
|
| - EXPECT_EQ(base::TimeDelta::FromMicroseconds(0), event.timestamp);
|
| - EXPECT_EQ(42, event.location.x());
|
| - EXPECT_EQ(42, event.location.y());
|
| - EXPECT_EQ(0, event.touch_id);
|
| - EXPECT_FLOAT_EQ(2.f / 3.f, event.pressure);
|
| -}
|
| -
|
| -TEST_F(TouchEventConverterEvdevTest, TouchRelease) {
|
| - ui::MockTouchEventConverterEvdev* dev = device();
|
| -
|
| - struct input_event mock_kernel_queue_press[] = {
|
| - {{0, 0}, EV_ABS, ABS_MT_TRACKING_ID, 684},
|
| - {{0, 0}, EV_ABS, ABS_MT_TOUCH_MAJOR, 3},
|
| - {{0, 0}, EV_ABS, ABS_MT_PRESSURE, 45},
|
| - {{0, 0}, EV_ABS, ABS_MT_POSITION_X, 42},
|
| - {{0, 0}, EV_ABS, ABS_MT_POSITION_Y, 51}, {{0, 0}, EV_SYN, SYN_REPORT, 0}
|
| - };
|
| -
|
| - struct input_event mock_kernel_queue_release[] = {
|
| - {{0, 0}, EV_ABS, ABS_MT_TRACKING_ID, -1}, {{0, 0}, EV_SYN, SYN_REPORT, 0}
|
| - };
|
| -
|
| - // Setup and discard a press.
|
| - dev->ConfigureReadMock(mock_kernel_queue_press, 6, 0);
|
| - dev->ReadNow();
|
| - EXPECT_EQ(1u, size());
|
| - ui::TouchEventParams event = dispatched_event(0);
|
| -
|
| - dev->ConfigureReadMock(mock_kernel_queue_release, 2, 0);
|
| - dev->ReadNow();
|
| - EXPECT_EQ(2u, size());
|
| - event = dispatched_event(1);
|
| -
|
| EXPECT_EQ(ui::ET_TOUCH_RELEASED, event.type);
|
| - EXPECT_EQ(base::TimeDelta::FromMicroseconds(0), event.timestamp);
|
| - EXPECT_EQ(42, event.location.x());
|
| - EXPECT_EQ(51, event.location.y());
|
| + EXPECT_EQ(base::TimeDelta::FromMicroseconds(1427323282144540),
|
| + event.timestamp);
|
| + EXPECT_EQ(312, event.location.x());
|
| + EXPECT_EQ(432, event.location.y());
|
| EXPECT_EQ(0, event.touch_id);
|
| - EXPECT_FLOAT_EQ(.5f, event.pressure);
|
| + EXPECT_FLOAT_EQ(50.f, event.radii.x());
|
| + EXPECT_FLOAT_EQ(0.16862745f, event.pressure);
|
| }
|
|
|
| TEST_F(TouchEventConverterEvdevTest, TwoFingerGesture) {
|
| ui::MockTouchEventConverterEvdev* dev = device();
|
|
|
| + InitPixelTouchscreen(dev);
|
| +
|
| struct input_event mock_kernel_queue_press0[] = {
|
| {{0, 0}, EV_ABS, ABS_MT_TRACKING_ID, 684},
|
| {{0, 0}, EV_ABS, ABS_MT_TOUCH_MAJOR, 3},
|
| @@ -373,7 +337,7 @@ TEST_F(TouchEventConverterEvdevTest, TwoFingerGesture) {
|
| EXPECT_EQ(40, ev0.location.x());
|
| EXPECT_EQ(51, ev0.location.y());
|
| EXPECT_EQ(0, ev0.touch_id);
|
| - EXPECT_FLOAT_EQ(.5f, ev0.pressure);
|
| + EXPECT_FLOAT_EQ(0.17647059f, ev0.pressure);
|
|
|
| // Press
|
| EXPECT_EQ(ui::ET_TOUCH_PRESSED, ev1.type);
|
| @@ -381,7 +345,7 @@ TEST_F(TouchEventConverterEvdevTest, TwoFingerGesture) {
|
| EXPECT_EQ(101, ev1.location.x());
|
| EXPECT_EQ(102, ev1.location.y());
|
| EXPECT_EQ(1, ev1.touch_id);
|
| - EXPECT_FLOAT_EQ(.5f, ev1.pressure);
|
| + EXPECT_FLOAT_EQ(0.17647059f, ev1.pressure);
|
|
|
| // Stationary 0, Moves 1.
|
| struct input_event mock_kernel_queue_stationary0_move1[] = {
|
| @@ -397,8 +361,7 @@ TEST_F(TouchEventConverterEvdevTest, TwoFingerGesture) {
|
| EXPECT_EQ(40, ev1.location.x());
|
| EXPECT_EQ(102, ev1.location.y());
|
| EXPECT_EQ(1, ev1.touch_id);
|
| -
|
| - EXPECT_FLOAT_EQ(.5f, ev1.pressure);
|
| + EXPECT_FLOAT_EQ(0.17647059f, ev1.pressure);
|
|
|
| // Move 0, stationary 1.
|
| struct input_event mock_kernel_queue_move0_stationary1[] = {
|
| @@ -415,7 +378,7 @@ TEST_F(TouchEventConverterEvdevTest, TwoFingerGesture) {
|
| EXPECT_EQ(39, ev0.location.x());
|
| EXPECT_EQ(51, ev0.location.y());
|
| EXPECT_EQ(0, ev0.touch_id);
|
| - EXPECT_FLOAT_EQ(.5f, ev0.pressure);
|
| + EXPECT_FLOAT_EQ(0.17647059f, ev0.pressure);
|
|
|
| // Release 0, move 1.
|
| struct input_event mock_kernel_queue_release0_move1[] = {
|
| @@ -433,14 +396,14 @@ TEST_F(TouchEventConverterEvdevTest, TwoFingerGesture) {
|
| EXPECT_EQ(39, ev0.location.x());
|
| EXPECT_EQ(51, ev0.location.y());
|
| EXPECT_EQ(0, ev0.touch_id);
|
| - EXPECT_FLOAT_EQ(.5f, ev0.pressure);
|
| + EXPECT_FLOAT_EQ(0.17647059f, ev0.pressure);
|
|
|
| EXPECT_EQ(ui::ET_TOUCH_MOVED, ev1.type);
|
| EXPECT_EQ(base::TimeDelta::FromMicroseconds(0), ev1.timestamp);
|
| EXPECT_EQ(38, ev1.location.x());
|
| EXPECT_EQ(102, ev1.location.y());
|
| EXPECT_EQ(1, ev1.touch_id);
|
| - EXPECT_FLOAT_EQ(.5f, ev1.pressure);
|
| + EXPECT_FLOAT_EQ(0.17647059f, ev1.pressure);
|
|
|
| // Release 1.
|
| struct input_event mock_kernel_queue_release1[] = {
|
| @@ -456,12 +419,14 @@ TEST_F(TouchEventConverterEvdevTest, TwoFingerGesture) {
|
| EXPECT_EQ(38, ev1.location.x());
|
| EXPECT_EQ(102, ev1.location.y());
|
| EXPECT_EQ(1, ev1.touch_id);
|
| - EXPECT_FLOAT_EQ(.5f, ev1.pressure);
|
| + EXPECT_FLOAT_EQ(0.17647059f, ev1.pressure);
|
| }
|
|
|
| TEST_F(TouchEventConverterEvdevTest, Unsync) {
|
| ui::MockTouchEventConverterEvdev* dev = device();
|
|
|
| + InitPixelTouchscreen(dev);
|
| +
|
| struct input_event mock_kernel_queue_press0[] = {
|
| {{0, 0}, EV_ABS, ABS_MT_TRACKING_ID, 684},
|
| {{0, 0}, EV_ABS, ABS_MT_TOUCH_MAJOR, 3},
|
| @@ -500,6 +465,8 @@ TEST_F(TouchEventConverterEvdevTest,
|
| DontChangeMultitouchPositionFromLegacyAxes) {
|
| ui::MockTouchEventConverterEvdev* dev = device();
|
|
|
| + InitPixelTouchscreen(dev);
|
| +
|
| struct input_event mock_kernel_queue[] = {
|
| {{0, 0}, EV_ABS, ABS_MT_SLOT, 0},
|
| {{0, 0}, EV_ABS, ABS_MT_TRACKING_ID, 100},
|
| @@ -532,12 +499,12 @@ TEST_F(TouchEventConverterEvdevTest,
|
| EXPECT_EQ(0, ev0.touch_id);
|
| EXPECT_EQ(999, ev0.location.x());
|
| EXPECT_EQ(888, ev0.location.y());
|
| - EXPECT_FLOAT_EQ(0.8333333f, ev0.pressure);
|
| + EXPECT_FLOAT_EQ(0.21568628f, ev0.pressure);
|
|
|
| EXPECT_EQ(1, ev1.touch_id);
|
| EXPECT_EQ(777, ev1.location.x());
|
| EXPECT_EQ(666, ev1.location.y());
|
| - EXPECT_FLOAT_EQ(0.4666666f, ev1.pressure);
|
| + EXPECT_FLOAT_EQ(0.17254902f, ev1.pressure);
|
| }
|
|
|
| // crbug.com/446939
|
|
|