Index: webrtc/modules/audio_coding/audio_network_adaptor/frame_length_controller_unittest.cc |
diff --git a/webrtc/modules/audio_coding/audio_network_adaptor/frame_length_controller_unittest.cc b/webrtc/modules/audio_coding/audio_network_adaptor/frame_length_controller_unittest.cc |
index a013c857b53d1388d13cc6515cc761b50a953c24..43d4f4f0eae752d89a86bafee2f1eb5c8df6753a 100644 |
--- a/webrtc/modules/audio_coding/audio_network_adaptor/frame_length_controller_unittest.cc |
+++ b/webrtc/modules/audio_coding/audio_network_adaptor/frame_length_controller_unittest.cc |
@@ -38,17 +38,31 @@ std::unique_ptr<FrameLengthController> CreateController( |
return controller; |
} |
+void UpdateNetworkMetrics( |
+ FrameLengthController* controller, |
+ const rtc::Optional<int>& uplink_bandwidth_bps, |
+ const rtc::Optional<float>& uplink_packet_loss_fraction) { |
+ // UpdateNetworkMetrics can accept multiple network metric updates at once. |
+ // However, currently, the most used case is to update one metric at a time. |
+ // To reflect this fact, we separate the calls. |
+ if (uplink_bandwidth_bps) { |
+ Controller::NetworkMetrics network_metrics; |
+ network_metrics.uplink_bandwidth_bps = uplink_bandwidth_bps; |
+ controller->UpdateNetworkMetrics(network_metrics); |
+ } |
+ if (uplink_packet_loss_fraction) { |
+ Controller::NetworkMetrics network_metrics; |
+ network_metrics.uplink_packet_loss_fraction = uplink_packet_loss_fraction; |
+ controller->UpdateNetworkMetrics(network_metrics); |
+ } |
+} |
+ |
void CheckDecision(FrameLengthController* controller, |
- const rtc::Optional<int>& uplink_bandwidth_bps, |
- const rtc::Optional<float>& uplink_packet_loss_fraction, |
const rtc::Optional<bool>& enable_fec, |
int expected_frame_length_ms) { |
- Controller::NetworkMetrics metrics; |
- metrics.uplink_bandwidth_bps = uplink_bandwidth_bps; |
- metrics.uplink_packet_loss_fraction = uplink_packet_loss_fraction; |
AudioNetworkAdaptor::EncoderRuntimeConfig config; |
config.enable_fec = enable_fec; |
- controller->MakeDecision(metrics, &config); |
+ controller->MakeDecision(&config); |
EXPECT_EQ(rtc::Optional<int>(expected_frame_length_ms), |
config.frame_length_ms); |
} |
@@ -57,21 +71,22 @@ void CheckDecision(FrameLengthController* controller, |
TEST(FrameLengthControllerTest, DecreaseTo20MsOnHighUplinkBandwidth) { |
auto controller = CreateController({20, 60}, 60); |
- CheckDecision(controller.get(), rtc::Optional<int>(kFl60msTo20msBandwidthBps), |
- rtc::Optional<float>(), rtc::Optional<bool>(), 20); |
+ UpdateNetworkMetrics(controller.get(), |
+ rtc::Optional<int>(kFl60msTo20msBandwidthBps), |
+ rtc::Optional<float>()); |
+ CheckDecision(controller.get(), rtc::Optional<bool>(), 20); |
} |
TEST(FrameLengthControllerTest, DecreaseTo20MsOnHighUplinkPacketLossFraction) { |
auto controller = CreateController({20, 60}, 60); |
- CheckDecision(controller.get(), rtc::Optional<int>(), |
- rtc::Optional<float>(kFlDecreasingPacketLossFraction), |
- rtc::Optional<bool>(), 20); |
+ UpdateNetworkMetrics(controller.get(), rtc::Optional<int>(), |
+ rtc::Optional<float>(kFlDecreasingPacketLossFraction)); |
+ CheckDecision(controller.get(), rtc::Optional<bool>(), 20); |
} |
TEST(FrameLengthControllerTest, DecreaseTo20MsWhenFecIsOn) { |
auto controller = CreateController({20, 60}, 60); |
- CheckDecision(controller.get(), rtc::Optional<int>(), rtc::Optional<float>(), |
- rtc::Optional<bool>(true), 20); |
+ CheckDecision(controller.get(), rtc::Optional<bool>(true), 20); |
} |
TEST(FrameLengthControllerTest, |
@@ -79,8 +94,7 @@ TEST(FrameLengthControllerTest, |
auto controller = CreateController({60}, 60); |
// Set FEC on that would cause frame length to decrease if receiver frame |
// length range included 20ms. |
- CheckDecision(controller.get(), rtc::Optional<int>(), rtc::Optional<float>(), |
- rtc::Optional<bool>(true), 60); |
+ CheckDecision(controller.get(), rtc::Optional<bool>(true), 60); |
} |
TEST(FrameLengthControllerTest, Maintain60MsOnMultipleConditions) { |
@@ -89,9 +103,10 @@ TEST(FrameLengthControllerTest, Maintain60MsOnMultipleConditions) { |
// 2. |uplink_packet_loss_fraction| is at medium, |
// 3. FEC is not decided ON. |
auto controller = CreateController({20, 60}, 60); |
- CheckDecision(controller.get(), rtc::Optional<int>(kMediumBandwidthBps), |
- rtc::Optional<float>(kMediumPacketLossFraction), |
- rtc::Optional<bool>(), 60); |
+ UpdateNetworkMetrics(controller.get(), |
+ rtc::Optional<int>(kMediumBandwidthBps), |
+ rtc::Optional<float>(kMediumPacketLossFraction)); |
+ CheckDecision(controller.get(), rtc::Optional<bool>(), 60); |
} |
TEST(FrameLengthControllerTest, IncreaseTo60MsOnMultipleConditions) { |
@@ -101,9 +116,28 @@ TEST(FrameLengthControllerTest, IncreaseTo60MsOnMultipleConditions) { |
// AND |
// 3. FEC is not decided or OFF. |
auto controller = CreateController({20, 60}, 20); |
- CheckDecision(controller.get(), rtc::Optional<int>(kFl20msTo60msBandwidthBps), |
- rtc::Optional<float>(kFlIncreasingPacketLossFraction), |
- rtc::Optional<bool>(), 60); |
+ UpdateNetworkMetrics(controller.get(), |
+ rtc::Optional<int>(kFl20msTo60msBandwidthBps), |
+ rtc::Optional<float>(kFlIncreasingPacketLossFraction)); |
+ CheckDecision(controller.get(), rtc::Optional<bool>(), 60); |
+} |
+ |
+TEST(FrameLengthControllerTest, UpdateMultipleNetworkMetricsAtOnce) { |
+ // This test is similar to IncreaseTo60MsOnMultipleConditions. But instead of |
+ // using ::UpdateNetworkMetrics(...), which calls |
+ // FrameLengthController::UpdateNetworkMetrics(...) multiple times, we |
+ // we call it only once. This is to verify that |
+ // FrameLengthController::UpdateNetworkMetrics(...) can handle multiple |
+ // network updates at once. This is, however, not a common use case in current |
+ // audio_network_adaptor_impl.cc. |
+ auto controller = CreateController({20, 60}, 20); |
+ Controller::NetworkMetrics network_metrics; |
+ network_metrics.uplink_bandwidth_bps = |
+ rtc::Optional<int>(kFl20msTo60msBandwidthBps); |
+ network_metrics.uplink_packet_loss_fraction = |
+ rtc::Optional<float>(kFlIncreasingPacketLossFraction); |
+ controller->UpdateNetworkMetrics(network_metrics); |
+ CheckDecision(controller.get(), rtc::Optional<bool>(), 60); |
} |
TEST(FrameLengthControllerTest, |
@@ -111,34 +145,38 @@ TEST(FrameLengthControllerTest, |
auto controller = CreateController({20}, 20); |
// Use a low uplink bandwidth and a low uplink packet loss fraction that would |
// cause frame length to increase if receiver frame length included 60ms. |
- CheckDecision(controller.get(), rtc::Optional<int>(kFl20msTo60msBandwidthBps), |
- rtc::Optional<float>(kFlIncreasingPacketLossFraction), |
- rtc::Optional<bool>(), 20); |
+ UpdateNetworkMetrics(controller.get(), |
+ rtc::Optional<int>(kFl20msTo60msBandwidthBps), |
+ rtc::Optional<float>(kFlIncreasingPacketLossFraction)); |
+ CheckDecision(controller.get(), rtc::Optional<bool>(), 20); |
} |
TEST(FrameLengthControllerTest, Maintain20MsOnMediumUplinkBandwidth) { |
auto controller = CreateController({20, 60}, 20); |
- CheckDecision(controller.get(), rtc::Optional<int>(kMediumBandwidthBps), |
- rtc::Optional<float>(kFlIncreasingPacketLossFraction), |
- rtc::Optional<bool>(), 20); |
+ UpdateNetworkMetrics(controller.get(), |
+ rtc::Optional<int>(kMediumBandwidthBps), |
+ rtc::Optional<float>(kFlIncreasingPacketLossFraction)); |
+ CheckDecision(controller.get(), rtc::Optional<bool>(), 20); |
} |
TEST(FrameLengthControllerTest, Maintain20MsOnMediumUplinkPacketLossFraction) { |
auto controller = CreateController({20, 60}, 20); |
// Use a low uplink bandwidth that would cause frame length to increase if |
// uplink packet loss fraction was low. |
- CheckDecision(controller.get(), rtc::Optional<int>(kFl20msTo60msBandwidthBps), |
- rtc::Optional<float>(kMediumPacketLossFraction), |
- rtc::Optional<bool>(), 20); |
+ UpdateNetworkMetrics(controller.get(), |
+ rtc::Optional<int>(kFl20msTo60msBandwidthBps), |
+ rtc::Optional<float>(kMediumPacketLossFraction)); |
+ CheckDecision(controller.get(), rtc::Optional<bool>(), 20); |
} |
TEST(FrameLengthControllerTest, Maintain20MsWhenFecIsOn) { |
auto controller = CreateController({20, 60}, 20); |
// Use a low uplink bandwidth and a low uplink packet loss fraction that would |
// cause frame length to increase if FEC was not ON. |
- CheckDecision(controller.get(), rtc::Optional<int>(kFl20msTo60msBandwidthBps), |
- rtc::Optional<float>(kFlIncreasingPacketLossFraction), |
- rtc::Optional<bool>(true), 20); |
+ UpdateNetworkMetrics(controller.get(), |
+ rtc::Optional<int>(kFl20msTo60msBandwidthBps), |
+ rtc::Optional<float>(kFlIncreasingPacketLossFraction)); |
+ CheckDecision(controller.get(), rtc::Optional<bool>(true), 20); |
} |
namespace { |
@@ -176,30 +214,34 @@ class FrameLengthControllerForTest { |
TEST(FrameLengthControllerTest, From120MsTo20MsOnHighUplinkBandwidth) { |
FrameLengthControllerForTest controller({20, 60, 120}, 120); |
// It takes two steps for frame length to go from 120ms to 20ms. |
- CheckDecision(controller.get(), rtc::Optional<int>(kFl60msTo20msBandwidthBps), |
- rtc::Optional<float>(), rtc::Optional<bool>(), 60); |
- CheckDecision(controller.get(), rtc::Optional<int>(kFl60msTo20msBandwidthBps), |
- rtc::Optional<float>(), rtc::Optional<bool>(), 20); |
+ UpdateNetworkMetrics(controller.get(), |
+ rtc::Optional<int>(kFl60msTo20msBandwidthBps), |
+ rtc::Optional<float>()); |
+ CheckDecision(controller.get(), rtc::Optional<bool>(), 60); |
+ |
+ UpdateNetworkMetrics(controller.get(), |
+ rtc::Optional<int>(kFl60msTo20msBandwidthBps), |
+ rtc::Optional<float>()); |
+ CheckDecision(controller.get(), rtc::Optional<bool>(), 20); |
} |
TEST(FrameLengthControllerTest, From120MsTo20MsOnHighUplinkPacketLossFraction) { |
FrameLengthControllerForTest controller({20, 60, 120}, 120); |
// It takes two steps for frame length to go from 120ms to 20ms. |
- CheckDecision(controller.get(), rtc::Optional<int>(), |
- rtc::Optional<float>(kFlDecreasingPacketLossFraction), |
- rtc::Optional<bool>(), 60); |
- CheckDecision(controller.get(), rtc::Optional<int>(), |
- rtc::Optional<float>(kFlDecreasingPacketLossFraction), |
- rtc::Optional<bool>(), 20); |
+ UpdateNetworkMetrics(controller.get(), rtc::Optional<int>(), |
+ rtc::Optional<float>(kFlDecreasingPacketLossFraction)); |
+ CheckDecision(controller.get(), rtc::Optional<bool>(), 60); |
+ |
+ UpdateNetworkMetrics(controller.get(), rtc::Optional<int>(), |
+ rtc::Optional<float>(kFlDecreasingPacketLossFraction)); |
+ CheckDecision(controller.get(), rtc::Optional<bool>(), 20); |
} |
TEST(FrameLengthControllerTest, From120MsTo20MsWhenFecIsOn) { |
FrameLengthControllerForTest controller({20, 60, 120}, 120); |
// It takes two steps for frame length to go from 120ms to 20ms. |
- CheckDecision(controller.get(), rtc::Optional<int>(), rtc::Optional<float>(), |
- rtc::Optional<bool>(true), 60); |
- CheckDecision(controller.get(), rtc::Optional<int>(), rtc::Optional<float>(), |
- rtc::Optional<bool>(true), 20); |
+ CheckDecision(controller.get(), rtc::Optional<bool>(true), 60); |
+ CheckDecision(controller.get(), rtc::Optional<bool>(true), 20); |
} |
TEST(FrameLengthControllerTest, From20MsTo120MsOnMultipleConditions) { |
@@ -210,51 +252,59 @@ TEST(FrameLengthControllerTest, From20MsTo120MsOnMultipleConditions) { |
// 3. FEC is not decided or OFF. |
FrameLengthControllerForTest controller({20, 60, 120}, 20); |
// It takes two steps for frame length to go from 20ms to 120ms. |
- CheckDecision(controller.get(), |
- rtc::Optional<int>(kFl60msTo120msBandwidthBps), |
- rtc::Optional<float>(kFlIncreasingPacketLossFraction), |
- rtc::Optional<bool>(), 60); |
- CheckDecision(controller.get(), |
- rtc::Optional<int>(kFl60msTo120msBandwidthBps), |
- rtc::Optional<float>(kFlIncreasingPacketLossFraction), |
- rtc::Optional<bool>(), 120); |
+ UpdateNetworkMetrics(controller.get(), |
+ rtc::Optional<int>(kFl60msTo120msBandwidthBps), |
+ rtc::Optional<float>(kFlIncreasingPacketLossFraction)); |
+ CheckDecision(controller.get(), rtc::Optional<bool>(), 60); |
+ UpdateNetworkMetrics(controller.get(), |
+ rtc::Optional<int>(kFl60msTo120msBandwidthBps), |
+ rtc::Optional<float>(kFlIncreasingPacketLossFraction)); |
+ CheckDecision(controller.get(), rtc::Optional<bool>(), 120); |
} |
TEST(FrameLengthControllerTest, Stall60MsIf120MsNotInReceiverFrameLengthRange) { |
FrameLengthControllerForTest controller({20, 60}, 20); |
- CheckDecision(controller.get(), |
- rtc::Optional<int>(kFl60msTo120msBandwidthBps), |
- rtc::Optional<float>(kFlIncreasingPacketLossFraction), |
- rtc::Optional<bool>(), 60); |
- CheckDecision(controller.get(), |
- rtc::Optional<int>(kFl60msTo120msBandwidthBps), |
- rtc::Optional<float>(kFlIncreasingPacketLossFraction), |
- rtc::Optional<bool>(), 60); |
+ UpdateNetworkMetrics(controller.get(), |
+ rtc::Optional<int>(kFl60msTo120msBandwidthBps), |
+ rtc::Optional<float>(kFlIncreasingPacketLossFraction)); |
+ CheckDecision(controller.get(), rtc::Optional<bool>(), 60); |
+ UpdateNetworkMetrics(controller.get(), |
+ rtc::Optional<int>(kFl60msTo120msBandwidthBps), |
+ rtc::Optional<float>(kFlIncreasingPacketLossFraction)); |
+ CheckDecision(controller.get(), rtc::Optional<bool>(), 60); |
} |
TEST(FrameLengthControllerTest, CheckBehaviorOnChangingNetworkMetrics) { |
FrameLengthControllerForTest controller({20, 60, 120}, 20); |
- CheckDecision(controller.get(), rtc::Optional<int>(kMediumBandwidthBps), |
- rtc::Optional<float>(kFlIncreasingPacketLossFraction), |
- rtc::Optional<bool>(), 20); |
- CheckDecision(controller.get(), rtc::Optional<int>(kFl20msTo60msBandwidthBps), |
- rtc::Optional<float>(kFlIncreasingPacketLossFraction), |
- rtc::Optional<bool>(), 60); |
- CheckDecision(controller.get(), |
- rtc::Optional<int>(kFl60msTo120msBandwidthBps), |
- rtc::Optional<float>(kMediumPacketLossFraction), |
- rtc::Optional<bool>(), 60); |
- CheckDecision(controller.get(), |
- rtc::Optional<int>(kFl60msTo120msBandwidthBps), |
- rtc::Optional<float>(kFlIncreasingPacketLossFraction), |
- rtc::Optional<bool>(), 120); |
- CheckDecision(controller.get(), |
- rtc::Optional<int>(kFl120msTo60msBandwidthBps), |
- rtc::Optional<float>(kFlIncreasingPacketLossFraction), |
- rtc::Optional<bool>(), 60); |
- CheckDecision(controller.get(), rtc::Optional<int>(kMediumPacketLossFraction), |
- rtc::Optional<float>(kFlDecreasingPacketLossFraction), |
- rtc::Optional<bool>(), 20); |
+ UpdateNetworkMetrics(controller.get(), |
+ rtc::Optional<int>(kMediumBandwidthBps), |
+ rtc::Optional<float>(kFlIncreasingPacketLossFraction)); |
+ CheckDecision(controller.get(), rtc::Optional<bool>(), 20); |
+ |
+ UpdateNetworkMetrics(controller.get(), |
+ rtc::Optional<int>(kFl20msTo60msBandwidthBps), |
+ rtc::Optional<float>(kFlIncreasingPacketLossFraction)); |
+ CheckDecision(controller.get(), rtc::Optional<bool>(), 60); |
+ |
+ UpdateNetworkMetrics(controller.get(), |
+ rtc::Optional<int>(kFl60msTo120msBandwidthBps), |
+ rtc::Optional<float>(kMediumPacketLossFraction)); |
+ CheckDecision(controller.get(), rtc::Optional<bool>(), 60); |
+ |
+ UpdateNetworkMetrics(controller.get(), |
+ rtc::Optional<int>(kFl60msTo120msBandwidthBps), |
+ rtc::Optional<float>(kFlIncreasingPacketLossFraction)); |
+ CheckDecision(controller.get(), rtc::Optional<bool>(), 120); |
+ |
+ UpdateNetworkMetrics(controller.get(), |
+ rtc::Optional<int>(kFl120msTo60msBandwidthBps), |
+ rtc::Optional<float>(kFlIncreasingPacketLossFraction)); |
+ CheckDecision(controller.get(), rtc::Optional<bool>(), 60); |
+ |
+ UpdateNetworkMetrics(controller.get(), |
+ rtc::Optional<int>(kMediumPacketLossFraction), |
+ rtc::Optional<float>(kFlDecreasingPacketLossFraction)); |
+ CheckDecision(controller.get(), rtc::Optional<bool>(), 20); |
} |
} // namespace webrtc |