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

Commit 060a7276 authored by Siarhei Vishniakou's avatar Siarhei Vishniakou
Browse files

Remove LatencyStatistics from dispatcher

Currently, InputDispatcher is sending touch event information to
westworld. We will now be transitioning to new atoms that have better
coverage and statistical significance.

In this intermediate CL, we remove the LatencyStatistics so that we can
replace it with something better in the upcoming CLs.

Bug: 167947340
Test: m libinput_tests inputflinger_tests
Change-Id: I8fcb846321245011c3b6e6f896b99b8d9037a2a4
parent d863dc95
Loading
Loading
Loading
Loading

include/input/LatencyStatistics.h

deleted100644 → 0
+0 −59
Original line number Diff line number Diff line
/*
 * Copyright (C) 2019 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

#ifndef _UI_INPUT_STATISTICS_H
#define _UI_INPUT_STATISTICS_H

#include <android-base/chrono_utils.h>

#include <stddef.h>

namespace android {

class LatencyStatistics {
private:
    /* Minimum sample recorded */
    float mMin;
    /* Maximum sample recorded */
    float mMax;
    /* Sum of all samples recorded */
    float mSum;
    /* Sum of all the squares of samples recorded */
    float mSum2;
    /* Count of all samples recorded */
    size_t mCount;
    /* The last time statistics were reported */
    std::chrono::steady_clock::time_point mLastReportTime;
    /* Statistics Report Frequency */
    const std::chrono::seconds mReportPeriod;

public:
    LatencyStatistics(std::chrono::seconds period);

    void addValue(float);
    void reset();
    bool shouldReport();

    float getMean();
    float getMin();
    float getMax();
    float getStDev();
    size_t getCount();
};

} // namespace android

#endif // _UI_INPUT_STATISTICS_H
+0 −1
Original line number Diff line number Diff line
@@ -49,7 +49,6 @@ cc_library {
        "Keyboard.cpp",
        "KeyCharacterMap.cpp",
        "KeyLayoutMap.cpp",
        "LatencyStatistics.cpp",
        "PropertyMap.cpp",
        "TouchVideoFrame.cpp",
        "VelocityControl.cpp",

libs/input/LatencyStatistics.cpp

deleted100644 → 0
+0 −90
Original line number Diff line number Diff line
/*
 * Copyright (C) 2019 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

#include <input/LatencyStatistics.h>

#include <android-base/chrono_utils.h>

#include <cmath>
#include <limits>

namespace android {

LatencyStatistics::LatencyStatistics(std::chrono::seconds period) : mReportPeriod(period) {
    reset();
}

/**
 * Add a raw value to the statistics
 */
void LatencyStatistics::addValue(float value) {
    if (value < mMin) {
        mMin = value;
    }
    if (value > mMax) {
        mMax = value;
    }
    mSum += value;
    mSum2 += value * value;
    mCount++;
}

/**
 * Get the mean. Should not be called if no samples have been added.
 */
float LatencyStatistics::getMean() {
    return mSum / mCount;
}

/**
 * Get the standard deviation. Should not be called if no samples have been added.
 */
float LatencyStatistics::getStDev() {
    float mean = getMean();
    return sqrt(mSum2 / mCount - mean * mean);
}

float LatencyStatistics::getMin() {
    return mMin;
}

float LatencyStatistics::getMax() {
    return mMax;
}

size_t LatencyStatistics::getCount() {
    return mCount;
}

/**
 * Reset internal state. The variable 'when' is the time when the data collection started.
 * Call this to start a new data collection window.
 */
void LatencyStatistics::reset() {
    mMax = std::numeric_limits<float>::lowest();
    mMin = std::numeric_limits<float>::max();
    mSum = 0;
    mSum2 = 0;
    mCount = 0;
    mLastReportTime = std::chrono::steady_clock::now();
}

bool LatencyStatistics::shouldReport() {
    std::chrono::duration timeSinceReport = std::chrono::steady_clock::now() - mLastReportTime;
    return mCount != 0 && timeSinceReport >= mReportPeriod;
}

} // namespace android
+0 −1
Original line number Diff line number Diff line
@@ -19,7 +19,6 @@ cc_test {
        "InputEvent_test.cpp",
        "InputPublisherAndConsumer_test.cpp",
        "InputWindow_test.cpp",
        "LatencyStatistics_test.cpp",
        "TouchVideoFrame_test.cpp",
        "VelocityTracker_test.cpp",
        "VerifiedInputEvent_test.cpp",
+0 −75
Original line number Diff line number Diff line
/*
 * Copyright (C) 2019 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

#include <gtest/gtest.h>
#include <input/LatencyStatistics.h>
#include <cmath>
#include <limits>
#include <thread>

namespace android {
namespace test {

TEST(LatencyStatisticsTest, ResetStats) {
    LatencyStatistics stats{5min};
    stats.addValue(5.0);
    stats.addValue(19.3);
    stats.addValue(20);
    stats.reset();

    ASSERT_EQ(stats.getCount(), 0u);
    ASSERT_EQ(std::isnan(stats.getStDev()), true);
    ASSERT_EQ(std::isnan(stats.getMean()), true);
}

TEST(LatencyStatisticsTest, AddStatsValue) {
    LatencyStatistics stats{5min};
    stats.addValue(5.0);

    ASSERT_EQ(stats.getMin(), 5.0);
    ASSERT_EQ(stats.getMax(), 5.0);
    ASSERT_EQ(stats.getCount(), 1u);
    ASSERT_EQ(stats.getMean(), 5.0);
    ASSERT_EQ(stats.getStDev(), 0.0);
}

TEST(LatencyStatisticsTest, AddMultipleStatsValue) {
    LatencyStatistics stats{5min};
    stats.addValue(4.0);
    stats.addValue(6.0);
    stats.addValue(8.0);
    stats.addValue(10.0);

    float stdev = stats.getStDev();

    ASSERT_EQ(stats.getMin(), 4.0);
    ASSERT_EQ(stats.getMax(), 10.0);
    ASSERT_EQ(stats.getCount(), 4u);
    ASSERT_EQ(stats.getMean(), 7.0);
    ASSERT_EQ(stdev * stdev, 5.0);
}

TEST(LatencyStatisticsTest, ShouldReportStats) {
    LatencyStatistics stats{0min};
    stats.addValue(5.0);

    std::this_thread::sleep_for(1us);

    ASSERT_EQ(stats.shouldReport(), true);
}

} // namespace test
} // namespace android
 No newline at end of file
Loading