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..f7b616f4b695e77099fde6ffb05d14b2d4eb2ab3 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,6 +473,8 @@ 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. |
statistics_proxy_->SetCpuScalingStats(0); |
@@ -476,6 +486,9 @@ TEST_F(SendStatisticsProxyTest, CpuAdaptChangesReported) { |
} |
TEST_F(SendStatisticsProxyTest, AdaptChangesStatsExcludesDisabledTime) { |
+ // First RTP packet sent. |
+ UpdateDataCounters(kFirstSsrc); |
+ |
// Disable scaling. |
statistics_proxy_->SetQualityScalingStats(-1); |
fake_clock_.AdvanceTimeMilliseconds(10000); |
@@ -514,21 +527,126 @@ 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 ms. |
brandtr
2017/04/07 06:42:02
Should this be seconds and not milliseconds?
åsapersson
2017/04/07 07:13:33
Right, done.
|
+ 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 ms. |
brandtr
2017/04/07 06:42:02
And here, and below?
åsapersson
2017/04/07 07:13:33
Done.
|
+ statistics_proxy_->OnQualityRestrictedResolutionChanged(3); |
+ fake_clock_.AdvanceTimeMilliseconds(10000); |
+ // Adapt changes: 3, elapsed time: 30 ms => 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 ms. |
+ 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 ms. |
+ statistics_proxy_->SetCpuScalingStats(0); |
+ fake_clock_.AdvanceTimeMilliseconds(10000); |
+ statistics_proxy_->OnCpuRestrictedResolutionChanged(true); |
+ |
+ // Adapt changes: 2, elapsed time: 30 ms => 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 ms. |
+ statistics_proxy_->OnSuspendChange(false); |
+ fake_clock_.AdvanceTimeMilliseconds(10000); |
+ statistics_proxy_->OnCpuRestrictedResolutionChanged(true); |
+ |
+ // Adapt changes: 1, elapsed time: 10 ms => 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. |
fake_clock_.AdvanceTimeMilliseconds(10000); |
statistics_proxy_->OnQualityRestrictedResolutionChanged(1); |
- proxy->DataCountersUpdated(counters, kFirstSsrc); |
+ UpdateDataCounters(kFirstSsrc); |
// Adapt changes: 1, elapsed time: 10 ms => 6 per minute. |
statistics_proxy_.reset(); |
@@ -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,13 +664,13 @@ 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. |
fake_clock_.AdvanceTimeMilliseconds(10000); |
@@ -569,7 +683,8 @@ TEST_F(SendStatisticsProxyTest, AdaptChangesStatsStartedAfterFirstSentPacket) { |
} |
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. |
@@ -587,7 +702,8 @@ 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. |
@@ -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); |