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