Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1757)

Unified Diff: webrtc/video/send_statistics_proxy_unittest.cc

Issue 2454343002: Add unit tests for bandwidth limited resolution stats in SendStatisticsProxy. (Closed)
Patch Set: add comment Created 4 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 cb3bde442647856fab6cea7b41e575148105b45e..488d57534c263dcb5cf7942e4291632c477d72c2 100644
--- a/webrtc/video/send_statistics_proxy_unittest.cc
+++ b/webrtc/video/send_statistics_proxy_unittest.cc
@@ -427,6 +427,148 @@ TEST_F(SendStatisticsProxyTest, VerifyQpHistogramStats_Vp9OneSpatialLayer) {
EXPECT_EQ(1, metrics::NumEvents("WebRTC.Video.Encoded.Qp.Vp9", kQpIdx0));
}
+TEST_F(SendStatisticsProxyTest,
+ BandwidthLimitedHistogramsNotUpdatedWhenDisabled) {
+ EncodedImage encoded_image;
+ // encoded_image.adapt_reason_.bw_resolutions_disabled by default: -1
+ for (int i = 0; i < kMinRequiredSamples; ++i)
+ statistics_proxy_->OnSendEncodedImage(encoded_image, nullptr);
+
+ // Histograms are updated when the statistics_proxy_ is deleted.
+ statistics_proxy_.reset();
+ EXPECT_EQ(0, metrics::NumSamples(
+ "WebRTC.Video.BandwidthLimitedResolutionInPercent"));
+ EXPECT_EQ(0, metrics::NumSamples(
+ "WebRTC.Video.BandwidthLimitedResolutionsDisabled"));
+}
+
+TEST_F(SendStatisticsProxyTest,
+ BandwidthLimitedHistogramsUpdatedWhenEnabled_NoResolutionDisabled) {
+ const int kResolutionsDisabled = 0;
+ EncodedImage encoded_image;
+ encoded_image.adapt_reason_.bw_resolutions_disabled = kResolutionsDisabled;
+ for (int i = 0; i < kMinRequiredSamples; ++i)
+ statistics_proxy_->OnSendEncodedImage(encoded_image, nullptr);
+
+ // Histograms are updated when the statistics_proxy_ is deleted.
+ statistics_proxy_.reset();
+ EXPECT_EQ(1, metrics::NumSamples(
+ "WebRTC.Video.BandwidthLimitedResolutionInPercent"));
+ EXPECT_EQ(1, metrics::NumEvents(
+ "WebRTC.Video.BandwidthLimitedResolutionInPercent", 0));
+ // No resolution disabled.
+ EXPECT_EQ(0, metrics::NumSamples(
+ "WebRTC.Video.BandwidthLimitedResolutionsDisabled"));
+}
+
+TEST_F(SendStatisticsProxyTest,
+ BandwidthLimitedHistogramsUpdatedWhenEnabled_OneResolutionDisabled) {
+ const int kResolutionsDisabled = 1;
+ EncodedImage encoded_image;
+ encoded_image.adapt_reason_.bw_resolutions_disabled = kResolutionsDisabled;
+ for (int i = 0; i < kMinRequiredSamples; ++i)
+ statistics_proxy_->OnSendEncodedImage(encoded_image, nullptr);
+
+ // Histograms are updated when the statistics_proxy_ is deleted.
+ statistics_proxy_.reset();
+ EXPECT_EQ(1, metrics::NumSamples(
+ "WebRTC.Video.BandwidthLimitedResolutionInPercent"));
+ EXPECT_EQ(1, metrics::NumEvents(
+ "WebRTC.Video.BandwidthLimitedResolutionInPercent", 100));
+ // Resolutions disabled.
+ EXPECT_EQ(1, metrics::NumSamples(
+ "WebRTC.Video.BandwidthLimitedResolutionsDisabled"));
+ EXPECT_EQ(
+ 1, metrics::NumEvents("WebRTC.Video.BandwidthLimitedResolutionsDisabled",
+ kResolutionsDisabled));
+}
+
+TEST_F(SendStatisticsProxyTest,
+ QualityLimitedHistogramsNotUpdatedWhenDisabled) {
+ EncodedImage encoded_image;
+ // encoded_image.adapt_reason_.quality_resolution_downscales disabled by
+ // default: -1
+ for (int i = 0; i < kMinRequiredSamples; ++i)
+ statistics_proxy_->OnSendEncodedImage(encoded_image, nullptr);
+
+ // Histograms are updated when the statistics_proxy_ is deleted.
+ statistics_proxy_.reset();
+ EXPECT_EQ(
+ 0, metrics::NumSamples("WebRTC.Video.QualityLimitedResolutionInPercent"));
+ EXPECT_EQ(0, metrics::NumSamples(
+ "WebRTC.Video.QualityLimitedResolutionDownscales"));
+}
+
+TEST_F(SendStatisticsProxyTest,
+ QualityLimitedHistogramsUpdatedWhenEnabled_NoResolutionDownscale) {
+ const int kDownscales = 0;
+ EncodedImage encoded_image;
+ encoded_image.adapt_reason_.quality_resolution_downscales = kDownscales;
+ for (int i = 0; i < kMinRequiredSamples; ++i)
+ statistics_proxy_->OnSendEncodedImage(encoded_image, nullptr);
+
+ // Histograms are updated when the statistics_proxy_ is deleted.
+ statistics_proxy_.reset();
+ EXPECT_EQ(
+ 1, metrics::NumSamples("WebRTC.Video.QualityLimitedResolutionInPercent"));
+ EXPECT_EQ(1, metrics::NumEvents(
+ "WebRTC.Video.QualityLimitedResolutionInPercent", 0));
+ // No resolution downscale.
+ EXPECT_EQ(0, metrics::NumSamples(
+ "WebRTC.Video.QualityLimitedResolutionDownscales"));
+}
+
+TEST_F(SendStatisticsProxyTest,
+ QualityLimitedHistogramsUpdatedWhenEnabled_TwoResolutionDownscales) {
+ const int kDownscales = 2;
+ EncodedImage encoded_image;
+ encoded_image.adapt_reason_.quality_resolution_downscales = kDownscales;
+ for (int i = 0; i < kMinRequiredSamples; ++i)
+ statistics_proxy_->OnSendEncodedImage(encoded_image, nullptr);
+
+ // Histograms are updated when the statistics_proxy_ is deleted.
+ statistics_proxy_.reset();
+ EXPECT_EQ(
+ 1, metrics::NumSamples("WebRTC.Video.QualityLimitedResolutionInPercent"));
+ EXPECT_EQ(1, metrics::NumEvents(
+ "WebRTC.Video.QualityLimitedResolutionInPercent", 100));
+ // Resolution downscales.
+ EXPECT_EQ(1, metrics::NumSamples(
+ "WebRTC.Video.QualityLimitedResolutionDownscales"));
+ EXPECT_EQ(
+ 1, metrics::NumEvents("WebRTC.Video.QualityLimitedResolutionDownscales",
+ kDownscales));
+}
+
+TEST_F(SendStatisticsProxyTest, GetStatsReportsBandwidthLimitedResolution) {
+ // Initially false.
+ EXPECT_FALSE(statistics_proxy_->GetStats().bw_limited_resolution);
+ // No resolution scale by default.
+ EncodedImage encoded_image;
+ statistics_proxy_->OnSendEncodedImage(encoded_image, nullptr);
+ EXPECT_FALSE(statistics_proxy_->GetStats().bw_limited_resolution);
+ // Resolution not scaled.
+ encoded_image.adapt_reason_.bw_resolutions_disabled = 0;
+ encoded_image.adapt_reason_.quality_resolution_downscales = 0;
+ statistics_proxy_->OnSendEncodedImage(encoded_image, nullptr);
+ EXPECT_FALSE(statistics_proxy_->GetStats().bw_limited_resolution);
+ // Resolution scaled due to bandwidth.
+ encoded_image.adapt_reason_.bw_resolutions_disabled = 1;
+ encoded_image.adapt_reason_.quality_resolution_downscales = 0;
+ statistics_proxy_->OnSendEncodedImage(encoded_image, nullptr);
+ EXPECT_TRUE(statistics_proxy_->GetStats().bw_limited_resolution);
+ // Resolution not scaled.
+ encoded_image.adapt_reason_.bw_resolutions_disabled = 0;
+ encoded_image.adapt_reason_.quality_resolution_downscales = 0;
+ statistics_proxy_->OnSendEncodedImage(encoded_image, nullptr);
+ EXPECT_FALSE(statistics_proxy_->GetStats().bw_limited_resolution);
+ // Resolution scaled due to quality.
+ encoded_image.adapt_reason_.bw_resolutions_disabled = 0;
+ encoded_image.adapt_reason_.quality_resolution_downscales = 1;
+ statistics_proxy_->OnSendEncodedImage(encoded_image, nullptr);
+ EXPECT_TRUE(statistics_proxy_->GetStats().bw_limited_resolution);
+}
+
TEST_F(SendStatisticsProxyTest, NoSubstreams) {
uint32_t excluded_ssrc =
std::max(
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698