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

Side by Side Diff: webrtc/audio/test/audio_bwe_integration_test.cc

Issue 2970653004: Reimplemeted "Test and fix for huge bwe drop after alr state" (Closed)
Patch Set: Respond to comments Created 3 years, 5 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 unified diff | Download patch
OLDNEW
(Empty)
1 /*
2 * Copyright (c) 2017 The WebRTC project authors. All Rights Reserved.
3 *
4 * Use of this source code is governed by a BSD-style license
5 * that can be found in the LICENSE file in the root of the source
6 * tree. An additional intellectual property rights grant can be found
7 * in the file PATENTS. All contributing project authors may
8 * be found in the AUTHORS file in the root of the source tree.
9 */
10
11 #include "webrtc/audio/test/audio_bwe_integration_test.h"
12
13 #include "webrtc/common_audio/wav_file.h"
14 #include "webrtc/rtc_base/ptr_util.h"
15 #include "webrtc/system_wrappers/include/sleep.h"
16 #include "webrtc/test/field_trial.h"
17 #include "webrtc/test/gtest.h"
18 #include "webrtc/test/testsupport/fileutils.h"
19
20 namespace webrtc {
21 namespace test {
22
23 namespace {
24 // Wait a second between stopping sending and stopping receiving audio.
25 constexpr int kExtraProcessTimeMs = 1000;
26 } // namespace
27
28 AudioBweTest::AudioBweTest() : EndToEndTest(CallTest::kDefaultTimeoutMs) {}
29
30 size_t AudioBweTest::GetNumVideoStreams() const {
31 return 0;
32 }
33 size_t AudioBweTest::GetNumAudioStreams() const {
34 return 1;
35 }
36 size_t AudioBweTest::GetNumFlexfecStreams() const {
37 return 0;
38 }
39
40 std::unique_ptr<test::FakeAudioDevice::Capturer>
41 AudioBweTest::CreateCapturer() {
42 return test::FakeAudioDevice::CreateWavFileReader(AudioInputFile());
43 }
44
45 void AudioBweTest::OnFakeAudioDevicesCreated(
46 test::FakeAudioDevice* send_audio_device,
47 test::FakeAudioDevice* recv_audio_device) {
48 send_audio_device_ = send_audio_device;
49 }
50
51 test::PacketTransport* AudioBweTest::CreateSendTransport(Call* sender_call) {
52 return new test::PacketTransport(
53 sender_call, this, test::PacketTransport::kSender,
54 test::CallTest::payload_type_map_, GetNetworkPipeConfig());
55 }
56
57 test::PacketTransport* AudioBweTest::CreateReceiveTransport() {
58 return new test::PacketTransport(
59 nullptr, this, test::PacketTransport::kReceiver,
60 test::CallTest::payload_type_map_, GetNetworkPipeConfig());
61 }
62
63 void AudioBweTest::PerformTest() {
64 send_audio_device_->WaitForRecordingEnd();
65 SleepMs(GetNetworkPipeConfig().queue_delay_ms + kExtraProcessTimeMs);
66 }
67
68 class StatsPollTask : public rtc::QueuedTask {
69 public:
70 explicit StatsPollTask(Call* sender_call) : sender_call_(sender_call) {}
71
72 private:
73 bool Run() override {
74 RTC_CHECK(sender_call_);
75 Call::Stats call_stats = sender_call_->GetStats();
76 EXPECT_GT(call_stats.send_bandwidth_bps, 25000);
77 rtc::TaskQueue::Current()->PostDelayedTask(
78 std::unique_ptr<QueuedTask>(this), 100);
79 return false;
80 }
81 Call* sender_call_;
82 };
83
84 class NoBandwidthDropAfterDtx : public AudioBweTest {
85 public:
86 NoBandwidthDropAfterDtx()
87 : sender_call_(nullptr), stats_poller_("stats poller task queue") {}
88
89 void ModifyAudioConfigs(
90 AudioSendStream::Config* send_config,
91 std::vector<AudioReceiveStream::Config>* receive_configs) override {
92 send_config->send_codec_spec =
93 rtc::Optional<AudioSendStream::Config::SendCodecSpec>(
94 {test::CallTest::kAudioSendPayloadType,
95 {"OPUS",
96 48000,
97 2,
98 {{"ptime", "60"}, {"usedtx", "1"}, {"stereo", "1"}}}});
99
100 send_config->min_bitrate_bps = 6000;
101 send_config->max_bitrate_bps = 100000;
102 send_config->rtp.extensions.push_back(
103 RtpExtension(RtpExtension::kTransportSequenceNumberUri,
104 kTransportSequenceNumberExtensionId));
105 for (AudioReceiveStream::Config& recv_config : *receive_configs) {
106 recv_config.rtp.transport_cc = true;
107 recv_config.rtp.extensions = send_config->rtp.extensions;
108 recv_config.rtp.remote_ssrc = send_config->rtp.ssrc;
109 }
110 }
111
112 std::string AudioInputFile() override {
113 return test::ResourcePath("voice_engine/audio_dtx16", "wav");
114 }
115
116 FakeNetworkPipe::Config GetNetworkPipeConfig() override {
117 FakeNetworkPipe::Config pipe_config;
118 pipe_config.link_capacity_kbps = 50;
119 pipe_config.queue_length_packets = 1500;
120 pipe_config.queue_delay_ms = 300;
121 return pipe_config;
122 }
123
124 void OnCallsCreated(Call* sender_call, Call* receiver_call) override {
125 sender_call_ = sender_call;
126 }
127
128 void PerformTest() override {
129 stats_poller_.PostDelayedTask(
130 std::unique_ptr<rtc::QueuedTask>(new StatsPollTask(sender_call_)), 100);
131 sender_call_->OnTransportOverheadChanged(webrtc::MediaType::AUDIO, 0);
132 AudioBweTest::PerformTest();
133 }
134
135 private:
136 Call* sender_call_;
137 rtc::TaskQueue stats_poller_;
138 };
139
140 using AudioBweIntegrationTest = CallTest;
141
142 TEST_F(AudioBweIntegrationTest, NoBandwidthDropAfterDtx) {
143 webrtc::test::ScopedFieldTrials override_field_trials(
144 "WebRTC-Audio-SendSideBwe/Enabled/"
145 "WebRTC-SendSideBwe-WithOverhead/Enabled/");
146 NoBandwidthDropAfterDtx test;
147 RunBaseTest(&test);
148 }
149
150 } // namespace test
151 } // namespace webrtc
OLDNEW
« no previous file with comments | « webrtc/audio/test/audio_bwe_integration_test.h ('k') | webrtc/modules/congestion_controller/BUILD.gn » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698