OLD | NEW |
1 /* | 1 /* |
2 * Copyright 2004 The WebRTC Project Authors. All rights reserved. | 2 * Copyright 2015 The WebRTC Project Authors. All rights reserved. |
3 * | 3 * |
4 * Use of this source code is governed by a BSD-style license | 4 * Use of this source code is governed by a BSD-style license |
5 * that can be found in the LICENSE file in the root of the source | 5 * that can be found in the LICENSE file in the root of the source |
6 * tree. An additional intellectual property rights grant can be found | 6 * tree. An additional intellectual property rights grant can be found |
7 * in the file PATENTS. All contributing project authors may | 7 * in the file PATENTS. All contributing project authors may |
8 * be found in the AUTHORS file in the root of the source tree. | 8 * be found in the AUTHORS file in the root of the source tree. |
9 */ | 9 */ |
10 | 10 |
11 #ifndef WEBRTC_BASE_RATETRACKER_H_ | 11 #ifndef WEBRTC_BASE_RATETRACKER_H_ |
12 #define WEBRTC_BASE_RATETRACKER_H_ | 12 #define WEBRTC_BASE_RATETRACKER_H_ |
13 | 13 |
14 #include <stdlib.h> | 14 #include <stdlib.h> |
15 #include "webrtc/base/basictypes.h" | 15 #include "webrtc/base/basictypes.h" |
16 | 16 |
17 namespace rtc { | 17 namespace rtc { |
18 | 18 |
19 // Computes instantaneous units per second. | 19 // Computes units per second over a given interval by tracking the units over |
| 20 // each bucket of a given size and calculating the instantaneous rate assuming |
| 21 // that over each bucket the rate was constant. |
20 class RateTracker { | 22 class RateTracker { |
21 public: | 23 public: |
22 RateTracker(); | 24 RateTracker(uint32 bucket_milliseconds, size_t bucket_count); |
23 virtual ~RateTracker() {} | 25 virtual ~RateTracker(); |
24 | 26 |
25 size_t total_units() const; | 27 // Computes the average rate over the most recent interval_milliseconds, |
26 size_t units_second(); | 28 // or if the first sample was added within this period, computes the rate |
27 void Update(size_t units); | 29 // since the first sample was added. |
| 30 double ComputeRateForInterval(uint32 interval_milliseconds) const; |
| 31 |
| 32 // Computes the average rate over the rate tracker's recording interval |
| 33 // of bucket_milliseconds * bucket_count. |
| 34 double ComputeRate() const { |
| 35 return ComputeRateForInterval( |
| 36 bucket_milliseconds_ * static_cast<uint32>(bucket_count_)); |
| 37 } |
| 38 |
| 39 // Computes the average rate since the first sample was added to the |
| 40 // rate tracker. |
| 41 double ComputeTotalRate() const; |
| 42 |
| 43 // The total number of samples added. |
| 44 size_t TotalSampleCount() const; |
| 45 |
| 46 // Reads the current time in order to determine the appropriate bucket for |
| 47 // these samples, and increments the count for that bucket by sample_count. |
| 48 void AddSamples(size_t sample_count); |
28 | 49 |
29 protected: | 50 protected: |
30 // overrideable for tests | 51 // overrideable for tests |
31 virtual uint32 Time() const; | 52 virtual uint32 Time() const; |
32 | 53 |
33 private: | 54 private: |
34 size_t total_units_; | 55 void EnsureInitialized(); |
35 size_t units_second_; | 56 size_t NextBucketIndex(size_t bucket_index) const; |
36 uint32 last_units_second_time_; | 57 |
37 size_t last_units_second_calc_; | 58 const uint32 bucket_milliseconds_; |
| 59 const size_t bucket_count_; |
| 60 size_t* sample_buckets_; |
| 61 size_t total_sample_count_; |
| 62 size_t current_bucket_; |
| 63 uint32 bucket_start_time_milliseconds_; |
| 64 uint32 initialization_time_milliseconds_; |
38 }; | 65 }; |
39 | 66 |
40 } // namespace rtc | 67 } // namespace rtc |
41 | 68 |
42 #endif // WEBRTC_BASE_RATETRACKER_H_ | 69 #endif // WEBRTC_BASE_RATETRACKER_H_ |
OLD | NEW |