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 constbool kIncludeEmptyIntervals = false;
StatsCounterObserverImpl* observer = new StatsCounterObserverImpl(); constint kSample1 = 50; // 50 / 2 sec constint kSample2 = 20; // 20 / 2 sec
RateCounter counter(&clock_, observer, kIncludeEmptyIntervals);
counter.Add(kSample1);
clock_.AdvanceTimeMilliseconds(kDefaultProcessIntervalMs * 3 - 1); // Trigger process (sample included in next interval).
counter.Add(kSample2); // [25:1], 2 intervals passed (1 without samples -> ignored).
EXPECT_EQ(1, observer->num_calls_);
EXPECT_EQ(25, observer->last_sample_); // Make next interval pass and verify stats: [10:1],[25:1]
clock_.AdvanceTimeMilliseconds(1);
counter.ProcessAndGetStats();
EXPECT_EQ(2, observer->num_calls_);
EXPECT_EQ(10, observer->last_sample_);
}
TEST_F(StatsCounterTest, TestRateCounter_IntervalsWithoutSamplesIncluded) { // Samples: | 50 | x | 20 | // x: empty interval // Stats: | 25 | 0 | 10 | // x -> zero reported constbool kIncludeEmptyIntervals = true;
StatsCounterObserverImpl* observer = new StatsCounterObserverImpl(); constint kSample1 = 50; // 50 / 2 sec constint kSample2 = 20; // 20 / 2 sec
RateCounter counter(&clock_, observer, kIncludeEmptyIntervals);
counter.Add(kSample1);
clock_.AdvanceTimeMilliseconds(kDefaultProcessIntervalMs * 3 - 1); // Trigger process (sample included in next interval).
counter.Add(kSample2); // [0:1],[25:1], 2 intervals passed (1 without samples -> zero reported).
EXPECT_EQ(2, observer->num_calls_);
EXPECT_EQ(0, observer->last_sample_); // Make last interval pass and verify stats: [0:1],[10:1],[25:1]
clock_.AdvanceTimeMilliseconds(1);
AggregatedStats stats = counter.ProcessAndGetStats();
EXPECT_EQ(25, stats.max);
EXPECT_EQ(3, observer->num_calls_);
EXPECT_EQ(10, observer->last_sample_);
}
TEST_F(StatsCounterTest, TestRateAccCounter_IntervalsWithoutSamplesIncluded) { // Samples: | 12 | x | x | x | 60 | // x: empty interval // Stats: | 6 | 0 | 0 | 0 | 24 | // x -> zero reported
StatsCounterObserverImpl* observer = new StatsCounterObserverImpl();
RateAccCounter counter(&clock_, observer, true);
VerifyStatsIsNotSet(counter.ProcessAndGetStats()); // Advance one interval and verify stats.
clock_.AdvanceTimeMilliseconds(kDefaultProcessIntervalMs);
VerifyStatsIsNotSet(counter.ProcessAndGetStats()); // Add sample and advance 3 intervals (2 w/o samples -> zero reported).
counter.Set(12, kStreamId);
clock_.AdvanceTimeMilliseconds(kDefaultProcessIntervalMs * 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(kDefaultProcessIntervalMs - 1);
counter.Set(60, kStreamId);
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) { // Samples: | 12 | x | x | x | 60 | // x: empty interval // Stats: | 6 | x | x | x | 24 | // x -> ignored
StatsCounterObserverImpl* observer = new StatsCounterObserverImpl();
RateAccCounter counter(&clock_, observer, false); // Add sample and advance 3 intervals (2 w/o samples -> ignored).
counter.Set(12, kStreamId);
clock_.AdvanceTimeMilliseconds(kDefaultProcessIntervalMs * 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(kDefaultProcessIntervalMs - 1);
counter.Set(60, kStreamId);
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
Messung V0.5 in Prozent
¤ Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.0.13Bemerkung:
(vorverarbeitet am 2026-06-11)
¤
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.