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/gesture_detection/velocity_tracker.h" | 5 #include "ui/events/gesture_detection/velocity_tracker.h" |
6 | 6 |
7 #include <cmath> | 7 #include <cmath> |
8 | 8 |
9 #include "base/logging.h" | 9 #include "base/logging.h" |
10 #include "ui/events/gesture_detection/motion_event.h" | 10 #include "ui/events/gesture_detection/motion_event.h" |
(...skipping 101 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
112 // Weight such that points older than a certain amount are weighed less. | 112 // Weight such that points older than a certain amount are weighed less. |
113 WEIGHTING_RECENT, | 113 WEIGHTING_RECENT, |
114 }; | 114 }; |
115 | 115 |
116 // Number of samples to keep. | 116 // Number of samples to keep. |
117 static const uint8_t kHistorySize = 20; | 117 static const uint8_t kHistorySize = 20; |
118 | 118 |
119 // Degree must be no greater than Estimator::kMaxDegree. | 119 // Degree must be no greater than Estimator::kMaxDegree. |
120 LeastSquaresVelocityTrackerStrategy(uint32_t degree, | 120 LeastSquaresVelocityTrackerStrategy(uint32_t degree, |
121 Weighting weighting = WEIGHTING_NONE); | 121 Weighting weighting = WEIGHTING_NONE); |
122 virtual ~LeastSquaresVelocityTrackerStrategy(); | 122 ~LeastSquaresVelocityTrackerStrategy() override; |
123 | 123 |
124 virtual void Clear() override; | 124 void Clear() override; |
125 virtual void ClearPointers(BitSet32 id_bits) override; | 125 void ClearPointers(BitSet32 id_bits) override; |
126 virtual void AddMovement(const TimeTicks& event_time, | 126 void AddMovement(const TimeTicks& event_time, |
127 BitSet32 id_bits, | 127 BitSet32 id_bits, |
128 const Position* positions) override; | 128 const Position* positions) override; |
129 virtual bool GetEstimator(uint32_t id, | 129 bool GetEstimator(uint32_t id, Estimator* out_estimator) const override; |
130 Estimator* out_estimator) const override; | |
131 | 130 |
132 private: | 131 private: |
133 // Sample horizon. | 132 // Sample horizon. |
134 // We don't use too much history by default since we want to react to quick | 133 // We don't use too much history by default since we want to react to quick |
135 // changes in direction. | 134 // changes in direction. |
136 static const uint8_t kHorizonMS = 100; | 135 static const uint8_t kHorizonMS = 100; |
137 | 136 |
138 struct Movement { | 137 struct Movement { |
139 TimeTicks event_time; | 138 TimeTicks event_time; |
140 BitSet32 id_bits; | 139 BitSet32 id_bits; |
(...skipping 10 matching lines...) Expand all Loading... |
151 const Weighting weighting_; | 150 const Weighting weighting_; |
152 uint32_t index_; | 151 uint32_t index_; |
153 Movement movements_[kHistorySize]; | 152 Movement movements_[kHistorySize]; |
154 }; | 153 }; |
155 | 154 |
156 // Velocity tracker algorithm that uses an IIR filter. | 155 // Velocity tracker algorithm that uses an IIR filter. |
157 class IntegratingVelocityTrackerStrategy : public VelocityTrackerStrategy { | 156 class IntegratingVelocityTrackerStrategy : public VelocityTrackerStrategy { |
158 public: | 157 public: |
159 // Degree must be 1 or 2. | 158 // Degree must be 1 or 2. |
160 explicit IntegratingVelocityTrackerStrategy(uint32_t degree); | 159 explicit IntegratingVelocityTrackerStrategy(uint32_t degree); |
161 virtual ~IntegratingVelocityTrackerStrategy(); | 160 ~IntegratingVelocityTrackerStrategy() override; |
162 | 161 |
163 virtual void Clear() override; | 162 void Clear() override; |
164 virtual void ClearPointers(BitSet32 id_bits) override; | 163 void ClearPointers(BitSet32 id_bits) override; |
165 virtual void AddMovement(const TimeTicks& event_time, | 164 void AddMovement(const TimeTicks& event_time, |
166 BitSet32 id_bits, | 165 BitSet32 id_bits, |
167 const Position* positions) override; | 166 const Position* positions) override; |
168 virtual bool GetEstimator(uint32_t id, | 167 bool GetEstimator(uint32_t id, Estimator* out_estimator) const override; |
169 Estimator* out_estimator) const override; | |
170 | 168 |
171 private: | 169 private: |
172 // Current state estimate for a particular pointer. | 170 // Current state estimate for a particular pointer. |
173 struct State { | 171 struct State { |
174 TimeTicks update_time; | 172 TimeTicks update_time; |
175 uint32_t degree; | 173 uint32_t degree; |
176 | 174 |
177 float xpos, xvel, xaccel; | 175 float xpos, xvel, xaccel; |
178 float ypos, yvel, yaccel; | 176 float ypos, yvel, yaccel; |
179 }; | 177 }; |
(...skipping 628 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
808 out_estimator->degree = state.degree; | 806 out_estimator->degree = state.degree; |
809 out_estimator->xcoeff[0] = state.xpos; | 807 out_estimator->xcoeff[0] = state.xpos; |
810 out_estimator->xcoeff[1] = state.xvel; | 808 out_estimator->xcoeff[1] = state.xvel; |
811 out_estimator->xcoeff[2] = state.xaccel / 2; | 809 out_estimator->xcoeff[2] = state.xaccel / 2; |
812 out_estimator->ycoeff[0] = state.ypos; | 810 out_estimator->ycoeff[0] = state.ypos; |
813 out_estimator->ycoeff[1] = state.yvel; | 811 out_estimator->ycoeff[1] = state.yvel; |
814 out_estimator->ycoeff[2] = state.yaccel / 2; | 812 out_estimator->ycoeff[2] = state.yaccel / 2; |
815 } | 813 } |
816 | 814 |
817 } // namespace ui | 815 } // namespace ui |
OLD | NEW |