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

Unified Diff: webrtc/video/stats_counter.h

Issue 2307913002: Update AvgCounter to have the ability to include last period metric for subsequent intervals withou… (Closed)
Patch Set: address comments Created 4 years, 3 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
Index: webrtc/video/stats_counter.h
diff --git a/webrtc/video/stats_counter.h b/webrtc/video/stats_counter.h
index ba1bd457eb4263c042be873281bc042ffb80db1e..603bbdaca0efdff54e38d79331d63c9c887e189d 100644
--- a/webrtc/video/stats_counter.h
+++ b/webrtc/video/stats_counter.h
@@ -78,10 +78,22 @@ class StatsCounter {
public:
virtual ~StatsCounter();
+ // Gets metric within an interval. Returns true on success false otherwise.
virtual bool GetMetric(int* metric) const = 0;
+ // Gets the value to use for an interval without samples.
+ virtual int GetValueForEmptyInterval() const = 0;
+
+ // Gets aggregated stats (i.e. aggregate of periodically computed metrics).
AggregatedStats GetStats();
+ // Reports metrics for elapsed intervals to AggregatedCounter and GetStats.
+ AggregatedStats ProcessAndGetStats();
+
+ // Reports metrics for elapsed intervals to AggregatedCounter and pauses stats
+ // (i.e. empty intervals will be discarded until next sample is added).
+ void ProcessAndPause();
+
// Checks if a sample has been added (i.e. Add or Set called).
bool HasSample() const;
@@ -98,15 +110,19 @@ class StatsCounter {
int64_t num_samples_;
int64_t last_sum_;
+ const std::unique_ptr<AggregatedCounter> aggregated_counter_;
+
private:
- bool TimeToProcess();
+ bool TimeToProcess(int* num_elapsed_intervals);
void TryProcess();
+ void ReportMetricToAggregatedCounter(int value, int num_values_to_add) const;
+ bool IncludeEmptyIntervals() const;
Clock* const clock_;
const bool include_empty_intervals_;
const std::unique_ptr<StatsCounterObserver> observer_;
- const std::unique_ptr<AggregatedCounter> aggregated_counter_;
int64_t last_process_time_ms_;
+ bool paused_;
};
// AvgCounter: average of samples
@@ -115,9 +131,15 @@ class StatsCounter {
// | Add(5) Add(1) Add(6) | Add(5) Add(5) |
// GetMetric | (5 + 1 + 6) / 3 | (5 + 5) / 2 |
//
+// |include_empty_intervals|: If set, intervals without samples will be included
+// in the stats. The value for an interval is
+// determined by GetValueForEmptyInterval().
+//
class AvgCounter : public StatsCounter {
public:
- AvgCounter(Clock* clock, StatsCounterObserver* observer);
+ AvgCounter(Clock* clock,
+ StatsCounterObserver* observer,
+ bool include_empty_intervals);
~AvgCounter() override {}
void Add(int sample);
@@ -125,6 +147,9 @@ class AvgCounter : public StatsCounter {
private:
bool GetMetric(int* metric) const override;
+ // Returns the last computed metric (i.e. from GetMetric).
+ int GetValueForEmptyInterval() const override;
+
RTC_DISALLOW_COPY_AND_ASSIGN(AvgCounter);
};
@@ -143,6 +168,7 @@ class MaxCounter : public StatsCounter {
private:
bool GetMetric(int* metric) const override;
+ int GetValueForEmptyInterval() const override;
RTC_DISALLOW_COPY_AND_ASSIGN(MaxCounter);
};
@@ -162,6 +188,7 @@ class PercentCounter : public StatsCounter {
private:
bool GetMetric(int* metric) const override;
+ int GetValueForEmptyInterval() const override;
RTC_DISALLOW_COPY_AND_ASSIGN(PercentCounter);
};
@@ -181,6 +208,7 @@ class PermilleCounter : public StatsCounter {
private:
bool GetMetric(int* metric) const override;
+ int GetValueForEmptyInterval() const override;
RTC_DISALLOW_COPY_AND_ASSIGN(PermilleCounter);
};
@@ -192,6 +220,10 @@ class PermilleCounter : public StatsCounter {
// |<------ 2 sec ------->| |
// GetMetric | (5 + 1 + 6) / 2 | (5 + 5) / 2 |
//
+// |include_empty_intervals|: If set, intervals without samples will be included
+// in the stats. The value for an interval is
+// determined by GetValueForEmptyInterval().
+//
class RateCounter : public StatsCounter {
public:
RateCounter(Clock* clock,
@@ -203,6 +235,7 @@ class RateCounter : public StatsCounter {
private:
bool GetMetric(int* metric) const override;
+ int GetValueForEmptyInterval() const override; // Returns zero.
RTC_DISALLOW_COPY_AND_ASSIGN(RateCounter);
};
@@ -214,6 +247,10 @@ class RateCounter : public StatsCounter {
// |<------ 2 sec ------->| |
// GetMetric | 8 / 2 | (13 - 8) / 2 |
//
+// |include_empty_intervals|: If set, intervals without samples will be included
+// in the stats. The value for an interval is
+// determined by GetValueForEmptyInterval().
+//
class RateAccCounter : public StatsCounter {
public:
RateAccCounter(Clock* clock,
@@ -225,6 +262,7 @@ class RateAccCounter : public StatsCounter {
private:
bool GetMetric(int* metric) const override;
+ int GetValueForEmptyInterval() const override; // Returns zero.
RTC_DISALLOW_COPY_AND_ASSIGN(RateAccCounter);
};

Powered by Google App Engine
This is Rietveld 408576698