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

Side by Side Diff: webrtc/call/bitrate_estimator_tests.cc

Issue 2479383003: Remove audio from BitrateEstimatorTest. (Closed)
Patch Set: Created 4 years, 1 month 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
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * Copyright (c) 2013 The WebRTC project authors. All Rights Reserved. 2 * Copyright (c) 2013 The WebRTC project authors. All Rights Reserved.
3 * 3 *
4 * Use of this source code is governed by a BSD-style license 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 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 6 * tree. An additional intellectual property rights grant can be found
7 * in the file PATENTS. All contributing project authors may 7 * in the file PATENTS. All contributing project authors may
8 * be found in the AUTHORS file in the root of the source tree. 8 * be found in the AUTHORS file in the root of the source tree.
9 */ 9 */
10 #include <functional> 10 #include <functional>
11 #include <list> 11 #include <list>
12 #include <memory> 12 #include <memory>
13 #include <string> 13 #include <string>
14 14
15 #include "webrtc/api/call/audio_state.h"
16 #include "webrtc/base/checks.h" 15 #include "webrtc/base/checks.h"
17 #include "webrtc/base/event.h" 16 #include "webrtc/base/event.h"
18 #include "webrtc/base/logging.h" 17 #include "webrtc/base/logging.h"
19 #include "webrtc/base/thread_annotations.h" 18 #include "webrtc/base/thread_annotations.h"
20 #include "webrtc/call.h" 19 #include "webrtc/call.h"
21 #include "webrtc/system_wrappers/include/critical_section_wrapper.h" 20 #include "webrtc/system_wrappers/include/critical_section_wrapper.h"
22 #include "webrtc/system_wrappers/include/trace.h" 21 #include "webrtc/system_wrappers/include/trace.h"
23 #include "webrtc/test/call_test.h" 22 #include "webrtc/test/call_test.h"
24 #include "webrtc/test/direct_transport.h" 23 #include "webrtc/test/direct_transport.h"
25 #include "webrtc/test/encoder_settings.h" 24 #include "webrtc/test/encoder_settings.h"
26 #include "webrtc/test/fake_decoder.h" 25 #include "webrtc/test/fake_decoder.h"
27 #include "webrtc/test/fake_encoder.h" 26 #include "webrtc/test/fake_encoder.h"
28 #include "webrtc/test/frame_generator_capturer.h" 27 #include "webrtc/test/frame_generator_capturer.h"
29 #include "webrtc/test/gtest.h" 28 #include "webrtc/test/gtest.h"
30 #include "webrtc/test/mock_voice_engine.h"
31 29
32 namespace webrtc { 30 namespace webrtc {
33 namespace { 31 namespace {
34 // Note: If you consider to re-use this class, think twice and instead consider 32 // Note: If you consider to re-use this class, think twice and instead consider
35 // writing tests that don't depend on the logging system. 33 // writing tests that don't depend on the logging system.
36 class LogObserver { 34 class LogObserver {
37 public: 35 public:
38 LogObserver() { rtc::LogMessage::AddLogToStream(&callback_, rtc::LS_INFO); } 36 LogObserver() { rtc::LogMessage::AddLogToStream(&callback_, rtc::LS_INFO); }
39 37
40 ~LogObserver() { rtc::LogMessage::RemoveLogToStream(&callback_); } 38 ~LogObserver() { rtc::LogMessage::RemoveLogToStream(&callback_); }
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after
94 92
95 Callback callback_; 93 Callback callback_;
96 }; 94 };
97 } // namespace 95 } // namespace
98 96
99 static const int kTOFExtensionId = 4; 97 static const int kTOFExtensionId = 4;
100 static const int kASTExtensionId = 5; 98 static const int kASTExtensionId = 5;
101 99
102 class BitrateEstimatorTest : public test::CallTest { 100 class BitrateEstimatorTest : public test::CallTest {
103 public: 101 public:
104 BitrateEstimatorTest() : mock_voice_engine_(decoder_factory_), 102 BitrateEstimatorTest() : receive_config_(nullptr) {}
105 receive_config_(nullptr) {}
106 103
107 virtual ~BitrateEstimatorTest() { EXPECT_TRUE(streams_.empty()); } 104 virtual ~BitrateEstimatorTest() { EXPECT_TRUE(streams_.empty()); }
108 105
109 virtual void SetUp() { 106 virtual void SetUp() {
110 AudioState::Config audio_state_config;
111 audio_state_config.voice_engine = &mock_voice_engine_;
112 Call::Config config(&event_log_); 107 Call::Config config(&event_log_);
113 config.audio_state = AudioState::Create(audio_state_config);
114 receiver_call_.reset(Call::Create(config)); 108 receiver_call_.reset(Call::Create(config));
115 sender_call_.reset(Call::Create(config)); 109 sender_call_.reset(Call::Create(config));
116 110
117 send_transport_.reset(new test::DirectTransport(sender_call_.get())); 111 send_transport_.reset(new test::DirectTransport(sender_call_.get()));
118 send_transport_->SetReceiver(receiver_call_->Receiver()); 112 send_transport_->SetReceiver(receiver_call_->Receiver());
119 receive_transport_.reset(new test::DirectTransport(receiver_call_.get())); 113 receive_transport_.reset(new test::DirectTransport(receiver_call_.get()));
120 receive_transport_->SetReceiver(sender_call_->Receiver()); 114 receive_transport_->SetReceiver(sender_call_->Receiver());
121 115
122 video_send_config_ = VideoSendStream::Config(send_transport_.get()); 116 video_send_config_ = VideoSendStream::Config(send_transport_.get());
123 video_send_config_.rtp.ssrcs.push_back(kVideoSendSsrcs[0]); 117 video_send_config_.rtp.ssrcs.push_back(kVideoSendSsrcs[0]);
(...skipping 29 matching lines...) Expand all
153 147
154 receiver_call_.reset(); 148 receiver_call_.reset();
155 sender_call_.reset(); 149 sender_call_.reset();
156 } 150 }
157 151
158 protected: 152 protected:
159 friend class Stream; 153 friend class Stream;
160 154
161 class Stream { 155 class Stream {
162 public: 156 public:
163 Stream(BitrateEstimatorTest* test, bool receive_audio) 157 explicit Stream(BitrateEstimatorTest* test)
164 : test_(test), 158 : test_(test),
165 is_sending_receiving_(false), 159 is_sending_receiving_(false),
166 send_stream_(nullptr), 160 send_stream_(nullptr),
167 audio_receive_stream_(nullptr),
168 video_receive_stream_(nullptr),
169 frame_generator_capturer_(), 161 frame_generator_capturer_(),
170 fake_encoder_(Clock::GetRealTimeClock()), 162 fake_encoder_(Clock::GetRealTimeClock()),
171 fake_decoder_() { 163 fake_decoder_() {
172 test_->video_send_config_.rtp.ssrcs[0]++; 164 test_->video_send_config_.rtp.ssrcs[0]++;
173 test_->video_send_config_.encoder_settings.encoder = &fake_encoder_; 165 test_->video_send_config_.encoder_settings.encoder = &fake_encoder_;
174 send_stream_ = test_->sender_call_->CreateVideoSendStream( 166 send_stream_ = test_->sender_call_->CreateVideoSendStream(
175 test_->video_send_config_.Copy(), 167 test_->video_send_config_.Copy(),
176 test_->video_encoder_config_.Copy()); 168 test_->video_encoder_config_.Copy());
177 RTC_DCHECK_EQ(1u, test_->video_encoder_config_.number_of_streams); 169 RTC_DCHECK_EQ(1u, test_->video_encoder_config_.number_of_streams);
178 frame_generator_capturer_.reset(test::FrameGeneratorCapturer::Create( 170 frame_generator_capturer_.reset(test::FrameGeneratorCapturer::Create(
179 kDefaultWidth, kDefaultHeight, kDefaultFramerate, 171 kDefaultWidth, kDefaultHeight, kDefaultFramerate,
180 Clock::GetRealTimeClock())); 172 Clock::GetRealTimeClock()));
181 send_stream_->SetSource( 173 send_stream_->SetSource(
182 frame_generator_capturer_.get(), 174 frame_generator_capturer_.get(),
183 VideoSendStream::DegradationPreference::kBalanced); 175 VideoSendStream::DegradationPreference::kBalanced);
184 send_stream_->Start(); 176 send_stream_->Start();
185 frame_generator_capturer_->Start(); 177 frame_generator_capturer_->Start();
186 178
187 if (receive_audio) { 179 VideoReceiveStream::Decoder decoder;
188 AudioReceiveStream::Config receive_config; 180 decoder.decoder = &fake_decoder_;
189 receive_config.rtp.remote_ssrc = test_->video_send_config_.rtp.ssrcs[0]; 181 decoder.payload_type =
190 // Bogus non-default id to prevent hitting a RTC_DCHECK when creating 182 test_->video_send_config_.encoder_settings.payload_type;
191 // the AudioReceiveStream. Every receive stream has to correspond to 183 decoder.payload_name =
192 // an underlying channel id. 184 test_->video_send_config_.encoder_settings.payload_name;
193 receive_config.voe_channel_id = 0; 185 test_->receive_config_.decoders.clear();
194 receive_config.rtp.extensions.push_back( 186 test_->receive_config_.decoders.push_back(decoder);
195 RtpExtension(RtpExtension::kAbsSendTimeUri, kASTExtensionId)); 187 test_->receive_config_.rtp.remote_ssrc =
196 receive_config.decoder_factory = test_->decoder_factory_; 188 test_->video_send_config_.rtp.ssrcs[0];
197 audio_receive_stream_ = 189 test_->receive_config_.rtp.local_ssrc++;
198 test_->receiver_call_->CreateAudioReceiveStream(receive_config); 190 test_->receive_config_.renderer = &test->fake_renderer_;
199 } else { 191 video_receive_stream_ = test_->receiver_call_->CreateVideoReceiveStream(
200 VideoReceiveStream::Decoder decoder; 192 test_->receive_config_.Copy());
201 decoder.decoder = &fake_decoder_; 193 video_receive_stream_->Start();
202 decoder.payload_type =
203 test_->video_send_config_.encoder_settings.payload_type;
204 decoder.payload_name =
205 test_->video_send_config_.encoder_settings.payload_name;
206 test_->receive_config_.decoders.clear();
207 test_->receive_config_.decoders.push_back(decoder);
208 test_->receive_config_.rtp.remote_ssrc =
209 test_->video_send_config_.rtp.ssrcs[0];
210 test_->receive_config_.rtp.local_ssrc++;
211 test_->receive_config_.renderer = &test->fake_renderer_;
212 video_receive_stream_ = test_->receiver_call_->CreateVideoReceiveStream(
213 test_->receive_config_.Copy());
214 video_receive_stream_->Start();
215 }
216 is_sending_receiving_ = true; 194 is_sending_receiving_ = true;
217 } 195 }
218 196
219 ~Stream() { 197 ~Stream() {
220 EXPECT_FALSE(is_sending_receiving_); 198 EXPECT_FALSE(is_sending_receiving_);
221 test_->sender_call_->DestroyVideoSendStream(send_stream_); 199 test_->sender_call_->DestroyVideoSendStream(send_stream_);
222 frame_generator_capturer_.reset(nullptr); 200 frame_generator_capturer_.reset(nullptr);
223 send_stream_ = nullptr; 201 send_stream_ = nullptr;
224 if (audio_receive_stream_) {
225 test_->receiver_call_->DestroyAudioReceiveStream(audio_receive_stream_);
226 audio_receive_stream_ = nullptr;
227 }
228 if (video_receive_stream_) { 202 if (video_receive_stream_) {
229 test_->receiver_call_->DestroyVideoReceiveStream(video_receive_stream_); 203 test_->receiver_call_->DestroyVideoReceiveStream(video_receive_stream_);
230 video_receive_stream_ = nullptr; 204 video_receive_stream_ = nullptr;
231 } 205 }
232 } 206 }
233 207
234 void StopSending() { 208 void StopSending() {
235 if (is_sending_receiving_) { 209 if (is_sending_receiving_) {
236 frame_generator_capturer_->Stop(); 210 frame_generator_capturer_->Stop();
237 send_stream_->Stop(); 211 send_stream_->Stop();
238 if (video_receive_stream_) { 212 if (video_receive_stream_) {
239 video_receive_stream_->Stop(); 213 video_receive_stream_->Stop();
240 } 214 }
241 is_sending_receiving_ = false; 215 is_sending_receiving_ = false;
242 } 216 }
243 } 217 }
244 218
245 private: 219 private:
246 BitrateEstimatorTest* test_; 220 BitrateEstimatorTest* test_;
247 bool is_sending_receiving_; 221 bool is_sending_receiving_;
248 VideoSendStream* send_stream_; 222 VideoSendStream* send_stream_;
249 AudioReceiveStream* audio_receive_stream_;
250 VideoReceiveStream* video_receive_stream_; 223 VideoReceiveStream* video_receive_stream_;
251 std::unique_ptr<test::FrameGeneratorCapturer> frame_generator_capturer_; 224 std::unique_ptr<test::FrameGeneratorCapturer> frame_generator_capturer_;
252 test::FakeEncoder fake_encoder_; 225 test::FakeEncoder fake_encoder_;
253 test::FakeDecoder fake_decoder_; 226 test::FakeDecoder fake_decoder_;
254 }; 227 };
255 228
256 testing::NiceMock<test::MockVoiceEngine> mock_voice_engine_;
257 LogObserver receiver_log_; 229 LogObserver receiver_log_;
258 std::unique_ptr<test::DirectTransport> send_transport_; 230 std::unique_ptr<test::DirectTransport> send_transport_;
259 std::unique_ptr<test::DirectTransport> receive_transport_; 231 std::unique_ptr<test::DirectTransport> receive_transport_;
260 std::unique_ptr<Call> sender_call_; 232 std::unique_ptr<Call> sender_call_;
261 std::unique_ptr<Call> receiver_call_; 233 std::unique_ptr<Call> receiver_call_;
262 VideoReceiveStream::Config receive_config_; 234 VideoReceiveStream::Config receive_config_;
263 std::vector<Stream*> streams_; 235 std::vector<Stream*> streams_;
264 }; 236 };
265 237
266 static const char* kAbsSendTimeLog = 238 static const char* kAbsSendTimeLog =
267 "RemoteBitrateEstimatorAbsSendTime: Instantiating."; 239 "RemoteBitrateEstimatorAbsSendTime: Instantiating.";
268 static const char* kSingleStreamLog = 240 static const char* kSingleStreamLog =
269 "RemoteBitrateEstimatorSingleStream: Instantiating."; 241 "RemoteBitrateEstimatorSingleStream: Instantiating.";
270 242
271 TEST_F(BitrateEstimatorTest, InstantiatesTOFPerDefaultForVideo) { 243 TEST_F(BitrateEstimatorTest, InstantiatesTOFPerDefaultForVideo) {
272 video_send_config_.rtp.extensions.push_back( 244 video_send_config_.rtp.extensions.push_back(
273 RtpExtension(RtpExtension::kTimestampOffsetUri, kTOFExtensionId)); 245 RtpExtension(RtpExtension::kTimestampOffsetUri, kTOFExtensionId));
274 receiver_log_.PushExpectedLogLine(kSingleStreamLog); 246 receiver_log_.PushExpectedLogLine(kSingleStreamLog);
275 receiver_log_.PushExpectedLogLine(kSingleStreamLog); 247 receiver_log_.PushExpectedLogLine(kSingleStreamLog);
276 streams_.push_back(new Stream(this, false)); 248 streams_.push_back(new Stream(this));
277 EXPECT_TRUE(receiver_log_.Wait()); 249 EXPECT_TRUE(receiver_log_.Wait());
278 } 250 }
279 251
280 TEST_F(BitrateEstimatorTest, ImmediatelySwitchToASTForVideo) { 252 TEST_F(BitrateEstimatorTest, ImmediatelySwitchToASTForVideo) {
281 video_send_config_.rtp.extensions.push_back( 253 video_send_config_.rtp.extensions.push_back(
282 RtpExtension(RtpExtension::kAbsSendTimeUri, kASTExtensionId)); 254 RtpExtension(RtpExtension::kAbsSendTimeUri, kASTExtensionId));
283 receiver_log_.PushExpectedLogLine(kSingleStreamLog); 255 receiver_log_.PushExpectedLogLine(kSingleStreamLog);
284 receiver_log_.PushExpectedLogLine(kSingleStreamLog); 256 receiver_log_.PushExpectedLogLine(kSingleStreamLog);
285 receiver_log_.PushExpectedLogLine("Switching to absolute send time RBE."); 257 receiver_log_.PushExpectedLogLine("Switching to absolute send time RBE.");
286 receiver_log_.PushExpectedLogLine(kAbsSendTimeLog); 258 receiver_log_.PushExpectedLogLine(kAbsSendTimeLog);
287 streams_.push_back(new Stream(this, false)); 259 streams_.push_back(new Stream(this));
288 EXPECT_TRUE(receiver_log_.Wait()); 260 EXPECT_TRUE(receiver_log_.Wait());
289 } 261 }
290 262
291 TEST_F(BitrateEstimatorTest, SwitchesToASTForVideo) { 263 TEST_F(BitrateEstimatorTest, SwitchesToASTForVideo) {
292 video_send_config_.rtp.extensions.push_back( 264 video_send_config_.rtp.extensions.push_back(
293 RtpExtension(RtpExtension::kTimestampOffsetUri, kTOFExtensionId)); 265 RtpExtension(RtpExtension::kTimestampOffsetUri, kTOFExtensionId));
294 receiver_log_.PushExpectedLogLine(kSingleStreamLog); 266 receiver_log_.PushExpectedLogLine(kSingleStreamLog);
295 receiver_log_.PushExpectedLogLine(kSingleStreamLog); 267 receiver_log_.PushExpectedLogLine(kSingleStreamLog);
296 streams_.push_back(new Stream(this, false)); 268 streams_.push_back(new Stream(this));
297 EXPECT_TRUE(receiver_log_.Wait()); 269 EXPECT_TRUE(receiver_log_.Wait());
298 270
299 video_send_config_.rtp.extensions[0] = 271 video_send_config_.rtp.extensions[0] =
300 RtpExtension(RtpExtension::kAbsSendTimeUri, kASTExtensionId); 272 RtpExtension(RtpExtension::kAbsSendTimeUri, kASTExtensionId);
301 receiver_log_.PushExpectedLogLine("Switching to absolute send time RBE."); 273 receiver_log_.PushExpectedLogLine("Switching to absolute send time RBE.");
302 receiver_log_.PushExpectedLogLine(kAbsSendTimeLog); 274 receiver_log_.PushExpectedLogLine(kAbsSendTimeLog);
303 streams_.push_back(new Stream(this, false)); 275 streams_.push_back(new Stream(this));
304 EXPECT_TRUE(receiver_log_.Wait()); 276 EXPECT_TRUE(receiver_log_.Wait());
305 } 277 }
306 278
307 // This test is flaky. See webrtc:5790. 279 // This test is flaky. See webrtc:5790.
308 TEST_F(BitrateEstimatorTest, DISABLED_SwitchesToASTThenBackToTOFForVideo) { 280 TEST_F(BitrateEstimatorTest, DISABLED_SwitchesToASTThenBackToTOFForVideo) {
309 video_send_config_.rtp.extensions.push_back( 281 video_send_config_.rtp.extensions.push_back(
310 RtpExtension(RtpExtension::kTimestampOffsetUri, kTOFExtensionId)); 282 RtpExtension(RtpExtension::kTimestampOffsetUri, kTOFExtensionId));
311 receiver_log_.PushExpectedLogLine(kSingleStreamLog); 283 receiver_log_.PushExpectedLogLine(kSingleStreamLog);
312 receiver_log_.PushExpectedLogLine(kAbsSendTimeLog); 284 receiver_log_.PushExpectedLogLine(kAbsSendTimeLog);
313 receiver_log_.PushExpectedLogLine(kSingleStreamLog); 285 receiver_log_.PushExpectedLogLine(kSingleStreamLog);
314 streams_.push_back(new Stream(this, false)); 286 streams_.push_back(new Stream(this));
315 EXPECT_TRUE(receiver_log_.Wait()); 287 EXPECT_TRUE(receiver_log_.Wait());
316 288
317 video_send_config_.rtp.extensions[0] = 289 video_send_config_.rtp.extensions[0] =
318 RtpExtension(RtpExtension::kAbsSendTimeUri, kASTExtensionId); 290 RtpExtension(RtpExtension::kAbsSendTimeUri, kASTExtensionId);
319 receiver_log_.PushExpectedLogLine(kAbsSendTimeLog); 291 receiver_log_.PushExpectedLogLine(kAbsSendTimeLog);
320 receiver_log_.PushExpectedLogLine("Switching to absolute send time RBE."); 292 receiver_log_.PushExpectedLogLine("Switching to absolute send time RBE.");
321 streams_.push_back(new Stream(this, false)); 293 streams_.push_back(new Stream(this));
322 EXPECT_TRUE(receiver_log_.Wait()); 294 EXPECT_TRUE(receiver_log_.Wait());
323 295
324 video_send_config_.rtp.extensions[0] = 296 video_send_config_.rtp.extensions[0] =
325 RtpExtension(RtpExtension::kTimestampOffsetUri, kTOFExtensionId); 297 RtpExtension(RtpExtension::kTimestampOffsetUri, kTOFExtensionId);
326 receiver_log_.PushExpectedLogLine(kAbsSendTimeLog); 298 receiver_log_.PushExpectedLogLine(kAbsSendTimeLog);
327 receiver_log_.PushExpectedLogLine( 299 receiver_log_.PushExpectedLogLine(
328 "WrappingBitrateEstimator: Switching to transmission time offset RBE."); 300 "WrappingBitrateEstimator: Switching to transmission time offset RBE.");
329 streams_.push_back(new Stream(this, false)); 301 streams_.push_back(new Stream(this));
330 streams_[0]->StopSending(); 302 streams_[0]->StopSending();
331 streams_[1]->StopSending(); 303 streams_[1]->StopSending();
332 EXPECT_TRUE(receiver_log_.Wait()); 304 EXPECT_TRUE(receiver_log_.Wait());
333 } 305 }
334 } // namespace webrtc 306 } // namespace webrtc
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698