| 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
|
|
|