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

Unified Diff: webrtc/modules/audio_coding/audio_network_adaptor/bitrate_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/bitrate_controller_unittest.cc
diff --git a/webrtc/modules/audio_coding/audio_network_adaptor/bitrate_controller_unittest.cc b/webrtc/modules/audio_coding/audio_network_adaptor/bitrate_controller_unittest.cc
index a4ebfc886024603b885f43f2e08822e7aa79d575..a90cb9a213bfbe987f3b1cabebf842dbd8132cba 100644
--- a/webrtc/modules/audio_coding/audio_network_adaptor/bitrate_controller_unittest.cc
+++ b/webrtc/modules/audio_coding/audio_network_adaptor/bitrate_controller_unittest.cc
@@ -17,17 +17,31 @@ namespace audio_network_adaptor {
namespace {
+void UpdateNetworkMetrics(
+ BitrateController* controller,
+ const rtc::Optional<int>& target_audio_bitrate_bps,
+ const rtc::Optional<size_t>& overhead_bytes_per_packet) {
+ // 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 (target_audio_bitrate_bps) {
+ Controller::NetworkMetrics network_metrics;
+ network_metrics.target_audio_bitrate_bps = target_audio_bitrate_bps;
+ controller->UpdateNetworkMetrics(network_metrics);
+ }
+ if (overhead_bytes_per_packet) {
+ Controller::NetworkMetrics network_metrics;
+ network_metrics.overhead_bytes_per_packet = overhead_bytes_per_packet;
+ controller->UpdateNetworkMetrics(network_metrics);
+ }
+}
+
void CheckDecision(BitrateController* controller,
- const rtc::Optional<int>& target_audio_bitrate_bps,
- const rtc::Optional<size_t>& overhead_bytes_per_packet,
const rtc::Optional<int>& frame_length_ms,
int expected_bitrate_bps) {
- Controller::NetworkMetrics metrics;
- metrics.target_audio_bitrate_bps = target_audio_bitrate_bps;
- metrics.overhead_bytes_per_packet = overhead_bytes_per_packet;
AudioNetworkAdaptor::EncoderRuntimeConfig config;
config.frame_length_ms = frame_length_ms;
- controller->MakeDecision(metrics, &config);
+ controller->MakeDecision(&config);
EXPECT_EQ(rtc::Optional<int>(expected_bitrate_bps), config.bitrate_bps);
}
@@ -43,9 +57,9 @@ TEST(AnaBitrateControllerTest, OutputInitValueWhenTargetBitrateUnknown) {
constexpr size_t kOverheadBytesPerPacket = 64;
BitrateController controller(
BitrateController::Config(kInitialBitrateBps, kInitialFrameLengthMs));
- CheckDecision(&controller, rtc::Optional<int>(),
- rtc::Optional<size_t>(kOverheadBytesPerPacket),
- rtc::Optional<int>(kInitialFrameLengthMs * 2),
+ UpdateNetworkMetrics(&controller, rtc::Optional<int>(),
+ rtc::Optional<size_t>(kOverheadBytesPerPacket));
+ CheckDecision(&controller, rtc::Optional<int>(kInitialFrameLengthMs * 2),
kInitialBitrateBps);
}
@@ -55,9 +69,9 @@ TEST(AnaBitrateControllerTest, OutputInitValueWhenOverheadUnknown) {
constexpr int kTargetBitrateBps = 48000;
BitrateController controller(
BitrateController::Config(kInitialBitrateBps, kInitialFrameLengthMs));
- CheckDecision(&controller, rtc::Optional<int>(kTargetBitrateBps),
- rtc::Optional<size_t>(),
- rtc::Optional<int>(kInitialFrameLengthMs * 2),
+ UpdateNetworkMetrics(&controller, rtc::Optional<int>(kTargetBitrateBps),
+ rtc::Optional<size_t>());
+ CheckDecision(&controller, rtc::Optional<int>(kInitialFrameLengthMs * 2),
kInitialBitrateBps);
}
@@ -74,9 +88,38 @@ TEST(AnaBitrateControllerTest, ChangeBitrateOnTargetBitrateChanged) {
kOverheadBytesPerPacket * 8 * 1000 / kInitialFrameLengthMs;
// Frame length unchanged, bitrate changes in accordance with
// |metrics.target_audio_bitrate_bps| and |metrics.overhead_bytes_per_packet|.
- CheckDecision(&controller, rtc::Optional<int>(kTargetBitrateBps),
- rtc::Optional<size_t>(kOverheadBytesPerPacket),
- rtc::Optional<int>(kInitialFrameLengthMs), kBitrateBps);
+ UpdateNetworkMetrics(&controller, rtc::Optional<int>(kTargetBitrateBps),
+ rtc::Optional<size_t>(kOverheadBytesPerPacket));
+ CheckDecision(&controller, rtc::Optional<int>(kInitialFrameLengthMs),
+ kBitrateBps);
+}
+
+TEST(AnaBitrateControllerTest, UpdateMultipleNetworkMetricsAtOnce) {
+ // This test is similar to ChangeBitrateOnTargetBitrateChanged. But instead of
+ // using ::UpdateNetworkMetrics(...), which calls
+ // BitrateController::UpdateNetworkMetrics(...) multiple times, we
+ // we call it only once. This is to verify that
+ // BitrateController::UpdateNetworkMetrics(...) can handle multiple
+ // network updates at once. This is, however, not a common use case in current
+ // audio_network_adaptor_impl.cc.
+ test::ScopedFieldTrials override_field_trials(
+ "WebRTC-SendSideBwe-WithOverhead/Enabled/");
+ constexpr int kInitialFrameLengthMs = 20;
+ BitrateController controller(
+ BitrateController::Config(32000, kInitialFrameLengthMs));
+ constexpr int kTargetBitrateBps = 48000;
+ constexpr size_t kOverheadBytesPerPacket = 64;
+ constexpr int kBitrateBps =
+ kTargetBitrateBps -
+ kOverheadBytesPerPacket * 8 * 1000 / kInitialFrameLengthMs;
+ Controller::NetworkMetrics network_metrics;
+ network_metrics.target_audio_bitrate_bps =
+ rtc::Optional<int>(kTargetBitrateBps);
+ network_metrics.overhead_bytes_per_packet =
+ rtc::Optional<size_t>(kOverheadBytesPerPacket);
+ controller.UpdateNetworkMetrics(network_metrics);
+ CheckDecision(&controller, rtc::Optional<int>(kInitialFrameLengthMs),
+ kBitrateBps);
}
TEST(AnaBitrateControllerTest, TreatUnknownFrameLengthAsFrameLengthUnchanged) {
@@ -90,9 +133,9 @@ TEST(AnaBitrateControllerTest, TreatUnknownFrameLengthAsFrameLengthUnchanged) {
constexpr int kBitrateBps =
kTargetBitrateBps -
kOverheadBytesPerPacket * 8 * 1000 / kInitialFrameLengthMs;
- CheckDecision(&controller, rtc::Optional<int>(kTargetBitrateBps),
- rtc::Optional<size_t>(kOverheadBytesPerPacket),
- rtc::Optional<int>(), kBitrateBps);
+ UpdateNetworkMetrics(&controller, rtc::Optional<int>(kTargetBitrateBps),
+ rtc::Optional<size_t>(kOverheadBytesPerPacket));
+ CheckDecision(&controller, rtc::Optional<int>(), kBitrateBps);
}
TEST(AnaBitrateControllerTest, IncreaseBitrateOnFrameLengthIncreased) {
@@ -107,17 +150,17 @@ TEST(AnaBitrateControllerTest, IncreaseBitrateOnFrameLengthIncreased) {
constexpr int kBitrateBps =
kTargetBitrateBps -
kOverheadBytesPerPacket * 8 * 1000 / kInitialFrameLengthMs;
- CheckDecision(&controller, rtc::Optional<int>(kTargetBitrateBps),
- rtc::Optional<size_t>(kOverheadBytesPerPacket),
- rtc::Optional<int>(), kBitrateBps);
+ UpdateNetworkMetrics(&controller, rtc::Optional<int>(kTargetBitrateBps),
+ rtc::Optional<size_t>(kOverheadBytesPerPacket));
+ CheckDecision(&controller, rtc::Optional<int>(), kBitrateBps);
constexpr int kFrameLengthMs = 60;
constexpr size_t kPacketOverheadRateDiff =
kOverheadBytesPerPacket * 8 * 1000 / 20 -
kOverheadBytesPerPacket * 8 * 1000 / 60;
- CheckDecision(&controller, rtc::Optional<int>(kTargetBitrateBps),
- rtc::Optional<size_t>(kOverheadBytesPerPacket),
- rtc::Optional<int>(kFrameLengthMs),
+ UpdateNetworkMetrics(&controller, rtc::Optional<int>(kTargetBitrateBps),
+ rtc::Optional<size_t>(kOverheadBytesPerPacket));
+ CheckDecision(&controller, rtc::Optional<int>(kFrameLengthMs),
kBitrateBps + kPacketOverheadRateDiff);
}
@@ -133,17 +176,17 @@ TEST(AnaBitrateControllerTest, DecreaseBitrateOnFrameLengthDecreased) {
constexpr int kBitrateBps =
kTargetBitrateBps -
kOverheadBytesPerPacket * 8 * 1000 / kInitialFrameLengthMs;
- CheckDecision(&controller, rtc::Optional<int>(kTargetBitrateBps),
- rtc::Optional<size_t>(kOverheadBytesPerPacket),
- rtc::Optional<int>(), kBitrateBps);
+ UpdateNetworkMetrics(&controller, rtc::Optional<int>(kTargetBitrateBps),
+ rtc::Optional<size_t>(kOverheadBytesPerPacket));
+ CheckDecision(&controller, rtc::Optional<int>(), kBitrateBps);
constexpr int kFrameLengthMs = 20;
constexpr size_t kPacketOverheadRateDiff =
kOverheadBytesPerPacket * 8 * 1000 / 20 -
kOverheadBytesPerPacket * 8 * 1000 / 60;
- CheckDecision(&controller, rtc::Optional<int>(kTargetBitrateBps),
- rtc::Optional<size_t>(kOverheadBytesPerPacket),
- rtc::Optional<int>(kFrameLengthMs),
+ UpdateNetworkMetrics(&controller, rtc::Optional<int>(kTargetBitrateBps),
+ rtc::Optional<size_t>(kOverheadBytesPerPacket));
+ CheckDecision(&controller, rtc::Optional<int>(kFrameLengthMs),
kBitrateBps - kPacketOverheadRateDiff);
}
@@ -156,9 +199,9 @@ TEST(AnaBitrateControllerTest, BitrateNeverBecomesNegative) {
// Set a target rate smaller than overhead rate, the bitrate is bounded by 0.
constexpr int kTargetBitrateBps =
kOverheadBytesPerPacket * 8 * 1000 / kFrameLengthMs - 1;
- CheckDecision(&controller, rtc::Optional<int>(kTargetBitrateBps),
- rtc::Optional<size_t>(kOverheadBytesPerPacket),
- rtc::Optional<int>(kFrameLengthMs), 0);
+ UpdateNetworkMetrics(&controller, rtc::Optional<int>(kTargetBitrateBps),
+ rtc::Optional<size_t>(kOverheadBytesPerPacket));
+ CheckDecision(&controller, rtc::Optional<int>(kFrameLengthMs), 0);
}
TEST(AnaBitrateControllerTest, CheckBehaviorOnChangingCondition) {
@@ -173,39 +216,44 @@ TEST(AnaBitrateControllerTest, CheckBehaviorOnChangingCondition) {
int current_bitrate =
overall_bitrate - overhead_bytes_per_packet * 8 * 1000 / frame_length_ms;
- CheckDecision(&controller, rtc::Optional<int>(overall_bitrate),
- rtc::Optional<size_t>(overhead_bytes_per_packet),
- rtc::Optional<int>(frame_length_ms), current_bitrate);
+ UpdateNetworkMetrics(&controller, rtc::Optional<int>(overall_bitrate),
+ rtc::Optional<size_t>(overhead_bytes_per_packet));
+ CheckDecision(&controller, rtc::Optional<int>(frame_length_ms),
+ current_bitrate);
// Next: increase overall bitrate.
overall_bitrate += 100;
current_bitrate += 100;
- CheckDecision(&controller, rtc::Optional<int>(overall_bitrate),
- rtc::Optional<size_t>(overhead_bytes_per_packet),
- rtc::Optional<int>(frame_length_ms), current_bitrate);
+ UpdateNetworkMetrics(&controller, rtc::Optional<int>(overall_bitrate),
+ rtc::Optional<size_t>(overhead_bytes_per_packet));
+ CheckDecision(&controller, rtc::Optional<int>(frame_length_ms),
+ current_bitrate);
// Next: change frame length.
frame_length_ms = 60;
current_bitrate += overhead_bytes_per_packet * 8 * 1000 / 20 -
overhead_bytes_per_packet * 8 * 1000 / 60;
- CheckDecision(&controller, rtc::Optional<int>(overall_bitrate),
- rtc::Optional<size_t>(overhead_bytes_per_packet),
- rtc::Optional<int>(frame_length_ms), current_bitrate);
+ UpdateNetworkMetrics(&controller, rtc::Optional<int>(overall_bitrate),
+ rtc::Optional<size_t>(overhead_bytes_per_packet));
+ CheckDecision(&controller, rtc::Optional<int>(frame_length_ms),
+ current_bitrate);
// Next: change overhead.
overhead_bytes_per_packet -= 30;
current_bitrate += 30 * 8 * 1000 / frame_length_ms;
- CheckDecision(&controller, rtc::Optional<int>(overall_bitrate),
- rtc::Optional<size_t>(overhead_bytes_per_packet),
- rtc::Optional<int>(frame_length_ms), current_bitrate);
+ UpdateNetworkMetrics(&controller, rtc::Optional<int>(overall_bitrate),
+ rtc::Optional<size_t>(overhead_bytes_per_packet));
+ CheckDecision(&controller, rtc::Optional<int>(frame_length_ms),
+ current_bitrate);
// Next: change frame length.
frame_length_ms = 20;
current_bitrate -= overhead_bytes_per_packet * 8 * 1000 / 20 -
overhead_bytes_per_packet * 8 * 1000 / 60;
- CheckDecision(&controller, rtc::Optional<int>(overall_bitrate),
- rtc::Optional<size_t>(overhead_bytes_per_packet),
- rtc::Optional<int>(frame_length_ms), current_bitrate);
+ UpdateNetworkMetrics(&controller, rtc::Optional<int>(overall_bitrate),
+ rtc::Optional<size_t>(overhead_bytes_per_packet));
+ CheckDecision(&controller, rtc::Optional<int>(frame_length_ms),
+ current_bitrate);
// Next: decrease overall bitrate and frame length.
overall_bitrate -= 100;
@@ -214,9 +262,10 @@ TEST(AnaBitrateControllerTest, CheckBehaviorOnChangingCondition) {
current_bitrate += overhead_bytes_per_packet * 8 * 1000 / 20 -
overhead_bytes_per_packet * 8 * 1000 / 60;
- CheckDecision(&controller, rtc::Optional<int>(overall_bitrate),
- rtc::Optional<size_t>(overhead_bytes_per_packet),
- rtc::Optional<int>(frame_length_ms), current_bitrate);
+ UpdateNetworkMetrics(&controller, rtc::Optional<int>(overall_bitrate),
+ rtc::Optional<size_t>(overhead_bytes_per_packet));
+ CheckDecision(&controller, rtc::Optional<int>(frame_length_ms),
+ current_bitrate);
}
} // namespace audio_network_adaptor

Powered by Google App Engine
This is Rietveld 408576698