Chromium Code Reviews

Unified Diff: webrtc/video/stats_counter_unittest.cc

Issue 2536613002: Use RateAccCounter for sent bitrate stats. Reports average of periodically computed stats over a ca… (Closed)
Patch Set: rebase Created 3 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments.
Jump to:
View side-by-side diff with in-line comments
« no previous file with comments | « 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 7484c18a8953106c487087083a14b629330bba31..183f2609a82e58e34654cccb0b7e2aeaf74af39f 100644
--- a/webrtc/video/stats_counter_unittest.cc
+++ b/webrtc/video/stats_counter_unittest.cc
@@ -213,6 +213,20 @@ TEST_F(StatsCounterTest, TestMetric_RateAccCounter) {
EXPECT_EQ(94, stats.max);
}
+TEST_F(StatsCounterTest, TestMetric_RateAccCounterWithSetLast) {
+ StatsCounterObserverImpl* observer = new StatsCounterObserverImpl();
+ RateAccCounter counter(&clock_, observer, true);
+ counter.SetLast(98, kStreamId);
+ counter.Set(175, kStreamId);
+ counter.Set(188, kStreamId);
+ clock_.AdvanceTimeMilliseconds(kDefaultProcessIntervalMs);
+ // Trigger process (sample included in next interval).
+ counter.Set(192, kStreamId);
+ // Rate per interval: (188 - 98) / 2 sec = 45 samples/sec
+ EXPECT_EQ(1, observer->num_calls_);
+ EXPECT_EQ(45, observer->last_sample_);
+}
+
TEST_F(StatsCounterTest, TestMetric_RateAccCounterWithMultipleStreamIds) {
StatsCounterObserverImpl* observer = new StatsCounterObserverImpl();
RateAccCounter counter(&clock_, observer, true);
@@ -363,6 +377,123 @@ TEST_F(StatsCounterTest, TestAvgCounter_WithPause) {
EXPECT_EQ(22, observer->last_sample_);
}
+TEST_F(StatsCounterTest, TestRateAccCounter_AddSampleStopsPause) {
+ // Samples: | 12 | 24 | // -: paused
+ // Stats: | 6 | 6 |
+ StatsCounterObserverImpl* observer = new StatsCounterObserverImpl();
+ RateAccCounter counter(&clock_, observer, true);
+ // Add sample and advance 1 intervals.
+ counter.Set(12, kStreamId);
+ clock_.AdvanceTimeMilliseconds(kDefaultProcessIntervalMs);
+ // Trigger process and verify stats: [6:1]
+ counter.ProcessAndPause();
+ EXPECT_EQ(1, observer->num_calls_);
+ EXPECT_EQ(6, observer->last_sample_);
+ // Add sample and advance 1 intervals.
+ counter.Set(24, kStreamId); // Pause stopped.
+ clock_.AdvanceTimeMilliseconds(kDefaultProcessIntervalMs);
+ counter.ProcessAndGetStats();
+ EXPECT_EQ(2, observer->num_calls_);
+ EXPECT_EQ(6, observer->last_sample_);
+}
+
+TEST_F(StatsCounterTest, TestRateAccCounter_AddSameSampleDoesNotStopPause) {
+ // Samples: | 12 | 12 | 24 | // -: paused
+ // Stats: | 6 | - | 6 |
+ StatsCounterObserverImpl* observer = new StatsCounterObserverImpl();
+ RateAccCounter counter(&clock_, observer, true);
+ // Add sample and advance 1 intervals.
+ counter.Set(12, kStreamId);
+ clock_.AdvanceTimeMilliseconds(kDefaultProcessIntervalMs);
+ // Trigger process and verify stats: [6:1]
+ counter.ProcessAndPause();
+ EXPECT_EQ(1, observer->num_calls_);
+ EXPECT_EQ(6, observer->last_sample_);
+ // Add same sample and advance 1 intervals.
+ counter.Set(12, kStreamId); // Pause not stopped.
+ clock_.AdvanceTimeMilliseconds(kDefaultProcessIntervalMs);
+ counter.ProcessAndGetStats();
+ EXPECT_EQ(1, observer->num_calls_);
+ EXPECT_EQ(6, observer->last_sample_);
+ // Add new sample and advance 1 intervals.
+ counter.Set(24, kStreamId); // Pause stopped.
+ clock_.AdvanceTimeMilliseconds(kDefaultProcessIntervalMs);
+ counter.ProcessAndGetStats();
+ EXPECT_EQ(2, observer->num_calls_);
+ EXPECT_EQ(6, observer->last_sample_);
+}
+
+TEST_F(StatsCounterTest, TestRateAccCounter_PauseAndStopPause) {
+ // Samples: | 12 | 12 | 12 | // -: paused
+ // Stats: | 6 | - | 0 |
+ StatsCounterObserverImpl* observer = new StatsCounterObserverImpl();
+ RateAccCounter counter(&clock_, observer, true);
+ // Add sample and advance 1 intervals.
+ counter.Set(12, kStreamId);
+ clock_.AdvanceTimeMilliseconds(kDefaultProcessIntervalMs);
+ // Trigger process and verify stats: [6:1]
+ counter.ProcessAndPause();
+ EXPECT_EQ(1, observer->num_calls_);
+ EXPECT_EQ(6, observer->last_sample_);
+ // Add same sample and advance 1 intervals.
+ counter.Set(12, kStreamId); // Pause not stopped.
+ clock_.AdvanceTimeMilliseconds(kDefaultProcessIntervalMs);
+ counter.ProcessAndGetStats();
+ EXPECT_EQ(1, observer->num_calls_);
+ EXPECT_EQ(6, observer->last_sample_);
+ // Stop pause, add sample and advance 1 intervals.
+ counter.ProcessAndStopPause();
+ counter.Set(12, kStreamId);
+ clock_.AdvanceTimeMilliseconds(kDefaultProcessIntervalMs);
+ counter.ProcessAndGetStats();
+ EXPECT_EQ(2, observer->num_calls_);
+ EXPECT_EQ(0, observer->last_sample_);
+}
+
+TEST_F(StatsCounterTest, TestAvgCounter_WithoutMinPauseTimePassed) {
+ // Samples: | 6 | 2 | - | // x: empty interval, -: paused
+ // Stats: | 6 | 2 | - | // x -> last value reported
+ StatsCounterObserverImpl* observer = new StatsCounterObserverImpl();
+ AvgCounter counter(&clock_, observer, true);
+ // Add sample and advance 1 intervals.
+ AddSampleAndAdvance(6, kDefaultProcessIntervalMs, &counter);
+ // Process and pause. Verify stats: [6:1].
+ const int64_t kMinMs = 500;
+ counter.ProcessAndPauseForDuration(kMinMs);
+ EXPECT_EQ(1, observer->num_calls_); // Last value reported.
+ EXPECT_EQ(6, observer->last_sample_);
+ // Min pause time has not pass.
+ clock_.AdvanceTimeMilliseconds(kMinMs - 1);
+ counter.Add(2); // Pause not stopped.
+ // Make two intervals pass (1 without samples -> ignored while paused).
+ clock_.AdvanceTimeMilliseconds(kDefaultProcessIntervalMs * 2 - (kMinMs - 1));
+ counter.ProcessAndGetStats();
+ EXPECT_EQ(2, observer->num_calls_);
+ EXPECT_EQ(2, observer->last_sample_);
+}
+
+TEST_F(StatsCounterTest, TestAvgCounter_WithMinPauseTimePassed) {
+ // Samples: | 6 | 2 | x | // x: empty interval, -: paused
+ // Stats: | 6 | 2 | 2 | // x -> last value reported
+ StatsCounterObserverImpl* observer = new StatsCounterObserverImpl();
+ AvgCounter counter(&clock_, observer, true);
+ // Add sample and advance 1 intervals.
+ AddSampleAndAdvance(6, kDefaultProcessIntervalMs, &counter);
+ // Process and pause. Verify stats: [6:1].
+ const int64_t kMinMs = 500;
+ counter.ProcessAndPauseForDuration(kMinMs);
+ EXPECT_EQ(1, observer->num_calls_); // Last value reported.
+ EXPECT_EQ(6, observer->last_sample_);
+ // Make min pause time pass.
+ clock_.AdvanceTimeMilliseconds(kMinMs);
+ counter.Add(2); // Stop pause.
+ // Make two intervals pass (1 without samples -> last value reported).
+ clock_.AdvanceTimeMilliseconds(kDefaultProcessIntervalMs * 2 - kMinMs);
+ counter.ProcessAndGetStats();
+ EXPECT_EQ(3, observer->num_calls_);
+ EXPECT_EQ(2, observer->last_sample_);
+}
+
TEST_F(StatsCounterTest, TestRateCounter_IntervalsWithoutSamplesIgnored) {
// Samples: | 50 | x | 20 | // x: empty interval
// Stats: | 25 | x | 10 | // x -> ignored
« no previous file with comments | « webrtc/video/stats_counter.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine