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

Unified Diff: ui/events/ozone/evdev/touch_noise/touch_noise_finder_unittest.cc

Issue 991533002: Port Chromium OS touch noise filtering to Chromium (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « ui/events/ozone/evdev/touch_noise/touch_noise_finder.cc ('k') | ui/events/ozone/events_ozone.gyp » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: ui/events/ozone/evdev/touch_noise/touch_noise_finder_unittest.cc
diff --git a/ui/events/ozone/evdev/touch_noise/touch_noise_finder_unittest.cc b/ui/events/ozone/evdev/touch_noise/touch_noise_finder_unittest.cc
new file mode 100644
index 0000000000000000000000000000000000000000..febf4936103309c2b3a8c871403cf50ae1b7b2d2
--- /dev/null
+++ b/ui/events/ozone/evdev/touch_noise/touch_noise_finder_unittest.cc
@@ -0,0 +1,140 @@
+// Copyright 2015 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "ui/events/ozone/evdev/touch_noise/touch_noise_finder.h"
+
+#include <algorithm>
+
+#include "base/logging.h"
+#include "base/memory/scoped_ptr.h"
+#include "base/strings/stringprintf.h"
+#include "testing/gtest/include/gtest/gtest.h"
+#include "ui/events/ozone/evdev/touch_evdev_types.h"
+#include "ui/gfx/geometry/point_f.h"
+
+namespace ui {
+
+class TouchNoiseFinderTest : public testing::Test {
+ public:
+ struct TouchEntry {
+ int time_ms;
+ size_t slot;
+ bool touching;
+ gfx::PointF location;
+ bool expect_noise;
+ };
+
+ TouchNoiseFinderTest() {}
+ ~TouchNoiseFinderTest() override {}
+
+ bool FilterAndCheck(const TouchEntry entries[], size_t count) {
+ std::vector<InProgressTouchEvdev> touches;
+ size_t start_index = 0u;
+ bool was_touching = false;
+ for (size_t i = 0; i < count; ++i) {
+ const TouchEntry& entry = entries[i];
+
+ InProgressTouchEvdev touch;
+ touch.x = entry.location.x();
+ touch.y = entry.location.y();
+ touch.tracking_id = entry.slot;
+ touch.slot = entry.slot;
+ touch.was_touching = was_touching;
+ touch.touching = entry.touching;
+
+ if (i == count - 1 || entry.time_ms != entries[i + 1].time_ms) {
+ touch_noise_finder_->HandleTouches(
+ touches, base::TimeDelta::FromMilliseconds(entry.time_ms));
+
+ for (size_t j = 0; j < touches.size(); ++j) {
+ bool expect_noise = entries[j + start_index].expect_noise;
+ size_t slot = touches[j].slot;
+ if (touch_noise_finder_->SlotHasNoise(slot) != expect_noise)
+ LOG(ERROR) << base::StringPrintf(
+ "Incorrect filtering at %dms for slot %lu", entry.time_ms,
+ slot);
+ return false;
+ }
+
+ start_index = i + 1;
+ touches.clear();
+ }
+
+ was_touching = entry.touching;
+ }
+
+ return true;
+ }
+
+ private:
+ // testing::Test:
+ void SetUp() override {
+ touch_noise_finder_.reset(new TouchNoiseFinder);
+ }
+
+ scoped_ptr<TouchNoiseFinder> touch_noise_finder_;
+
+ DISALLOW_COPY_AND_ASSIGN(TouchNoiseFinderTest);
+};
+
+// Test that taps which are far apart in quick succession are considered noise.
+TEST_F(TouchNoiseFinderTest, FarApartTaps) {
+ const TouchEntry kTestData[] = {
+ {10, 1, true, gfx::PointF(10, 10), false},
+ {20, 1, true, gfx::PointF(10, 11), false},
+ {30, 1, true, gfx::PointF(10, 12), false},
+ {30, 2, true, gfx::PointF(2500, 1000), true},
+ {40, 1, true, gfx::PointF(10, 13), true},
+ {40, 2, true, gfx::PointF(2500, 1001), true},
+ {50, 1, true, gfx::PointF(10, 14), true},
+ {50, 2, false, gfx::PointF(2500, 1002), true},
+ {60, 1, false, gfx::PointF(10, 15), true}};
+ EXPECT_TRUE(FilterAndCheck(kTestData, arraysize(kTestData)));
+}
+
+// Test that taps which are far apart but do not occur in quick succession are
+// not considered noise.
+TEST_F(TouchNoiseFinderTest, FarApartTapsSlow) {
+ const TouchEntry kTestData[] = {
+ {1000, 1, true, gfx::PointF(10, 10), false},
+ {1500, 1, true, gfx::PointF(10, 11), false},
+ {2000, 1, true, gfx::PointF(10, 12), false},
+ {2500, 1, true, gfx::PointF(10, 13), false},
+ {2500, 2, true, gfx::PointF(2500, 1000), false},
+ {3000, 1, true, gfx::PointF(10, 14), false},
+ {3000, 2, false, gfx::PointF(2500, 1001), false},
+ {3500, 1, false, gfx::PointF(10, 15), false}};
+ EXPECT_TRUE(FilterAndCheck(kTestData, arraysize(kTestData)));
+}
+
+// Test that touches which are horizontally aligned are considered noise.
+TEST_F(TouchNoiseFinderTest, HorizontallyAligned) {
+ const TouchEntry kTestData[] = {
+ {10, 1, true, gfx::PointF(10, 10), false},
+ {20, 1, true, gfx::PointF(10, 10), false},
+ {20, 2, true, gfx::PointF(10, 25), true},
+ {30, 1, false, gfx::PointF(10, 10), false},
+ {30, 2, true, gfx::PointF(10, 25), true},
+ {40, 2, false, gfx::PointF(10, 25), true}};
+ EXPECT_TRUE(FilterAndCheck(kTestData, arraysize(kTestData)));
+}
+
+// Test that touches in the same position are considered noise.
+TEST_F(TouchNoiseFinderTest, SamePosition) {
+ const TouchEntry kTestData[] = {
+ {1000, 1, true, gfx::PointF(10, 10), false},
+ {1500, 1, false, gfx::PointF(10, 10), false},
+ {2000, 1, true, gfx::PointF(10, 10), false},
+ {2500, 1, false, gfx::PointF(10, 10), false},
+ {3000, 1, true, gfx::PointF(50, 50), false},
+ {3500, 1, true, gfx::PointF(50, 51), false},
+ {3500, 2, true, gfx::PointF(10, 10), true},
+ {4000, 1, false, gfx::PointF(50, 52), false},
+ {4000, 2, false, gfx::PointF(10, 10), true},
+ {4500, 1, true, gfx::PointF(10, 10), true},
+ {5000, 1, false, gfx::PointF(10, 10), true}};
+ EXPECT_TRUE(FilterAndCheck(kTestData, arraysize(kTestData)));
+}
+
+} // namespace ui
« no previous file with comments | « ui/events/ozone/evdev/touch_noise/touch_noise_finder.cc ('k') | ui/events/ozone/events_ozone.gyp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698