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

Unified Diff: webrtc/modules/audio_coding/audio_network_adaptor/frame_length_controller_unittest.cc

Issue 2643133003: Instantly pass network changes to controllers in audio network adaptor. (Closed)
Patch Set: fixing unittests Created 3 years, 11 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
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

Powered by Google App Engine
This is Rietveld 408576698