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 |