From 36d22d82aa202bb199967e9512281e9a53db42c9 Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Sun, 7 Apr 2024 21:33:14 +0200 Subject: Adding upstream version 115.7.0esr. Signed-off-by: Daniel Baumann --- .../audio/test/pc_low_bandwidth_audio_test.cc | 176 +++++++++++++++++++++ 1 file changed, 176 insertions(+) create mode 100644 third_party/libwebrtc/audio/test/pc_low_bandwidth_audio_test.cc (limited to 'third_party/libwebrtc/audio/test/pc_low_bandwidth_audio_test.cc') diff --git a/third_party/libwebrtc/audio/test/pc_low_bandwidth_audio_test.cc b/third_party/libwebrtc/audio/test/pc_low_bandwidth_audio_test.cc new file mode 100644 index 0000000000..8b733d578d --- /dev/null +++ b/third_party/libwebrtc/audio/test/pc_low_bandwidth_audio_test.cc @@ -0,0 +1,176 @@ +/* + * Copyright (c) 2019 The WebRTC project authors. All Rights Reserved. + * + * Use of this source code is governed by a BSD-style license + * that can be found in the LICENSE file in the root of the source + * tree. An additional intellectual property rights grant can be found + * in the file PATENTS. All contributing project authors may + * be found in the AUTHORS file in the root of the source tree. + */ + +#include + +#include "absl/flags/declare.h" +#include "absl/flags/flag.h" +#include "absl/strings/string_view.h" +#include "api/test/create_network_emulation_manager.h" +#include "api/test/create_peerconnection_quality_test_fixture.h" +#include "api/test/metrics/chrome_perf_dashboard_metrics_exporter.h" +#include "api/test/metrics/global_metrics_logger_and_exporter.h" +#include "api/test/metrics/metrics_exporter.h" +#include "api/test/metrics/stdout_metrics_exporter.h" +#include "api/test/network_emulation_manager.h" +#include "api/test/pclf/media_configuration.h" +#include "api/test/pclf/media_quality_test_params.h" +#include "api/test/pclf/peer_configurer.h" +#include "api/test/peerconnection_quality_test_fixture.h" +#include "api/test/simulated_network.h" +#include "api/test/time_controller.h" +#include "call/simulated_network.h" +#include "test/gtest.h" +#include "test/pc/e2e/network_quality_metrics_reporter.h" +#include "test/testsupport/file_utils.h" + +ABSL_DECLARE_FLAG(std::string, test_case_prefix); +ABSL_DECLARE_FLAG(int, sample_rate_hz); +ABSL_DECLARE_FLAG(bool, quick); + +namespace webrtc { +namespace test { + +using ::webrtc::webrtc_pc_e2e::AudioConfig; +using ::webrtc::webrtc_pc_e2e::PeerConfigurer; +using ::webrtc::webrtc_pc_e2e::RunParams; + +namespace { + +constexpr int kTestDurationMs = 5400; +constexpr int kQuickTestDurationMs = 100; + +std::string GetMetricTestCaseName() { + const ::testing::TestInfo* const test_info = + ::testing::UnitTest::GetInstance()->current_test_info(); + std::string test_case_prefix(absl::GetFlag(FLAGS_test_case_prefix)); + if (test_case_prefix.empty()) { + return test_info->name(); + } + return test_case_prefix + "_" + test_info->name(); +} + +std::unique_ptr +CreateTestFixture(absl::string_view test_case_name, + TimeController& time_controller, + std::pair network_links, + rtc::FunctionView alice_configurer, + rtc::FunctionView bob_configurer) { + auto fixture = webrtc_pc_e2e::CreatePeerConnectionE2EQualityTestFixture( + std::string(test_case_name), time_controller, + /*audio_quality_analyzer=*/nullptr, + /*video_quality_analyzer=*/nullptr); + auto alice = std::make_unique( + network_links.first->network_dependencies()); + auto bob = std::make_unique( + network_links.second->network_dependencies()); + alice_configurer(alice.get()); + bob_configurer(bob.get()); + fixture->AddPeer(std::move(alice)); + fixture->AddPeer(std::move(bob)); + fixture->AddQualityMetricsReporter( + std::make_unique( + network_links.first, network_links.second, + test::GetGlobalMetricsLogger())); + return fixture; +} + +std::string FileSampleRateSuffix() { + return std::to_string(absl::GetFlag(FLAGS_sample_rate_hz) / 1000); +} + +std::string AudioInputFile() { + return test::ResourcePath("voice_engine/audio_tiny" + FileSampleRateSuffix(), + "wav"); +} + +std::string AudioOutputFile() { + const ::testing::TestInfo* const test_info = + ::testing::UnitTest::GetInstance()->current_test_info(); + return webrtc::test::OutputPath() + "PCLowBandwidth_" + test_info->name() + + "_" + FileSampleRateSuffix() + ".wav"; +} + +std::string PerfResultsOutputFile() { + return webrtc::test::OutputPath() + "PCLowBandwidth_perf_" + + FileSampleRateSuffix() + ".pb"; +} + +void LogTestResults() { + std::string perf_results_output_file = PerfResultsOutputFile(); + std::vector> exporters; + exporters.push_back(std::make_unique()); + exporters.push_back(std::make_unique( + perf_results_output_file)); + EXPECT_TRUE( + ExportPerfMetric(*GetGlobalMetricsLogger(), std::move(exporters))); + + const ::testing::TestInfo* const test_info = + ::testing::UnitTest::GetInstance()->current_test_info(); + + // Output information about the input and output audio files so that further + // processing can be done by an external process. + printf("TEST %s %s %s %s\n", test_info->name(), AudioInputFile().c_str(), + AudioOutputFile().c_str(), perf_results_output_file.c_str()); +} + +} // namespace + +TEST(PCLowBandwidthAudioTest, PCGoodNetworkHighBitrate) { + std::unique_ptr network_emulation_manager = + CreateNetworkEmulationManager(); + auto fixture = CreateTestFixture( + GetMetricTestCaseName(), *network_emulation_manager->time_controller(), + network_emulation_manager->CreateEndpointPairWithTwoWayRoutes( + BuiltInNetworkBehaviorConfig()), + [](PeerConfigurer* alice) { + AudioConfig audio; + audio.stream_label = "alice-audio"; + audio.mode = AudioConfig::Mode::kFile; + audio.input_file_name = AudioInputFile(); + audio.output_dump_file_name = AudioOutputFile(); + audio.sampling_frequency_in_hz = absl::GetFlag(FLAGS_sample_rate_hz); + alice->SetAudioConfig(std::move(audio)); + }, + [](PeerConfigurer* bob) {}); + fixture->Run(RunParams(TimeDelta::Millis( + absl::GetFlag(FLAGS_quick) ? kQuickTestDurationMs : kTestDurationMs))); + LogTestResults(); +} + +TEST(PCLowBandwidthAudioTest, PC40kbpsNetwork) { + std::unique_ptr network_emulation_manager = + CreateNetworkEmulationManager(); + BuiltInNetworkBehaviorConfig config; + config.link_capacity_kbps = 40; + config.queue_length_packets = 1500; + config.queue_delay_ms = 400; + config.loss_percent = 1; + auto fixture = CreateTestFixture( + GetMetricTestCaseName(), *network_emulation_manager->time_controller(), + network_emulation_manager->CreateEndpointPairWithTwoWayRoutes(config), + [](PeerConfigurer* alice) { + AudioConfig audio; + audio.stream_label = "alice-audio"; + audio.mode = AudioConfig::Mode::kFile; + audio.input_file_name = AudioInputFile(); + audio.output_dump_file_name = AudioOutputFile(); + audio.sampling_frequency_in_hz = absl::GetFlag(FLAGS_sample_rate_hz); + alice->SetAudioConfig(std::move(audio)); + }, + [](PeerConfigurer* bob) {}); + fixture->Run(RunParams(TimeDelta::Millis( + absl::GetFlag(FLAGS_quick) ? kQuickTestDurationMs : kTestDurationMs))); + LogTestResults(); +} + +} // namespace test +} // namespace webrtc -- cgit v1.2.3