Chromium Code Reviews| Index: media/base/moving_average.cc |
| diff --git a/media/base/moving_average.cc b/media/base/moving_average.cc |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..0baa0e1ed6489f4b013fcb3239941ce582b55ff5 |
| --- /dev/null |
| +++ b/media/base/moving_average.cc |
| @@ -0,0 +1,41 @@ |
| +// Copyright 2015 The Chromium Authors. All rights reserved. |
| +// Use of this source code is governed by a BSD-style license that can be |
| +// found in the LICENSE file. |
| + |
| +#include "media/base/moving_average.h" |
| + |
| +#include <algorithm> |
| + |
| +namespace media { |
| + |
| +MovingAverage::MovingAverage(size_t depth) |
| + : depth_(depth), count_(0), samples_(depth_, base::TimeDelta()) { |
|
xhwang
2015/04/28 22:17:39
nit: base::TimeDelta() is not needed as it's the d
DaleCurtis
2015/04/29 00:11:12
Done.
|
| +} |
| + |
| +MovingAverage::~MovingAverage() { |
| +} |
| + |
| +void MovingAverage::AddSample(base::TimeDelta sample) { |
| + // |samples_| is zero-initialized, so |oldest| is also zero before |count_| |
| + // exceeds |depth_|. |
| + base::TimeDelta& oldest = samples_[count_++ % depth_]; |
| + total_ += sample - oldest; |
| + oldest = sample; |
| +} |
| + |
| +base::TimeDelta MovingAverage::Average() const { |
| + DCHECK_GT(count_, 0u); |
| + |
| + // TODO(dalecurtis): Consider limiting |depth| to powers of two so that we can |
| + // replace the integer divide with a bit shift operation. |
| + |
| + return total_ / std::min(depth_, count_); |
| +} |
| + |
| +void MovingAverage::Reset() { |
| + count_ = 0; |
| + total_ = base::TimeDelta(); |
| + std::fill(samples_.begin(), samples_.end(), base::TimeDelta()); |
| +} |
| + |
| +} // namespace media |