webrtc_m130/audio/test/low_bandwidth_audio_test.cc
Artem Titov b1f2d60456 Reland "Fix collection of audio metrics from PC test framework for audio test"
This is a reland of 2d0880b56954f57548deea51dfa678b80dbf618f

To fix perf bot issue reading of perf results file was updated. Now perf
results file will be generated by each test and then returned via output to
the python script, which will get it and put into final file.

Original change's description:
> Fix collection of audio metrics from PC test framework for audio test
>
> Bug: webrtc:10138
> Change-Id: I18a8509a0cdc4ed1db6894c7540d5c0a155d6233
> Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/144784
> Reviewed-by: Oleh Prypin <oprypin@webrtc.org>
> Reviewed-by: Oskar Sundbom <ossu@webrtc.org>
> Commit-Queue: Artem Titov <titovartem@webrtc.org>
> Cr-Commit-Position: refs/heads/master@{#28514}

Bug: webrtc:10138
Change-Id: I1347f09427736362a2d550612b48e09c06cfb1d1
No-Presubmit: True
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/145201
Commit-Queue: Artem Titov <titovartem@webrtc.org>
Reviewed-by: Oskar Sundbom <ossu@webrtc.org>
Reviewed-by: Oleh Prypin <oprypin@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#28527}
2019-07-10 15:21:30 +00:00

109 lines
3.3 KiB
C++

/*
* Copyright (c) 2017 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 "api/test/simulated_network.h"
#include "audio/test/audio_end_to_end_test.h"
#include "rtc_base/flags.h"
#include "system_wrappers/include/sleep.h"
#include "test/testsupport/file_utils.h"
WEBRTC_DECLARE_int(sample_rate_hz);
WEBRTC_DECLARE_bool(quick);
namespace webrtc {
namespace test {
namespace {
std::string FileSampleRateSuffix() {
return std::to_string(FLAG_sample_rate_hz / 1000);
}
class AudioQualityTest : public AudioEndToEndTest {
public:
AudioQualityTest() = default;
private:
std::string AudioInputFile() const {
return test::ResourcePath(
"voice_engine/audio_tiny" + FileSampleRateSuffix(), "wav");
}
std::string AudioOutputFile() const {
const ::testing::TestInfo* const test_info =
::testing::UnitTest::GetInstance()->current_test_info();
return webrtc::test::OutputPath() + "LowBandwidth_" + test_info->name() +
"_" + FileSampleRateSuffix() + ".wav";
}
std::unique_ptr<TestAudioDeviceModule::Capturer> CreateCapturer() override {
return TestAudioDeviceModule::CreateWavFileReader(AudioInputFile());
}
std::unique_ptr<TestAudioDeviceModule::Renderer> CreateRenderer() override {
return TestAudioDeviceModule::CreateBoundedWavFileWriter(
AudioOutputFile(), FLAG_sample_rate_hz);
}
void PerformTest() override {
if (FLAG_quick) {
// Let the recording run for a small amount of time to check if it works.
SleepMs(1000);
} else {
AudioEndToEndTest::PerformTest();
}
}
void OnStreamsStopped() override {
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\n", test_info->name(), AudioInputFile().c_str(),
AudioOutputFile().c_str());
}
};
class Mobile2GNetworkTest : public AudioQualityTest {
void ModifyAudioConfigs(
AudioSendStream::Config* send_config,
std::vector<AudioReceiveStream::Config>* receive_configs) override {
send_config->send_codec_spec = AudioSendStream::Config::SendCodecSpec(
test::CallTest::kAudioSendPayloadType,
{"OPUS",
48000,
2,
{{"maxaveragebitrate", "6000"}, {"ptime", "60"}, {"stereo", "1"}}});
}
BuiltInNetworkBehaviorConfig GetNetworkPipeConfig() const override {
BuiltInNetworkBehaviorConfig pipe_config;
pipe_config.link_capacity_kbps = 12;
pipe_config.queue_length_packets = 1500;
pipe_config.queue_delay_ms = 400;
return pipe_config;
}
};
} // namespace
using LowBandwidthAudioTest = CallTest;
TEST_F(LowBandwidthAudioTest, GoodNetworkHighBitrate) {
AudioQualityTest test;
RunBaseTest(&test);
}
TEST_F(LowBandwidthAudioTest, Mobile2GNetwork) {
Mobile2GNetworkTest test;
RunBaseTest(&test);
}
} // namespace test
} // namespace webrtc