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

Unified Diff: webrtc/video/stats_counter_unittest.cc

Issue 2307913002: Update AvgCounter to have the ability to include last period metric for subsequent intervals withou… (Closed)
Patch Set: 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
« webrtc/video/stats_counter.cc ('K') | « webrtc/video/stats_counter.cc ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: webrtc/video/stats_counter_unittest.cc
diff --git a/webrtc/video/stats_counter_unittest.cc b/webrtc/video/stats_counter_unittest.cc
index 5dd8b72cd6ebc2859bdc5221ca0fbdd73df788fa..122d78718d27c1718f8c53f71d48aa73c8c5754b 100644
--- a/webrtc/video/stats_counter_unittest.cc
+++ b/webrtc/video/stats_counter_unittest.cc
@@ -58,14 +58,14 @@ class StatsCounterTest : public ::testing::Test {
};
TEST_F(StatsCounterTest, NoSamples) {
- AvgCounter counter(&clock_, nullptr);
+ AvgCounter counter(&clock_, nullptr, false);
VerifyStatsIsNotSet(counter.GetStats());
}
TEST_F(StatsCounterTest, TestRegisterObserver) {
StatsCounterObserverImpl* observer = new StatsCounterObserverImpl();
const int kSample = 22;
- AvgCounter counter(&clock_, observer);
+ AvgCounter counter(&clock_, observer, false);
AddSampleAndAdvance(kSample, kProcessIntervalMs, &counter);
// Trigger process (sample included in next interval).
counter.Add(111);
@@ -74,7 +74,7 @@ TEST_F(StatsCounterTest, TestRegisterObserver) {
TEST_F(StatsCounterTest, VerifyProcessInterval) {
StatsCounterObserverImpl* observer = new StatsCounterObserverImpl();
- AvgCounter counter(&clock_, observer);
+ AvgCounter counter(&clock_, observer, false);
counter.Add(4);
clock_.AdvanceTimeMilliseconds(kProcessIntervalMs - 1);
// Try trigger process (interval has not passed).
@@ -94,7 +94,7 @@ TEST_F(StatsCounterTest, VerifyProcessInterval) {
TEST_F(StatsCounterTest, TestMetric_AvgCounter) {
StatsCounterObserverImpl* observer = new StatsCounterObserverImpl();
- AvgCounter counter(&clock_, observer);
+ AvgCounter counter(&clock_, observer, false);
counter.Add(4);
counter.Add(8);
counter.Add(9);
@@ -206,7 +206,7 @@ TEST_F(StatsCounterTest, TestMetric_RateAccCounter) {
}
TEST_F(StatsCounterTest, TestGetStats_MultipleIntervals) {
- AvgCounter counter(&clock_, nullptr);
+ AvgCounter counter(&clock_, nullptr, false);
const int kSample1 = 1;
const int kSample2 = 5;
const int kSample3 = 8;
@@ -229,7 +229,7 @@ TEST_F(StatsCounterTest, TestGetStats_MultipleIntervals) {
TEST_F(StatsCounterTest, TestGetStatsTwice) {
const int kSample1 = 4;
const int kSample2 = 7;
- AvgCounter counter(&clock_, nullptr);
+ AvgCounter counter(&clock_, nullptr, false);
AddSampleAndAdvance(kSample1, kProcessIntervalMs, &counter);
// Trigger process (sample included in next interval).
counter.Add(kSample2);
@@ -270,26 +270,54 @@ TEST_F(StatsCounterTest, TestRateAccCounter_NegativeRateIgnored) {
EXPECT_EQ(200, stats.average);
}
-TEST_F(StatsCounterTest, TestAvgCounter_IntervalsWithoutSamplesIgnored) {
+TEST_F(StatsCounterTest, TestAvgCounter_IntervalsWithoutSamplesIncluded) {
StatsCounterObserverImpl* observer = new StatsCounterObserverImpl();
- AvgCounter counter(&clock_, observer);
+ AvgCounter counter(&clock_, observer, true);
AddSampleAndAdvance(6, kProcessIntervalMs * 4 - 1, &counter);
// Trigger process (sample included in next interval).
counter.Add(8);
- // [6:1], two intervals without samples passed.
- EXPECT_EQ(1, observer->num_calls_);
- EXPECT_EQ(6, observer->last_sample_);
- // Make last interval pass.
+ // [6:3], 3 intervals passed (2 without samples -> last value reported).
+ AggregatedStats stats = counter.ProcessAndGetStats();
+ EXPECT_EQ(3, stats.num_samples);
+ EXPECT_EQ(6, stats.min);
+ EXPECT_EQ(6, stats.max);
+ // Make next interval pass and verify stats: [6:3],[8:1]
clock_.AdvanceTimeMilliseconds(1);
- counter.Add(111); // Trigger process (sample included in next interval).
- // [6:1],[8:1]
- EXPECT_EQ(2, observer->num_calls_);
+ counter.ProcessAndGetStats();
+ EXPECT_EQ(4, observer->num_calls_);
EXPECT_EQ(8, observer->last_sample_);
- // Aggregated stats.
- AggregatedStats stats = counter.GetStats();
- EXPECT_EQ(2, stats.num_samples);
- EXPECT_EQ(6, stats.min);
- EXPECT_EQ(8, stats.max);
+}
+
+TEST_F(StatsCounterTest, TestAvgCounter_WithPause) {
+ StatsCounterObserverImpl* observer = new StatsCounterObserverImpl();
+ AvgCounter counter(&clock_, observer, true);
+ // Add sample and advance 3 intervals (2 w/o samples -> last value reported).
+ AddSampleAndAdvance(6, kProcessIntervalMs * 4 - 1, &counter);
+ // Trigger process and verify stats: [6:3]
+ counter.ProcessAndGetStats();
+ EXPECT_EQ(3, observer->num_calls_);
+ EXPECT_EQ(6, observer->last_sample_);
+ // Make next interval pass (1 without samples).
+ // Process and pause. Verify stats: [6:4].
+ clock_.AdvanceTimeMilliseconds(1);
+ counter.ProcessAndPause();
+ EXPECT_EQ(4, observer->num_calls_); // Last value reported.
+ EXPECT_EQ(6, observer->last_sample_);
+ // Make next interval pass (1 without samples -> ignored while paused).
+ clock_.AdvanceTimeMilliseconds(kProcessIntervalMs * 2 - 1);
+ counter.Add(22); // Stops pause.
+ EXPECT_EQ(4, observer->num_calls_);
+ EXPECT_EQ(6, observer->last_sample_);
+ // Make next interval pass, [6:4][22:1]
+ clock_.AdvanceTimeMilliseconds(1);
+ counter.ProcessAndGetStats();
+ EXPECT_EQ(5, observer->num_calls_);
+ EXPECT_EQ(22, observer->last_sample_);
+ // Make 1 interval pass (1 w/o samples -> pause stopped, last value reported).
+ clock_.AdvanceTimeMilliseconds(kProcessIntervalMs);
+ counter.ProcessAndGetStats();
+ EXPECT_EQ(6, observer->num_calls_);
+ EXPECT_EQ(22, observer->last_sample_);
}
TEST_F(StatsCounterTest, TestRateCounter_IntervalsWithoutSamplesIgnored) {
@@ -302,20 +330,14 @@ TEST_F(StatsCounterTest, TestRateCounter_IntervalsWithoutSamplesIgnored) {
clock_.AdvanceTimeMilliseconds(kProcessIntervalMs * 3 - 1);
// Trigger process (sample included in next interval).
counter.Add(kSample2);
- // [25:1], one interval without samples passed.
+ // [25:1], 2 intervals passed (1 without samples -> ignored).
EXPECT_EQ(1, observer->num_calls_);
EXPECT_EQ(25, observer->last_sample_);
- // Make last interval pass.
+ // Make next interval pass and verify stats: [10:1],[25:1]
clock_.AdvanceTimeMilliseconds(1);
- counter.Add(111); // Trigger process (sample included in next interval).
- // [10:1],[25:1]
+ counter.ProcessAndGetStats();
EXPECT_EQ(2, observer->num_calls_);
EXPECT_EQ(10, observer->last_sample_);
- // Aggregated stats.
- AggregatedStats stats = counter.GetStats();
- EXPECT_EQ(2, stats.num_samples);
- EXPECT_EQ(10, stats.min);
- EXPECT_EQ(25, stats.max);
}
TEST_F(StatsCounterTest, TestRateCounter_IntervalsWithoutSamplesIncluded) {
@@ -328,20 +350,72 @@ TEST_F(StatsCounterTest, TestRateCounter_IntervalsWithoutSamplesIncluded) {
clock_.AdvanceTimeMilliseconds(kProcessIntervalMs * 3 - 1);
// Trigger process (sample included in next interval).
counter.Add(kSample2);
- // [0:1],[25:1], one interval without samples passed.
+ // [0:1],[25:1], 2 intervals passed (1 without samples -> zero reported).
EXPECT_EQ(2, observer->num_calls_);
- EXPECT_EQ(25, observer->last_sample_);
- // Make last interval pass.
+ EXPECT_EQ(0, observer->last_sample_);
+ // Make last interval pass and verify stats: [0:1],[10:1],[25:1]
clock_.AdvanceTimeMilliseconds(1);
- counter.Add(111); // Trigger process (sample included in next interval).
- // [0:1],[10:1],[25:1]
+ AggregatedStats stats = counter.ProcessAndGetStats();
+ EXPECT_EQ(25, stats.max);
EXPECT_EQ(3, observer->num_calls_);
EXPECT_EQ(10, observer->last_sample_);
- // Aggregated stats.
- AggregatedStats stats = counter.GetStats();
- EXPECT_EQ(3, stats.num_samples);
- EXPECT_EQ(0, stats.min);
- EXPECT_EQ(25, stats.max);
+}
+
+TEST_F(StatsCounterTest, TestRateAccCounter_IntervalsWithoutSamplesIncluded) {
+ StatsCounterObserverImpl* observer = new StatsCounterObserverImpl();
+ RateAccCounter counter(&clock_, observer, true);
+ VerifyStatsIsNotSet(counter.ProcessAndGetStats());
+ // Advance one interval and verify stats.
+ clock_.AdvanceTimeMilliseconds(kProcessIntervalMs);
+ VerifyStatsIsNotSet(counter.ProcessAndGetStats());
+ // Add sample and advance 3 intervals (2 w/o samples -> zero reported).
+ counter.Set(12);
+ clock_.AdvanceTimeMilliseconds(kProcessIntervalMs * 4 - 1);
+ // Trigger process and verify stats: [0:2][6:1]
+ counter.ProcessAndGetStats();
+ EXPECT_EQ(3, observer->num_calls_);
+ EXPECT_EQ(0, observer->last_sample_);
+ // Make next interval pass (1 w/o samples -> zero reported), [0:3][6:1]
+ clock_.AdvanceTimeMilliseconds(1);
+ counter.ProcessAndGetStats();
+ EXPECT_EQ(4, observer->num_calls_);
+ EXPECT_EQ(0, observer->last_sample_);
+ // Insert sample and advance non-complete interval, no change, [0:3][6:1]
+ clock_.AdvanceTimeMilliseconds(kProcessIntervalMs - 1);
+ counter.Set(60);
+ EXPECT_EQ(4, observer->num_calls_);
+ // Make next interval pass, [0:3][6:1][24:1]
+ clock_.AdvanceTimeMilliseconds(1);
+ AggregatedStats stats = counter.ProcessAndGetStats();
+ EXPECT_EQ(5, observer->num_calls_);
+ EXPECT_EQ(24, observer->last_sample_);
+ EXPECT_EQ(6, stats.average);
+}
+
+TEST_F(StatsCounterTest, TestRateAccCounter_IntervalsWithoutSamplesIgnored) {
+ StatsCounterObserverImpl* observer = new StatsCounterObserverImpl();
+ RateAccCounter counter(&clock_, observer, false);
+ // Add sample and advance 3 intervals (2 w/o samples -> ignored).
+ counter.Set(12);
+ clock_.AdvanceTimeMilliseconds(kProcessIntervalMs * 4 - 1);
+ // Trigger process and verify stats: [6:1]
+ counter.ProcessAndGetStats();
+ EXPECT_EQ(1, observer->num_calls_);
+ EXPECT_EQ(6, observer->last_sample_);
+ // Make next interval pass (1 w/o samples -> ignored), [6:1]
+ clock_.AdvanceTimeMilliseconds(1);
+ counter.ProcessAndGetStats();
+ EXPECT_EQ(1, observer->num_calls_);
+ // Insert sample and advance non-complete interval, no change, [6:1]
+ clock_.AdvanceTimeMilliseconds(kProcessIntervalMs - 1);
+ counter.Set(60);
+ counter.ProcessAndGetStats();
+ EXPECT_EQ(1, observer->num_calls_);
+ // Make next interval pass, [6:1][24:1]
+ clock_.AdvanceTimeMilliseconds(1);
+ counter.ProcessAndGetStats();
+ EXPECT_EQ(2, observer->num_calls_);
+ EXPECT_EQ(24, observer->last_sample_);
}
} // namespace webrtc
« webrtc/video/stats_counter.cc ('K') | « webrtc/video/stats_counter.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698