diff options
author | William Mahon <wmahon@google.com> | 2024-02-22 01:45:49 +0000 |
---|---|---|
committer | Chromeos LUCI <chromeos-scoped@luci-project-accounts.iam.gserviceaccount.com> | 2024-02-26 22:10:36 +0000 |
commit | 8cc26f2e4b77a2abd91db5413453eeed737cad28 (patch) | |
tree | b4fb7dfa2e42f72940a31e77183ad405a064f990 | |
parent | fea3ca4ec92fbbe738b2c6f1fc512c08467fc291 (diff) | |
download | libchrome-gestures-8cc26f2e4b77a2abd91db5413453eeed737cad28.tar.gz |
gestures: Move metrics finger tracking to std::vector
FingerMetrics currently uses a custom vector with a fixed size to track
currently touching fingers. Replace this customer vector with
std::vector to track an indefinite number of fingers.
BUG=b:322173064
TEST=Deployed to DUT and tested with trackpad that would otherwise
generate "out of space" error.
Change-Id: I362b75847b6753f2fac9d2e076727cabe129f12a
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/gestures/+/5320049
Reviewed-by: Henry Barnor <hbarnor@chromium.org>
Commit-Queue: William Mahon <wmahon@google.com>
Tested-by: William Mahon <wmahon@google.com>
Code-Coverage: Zoss <zoss-cl-coverage@prod.google.com>
Reviewed-by: Sean O'Brien <seobrien@chromium.org>
-rw-r--r-- | include/finger_metrics.h | 6 | ||||
-rw-r--r-- | include/immediate_interpreter.h | 1 | ||||
-rw-r--r-- | src/finger_metrics.cc | 26 |
3 files changed, 19 insertions, 14 deletions
diff --git a/include/finger_metrics.h b/include/finger_metrics.h index 1773a94..c1f33dd 100644 --- a/include/finger_metrics.h +++ b/include/finger_metrics.h @@ -6,10 +6,10 @@ #define GESTURES_FINGER_METRICS_H_ #include <cmath> +#include <vector> #include "include/gestures.h" #include "include/prop_registry.h" -#include "include/vector.h" namespace gestures { @@ -130,7 +130,7 @@ class Metrics { // A collection of FingerMetrics describing the current hardware state. // The collection is sorted to yield the oldest finger first. - vector<FingerMetrics, kMaxFingers>& fingers() { return fingers_; } + std::vector<FingerMetrics>& fingers() { return fingers_; } // Find a FingerMetrics instance by it's tracking id. // Returns nullptr if not found. @@ -156,7 +156,7 @@ class Metrics { void SetFingerOriginTimestampForTesting(short tracking_id, stime_t time); private: - vector<FingerMetrics, kMaxFingers> fingers_; + std::vector<FingerMetrics> fingers_; MetricsProperties* properties_; std::unique_ptr<MetricsProperties> own_properties_; diff --git a/include/immediate_interpreter.h b/include/immediate_interpreter.h index 1be420e..7f2aa52 100644 --- a/include/immediate_interpreter.h +++ b/include/immediate_interpreter.h @@ -13,6 +13,7 @@ #include "include/macros.h" #include "include/prop_registry.h" #include "include/tracer.h" +#include "include/vector.h" #ifndef GESTURES_IMMEDIATE_INTERPRETER_H_ #define GESTURES_IMMEDIATE_INTERPRETER_H_ diff --git a/src/finger_metrics.cc b/src/finger_metrics.cc index a79ea10..4215196 100644 --- a/src/finger_metrics.cc +++ b/src/finger_metrics.cc @@ -76,14 +76,17 @@ bool Metrics::CloseEnoughToGesture(const Vector2& pos_a, < vert_axis_sq * horiz_axis_sq; } -Metrics::Metrics(MetricsProperties* properties) : properties_(properties) {} +Metrics::Metrics(MetricsProperties* properties) : properties_(properties) { + fingers_.reserve(kMaxFingers); +} const FingerMetrics* Metrics::GetFinger(short tracking_id) const { - auto iter = fingers_.find(FingerMetrics(tracking_id)); - if (iter != fingers_.end()) - return iter; - else - return nullptr; + for (auto iter = fingers_.cbegin(); iter != fingers_.cend(); ++iter) { + if(iter->tracking_id() == tracking_id) { + return &(*iter); + } + } + return nullptr; } const FingerMetrics* Metrics::GetFinger(const FingerState& state) const { @@ -98,8 +101,7 @@ void Metrics::Update(const HardwareState& hwstate) { // create metrics for new fingers for (int i=0; i<hwstate.finger_cnt; ++i) { const FingerState& state = hwstate.fingers[i]; - auto iter = fingers_.find(FingerMetrics(state.tracking_id)); - if (iter == fingers_.end()) { + if (GetFinger(state.tracking_id) == nullptr) { fingers_.push_back(FingerMetrics(state, hwstate.timestamp)); ++new_count; @@ -138,9 +140,11 @@ void Metrics::Clear() { void Metrics::SetFingerOriginTimestampForTesting(short tracking_id, stime_t time) { - if (auto iter = fingers_.find(FingerMetrics(tracking_id)); - iter != fingers_.end()) { - fingers_.erase(iter); + for (auto iter = fingers_.begin(); iter != fingers_.end(); ++iter) { + if(iter->tracking_id() == tracking_id) { + fingers_.erase(iter); + break; + } } fingers_.push_back(FingerMetrics(tracking_id, time)); } |