Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(138)

Unified Diff: remoting/base/rate_counter.h

Issue 12803008: Add unit tests for sub-components of CaptureScheduler. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Pick nits. Created 7 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | remoting/base/rate_counter.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: remoting/base/rate_counter.h
diff --git a/remoting/base/rate_counter.h b/remoting/base/rate_counter.h
index c427b9603f8c6041dcd40ad8bc1efcd2f23f08b8..b5d3d7e37b181227092dd82e5656dbbdcd8eae03 100644
--- a/remoting/base/rate_counter.h
+++ b/remoting/base/rate_counter.h
@@ -2,12 +2,6 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-// RateCounter is defined to measure average rate over a given time window.
-// Rate is reported as the sum of values recorded divided by the time window.
-// This can be used for measuring bandwidth, bitrate, etc.
-
-// This class is thread-safe.
-
#ifndef REMOTING_BASE_RATE_COUNTER_H_
#define REMOTING_BASE_RATE_COUNTER_H_
@@ -15,44 +9,52 @@
#include <utility>
#include "base/basictypes.h"
-#include "base/synchronization/lock.h"
+#include "base/threading/non_thread_safe.h"
#include "base/time.h"
namespace remoting {
-class RateCounter {
+// Measures average rate per second of a sequence of point rate samples
+// over a specified time window. This can be used to measure bandwidth, frame
+// rates, etc.
+class RateCounter : public base::NonThreadSafe {
public:
- // Construct a counter for a specific time window.
- RateCounter(base::TimeDelta time_window);
-
+ // Constructs a rate counter over the specified |time_window|.
+ explicit RateCounter(base::TimeDelta time_window);
virtual ~RateCounter();
- // Record the data point.
+ // Records a point event count to include in the rate.
void Record(int64 value);
- // Report the rate recorded. At the beginning of recording the numbers before
- // |time_window| is reached the reported rate will not be accurate.
+ // Returns the rate-per-second of values recorded over the time window.
+ // Note that rates reported before |time_window| has elapsed are not accurate.
double Rate();
- private:
- // Helper function to evict old data points.
- void Evict(base::Time current_time);
+ // Overrides the current time for testing.
+ void SetCurrentTimeForTest(base::Time current_time);
- // A data point consists of a timestamp and a data value.
+ private:
+ // Type used to store data points with timestamps.
typedef std::pair<base::Time, int64> DataPoint;
- // Duration of the time window.
- base::TimeDelta time_window_;
+ // Removes data points more than |time_window| older than |current_time|.
+ void EvictOldDataPoints(base::Time current_time);
+
+ // Returns the current time specified for test, if set, or base::Time::Now().
+ base::Time CurrentTime() const;
- // Protects |data_points_| and |sum_|.
- base::Lock lock_;
+ // Time window over which to calculate the rate.
+ const base::TimeDelta time_window_;
- // Keep the values of all the data points in a queue.
+ // Queue containing data points in the order in which they were recorded.
std::queue<DataPoint> data_points_;
// Sum of values in |data_points_|.
int64 sum_;
+ // If set, used to calculate the running average, in place of Now().
+ base::Time current_time_for_test_;
+
DISALLOW_COPY_AND_ASSIGN(RateCounter);
};
« no previous file with comments | « no previous file | remoting/base/rate_counter.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698