From 57d4ac9d991e007b5f31e35885553ef19dc31434 Mon Sep 17 00:00:00 2001 From: Rasmus Brandt Date: Mon, 4 Feb 2019 12:00:24 +0100 Subject: [PATCH] Add more unit tests for RateControlSettings. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Bug: webrtc:10271 Change-Id: I882c1ebe8f99cc93331b30a2c0bd4ab48f8ed037 Reviewed-on: https://webrtc-review.googlesource.com/c/121400 Reviewed-by: Erik Språng Commit-Queue: Rasmus Brandt Cr-Commit-Position: refs/heads/master@{#26564} --- .../rate_control_settings_unittest.cc | 114 +++++++++++++++--- 1 file changed, 94 insertions(+), 20 deletions(-) diff --git a/rtc_base/experiments/rate_control_settings_unittest.cc b/rtc_base/experiments/rate_control_settings_unittest.cc index d049bc7a6d..ae9a1921e5 100644 --- a/rtc_base/experiments/rate_control_settings_unittest.cc +++ b/rtc_base/experiments/rate_control_settings_unittest.cc @@ -19,35 +19,109 @@ namespace webrtc { namespace { -TEST(RateControlSettingsTest, LibvpxTrustedRateController) { - test::ScopedFieldTrials field_trials( - "WebRTC-VideoRateControl/trust_vp8:1,trust_vp9:0/"); - const RateControlSettings rate_control_settings = - RateControlSettings::ParseFromFieldTrials(); +TEST(RateControlSettingsTest, CongestionWindow) { + EXPECT_FALSE( + RateControlSettings::ParseFromFieldTrials().UseCongestionWindow()); - EXPECT_TRUE(rate_control_settings.LibvpxVp8TrustedRateController()); - EXPECT_FALSE(rate_control_settings.LibvpxVp9TrustedRateController()); + test::ScopedFieldTrials field_trials("WebRTC-VideoRateControl/cwnd:100/"); + const RateControlSettings settings_after = + RateControlSettings::ParseFromFieldTrials(); + EXPECT_TRUE(settings_after.UseCongestionWindow()); + EXPECT_EQ(settings_after.GetCongestionWindowAdditionalTimeMs(), 100); +} + +TEST(RateControlSettingsTest, CongestionWindowPushback) { + EXPECT_FALSE(RateControlSettings::ParseFromFieldTrials() + .UseCongestionWindowPushback()); + + test::ScopedFieldTrials field_trials( + "WebRTC-VideoRateControl/cwnd:100,cwnd_pushback:100000/"); + const RateControlSettings settings_after = + RateControlSettings::ParseFromFieldTrials(); + EXPECT_TRUE(settings_after.UseCongestionWindowPushback()); + EXPECT_EQ(settings_after.CongestionWindowMinPushbackTargetBitrateBps(), + 100000u); +} + +TEST(RateControlSettingsTest, PacingFactor) { + EXPECT_FALSE(RateControlSettings::ParseFromFieldTrials().GetPacingFactor()); + + test::ScopedFieldTrials field_trials( + "WebRTC-VideoRateControl/pacing_factor:1.2/"); + const RateControlSettings settings_after = + RateControlSettings::ParseFromFieldTrials(); + // Need to explicitly dereference the absl::optional + // for the EXPECT_DOUBLE_EQ to compile. + ASSERT_TRUE(settings_after.GetPacingFactor()); + EXPECT_DOUBLE_EQ(*settings_after.GetPacingFactor(), 1.2); +} + +TEST(RateControlSettingsTest, AlrProbing) { + EXPECT_FALSE(RateControlSettings::ParseFromFieldTrials().UseAlrProbing()); + + test::ScopedFieldTrials field_trials( + "WebRTC-VideoRateControl/alr_probing:1/"); + EXPECT_TRUE(RateControlSettings::ParseFromFieldTrials().UseAlrProbing()); +} + +TEST(RateControlSettingsTest, LibvpxTrustedRateController) { + const RateControlSettings settings_before = + RateControlSettings::ParseFromFieldTrials(); + EXPECT_FALSE(settings_before.LibvpxVp8TrustedRateController()); + EXPECT_FALSE(settings_before.LibvpxVp9TrustedRateController()); + + test::ScopedFieldTrials field_trials( + "WebRTC-VideoRateControl/trust_vp8:1,trust_vp9:1/"); + const RateControlSettings settings_after = + RateControlSettings::ParseFromFieldTrials(); + EXPECT_TRUE(settings_after.LibvpxVp8TrustedRateController()); + EXPECT_TRUE(settings_after.LibvpxVp9TrustedRateController()); } TEST(RateControlSettingsTest, GetSimulcastHysteresisFactor) { + const RateControlSettings settings_before = + RateControlSettings::ParseFromFieldTrials(); + EXPECT_DOUBLE_EQ(settings_before.GetSimulcastHysteresisFactor( + VideoCodecMode::kRealtimeVideo), + 1.0); + EXPECT_DOUBLE_EQ(settings_before.GetSimulcastHysteresisFactor( + VideoEncoderConfig::ContentType::kRealtimeVideo), + 1.0); + EXPECT_DOUBLE_EQ(settings_before.GetSimulcastHysteresisFactor( + VideoCodecMode::kScreensharing), + 1.35); + EXPECT_DOUBLE_EQ(settings_before.GetSimulcastHysteresisFactor( + VideoEncoderConfig::ContentType::kScreen), + 1.35); + test::ScopedFieldTrials field_trials( "WebRTC-VideoRateControl/" "video_hysteresis:1.2,screenshare_hysteresis:1.4/"); - const RateControlSettings rate_control_settings = + const RateControlSettings settings_after = RateControlSettings::ParseFromFieldTrials(); - EXPECT_EQ(rate_control_settings.GetSimulcastHysteresisFactor( - VideoCodecMode::kRealtimeVideo), - 1.2); - EXPECT_EQ(rate_control_settings.GetSimulcastHysteresisFactor( - VideoEncoderConfig::ContentType::kRealtimeVideo), - 1.2); - EXPECT_EQ(rate_control_settings.GetSimulcastHysteresisFactor( - VideoCodecMode::kScreensharing), - 1.4); - EXPECT_EQ(rate_control_settings.GetSimulcastHysteresisFactor( - VideoEncoderConfig::ContentType::kScreen), - 1.4); + EXPECT_DOUBLE_EQ(settings_after.GetSimulcastHysteresisFactor( + VideoCodecMode::kRealtimeVideo), + 1.2); + EXPECT_DOUBLE_EQ(settings_after.GetSimulcastHysteresisFactor( + VideoEncoderConfig::ContentType::kRealtimeVideo), + 1.2); + EXPECT_DOUBLE_EQ(settings_after.GetSimulcastHysteresisFactor( + VideoCodecMode::kScreensharing), + 1.4); + EXPECT_DOUBLE_EQ(settings_after.GetSimulcastHysteresisFactor( + VideoEncoderConfig::ContentType::kScreen), + 1.4); +} + +TEST(RateControlSettingsTest, TriggerProbeOnMaxAllocatedBitrateChange) { + EXPECT_TRUE(RateControlSettings::ParseFromFieldTrials() + .TriggerProbeOnMaxAllocatedBitrateChange()); + + test::ScopedFieldTrials field_trials( + "WebRTC-VideoRateControl/probe_max_allocation:0/"); + EXPECT_FALSE(RateControlSettings::ParseFromFieldTrials() + .TriggerProbeOnMaxAllocatedBitrateChange()); } } // namespace