OLD | NEW |
---|---|
(Empty) | |
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | |
2 // Use of this source code is governed by a BSD-style license that can be | |
3 // found in the LICENSE file. | |
4 | |
5 #include "base/logging.h" | |
6 #include "remoting/base/running_average.h" | |
7 | |
8 namespace remoting { | |
9 | |
10 RunningAverage::RunningAverage(int window_size) | |
11 : window_size_(window_size), | |
12 sum_(0) { | |
13 CHECK(window_size_); | |
14 } | |
15 | |
16 RunningAverage::~RunningAverage() { | |
17 } | |
18 | |
19 void RunningAverage::Record(int64 value) { | |
20 base::AutoLock auto_lock(lock_); | |
21 | |
22 data_points_.push_back(value); | |
23 sum_ += value; | |
24 | |
25 if (data_points_.size() > window_size_) { | |
26 sum_ -= data_points_[0]; | |
27 data_points_.pop_front(); | |
28 } | |
29 } | |
30 | |
31 int64 RunningAverage::Average() { | |
32 base::AutoLock auto_lock(lock_); | |
33 | |
34 if (data_points_.empty()) | |
35 return 0; | |
36 return sum_ / data_points_.size(); | |
37 } | |
38 | |
39 TimedRunningAverage::TimedRunningAverage(int window_size) | |
40 : counter_(window_size), | |
41 window_size_(window_size) { | |
42 } | |
43 | |
44 TimedRunningAverage::~TimedRunningAverage() { | |
45 } | |
46 | |
47 void TimedRunningAverage::Record(int64 value) { | |
48 { | |
49 base::AutoLock auto_lock(lock_); | |
50 time_.push_back(base::Time::Now()); | |
51 | |
52 if (time_.size() > window_size_) | |
53 time_.pop_front(); | |
54 } | |
55 counter_.Record(value); | |
56 } | |
57 | |
58 double TimedRunningAverage::Rate() { | |
59 int64 average = counter_.Average(); | |
60 base::TimeDelta delta; | |
61 | |
62 { | |
63 base::AutoLock auto_lock(lock_); | |
64 if (!time_.empty()) | |
65 delta = *time_.rbegin() - *time_.begin(); | |
66 } | |
67 | |
68 if (delta.InMilliseconds()) | |
69 return 1000.0 * average / delta.InMilliseconds(); | |
simonmorris
2011/03/25 09:24:59
I'm not sure the math is right here. For a rate, d
Wez
2011/03/25 10:43:19
Yes. The rate (bandwidth in our case) would norma
| |
70 return 0; | |
71 } | |
72 | |
73 } // namespace remoting | |
OLD | NEW |