| Index: webrtc/modules/audio_coding/audio_network_adaptor/fec_controller_plr_based_unittest.cc
|
| diff --git a/webrtc/modules/audio_coding/audio_network_adaptor/fec_controller_unittest.cc b/webrtc/modules/audio_coding/audio_network_adaptor/fec_controller_plr_based_unittest.cc
|
| similarity index 78%
|
| rename from webrtc/modules/audio_coding/audio_network_adaptor/fec_controller_unittest.cc
|
| rename to webrtc/modules/audio_coding/audio_network_adaptor/fec_controller_plr_based_unittest.cc
|
| index 8fd62dfbd41bff3c861104b2df455d62b6f82e98..34f16c82729129061715d0f2280420517bf20f0d 100644
|
| --- a/webrtc/modules/audio_coding/audio_network_adaptor/fec_controller_unittest.cc
|
| +++ b/webrtc/modules/audio_coding/audio_network_adaptor/fec_controller_plr_based_unittest.cc
|
| @@ -11,7 +11,7 @@
|
| #include <utility>
|
|
|
| #include "webrtc/common_audio/mocks/mock_smoothing_filter.h"
|
| -#include "webrtc/modules/audio_coding/audio_network_adaptor/fec_controller.h"
|
| +#include "webrtc/modules/audio_coding/audio_network_adaptor/fec_controller_plr_based.h"
|
| #include "webrtc/test/gtest.h"
|
|
|
| namespace webrtc {
|
| @@ -45,19 +45,20 @@ constexpr float kEnablingPacketLossAtLowBw = 0.1f;
|
| constexpr int kEnablingBandwidthHigh = 64000;
|
| constexpr float kEnablingPacketLossAtHighBw = 0.05f;
|
|
|
| -struct FecControllerStates {
|
| - std::unique_ptr<FecController> controller;
|
| +struct FecControllerPlrBasedTestStates {
|
| + std::unique_ptr<FecControllerPlrBased> controller;
|
| MockSmoothingFilter* packet_loss_smoother;
|
| };
|
|
|
| -FecControllerStates CreateFecController(bool initial_fec_enabled) {
|
| - FecControllerStates states;
|
| +FecControllerPlrBasedTestStates CreateFecControllerPlrBased(
|
| + bool initial_fec_enabled) {
|
| + FecControllerPlrBasedTestStates states;
|
| std::unique_ptr<MockSmoothingFilter> mock_smoothing_filter(
|
| new NiceMock<MockSmoothingFilter>());
|
| states.packet_loss_smoother = mock_smoothing_filter.get();
|
| - using Threshold = FecController::Config::Threshold;
|
| - states.controller.reset(new FecController(
|
| - FecController::Config(
|
| + using Threshold = FecControllerPlrBased::Config::Threshold;
|
| + states.controller.reset(new FecControllerPlrBased(
|
| + FecControllerPlrBased::Config(
|
| initial_fec_enabled,
|
| Threshold(kEnablingBandwidthLow, kEnablingPacketLossAtLowBw,
|
| kEnablingBandwidthHigh, kEnablingPacketLossAtHighBw),
|
| @@ -68,7 +69,7 @@ FecControllerStates CreateFecController(bool initial_fec_enabled) {
|
| return states;
|
| }
|
|
|
| -void UpdateNetworkMetrics(FecControllerStates* states,
|
| +void UpdateNetworkMetrics(FecControllerPlrBasedTestStates* states,
|
| const rtc::Optional<int>& uplink_bandwidth_bps,
|
| const rtc::Optional<float>& uplink_packet_loss) {
|
| // UpdateNetworkMetrics can accept multiple network metric updates at once.
|
| @@ -93,7 +94,7 @@ void UpdateNetworkMetrics(FecControllerStates* states,
|
| // Checks that the FEC decision and |uplink_packet_loss_fraction| given by
|
| // |states->controller->MakeDecision| matches |expected_enable_fec| and
|
| // |expected_uplink_packet_loss_fraction|, respectively.
|
| -void CheckDecision(FecControllerStates* states,
|
| +void CheckDecision(FecControllerPlrBasedTestStates* states,
|
| bool expected_enable_fec,
|
| float expected_uplink_packet_loss_fraction) {
|
| AudioNetworkAdaptor::EncoderRuntimeConfig config;
|
| @@ -105,9 +106,9 @@ void CheckDecision(FecControllerStates* states,
|
|
|
| } // namespace
|
|
|
| -TEST(FecControllerTest, OutputInitValueWhenUplinkBandwidthUnknown) {
|
| +TEST(FecControllerPlrBasedTest, OutputInitValueWhenUplinkBandwidthUnknown) {
|
| constexpr bool kInitialFecEnabled = true;
|
| - auto states = CreateFecController(kInitialFecEnabled);
|
| + auto states = CreateFecControllerPlrBased(kInitialFecEnabled);
|
| // Let uplink packet loss fraction be so low that would cause FEC to turn off
|
| // if uplink bandwidth was known.
|
| UpdateNetworkMetrics(&states, rtc::Optional<int>(),
|
| @@ -115,9 +116,10 @@ TEST(FecControllerTest, OutputInitValueWhenUplinkBandwidthUnknown) {
|
| CheckDecision(&states, kInitialFecEnabled, kDisablingPacketLossAtHighBw);
|
| }
|
|
|
| -TEST(FecControllerTest, OutputInitValueWhenUplinkPacketLossFractionUnknown) {
|
| +TEST(FecControllerPlrBasedTest,
|
| + OutputInitValueWhenUplinkPacketLossFractionUnknown) {
|
| constexpr bool kInitialFecEnabled = true;
|
| - auto states = CreateFecController(kInitialFecEnabled);
|
| + auto states = CreateFecControllerPlrBased(kInitialFecEnabled);
|
| // Let uplink bandwidth be so low that would cause FEC to turn off if uplink
|
| // bandwidth packet loss fraction was known.
|
| UpdateNetworkMetrics(&states, rtc::Optional<int>(kDisablingBandwidthLow - 1),
|
| @@ -125,22 +127,22 @@ TEST(FecControllerTest, OutputInitValueWhenUplinkPacketLossFractionUnknown) {
|
| CheckDecision(&states, kInitialFecEnabled, 0.0);
|
| }
|
|
|
| -TEST(FecControllerTest, EnableFecForHighBandwidth) {
|
| - auto states = CreateFecController(false);
|
| +TEST(FecControllerPlrBasedTest, EnableFecForHighBandwidth) {
|
| + auto states = CreateFecControllerPlrBased(false);
|
| UpdateNetworkMetrics(&states, rtc::Optional<int>(kEnablingBandwidthHigh),
|
| rtc::Optional<float>(kEnablingPacketLossAtHighBw));
|
| CheckDecision(&states, true, kEnablingPacketLossAtHighBw);
|
| }
|
|
|
| -TEST(FecControllerTest, UpdateMultipleNetworkMetricsAtOnce) {
|
| +TEST(FecControllerPlrBasedTest, UpdateMultipleNetworkMetricsAtOnce) {
|
| // This test is similar to EnableFecForHighBandwidth. But instead of
|
| // using ::UpdateNetworkMetrics(...), which calls
|
| - // FecController::UpdateNetworkMetrics(...) multiple times, we
|
| + // FecControllerPlrBased::UpdateNetworkMetrics(...) multiple times, we
|
| // we call it only once. This is to verify that
|
| - // FecController::UpdateNetworkMetrics(...) can handle multiple
|
| + // FecControllerPlrBased::UpdateNetworkMetrics(...) can handle multiple
|
| // network updates at once. This is, however, not a common use case in current
|
| // audio_network_adaptor_impl.cc.
|
| - auto states = CreateFecController(false);
|
| + auto states = CreateFecControllerPlrBased(false);
|
| Controller::NetworkMetrics network_metrics;
|
| network_metrics.uplink_bandwidth_bps =
|
| rtc::Optional<int>(kEnablingBandwidthHigh);
|
| @@ -152,16 +154,16 @@ TEST(FecControllerTest, UpdateMultipleNetworkMetricsAtOnce) {
|
| CheckDecision(&states, true, kEnablingPacketLossAtHighBw);
|
| }
|
|
|
| -TEST(FecControllerTest, MaintainFecOffForHighBandwidth) {
|
| - auto states = CreateFecController(false);
|
| +TEST(FecControllerPlrBasedTest, MaintainFecOffForHighBandwidth) {
|
| + auto states = CreateFecControllerPlrBased(false);
|
| constexpr float kPacketLoss = kEnablingPacketLossAtHighBw * 0.99f;
|
| UpdateNetworkMetrics(&states, rtc::Optional<int>(kEnablingBandwidthHigh),
|
| rtc::Optional<float>(kPacketLoss));
|
| CheckDecision(&states, false, kPacketLoss);
|
| }
|
|
|
| -TEST(FecControllerTest, EnableFecForMediumBandwidth) {
|
| - auto states = CreateFecController(false);
|
| +TEST(FecControllerPlrBasedTest, EnableFecForMediumBandwidth) {
|
| + auto states = CreateFecControllerPlrBased(false);
|
| constexpr float kPacketLoss =
|
| (kEnablingPacketLossAtLowBw + kEnablingPacketLossAtHighBw) / 2.0;
|
| UpdateNetworkMetrics(
|
| @@ -171,8 +173,8 @@ TEST(FecControllerTest, EnableFecForMediumBandwidth) {
|
| CheckDecision(&states, true, kPacketLoss);
|
| }
|
|
|
| -TEST(FecControllerTest, MaintainFecOffForMediumBandwidth) {
|
| - auto states = CreateFecController(false);
|
| +TEST(FecControllerPlrBasedTest, MaintainFecOffForMediumBandwidth) {
|
| + auto states = CreateFecControllerPlrBased(false);
|
| constexpr float kPacketLoss =
|
| kEnablingPacketLossAtLowBw * 0.49f + kEnablingPacketLossAtHighBw * 0.51f;
|
| UpdateNetworkMetrics(
|
| @@ -182,23 +184,23 @@ TEST(FecControllerTest, MaintainFecOffForMediumBandwidth) {
|
| CheckDecision(&states, false, kPacketLoss);
|
| }
|
|
|
| -TEST(FecControllerTest, EnableFecForLowBandwidth) {
|
| - auto states = CreateFecController(false);
|
| +TEST(FecControllerPlrBasedTest, EnableFecForLowBandwidth) {
|
| + auto states = CreateFecControllerPlrBased(false);
|
| UpdateNetworkMetrics(&states, rtc::Optional<int>(kEnablingBandwidthLow),
|
| rtc::Optional<float>(kEnablingPacketLossAtLowBw));
|
| CheckDecision(&states, true, kEnablingPacketLossAtLowBw);
|
| }
|
|
|
| -TEST(FecControllerTest, MaintainFecOffForLowBandwidth) {
|
| - auto states = CreateFecController(false);
|
| +TEST(FecControllerPlrBasedTest, MaintainFecOffForLowBandwidth) {
|
| + auto states = CreateFecControllerPlrBased(false);
|
| constexpr float kPacketLoss = kEnablingPacketLossAtLowBw * 0.99f;
|
| UpdateNetworkMetrics(&states, rtc::Optional<int>(kEnablingBandwidthLow),
|
| rtc::Optional<float>(kPacketLoss));
|
| CheckDecision(&states, false, kPacketLoss);
|
| }
|
|
|
| -TEST(FecControllerTest, MaintainFecOffForVeryLowBandwidth) {
|
| - auto states = CreateFecController(false);
|
| +TEST(FecControllerPlrBasedTest, MaintainFecOffForVeryLowBandwidth) {
|
| + auto states = CreateFecControllerPlrBased(false);
|
| // Below |kEnablingBandwidthLow|, no packet loss fraction can cause FEC to
|
| // turn on.
|
| UpdateNetworkMetrics(&states, rtc::Optional<int>(kEnablingBandwidthLow - 1),
|
| @@ -206,34 +208,35 @@ TEST(FecControllerTest, MaintainFecOffForVeryLowBandwidth) {
|
| CheckDecision(&states, false, 1.0);
|
| }
|
|
|
| -TEST(FecControllerTest, DisableFecForHighBandwidth) {
|
| - auto states = CreateFecController(true);
|
| +TEST(FecControllerPlrBasedTest, DisableFecForHighBandwidth) {
|
| + auto states = CreateFecControllerPlrBased(true);
|
| UpdateNetworkMetrics(&states, rtc::Optional<int>(kDisablingBandwidthHigh),
|
| rtc::Optional<float>(kDisablingPacketLossAtHighBw));
|
| CheckDecision(&states, false, kDisablingPacketLossAtHighBw);
|
| }
|
|
|
| -TEST(FecControllerTest, MaintainFecOnForHighBandwidth) {
|
| - auto states = CreateFecController(true);
|
| +TEST(FecControllerPlrBasedTest, MaintainFecOnForHighBandwidth) {
|
| + auto states = CreateFecControllerPlrBased(true);
|
| constexpr float kPacketLoss = kDisablingPacketLossAtHighBw * 1.01f;
|
| UpdateNetworkMetrics(&states, rtc::Optional<int>(kDisablingBandwidthHigh),
|
| rtc::Optional<float>(kPacketLoss));
|
| CheckDecision(&states, true, kPacketLoss);
|
| }
|
|
|
| -TEST(FecControllerTest, DisableFecOnMediumBandwidth) {
|
| - auto states = CreateFecController(true);
|
| +TEST(FecControllerPlrBasedTest, DisableFecOnMediumBandwidth) {
|
| + auto states = CreateFecControllerPlrBased(true);
|
| constexpr float kPacketLoss =
|
| (kDisablingPacketLossAtLowBw + kDisablingPacketLossAtHighBw) / 2.0f;
|
| UpdateNetworkMetrics(
|
| - &states, rtc::Optional<int>(
|
| - (kDisablingBandwidthHigh + kDisablingBandwidthLow) / 2),
|
| + &states,
|
| + rtc::Optional<int>((kDisablingBandwidthHigh + kDisablingBandwidthLow) /
|
| + 2),
|
| rtc::Optional<float>(kPacketLoss));
|
| CheckDecision(&states, false, kPacketLoss);
|
| }
|
|
|
| -TEST(FecControllerTest, MaintainFecOnForMediumBandwidth) {
|
| - auto states = CreateFecController(true);
|
| +TEST(FecControllerPlrBasedTest, MaintainFecOnForMediumBandwidth) {
|
| + auto states = CreateFecControllerPlrBased(true);
|
| constexpr float kPacketLoss = kDisablingPacketLossAtLowBw * 0.51f +
|
| kDisablingPacketLossAtHighBw * 0.49f;
|
| UpdateNetworkMetrics(
|
| @@ -243,15 +246,15 @@ TEST(FecControllerTest, MaintainFecOnForMediumBandwidth) {
|
| CheckDecision(&states, true, kPacketLoss);
|
| }
|
|
|
| -TEST(FecControllerTest, DisableFecForLowBandwidth) {
|
| - auto states = CreateFecController(true);
|
| +TEST(FecControllerPlrBasedTest, DisableFecForLowBandwidth) {
|
| + auto states = CreateFecControllerPlrBased(true);
|
| UpdateNetworkMetrics(&states, rtc::Optional<int>(kDisablingBandwidthLow),
|
| rtc::Optional<float>(kDisablingPacketLossAtLowBw));
|
| CheckDecision(&states, false, kDisablingPacketLossAtLowBw);
|
| }
|
|
|
| -TEST(FecControllerTest, DisableFecForVeryLowBandwidth) {
|
| - auto states = CreateFecController(true);
|
| +TEST(FecControllerPlrBasedTest, DisableFecForVeryLowBandwidth) {
|
| + auto states = CreateFecControllerPlrBased(true);
|
| // Below |kEnablingBandwidthLow|, any packet loss fraction can cause FEC to
|
| // turn off.
|
| UpdateNetworkMetrics(&states, rtc::Optional<int>(kDisablingBandwidthLow - 1),
|
| @@ -259,7 +262,7 @@ TEST(FecControllerTest, DisableFecForVeryLowBandwidth) {
|
| CheckDecision(&states, false, 1.0);
|
| }
|
|
|
| -TEST(FecControllerTest, CheckBehaviorOnChangingNetworkMetrics) {
|
| +TEST(FecControllerPlrBasedTest, CheckBehaviorOnChangingNetworkMetrics) {
|
| // In this test, we let the network metrics to traverse from 1 to 5.
|
| // packet-loss ^ 1 | |
|
| // | | 2|
|
| @@ -268,7 +271,7 @@ TEST(FecControllerTest, CheckBehaviorOnChangingNetworkMetrics) {
|
| // | \_________
|
| // |---------5-------> bandwidth
|
|
|
| - auto states = CreateFecController(true);
|
| + auto states = CreateFecControllerPlrBased(true);
|
| UpdateNetworkMetrics(&states, rtc::Optional<int>(kDisablingBandwidthLow - 1),
|
| rtc::Optional<float>(1.0));
|
| CheckDecision(&states, false, 1.0);
|
| @@ -292,7 +295,7 @@ TEST(FecControllerTest, CheckBehaviorOnChangingNetworkMetrics) {
|
| CheckDecision(&states, false, 0.0);
|
| }
|
|
|
| -TEST(FecControllerTest, CheckBehaviorOnSpecialCurves) {
|
| +TEST(FecControllerPlrBasedTest, CheckBehaviorOnSpecialCurves) {
|
| // We test a special configuration, where the points to define the FEC
|
| // enabling/disabling curves are placed like the following, otherwise the test
|
| // is the same as CheckBehaviorOnChangingNetworkMetrics.
|
| @@ -306,15 +309,16 @@ TEST(FecControllerTest, CheckBehaviorOnSpecialCurves) {
|
|
|
| constexpr int kEnablingBandwidthHigh = kEnablingBandwidthLow;
|
| constexpr float kDisablingPacketLossAtLowBw = kDisablingPacketLossAtHighBw;
|
| - FecControllerStates states;
|
| + FecControllerPlrBasedTestStates states;
|
| std::unique_ptr<MockSmoothingFilter> mock_smoothing_filter(
|
| new NiceMock<MockSmoothingFilter>());
|
| states.packet_loss_smoother = mock_smoothing_filter.get();
|
| - using Threshold = FecController::Config::Threshold;
|
| - states.controller.reset(new FecController(
|
| - FecController::Config(
|
| - true, Threshold(kEnablingBandwidthLow, kEnablingPacketLossAtLowBw,
|
| - kEnablingBandwidthHigh, kEnablingPacketLossAtHighBw),
|
| + using Threshold = FecControllerPlrBased::Config::Threshold;
|
| + states.controller.reset(new FecControllerPlrBased(
|
| + FecControllerPlrBased::Config(
|
| + true,
|
| + Threshold(kEnablingBandwidthLow, kEnablingPacketLossAtLowBw,
|
| + kEnablingBandwidthHigh, kEnablingPacketLossAtHighBw),
|
| Threshold(kDisablingBandwidthLow, kDisablingPacketLossAtLowBw,
|
| kDisablingBandwidthHigh, kDisablingPacketLossAtHighBw),
|
| 0, nullptr),
|
| @@ -344,15 +348,15 @@ TEST(FecControllerTest, CheckBehaviorOnSpecialCurves) {
|
| }
|
|
|
| #if RTC_DCHECK_IS_ON && GTEST_HAS_DEATH_TEST && !defined(WEBRTC_ANDROID)
|
| -TEST(FecControllerDeathTest, InvalidConfig) {
|
| - FecControllerStates states;
|
| +TEST(FecControllerPlrBasedDeathTest, InvalidConfig) {
|
| + FecControllerPlrBasedTestStates states;
|
| std::unique_ptr<MockSmoothingFilter> mock_smoothing_filter(
|
| new NiceMock<MockSmoothingFilter>());
|
| states.packet_loss_smoother = mock_smoothing_filter.get();
|
| - using Threshold = FecController::Config::Threshold;
|
| + using Threshold = FecControllerPlrBased::Config::Threshold;
|
| EXPECT_DEATH(
|
| - states.controller.reset(new FecController(
|
| - FecController::Config(
|
| + states.controller.reset(new FecControllerPlrBased(
|
| + FecControllerPlrBased::Config(
|
| true,
|
| Threshold(kDisablingBandwidthLow - 1, kEnablingPacketLossAtLowBw,
|
| kEnablingBandwidthHigh, kEnablingPacketLossAtHighBw),
|
|
|