blob: 9d048c3870247fde89cc0fa091b19d952690fccb [file] [log] [blame]
// Copyright (c) 2012 The Chromium OS Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef POWER_MANAGER_ROLLING_AVERAGE_H_
#define POWER_MANAGER_ROLLING_AVERAGE_H_
#pragma once
#include <base/basictypes.h>
#include <gtest/gtest_prod.h> // for FRIEND_TEST
#include <queue>
namespace power_manager {
class RollingAverage {
public:
RollingAverage();
virtual ~RollingAverage();
virtual void Init(unsigned int window_size);
virtual void ChangeWindowSize(unsigned int window_size);
virtual int64 AddSample(int64 sample);
virtual int64 GetAverage();
virtual void Clear();
protected:
void DeleteSample();
bool IsFull();
private:
friend class RollingAverageTest;
FRIEND_TEST(RollingAverageTest, InitSuccess);
FRIEND_TEST(RollingAverageTest, InitSamplePresent);
FRIEND_TEST(RollingAverageTest, InitTotalNonZero);
FRIEND_TEST(RollingAverageTest, InitCurrentWindowSizeSet);
FRIEND_TEST(RollingAverageTest, ChangeWindowSizeSame);
FRIEND_TEST(RollingAverageTest, ChangeWindowSizeGreater);
FRIEND_TEST(RollingAverageTest, ChangeWindowSizeLesser);
FRIEND_TEST(RollingAverageTest, ChangeWindowSizeUnderflow);
FRIEND_TEST(RollingAverageTest, AddSampleFull);
FRIEND_TEST(RollingAverageTest, AddSampleEmpty);
FRIEND_TEST(RollingAverageTest, AddSampleNegativeValue);
FRIEND_TEST(RollingAverageTest, GetAverageFull);
FRIEND_TEST(RollingAverageTest, GetAverageEmpty);
FRIEND_TEST(RollingAverageTest, ClearSuccess);
FRIEND_TEST(RollingAverageTest, DeleteSampleSuccess);
FRIEND_TEST(RollingAverageTest, DeleteSampleEmpty);
FRIEND_TEST(RollingAverageTest, IsFullFalse);
FRIEND_TEST(RollingAverageTest, IsFullTrue);
FRIEND_TEST(RollingAverageTest, IsFullUninitialized);
FRIEND_TEST(RollingAverageTest, IsFullOverflow);
std::queue<int64> sample_window_;
int64 running_total_;
unsigned int current_window_size_;
DISALLOW_COPY_AND_ASSIGN(RollingAverage);
}; // class RollingAverage
} // namespace power_manager
#endif // POWER_MANAGER_ROLLING_AVERAGE_H_