/*
 * 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
