Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 276467bd authored by Siarhei Vishniakou's avatar Siarhei Vishniakou
Browse files

Add dynamic debug logs to VelocityTracker

This will allow us to debug any issues related to the switch to the
'impulse' velocitytracker algorithm.

In addition, print the lsq2 velocity values for the case when 'impulse'
is selected, and when debugging is enabled. This will make it simpler
for us to follow up on dogfooder's feedback.

Bug: 134179997
Test: atest libinput_tests:VelocityTrackerTest#ThreePointsLinearVelocityTest
Test: (enable debug logs and make sure the impulse and ...
Test: lsq2 velocities match for the test case above)
Change-Id: I3c523b67a0cebe8adaddba8f86d335a2f8f4d8f8
parent 3b0fa82b
Loading
Loading
Loading
Loading
+41 −9
Original line number Original line Diff line number Diff line
@@ -15,13 +15,6 @@
 */
 */


#define LOG_TAG "VelocityTracker"
#define LOG_TAG "VelocityTracker"
//#define LOG_NDEBUG 0

// Log debug messages about velocity tracking.
static constexpr bool DEBUG_VELOCITY = false;

// Log debug messages about the progress of the algorithm itself.
static constexpr bool DEBUG_STRATEGY = false;


#include <array>
#include <array>
#include <inttypes.h>
#include <inttypes.h>
@@ -36,6 +29,27 @@ static constexpr bool DEBUG_STRATEGY = false;


namespace android {
namespace android {


/**
 * Log debug messages about velocity tracking.
 * Enable this via "adb shell setprop log.tag.VelocityTrackerVelocity DEBUG" (requires restart)
 */
const bool DEBUG_VELOCITY =
        __android_log_is_loggable(ANDROID_LOG_DEBUG, LOG_TAG "Velocity", ANDROID_LOG_INFO);

/**
 * Log debug messages about the progress of the algorithm itself.
 * Enable this via "adb shell setprop log.tag.VelocityTrackerStrategy DEBUG" (requires restart)
 */
const bool DEBUG_STRATEGY =
        __android_log_is_loggable(ANDROID_LOG_DEBUG, LOG_TAG "Strategy", ANDROID_LOG_INFO);

/**
 * Log debug messages about the 'impulse' strategy.
 * Enable this via "adb shell setprop log.tag.VelocityTrackerImpulse DEBUG" (requires restart)
 */
const bool DEBUG_IMPULSE =
        __android_log_is_loggable(ANDROID_LOG_DEBUG, LOG_TAG "Impulse", ANDROID_LOG_INFO);

// Nanoseconds per milliseconds.
// Nanoseconds per milliseconds.
static const nsecs_t NANOS_PER_MS = 1000000;
static const nsecs_t NANOS_PER_MS = 1000000;


@@ -141,7 +155,7 @@ std::unique_ptr<VelocityTrackerStrategy> VelocityTracker::createStrategy(
            return std::make_unique<LeastSquaresVelocityTrackerStrategy>(1);
            return std::make_unique<LeastSquaresVelocityTrackerStrategy>(1);


        case VelocityTracker::Strategy::LSQ2:
        case VelocityTracker::Strategy::LSQ2:
            if (DEBUG_STRATEGY) {
            if (DEBUG_STRATEGY && !DEBUG_IMPULSE) {
                ALOGI("Initializing lsq2 strategy");
                ALOGI("Initializing lsq2 strategy");
            }
            }
            return std::make_unique<LeastSquaresVelocityTrackerStrategy>(2);
            return std::make_unique<LeastSquaresVelocityTrackerStrategy>(2);
@@ -1172,7 +1186,25 @@ bool ImpulseVelocityTrackerStrategy::getEstimator(uint32_t id,
    outEstimator->degree = 2; // similar results to 2nd degree fit
    outEstimator->degree = 2; // similar results to 2nd degree fit
    outEstimator->confidence = 1;
    outEstimator->confidence = 1;
    if (DEBUG_STRATEGY) {
    if (DEBUG_STRATEGY) {
        ALOGD("velocity: (%f, %f)", outEstimator->xCoeff[1], outEstimator->yCoeff[1]);
        ALOGD("velocity: (%.1f, %.1f)", outEstimator->xCoeff[1], outEstimator->yCoeff[1]);
    }
    if (DEBUG_IMPULSE) {
        // TODO(b/134179997): delete this block once the switch to 'impulse' is complete.
        // Calculate the lsq2 velocity for the same inputs to allow runtime comparisons
        VelocityTracker lsq2(VelocityTracker::Strategy::LSQ2);
        BitSet32 idBits;
        const uint32_t pointerId = 0;
        idBits.markBit(pointerId);
        for (ssize_t i = m - 1; i >= 0; i--) {
            lsq2.addMovement(time[i], idBits, {{x[i], y[i]}});
        }
        float outVx = 0, outVy = 0;
        const bool computed = lsq2.getVelocity(pointerId, &outVx, &outVy);
        if (computed) {
            ALOGD("lsq2 velocity: (%.1f, %.1f)", outVx, outVy);
        } else {
            ALOGD("lsq2 velocity: could not compute velocity");
        }
    }
    }
    return true;
    return true;
}
}