| // 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. |
| |
| #ifndef UI_EVENTS_OZONE_EVDEV_TOUCH_FILTER_SINGLE_POSITION_TOUCH_NOISE_FILTER_H_ |
| #define UI_EVENTS_OZONE_EVDEV_TOUCH_FILTER_SINGLE_POSITION_TOUCH_NOISE_FILTER_H_ |
| |
| #include <stddef.h> |
| |
| #include "base/macros.h" |
| #include "base/time/time.h" |
| #include "ui/events/ozone/evdev/touch_filter/touch_filter.h" |
| |
| namespace ui { |
| |
| class SinglePositionTouchNoiseFilter : public TouchFilter { |
| public: |
| SinglePositionTouchNoiseFilter(); |
| ~SinglePositionTouchNoiseFilter() override {} |
| |
| // TouchFilter: |
| void Filter(const std::vector<InProgressTouchEvdev>& touches, |
| base::TimeTicks time, |
| std::bitset<kNumTouchEvdevSlots>* slots_with_noise) override; |
| |
| private: |
| struct TrackedTouch { |
| TrackedTouch(); |
| ~TrackedTouch(); |
| |
| bool valid; |
| size_t slot; |
| int x; |
| int y; |
| base::TimeTicks begin; |
| base::TimeTicks end; |
| |
| // The age of the oldest touch at the same location as this TrackedTouch. |
| // Logged to UMA when we stop tracking the TrackedTouch. |
| base::TimeDelta same_location_touch_age; |
| }; |
| |
| void StopTrackingTouch(size_t index); |
| void TrackTouch(const InProgressTouchEvdev& touch, |
| base::TimeTicks time); |
| |
| // A mapping of slot to tracked touch index in |tracked_touches_|. |
| size_t tracked_slots_[kNumTouchEvdevSlots]; |
| |
| // A circular buffer of tracked touches |
| // [|tracked_touches_start_|, |tracked_touches_end_|). |
| static const int kNumTrackedTouches = 100; |
| TrackedTouch tracked_touches_[kNumTrackedTouches]; |
| |
| size_t tracked_touches_start_; |
| size_t tracked_touches_end_; |
| }; |
| |
| } // namespace ui |
| |
| #endif // UI_EVENTS_OZONE_EVDEV_TOUCH_FILTER_SINGLE_POSITION_TOUCH_NOISE_FILTER_H_ |