summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorWilliam Mahon <wmahon@google.com>2024-02-22 01:45:49 +0000
committerChromeos LUCI <chromeos-scoped@luci-project-accounts.iam.gserviceaccount.com>2024-02-26 22:10:36 +0000
commit8cc26f2e4b77a2abd91db5413453eeed737cad28 (patch)
treeb4fb7dfa2e42f72940a31e77183ad405a064f990
parentfea3ca4ec92fbbe738b2c6f1fc512c08467fc291 (diff)
downloadlibchrome-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.h6
-rw-r--r--include/immediate_interpreter.h1
-rw-r--r--src/finger_metrics.cc26
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));
}