Index: webrtc/video/send_statistics_proxy_unittest.cc |
diff --git a/webrtc/video/send_statistics_proxy_unittest.cc b/webrtc/video/send_statistics_proxy_unittest.cc |
index b3aa50667d78546ad1fdd766c920f7bcdae7f4e7..e2cb2fdbb2d59e4c98373c35bc05e52257e4adc7 100644 |
--- a/webrtc/video/send_statistics_proxy_unittest.cc |
+++ b/webrtc/video/send_statistics_proxy_unittest.cc |
@@ -422,6 +422,8 @@ TEST_F(SendStatisticsProxyTest, GetStatsReportsQualityResolutionChanges) { |
} |
TEST_F(SendStatisticsProxyTest, AdaptChangesNotReported_ScalingNotEnabled) { |
+ // First RTP packet sent. |
+ UpdateDataCounters(kFirstSsrc); |
// Min runtime has passed. |
fake_clock_.AdvanceTimeMilliseconds(metrics::kMinRunTimeInSeconds * 1000); |
statistics_proxy_.reset(); |
@@ -431,6 +433,8 @@ TEST_F(SendStatisticsProxyTest, AdaptChangesNotReported_ScalingNotEnabled) { |
} |
TEST_F(SendStatisticsProxyTest, AdaptChangesNotReported_MinRuntimeNotPassed) { |
+ // First RTP packet sent. |
+ UpdateDataCounters(kFirstSsrc); |
// Enable scaling. |
statistics_proxy_->SetQualityScalingStats(0); |
statistics_proxy_->SetCpuScalingStats(0); |
@@ -443,6 +447,8 @@ TEST_F(SendStatisticsProxyTest, AdaptChangesNotReported_MinRuntimeNotPassed) { |
} |
TEST_F(SendStatisticsProxyTest, ZeroCpuAdaptChangesReported) { |
+ // First RTP packet sent. |
+ UpdateDataCounters(kFirstSsrc); |
// Enable scaling. |
statistics_proxy_->SetCpuScalingStats(0); |
// Min runtime has passed. |
@@ -453,6 +459,8 @@ TEST_F(SendStatisticsProxyTest, ZeroCpuAdaptChangesReported) { |
} |
TEST_F(SendStatisticsProxyTest, ZeroQualityAdaptChangesReported) { |
+ // First RTP packet sent. |
+ UpdateDataCounters(kFirstSsrc); |
// Enable scaling. |
statistics_proxy_->SetQualityScalingStats(0); |
// Min runtime has passed. |
@@ -465,8 +473,10 @@ TEST_F(SendStatisticsProxyTest, ZeroQualityAdaptChangesReported) { |
} |
TEST_F(SendStatisticsProxyTest, CpuAdaptChangesReported) { |
+ // First RTP packet sent. |
+ UpdateDataCounters(kFirstSsrc); |
// Enable scaling. |
- // Adapt changes: 1, elapsed time: 10 ms => 6 per minute. |
+ // Adapt changes: 1, elapsed time: 10 sec => 6 per minute. |
statistics_proxy_->SetCpuScalingStats(0); |
statistics_proxy_->OnCpuRestrictedResolutionChanged(true); |
fake_clock_.AdvanceTimeMilliseconds(10000); |
@@ -476,12 +486,15 @@ TEST_F(SendStatisticsProxyTest, CpuAdaptChangesReported) { |
} |
TEST_F(SendStatisticsProxyTest, AdaptChangesStatsExcludesDisabledTime) { |
+ // First RTP packet sent. |
+ UpdateDataCounters(kFirstSsrc); |
+ |
// Disable scaling. |
statistics_proxy_->SetQualityScalingStats(-1); |
fake_clock_.AdvanceTimeMilliseconds(10000); |
// Enable scaling. |
- // Adapt changes: 2, elapsed time: 20 ms. |
+ // Adapt changes: 2, elapsed time: 20 sec. |
statistics_proxy_->SetQualityScalingStats(0); |
fake_clock_.AdvanceTimeMilliseconds(5000); |
statistics_proxy_->SetQualityScalingStats(1); |
@@ -495,7 +508,7 @@ TEST_F(SendStatisticsProxyTest, AdaptChangesStatsExcludesDisabledTime) { |
fake_clock_.AdvanceTimeMilliseconds(30000); |
// Enable scaling. |
- // Adapt changes: 1, elapsed time: 10 ms. |
+ // Adapt changes: 1, elapsed time: 10 sec. |
statistics_proxy_->SetQualityScalingStats(0); |
statistics_proxy_->OnQualityRestrictedResolutionChanged(1); |
fake_clock_.AdvanceTimeMilliseconds(10000); |
@@ -506,7 +519,7 @@ TEST_F(SendStatisticsProxyTest, AdaptChangesStatsExcludesDisabledTime) { |
statistics_proxy_->SetQualityScalingStats(-1); |
fake_clock_.AdvanceTimeMilliseconds(20000); |
- // Adapt changes: 3, elapsed time: 30 ms => 6 per minute. |
+ // Adapt changes: 3, elapsed time: 30 sec => 6 per minute. |
statistics_proxy_.reset(); |
EXPECT_EQ(1, |
metrics::NumSamples("WebRTC.Video.AdaptChangesPerMinute.Quality")); |
@@ -514,23 +527,128 @@ TEST_F(SendStatisticsProxyTest, AdaptChangesStatsExcludesDisabledTime) { |
1, metrics::NumEvents("WebRTC.Video.AdaptChangesPerMinute.Quality", 6)); |
} |
-TEST_F(SendStatisticsProxyTest, AdaptChangesStatsRestartsOnFirstSentPacket) { |
- StreamDataCounters counters; |
- StreamDataCountersCallback* proxy = |
- static_cast<StreamDataCountersCallback*>(statistics_proxy_.get()); |
+TEST_F(SendStatisticsProxyTest, |
+ AdaptChangesNotReported_ScalingNotEnabledVideoResumed) { |
+ // First RTP packet sent. |
+ UpdateDataCounters(kFirstSsrc); |
+ |
+ // Suspend and resume video. |
+ statistics_proxy_->OnSuspendChange(true); |
+ fake_clock_.AdvanceTimeMilliseconds(5000); |
+ statistics_proxy_->OnSuspendChange(false); |
+ |
+ // Min runtime has passed but scaling not enabled. |
+ fake_clock_.AdvanceTimeMilliseconds(metrics::kMinRunTimeInSeconds * 1000); |
+ statistics_proxy_.reset(); |
+ EXPECT_EQ(0, metrics::NumSamples("WebRTC.Video.AdaptChangesPerMinute.Cpu")); |
+ EXPECT_EQ(0, |
+ metrics::NumSamples("WebRTC.Video.AdaptChangesPerMinute.Quality")); |
+} |
+ |
+TEST_F(SendStatisticsProxyTest, QualityAdaptChangesStatsExcludesSuspendedTime) { |
+ // First RTP packet sent. |
+ UpdateDataCounters(kFirstSsrc); |
+ |
+ // Enable scaling. |
+ // Adapt changes: 2, elapsed time: 20 sec. |
+ statistics_proxy_->SetQualityScalingStats(0); |
+ fake_clock_.AdvanceTimeMilliseconds(20000); |
+ statistics_proxy_->OnQualityRestrictedResolutionChanged(1); |
+ statistics_proxy_->OnQualityRestrictedResolutionChanged(2); |
+ |
+ // Suspend and resume video. |
+ statistics_proxy_->OnSuspendChange(true); |
+ fake_clock_.AdvanceTimeMilliseconds(30000); |
+ statistics_proxy_->OnSuspendChange(false); |
+ |
+ // Adapt changes: 1, elapsed time: 10 sec. |
+ statistics_proxy_->OnQualityRestrictedResolutionChanged(3); |
+ fake_clock_.AdvanceTimeMilliseconds(10000); |
+ |
+ // Adapt changes: 3, elapsed time: 30 sec => 6 per minute. |
+ statistics_proxy_.reset(); |
+ EXPECT_EQ(1, |
+ metrics::NumSamples("WebRTC.Video.AdaptChangesPerMinute.Quality")); |
+ EXPECT_EQ( |
+ 1, metrics::NumEvents("WebRTC.Video.AdaptChangesPerMinute.Quality", 6)); |
+} |
+ |
+TEST_F(SendStatisticsProxyTest, CpuAdaptChangesStatsExcludesSuspendedTime) { |
+ // First RTP packet sent. |
+ UpdateDataCounters(kFirstSsrc); |
+ |
+ // Video not suspended. |
+ statistics_proxy_->OnSuspendChange(false); |
+ fake_clock_.AdvanceTimeMilliseconds(30000); |
+ |
+ // Enable scaling. |
+ // Adapt changes: 1, elapsed time: 20 sec. |
+ statistics_proxy_->SetCpuScalingStats(0); |
+ fake_clock_.AdvanceTimeMilliseconds(10000); |
+ statistics_proxy_->OnCpuRestrictedResolutionChanged(true); |
+ |
+ // Video not suspended, stats time already started. |
+ statistics_proxy_->OnSuspendChange(false); |
+ fake_clock_.AdvanceTimeMilliseconds(10000); |
+ |
+ // Disable scaling. |
+ statistics_proxy_->SetCpuScalingStats(-1); |
+ fake_clock_.AdvanceTimeMilliseconds(30000); |
+ |
+ // Suspend and resume video, stats time not started when scaling not enabled. |
+ statistics_proxy_->OnSuspendChange(true); |
+ fake_clock_.AdvanceTimeMilliseconds(30000); |
+ statistics_proxy_->OnSuspendChange(false); |
+ fake_clock_.AdvanceTimeMilliseconds(30000); |
+ |
+ // Enable scaling. |
+ // Adapt changes: 1, elapsed time: 10 sec. |
+ statistics_proxy_->SetCpuScalingStats(0); |
+ fake_clock_.AdvanceTimeMilliseconds(10000); |
+ statistics_proxy_->OnCpuRestrictedResolutionChanged(true); |
+ |
+ // Adapt changes: 2, elapsed time: 30 sec => 4 per minute. |
+ statistics_proxy_.reset(); |
+ EXPECT_EQ(1, metrics::NumSamples("WebRTC.Video.AdaptChangesPerMinute.Cpu")); |
+ EXPECT_EQ(1, metrics::NumEvents("WebRTC.Video.AdaptChangesPerMinute.Cpu", 4)); |
+} |
+ |
+TEST_F(SendStatisticsProxyTest, AdaptChangesStatsNotStartedIfVideoSuspended) { |
+ // First RTP packet sent. |
+ UpdateDataCounters(kFirstSsrc); |
+ |
+ // Video suspended. |
+ statistics_proxy_->OnSuspendChange(true); |
+ // Enable scaling, stats time not started when suspended. |
+ statistics_proxy_->SetCpuScalingStats(0); |
+ fake_clock_.AdvanceTimeMilliseconds(10000); |
+ |
+ // Resume video, stats time started. |
+ // Adapt changes: 1, elapsed time: 10 sec. |
+ statistics_proxy_->OnSuspendChange(false); |
+ fake_clock_.AdvanceTimeMilliseconds(10000); |
+ statistics_proxy_->OnCpuRestrictedResolutionChanged(true); |
+ |
+ // Adapt changes: 1, elapsed time: 10 sec => 6 per minute. |
+ statistics_proxy_.reset(); |
+ EXPECT_EQ(1, metrics::NumSamples("WebRTC.Video.AdaptChangesPerMinute.Cpu")); |
+ EXPECT_EQ(1, metrics::NumEvents("WebRTC.Video.AdaptChangesPerMinute.Cpu", 6)); |
+} |
+ |
+TEST_F(SendStatisticsProxyTest, AdaptChangesStatsRestartsOnFirstSentPacket) { |
// Send first packet, scaling enabled. |
// Elapsed time before first packet is sent should be excluded. |
statistics_proxy_->SetQualityScalingStats(0); |
fake_clock_.AdvanceTimeMilliseconds(10000); |
- proxy->DataCountersUpdated(counters, kFirstSsrc); |
+ UpdateDataCounters(kFirstSsrc); |
- // Adapt changes: 1, elapsed time: 10 ms. |
+ // Adapt changes: 1, elapsed time: 10 sec. |
fake_clock_.AdvanceTimeMilliseconds(10000); |
statistics_proxy_->OnQualityRestrictedResolutionChanged(1); |
- proxy->DataCountersUpdated(counters, kFirstSsrc); |
+ UpdateDataCounters(kFirstSsrc); |
- // Adapt changes: 1, elapsed time: 10 ms => 6 per minute. |
+ // Adapt changes: 1, elapsed time: 10 sec => 6 per minute. |
statistics_proxy_.reset(); |
EXPECT_EQ(1, |
metrics::NumSamples("WebRTC.Video.AdaptChangesPerMinute.Quality")); |
@@ -539,10 +657,6 @@ TEST_F(SendStatisticsProxyTest, AdaptChangesStatsRestartsOnFirstSentPacket) { |
} |
TEST_F(SendStatisticsProxyTest, AdaptChangesStatsStartedAfterFirstSentPacket) { |
- StreamDataCounters counters; |
- StreamDataCountersCallback* proxy = |
- static_cast<StreamDataCountersCallback*>(statistics_proxy_.get()); |
- |
// Enable and disable scaling. |
statistics_proxy_->SetCpuScalingStats(0); |
fake_clock_.AdvanceTimeMilliseconds(60000); |
@@ -550,29 +664,30 @@ TEST_F(SendStatisticsProxyTest, AdaptChangesStatsStartedAfterFirstSentPacket) { |
// Send first packet, scaling disabled. |
// Elapsed time before first packet is sent should be excluded. |
- proxy->DataCountersUpdated(counters, kFirstSsrc); |
+ UpdateDataCounters(kFirstSsrc); |
fake_clock_.AdvanceTimeMilliseconds(60000); |
// Enable scaling. |
statistics_proxy_->SetCpuScalingStats(0); |
fake_clock_.AdvanceTimeMilliseconds(10000); |
- proxy->DataCountersUpdated(counters, kFirstSsrc); |
+ UpdateDataCounters(kFirstSsrc); |
- // Adapt changes: 1, elapsed time: 20 ms. |
+ // Adapt changes: 1, elapsed time: 20 sec. |
fake_clock_.AdvanceTimeMilliseconds(10000); |
statistics_proxy_->OnCpuRestrictedResolutionChanged(true); |
- // Adapt changes: 1, elapsed time: 20 ms => 3 per minute. |
+ // Adapt changes: 1, elapsed time: 20 sec => 3 per minute. |
statistics_proxy_.reset(); |
EXPECT_EQ(1, metrics::NumSamples("WebRTC.Video.AdaptChangesPerMinute.Cpu")); |
EXPECT_EQ(1, metrics::NumEvents("WebRTC.Video.AdaptChangesPerMinute.Cpu", 3)); |
} |
TEST_F(SendStatisticsProxyTest, AdaptChangesReportedAfterContentSwitch) { |
- // Enable scaling. |
+ // First RTP packet sent, scaling enabled. |
+ UpdateDataCounters(kFirstSsrc); |
statistics_proxy_->SetCpuScalingStats(0); |
- // Adapt changes: 2, elapsed time: 15 ms => 8 per minute. |
+ // Adapt changes: 2, elapsed time: 15 sec => 8 per minute. |
statistics_proxy_->OnCpuRestrictedResolutionChanged(true); |
fake_clock_.AdvanceTimeMilliseconds(6000); |
statistics_proxy_->OnCpuRestrictedResolutionChanged(true); |
@@ -587,10 +702,11 @@ TEST_F(SendStatisticsProxyTest, AdaptChangesReportedAfterContentSwitch) { |
EXPECT_EQ(0, |
metrics::NumSamples("WebRTC.Video.AdaptChangesPerMinute.Quality")); |
- // Enable scaling. |
+ // First RTP packet sent, scaling enabled. |
+ UpdateDataCounters(kFirstSsrc); |
statistics_proxy_->SetCpuScalingStats(0); |
- // Adapt changes: 4, elapsed time: 120 ms => 2 per minute. |
+ // Adapt changes: 4, elapsed time: 120 sec => 2 per minute. |
statistics_proxy_->OnCpuRestrictedResolutionChanged(true); |
statistics_proxy_->OnCpuRestrictedResolutionChanged(true); |
statistics_proxy_->OnCpuRestrictedResolutionChanged(true); |
@@ -1034,7 +1150,9 @@ TEST_F(SendStatisticsProxyTest, |
TEST_F(SendStatisticsProxyTest, |
QualityLimitedHistogramsUpdatedWhenEnabled_NoResolutionDownscale) { |
+ const int kNumDownscales = 0; |
EncodedImage encoded_image; |
+ statistics_proxy_->SetQualityScalingStats(kNumDownscales); |
for (int i = 0; i < SendStatisticsProxy::kMinRequiredMetricsSamples; ++i) |
statistics_proxy_->OnSendEncodedImage(encoded_image, &kDefaultCodecInfo); |