OLD | NEW |
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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 "ui/events/ozone/evdev/touch_event_converter_evdev.h" |
| 6 |
5 #include <errno.h> | 7 #include <errno.h> |
6 #include <linux/input.h> | 8 #include <linux/input.h> |
7 #include <stddef.h> | 9 #include <stddef.h> |
8 #include <unistd.h> | 10 #include <unistd.h> |
9 | 11 |
| 12 #include <memory> |
10 #include <vector> | 13 #include <vector> |
11 | 14 |
12 #include "base/bind.h" | 15 #include "base/bind.h" |
13 #include "base/command_line.h" | 16 #include "base/command_line.h" |
14 #include "base/files/file_util.h" | 17 #include "base/files/file_util.h" |
15 #include "base/macros.h" | 18 #include "base/macros.h" |
16 #include "base/memory/scoped_ptr.h" | |
17 #include "base/posix/eintr_wrapper.h" | 19 #include "base/posix/eintr_wrapper.h" |
18 #include "base/run_loop.h" | 20 #include "base/run_loop.h" |
19 #include "base/time/time.h" | 21 #include "base/time/time.h" |
20 #include "testing/gtest/include/gtest/gtest.h" | 22 #include "testing/gtest/include/gtest/gtest.h" |
21 #include "ui/events/devices/device_data_manager.h" | 23 #include "ui/events/devices/device_data_manager.h" |
22 #include "ui/events/event_switches.h" | 24 #include "ui/events/event_switches.h" |
23 #include "ui/events/ozone/evdev/device_event_dispatcher_evdev.h" | 25 #include "ui/events/ozone/evdev/device_event_dispatcher_evdev.h" |
24 #include "ui/events/ozone/evdev/event_device_test_util.h" | 26 #include "ui/events/ozone/evdev/event_device_test_util.h" |
25 #include "ui/events/ozone/evdev/touch_evdev_types.h" | 27 #include "ui/events/ozone/evdev/touch_evdev_types.h" |
26 #include "ui/events/ozone/evdev/touch_event_converter_evdev.h" | |
27 #include "ui/events/ozone/evdev/touch_noise/touch_noise_filter.h" | 28 #include "ui/events/ozone/evdev/touch_noise/touch_noise_filter.h" |
28 #include "ui/events/ozone/evdev/touch_noise/touch_noise_finder.h" | 29 #include "ui/events/ozone/evdev/touch_noise/touch_noise_finder.h" |
29 #include "ui/events/platform/platform_event_dispatcher.h" | 30 #include "ui/events/platform/platform_event_dispatcher.h" |
30 #include "ui/events/platform/platform_event_source.h" | 31 #include "ui/events/platform/platform_event_source.h" |
31 | 32 |
32 namespace ui { | 33 namespace ui { |
33 | 34 |
34 namespace { | 35 namespace { |
35 | 36 |
36 const char kTestDevicePath[] = "/dev/input/test-device"; | 37 const char kTestDevicePath[] = "/dev/input/test-device"; |
(...skipping 162 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
199 DCHECK_GT(dispatched_events_.size(), index); | 200 DCHECK_GT(dispatched_events_.size(), index); |
200 return dispatched_events_[index]; | 201 return dispatched_events_[index]; |
201 } | 202 } |
202 | 203 |
203 void ClearDispatchedEvents() { dispatched_events_.clear(); } | 204 void ClearDispatchedEvents() { dispatched_events_.clear(); } |
204 | 205 |
205 void DestroyDevice() { device_.reset(); } | 206 void DestroyDevice() { device_.reset(); } |
206 | 207 |
207 private: | 208 private: |
208 base::MessageLoop* loop_; | 209 base::MessageLoop* loop_; |
209 scoped_ptr<ui::MockTouchEventConverterEvdev> device_; | 210 std::unique_ptr<ui::MockTouchEventConverterEvdev> device_; |
210 scoped_ptr<ui::MockDeviceEventDispatcherEvdev> dispatcher_; | 211 std::unique_ptr<ui::MockDeviceEventDispatcherEvdev> dispatcher_; |
211 | 212 |
212 int events_out_; | 213 int events_out_; |
213 int events_in_; | 214 int events_in_; |
214 | 215 |
215 void DispatchCallback(const ui::TouchEventParams& params) { | 216 void DispatchCallback(const ui::TouchEventParams& params) { |
216 dispatched_events_.push_back(params); | 217 dispatched_events_.push_back(params); |
217 } | 218 } |
218 std::vector<ui::TouchEventParams> dispatched_events_; | 219 std::vector<ui::TouchEventParams> dispatched_events_; |
219 | 220 |
220 DISALLOW_COPY_AND_ASSIGN(TouchEventConverterEvdevTest); | 221 DISALLOW_COPY_AND_ASSIGN(TouchEventConverterEvdevTest); |
(...skipping 600 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
821 } // namespace | 822 } // namespace |
822 | 823 |
823 class TouchEventConverterEvdevTouchNoiseTest | 824 class TouchEventConverterEvdevTouchNoiseTest |
824 : public TouchEventConverterEvdevTest { | 825 : public TouchEventConverterEvdevTest { |
825 public: | 826 public: |
826 TouchEventConverterEvdevTouchNoiseTest() {} | 827 TouchEventConverterEvdevTouchNoiseTest() {} |
827 ~TouchEventConverterEvdevTouchNoiseTest() override {} | 828 ~TouchEventConverterEvdevTouchNoiseTest() override {} |
828 | 829 |
829 // Makes the TouchNoiseFinder use |filter| and only |filter| to filter out | 830 // Makes the TouchNoiseFinder use |filter| and only |filter| to filter out |
830 // touch noise. | 831 // touch noise. |
831 void SetTouchNoiseFilter(scoped_ptr<TouchNoiseFilter> filter) { | 832 void SetTouchNoiseFilter(std::unique_ptr<TouchNoiseFilter> filter) { |
832 TouchNoiseFinder* finder = device()->touch_noise_finder(); | 833 TouchNoiseFinder* finder = device()->touch_noise_finder(); |
833 finder->filters_.clear(); | 834 finder->filters_.clear(); |
834 finder->filters_.push_back(filter.release()); | 835 finder->filters_.push_back(filter.release()); |
835 } | 836 } |
836 | 837 |
837 // Returns the first of TouchNoiseFinder's filters. | 838 // Returns the first of TouchNoiseFinder's filters. |
838 ui::TouchNoiseFilter* first_filter() { | 839 ui::TouchNoiseFilter* first_filter() { |
839 TouchNoiseFinder* finder = device()->touch_noise_finder(); | 840 TouchNoiseFinder* finder = device()->touch_noise_finder(); |
840 return finder->filters_.empty() ? nullptr : *finder->filters_.begin(); | 841 return finder->filters_.empty() ? nullptr : *finder->filters_.begin(); |
841 } | 842 } |
(...skipping 21 matching lines...) Expand all Loading... |
863 | 864 |
864 {{0, 0}, EV_ABS, ABS_MT_POSITION_X, 42}, | 865 {{0, 0}, EV_ABS, ABS_MT_POSITION_X, 42}, |
865 {{0, 0}, EV_ABS, ABS_MT_POSITION_Y, 43}, | 866 {{0, 0}, EV_ABS, ABS_MT_POSITION_Y, 43}, |
866 {{0, 0}, EV_SYN, SYN_REPORT, 0}, | 867 {{0, 0}, EV_SYN, SYN_REPORT, 0}, |
867 | 868 |
868 {{0, 0}, EV_ABS, ABS_MT_TRACKING_ID, -1}, | 869 {{0, 0}, EV_ABS, ABS_MT_TRACKING_ID, -1}, |
869 {{0, 0}, EV_SYN, SYN_REPORT, 0} | 870 {{0, 0}, EV_SYN, SYN_REPORT, 0} |
870 }; | 871 }; |
871 | 872 |
872 MockTouchEventConverterEvdev* dev = device(); | 873 MockTouchEventConverterEvdev* dev = device(); |
873 SetTouchNoiseFilter(scoped_ptr<TouchNoiseFilter>( | 874 SetTouchNoiseFilter(std::unique_ptr<TouchNoiseFilter>( |
874 new EventTypeTouchNoiseFilter(ET_TOUCH_PRESSED))); | 875 new EventTypeTouchNoiseFilter(ET_TOUCH_PRESSED))); |
875 dev->ConfigureReadMock(mock_kernel_queue, arraysize(mock_kernel_queue), 0); | 876 dev->ConfigureReadMock(mock_kernel_queue, arraysize(mock_kernel_queue), 0); |
876 dev->ReadNow(); | 877 dev->ReadNow(); |
877 ASSERT_EQ(0u, size()); | 878 ASSERT_EQ(0u, size()); |
878 | 879 |
879 ClearDispatchedEvents(); | 880 ClearDispatchedEvents(); |
880 SetTouchNoiseFilter(scoped_ptr<TouchNoiseFilter>( | 881 SetTouchNoiseFilter(std::unique_ptr<TouchNoiseFilter>( |
881 new EventTypeTouchNoiseFilter(ET_TOUCH_MOVED))); | 882 new EventTypeTouchNoiseFilter(ET_TOUCH_MOVED))); |
882 dev->ConfigureReadMock(mock_kernel_queue, arraysize(mock_kernel_queue), 0); | 883 dev->ConfigureReadMock(mock_kernel_queue, arraysize(mock_kernel_queue), 0); |
883 dev->ReadNow(); | 884 dev->ReadNow(); |
884 ASSERT_EQ(2u, size()); | 885 ASSERT_EQ(2u, size()); |
885 TouchEventParams event0 = dispatched_event(0); | 886 TouchEventParams event0 = dispatched_event(0); |
886 EXPECT_EQ(ET_TOUCH_PRESSED, event0.type); | 887 EXPECT_EQ(ET_TOUCH_PRESSED, event0.type); |
887 EXPECT_EQ(40, event0.location.x()); | 888 EXPECT_EQ(40, event0.location.x()); |
888 EXPECT_EQ(41, event0.location.y()); | 889 EXPECT_EQ(41, event0.location.y()); |
889 EXPECT_EQ(ET_TOUCH_CANCELLED, dispatched_event(1).type); | 890 EXPECT_EQ(ET_TOUCH_CANCELLED, dispatched_event(1).type); |
890 | 891 |
891 ClearDispatchedEvents(); | 892 ClearDispatchedEvents(); |
892 SetTouchNoiseFilter(scoped_ptr<TouchNoiseFilter>( | 893 SetTouchNoiseFilter(std::unique_ptr<TouchNoiseFilter>( |
893 new EventTypeTouchNoiseFilter(ET_TOUCH_RELEASED))); | 894 new EventTypeTouchNoiseFilter(ET_TOUCH_RELEASED))); |
894 dev->ConfigureReadMock(mock_kernel_queue, arraysize(mock_kernel_queue), 0); | 895 dev->ConfigureReadMock(mock_kernel_queue, arraysize(mock_kernel_queue), 0); |
895 dev->ReadNow(); | 896 dev->ReadNow(); |
896 ASSERT_EQ(3u, size()); | 897 ASSERT_EQ(3u, size()); |
897 event0 = dispatched_event(0); | 898 event0 = dispatched_event(0); |
898 EXPECT_EQ(ET_TOUCH_PRESSED, event0.type); | 899 EXPECT_EQ(ET_TOUCH_PRESSED, event0.type); |
899 EXPECT_EQ(40, event0.location.x()); | 900 EXPECT_EQ(40, event0.location.x()); |
900 EXPECT_EQ(41, event0.location.y()); | 901 EXPECT_EQ(41, event0.location.y()); |
901 TouchEventParams event1 = dispatched_event(1); | 902 TouchEventParams event1 = dispatched_event(1); |
902 EXPECT_EQ(ET_TOUCH_MOVED, event1.type); | 903 EXPECT_EQ(ET_TOUCH_MOVED, event1.type); |
(...skipping 18 matching lines...) Expand all Loading... |
921 | 922 |
922 {{0, 0}, EV_ABS, ABS_MT_POSITION_X, 43}, | 923 {{0, 0}, EV_ABS, ABS_MT_POSITION_X, 43}, |
923 {{0, 0}, EV_ABS, ABS_MT_POSITION_Y, 44}, | 924 {{0, 0}, EV_ABS, ABS_MT_POSITION_Y, 44}, |
924 {{0, 0}, EV_SYN, SYN_REPORT, 0}, | 925 {{0, 0}, EV_SYN, SYN_REPORT, 0}, |
925 | 926 |
926 {{0, 0}, EV_ABS, ABS_MT_TRACKING_ID, -1}, | 927 {{0, 0}, EV_ABS, ABS_MT_TRACKING_ID, -1}, |
927 {{0, 0}, EV_SYN, SYN_REPORT, 0} | 928 {{0, 0}, EV_SYN, SYN_REPORT, 0} |
928 }; | 929 }; |
929 | 930 |
930 MockTouchEventConverterEvdev* dev = device(); | 931 MockTouchEventConverterEvdev* dev = device(); |
931 SetTouchNoiseFilter(scoped_ptr<TouchNoiseFilter>( | 932 SetTouchNoiseFilter(std::unique_ptr<TouchNoiseFilter>( |
932 new EventTypeTouchNoiseFilter(ET_TOUCH_PRESSED))); | 933 new EventTypeTouchNoiseFilter(ET_TOUCH_PRESSED))); |
933 dev->ConfigureReadMock(mock_kernel_queue, arraysize(mock_kernel_queue), 0); | 934 dev->ConfigureReadMock(mock_kernel_queue, arraysize(mock_kernel_queue), 0); |
934 dev->ReadNow(); | 935 dev->ReadNow(); |
935 ASSERT_EQ(0u, size()); | 936 ASSERT_EQ(0u, size()); |
936 | 937 |
937 EventTypeTouchNoiseFilter* filter = | 938 EventTypeTouchNoiseFilter* filter = |
938 static_cast<EventTypeTouchNoiseFilter*>(first_filter()); | 939 static_cast<EventTypeTouchNoiseFilter*>(first_filter()); |
939 EXPECT_EQ(1u, filter->num_events(ET_TOUCH_PRESSED)); | 940 EXPECT_EQ(1u, filter->num_events(ET_TOUCH_PRESSED)); |
940 EXPECT_EQ(2u, filter->num_events(ET_TOUCH_MOVED)); | 941 EXPECT_EQ(2u, filter->num_events(ET_TOUCH_MOVED)); |
941 EXPECT_EQ(1u, filter->num_events(ET_TOUCH_RELEASED)); | 942 EXPECT_EQ(1u, filter->num_events(ET_TOUCH_RELEASED)); |
(...skipping 99 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1041 event = dispatched_event(3); | 1042 event = dispatched_event(3); |
1042 EXPECT_EQ(ui::ET_TOUCH_RELEASED, event.type); | 1043 EXPECT_EQ(ui::ET_TOUCH_RELEASED, event.type); |
1043 EXPECT_EQ(8930, event.location.x()); | 1044 EXPECT_EQ(8930, event.location.x()); |
1044 EXPECT_EQ(980, event.location.y()); | 1045 EXPECT_EQ(980, event.location.y()); |
1045 EXPECT_EQ(EventPointerType::POINTER_TYPE_PEN, | 1046 EXPECT_EQ(EventPointerType::POINTER_TYPE_PEN, |
1046 event.pointer_details.pointer_type); | 1047 event.pointer_details.pointer_type); |
1047 EXPECT_EQ(0.f / 1024, event.pointer_details.force); | 1048 EXPECT_EQ(0.f / 1024, event.pointer_details.force); |
1048 } | 1049 } |
1049 | 1050 |
1050 } // namespace ui | 1051 } // namespace ui |
OLD | NEW |