From 8d23203ec6d923aaf7d44f77faea2ac42a963227 Mon Sep 17 00:00:00 2001 From: Siarhei Vishniakou Date: Wed, 11 Jan 2023 08:17:21 -0800 Subject: Per-pointer processing in VelocityTracker We would like to skip resampled data in VelocityTracker when the velocity is being computed. To make this happen, we need to first process the data per-pointer. This will then allow us to skip individual data points. To minimize the impact to older VT strategies that are largely untested, the main change here is to make 'mMovements' and 'mIndex' become per-pointer, rather than converting to a vector. Also, use std::array instead of [] because [] cannot be used inside a std::map easily. There should be no functional change in this CL. The actual skipping of resampled values will be done in a separate CL. Bug: 167946721 Test: m libinput_tests && $ANDROID_HOST_OUT/nativetest64/libinput_tests/libinput_tests Change-Id: I1c3c845bca0d4bb7d2c3973bfe84462139ac36f3 --- libs/input/VelocityControl.cpp | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) (limited to 'libs/input/VelocityControl.cpp') diff --git a/libs/input/VelocityControl.cpp b/libs/input/VelocityControl.cpp index 5c008b1158..5720099033 100644 --- a/libs/input/VelocityControl.cpp +++ b/libs/input/VelocityControl.cpp @@ -70,9 +70,10 @@ void VelocityControl::move(nsecs_t eventTime, float* deltaX, float* deltaY) { if (deltaY) { mRawPositionY += *deltaY; } - mVelocityTracker.addMovement(eventTime, BitSet32(BitSet32::valueForBit(0)), - {{AMOTION_EVENT_AXIS_X, {mRawPositionX}}, - {AMOTION_EVENT_AXIS_Y, {mRawPositionY}}}); + mVelocityTracker.addMovement(eventTime, /*pointerId=*/0, AMOTION_EVENT_AXIS_X, + mRawPositionX); + mVelocityTracker.addMovement(eventTime, /*pointerId=*/0, AMOTION_EVENT_AXIS_Y, + mRawPositionY); std::optional vx = mVelocityTracker.getVelocity(AMOTION_EVENT_AXIS_X, 0); std::optional vy = mVelocityTracker.getVelocity(AMOTION_EVENT_AXIS_Y, 0); -- cgit v1.2.3-59-g8ed1b