OLD | NEW |
1 /* | 1 /* |
2 * libjingle | 2 * libjingle |
3 * Copyright 2008 Google Inc. | 3 * Copyright 2008 Google Inc. |
4 * | 4 * |
5 * Redistribution and use in source and binary forms, with or without | 5 * Redistribution and use in source and binary forms, with or without |
6 * modification, are permitted provided that the following conditions are met: | 6 * modification, are permitted provided that the following conditions are met: |
7 * | 7 * |
8 * 1. Redistributions of source code must retain the above copyright notice, | 8 * 1. Redistributions of source code must retain the above copyright notice, |
9 * this list of conditions and the following disclaimer. | 9 * this list of conditions and the following disclaimer. |
10 * 2. Redistributions in binary form must reproduce the above copyright notice, | 10 * 2. Redistributions in binary form must reproduce the above copyright notice, |
(...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
86 unsigned int filter_; | 86 unsigned int filter_; |
87 }; | 87 }; |
88 } // namespace | 88 } // namespace |
89 | 89 |
90 class WebRtcVoiceEngineTestFake : public testing::Test { | 90 class WebRtcVoiceEngineTestFake : public testing::Test { |
91 public: | 91 public: |
92 WebRtcVoiceEngineTestFake() | 92 WebRtcVoiceEngineTestFake() |
93 : call_(webrtc::Call::Config()), | 93 : call_(webrtc::Call::Config()), |
94 voe_(kAudioCodecs, ARRAY_SIZE(kAudioCodecs)), | 94 voe_(kAudioCodecs, ARRAY_SIZE(kAudioCodecs)), |
95 trace_wrapper_(new FakeVoETraceWrapper()), | 95 trace_wrapper_(new FakeVoETraceWrapper()), |
96 engine_(new FakeVoEWrapper(&voe_), trace_wrapper_), | 96 engine_(new FakeVoEWrapper(&voe_), |
| 97 trace_wrapper_, |
| 98 new cricket::FakeAudioState()), |
97 channel_(nullptr) { | 99 channel_(nullptr) { |
98 send_parameters_.codecs.push_back(kPcmuCodec); | 100 send_parameters_.codecs.push_back(kPcmuCodec); |
99 recv_parameters_.codecs.push_back(kPcmuCodec); | 101 recv_parameters_.codecs.push_back(kPcmuCodec); |
100 options_adjust_agc_.adjust_agc_delta.Set(-10); | 102 options_adjust_agc_.adjust_agc_delta.Set(-10); |
101 } | 103 } |
102 bool SetupEngine() { | 104 bool SetupEngine() { |
103 if (!engine_.Init(rtc::Thread::Current())) { | 105 if (!engine_.Init(rtc::Thread::Current())) { |
104 return false; | 106 return false; |
105 } | 107 } |
106 channel_ = engine_.CreateChannel(&call_, cricket::AudioOptions()); | 108 channel_ = engine_.CreateChannel(&call_, cricket::AudioOptions()); |
(...skipping 199 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
306 stats.echo_return_loss = 890; | 308 stats.echo_return_loss = 890; |
307 stats.echo_return_loss_enhancement = 1234; | 309 stats.echo_return_loss_enhancement = 1234; |
308 stats.typing_noise_detected = true; | 310 stats.typing_noise_detected = true; |
309 return stats; | 311 return stats; |
310 } | 312 } |
311 void SetAudioSendStreamStats() { | 313 void SetAudioSendStreamStats() { |
312 for (auto* s : call_.GetAudioSendStreams()) { | 314 for (auto* s : call_.GetAudioSendStreams()) { |
313 s->SetStats(GetAudioSendStreamStats()); | 315 s->SetStats(GetAudioSendStreamStats()); |
314 } | 316 } |
315 } | 317 } |
316 void VerifyVoiceSenderInfo(const cricket::VoiceSenderInfo& info) { | 318 void VerifyVoiceSenderInfo(const cricket::VoiceSenderInfo& info, |
| 319 bool is_sending) { |
317 const auto stats = GetAudioSendStreamStats(); | 320 const auto stats = GetAudioSendStreamStats(); |
318 EXPECT_EQ(info.ssrc(), stats.local_ssrc); | 321 EXPECT_EQ(info.ssrc(), stats.local_ssrc); |
319 EXPECT_EQ(info.bytes_sent, stats.bytes_sent); | 322 EXPECT_EQ(info.bytes_sent, stats.bytes_sent); |
320 EXPECT_EQ(info.packets_sent, stats.packets_sent); | 323 EXPECT_EQ(info.packets_sent, stats.packets_sent); |
321 EXPECT_EQ(info.packets_lost, stats.packets_lost); | 324 EXPECT_EQ(info.packets_lost, stats.packets_lost); |
322 EXPECT_EQ(info.fraction_lost, stats.fraction_lost); | 325 EXPECT_EQ(info.fraction_lost, stats.fraction_lost); |
323 EXPECT_EQ(info.codec_name, stats.codec_name); | 326 EXPECT_EQ(info.codec_name, stats.codec_name); |
324 EXPECT_EQ(info.ext_seqnum, stats.ext_seqnum); | 327 EXPECT_EQ(info.ext_seqnum, stats.ext_seqnum); |
325 EXPECT_EQ(info.jitter_ms, stats.jitter_ms); | 328 EXPECT_EQ(info.jitter_ms, stats.jitter_ms); |
326 EXPECT_EQ(info.rtt_ms, stats.rtt_ms); | 329 EXPECT_EQ(info.rtt_ms, stats.rtt_ms); |
327 EXPECT_EQ(info.audio_level, stats.audio_level); | 330 EXPECT_EQ(info.audio_level, stats.audio_level); |
328 EXPECT_EQ(info.aec_quality_min, stats.aec_quality_min); | 331 EXPECT_EQ(info.aec_quality_min, stats.aec_quality_min); |
329 EXPECT_EQ(info.echo_delay_median_ms, stats.echo_delay_median_ms); | 332 EXPECT_EQ(info.echo_delay_median_ms, stats.echo_delay_median_ms); |
330 EXPECT_EQ(info.echo_delay_std_ms, stats.echo_delay_std_ms); | 333 EXPECT_EQ(info.echo_delay_std_ms, stats.echo_delay_std_ms); |
331 EXPECT_EQ(info.echo_return_loss, stats.echo_return_loss); | 334 EXPECT_EQ(info.echo_return_loss, stats.echo_return_loss); |
332 EXPECT_EQ(info.echo_return_loss_enhancement, | 335 EXPECT_EQ(info.echo_return_loss_enhancement, |
333 stats.echo_return_loss_enhancement); | 336 stats.echo_return_loss_enhancement); |
334 // TODO(solenberg): Move typing noise detection into AudioSendStream. | 337 EXPECT_EQ(info.typing_noise_detected, |
335 // EXPECT_EQ(info.typing_noise_detected, stats.typing_noise_detected); | 338 stats.typing_noise_detected && is_sending); |
336 } | 339 } |
337 | 340 |
338 webrtc::AudioReceiveStream::Stats GetAudioReceiveStreamStats() const { | 341 webrtc::AudioReceiveStream::Stats GetAudioReceiveStreamStats() const { |
339 webrtc::AudioReceiveStream::Stats stats; | 342 webrtc::AudioReceiveStream::Stats stats; |
340 stats.remote_ssrc = 123; | 343 stats.remote_ssrc = 123; |
341 stats.bytes_rcvd = 456; | 344 stats.bytes_rcvd = 456; |
342 stats.packets_rcvd = 768; | 345 stats.packets_rcvd = 768; |
343 stats.packets_lost = 101; | 346 stats.packets_lost = 101; |
344 stats.fraction_lost = 23.45f; | 347 stats.fraction_lost = 23.45f; |
345 stats.codec_name = "codec_name_recv"; | 348 stats.codec_name = "codec_name_recv"; |
(...skipping 1736 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2082 EXPECT_TRUE(channel_->SetRecvParameters(recv_parameters_)); | 2085 EXPECT_TRUE(channel_->SetRecvParameters(recv_parameters_)); |
2083 | 2086 |
2084 // Check stats for the added streams. | 2087 // Check stats for the added streams. |
2085 { | 2088 { |
2086 cricket::VoiceMediaInfo info; | 2089 cricket::VoiceMediaInfo info; |
2087 EXPECT_EQ(true, channel_->GetStats(&info)); | 2090 EXPECT_EQ(true, channel_->GetStats(&info)); |
2088 | 2091 |
2089 // We have added 4 send streams. We should see empty stats for all. | 2092 // We have added 4 send streams. We should see empty stats for all. |
2090 EXPECT_EQ(static_cast<size_t>(ARRAY_SIZE(kSsrcs4)), info.senders.size()); | 2093 EXPECT_EQ(static_cast<size_t>(ARRAY_SIZE(kSsrcs4)), info.senders.size()); |
2091 for (const auto& sender : info.senders) { | 2094 for (const auto& sender : info.senders) { |
2092 VerifyVoiceSenderInfo(sender); | 2095 VerifyVoiceSenderInfo(sender, false); |
2093 } | 2096 } |
2094 | 2097 |
2095 // We have added one receive stream. We should see empty stats. | 2098 // We have added one receive stream. We should see empty stats. |
2096 EXPECT_EQ(info.receivers.size(), 1u); | 2099 EXPECT_EQ(info.receivers.size(), 1u); |
2097 EXPECT_EQ(info.receivers[0].ssrc(), 0); | 2100 EXPECT_EQ(info.receivers[0].ssrc(), 0); |
2098 } | 2101 } |
2099 | 2102 |
2100 // Remove the kSsrc2 stream. No receiver stats. | 2103 // Remove the kSsrc2 stream. No receiver stats. |
2101 { | 2104 { |
2102 cricket::VoiceMediaInfo info; | 2105 cricket::VoiceMediaInfo info; |
(...skipping 249 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2352 EXPECT_TRUE(channel_->SetSendParameters(send_parameters_)); | 2355 EXPECT_TRUE(channel_->SetSendParameters(send_parameters_)); |
2353 EXPECT_TRUE(channel_->SetRecvParameters(recv_parameters_)); | 2356 EXPECT_TRUE(channel_->SetRecvParameters(recv_parameters_)); |
2354 | 2357 |
2355 // Check stats for the added streams. | 2358 // Check stats for the added streams. |
2356 { | 2359 { |
2357 cricket::VoiceMediaInfo info; | 2360 cricket::VoiceMediaInfo info; |
2358 EXPECT_EQ(true, channel_->GetStats(&info)); | 2361 EXPECT_EQ(true, channel_->GetStats(&info)); |
2359 | 2362 |
2360 // We have added one send stream. We should see the stats we've set. | 2363 // We have added one send stream. We should see the stats we've set. |
2361 EXPECT_EQ(1u, info.senders.size()); | 2364 EXPECT_EQ(1u, info.senders.size()); |
2362 VerifyVoiceSenderInfo(info.senders[0]); | 2365 VerifyVoiceSenderInfo(info.senders[0], false); |
2363 // We have added one receive stream. We should see empty stats. | 2366 // We have added one receive stream. We should see empty stats. |
2364 EXPECT_EQ(info.receivers.size(), 1u); | 2367 EXPECT_EQ(info.receivers.size(), 1u); |
2365 EXPECT_EQ(info.receivers[0].ssrc(), 0); | 2368 EXPECT_EQ(info.receivers[0].ssrc(), 0); |
2366 } | 2369 } |
2367 | 2370 |
| 2371 // Start sending - this affects some reported stats. |
| 2372 { |
| 2373 cricket::VoiceMediaInfo info; |
| 2374 EXPECT_TRUE(channel_->SetSend(cricket::SEND_MICROPHONE)); |
| 2375 EXPECT_EQ(true, channel_->GetStats(&info)); |
| 2376 VerifyVoiceSenderInfo(info.senders[0], true); |
| 2377 } |
| 2378 |
2368 // Remove the kSsrc2 stream. No receiver stats. | 2379 // Remove the kSsrc2 stream. No receiver stats. |
2369 { | 2380 { |
2370 cricket::VoiceMediaInfo info; | 2381 cricket::VoiceMediaInfo info; |
2371 EXPECT_TRUE(channel_->RemoveRecvStream(kSsrc2)); | 2382 EXPECT_TRUE(channel_->RemoveRecvStream(kSsrc2)); |
2372 EXPECT_EQ(true, channel_->GetStats(&info)); | 2383 EXPECT_EQ(true, channel_->GetStats(&info)); |
2373 EXPECT_EQ(1u, info.senders.size()); | 2384 EXPECT_EQ(1u, info.senders.size()); |
2374 EXPECT_EQ(0u, info.receivers.size()); | 2385 EXPECT_EQ(0u, info.receivers.size()); |
2375 } | 2386 } |
2376 | 2387 |
2377 // Deliver a new packet - a default receive stream should be created and we | 2388 // Deliver a new packet - a default receive stream should be created and we |
(...skipping 926 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3304 cricket::WebRtcVoiceEngine engine; | 3315 cricket::WebRtcVoiceEngine engine; |
3305 EXPECT_TRUE(engine.Init(rtc::Thread::Current())); | 3316 EXPECT_TRUE(engine.Init(rtc::Thread::Current())); |
3306 rtc::scoped_ptr<webrtc::Call> call( | 3317 rtc::scoped_ptr<webrtc::Call> call( |
3307 webrtc::Call::Create(webrtc::Call::Config())); | 3318 webrtc::Call::Create(webrtc::Call::Config())); |
3308 cricket::WebRtcVoiceMediaChannel channel(&engine, cricket::AudioOptions(), | 3319 cricket::WebRtcVoiceMediaChannel channel(&engine, cricket::AudioOptions(), |
3309 call.get()); | 3320 call.get()); |
3310 cricket::AudioRecvParameters parameters; | 3321 cricket::AudioRecvParameters parameters; |
3311 parameters.codecs = engine.codecs(); | 3322 parameters.codecs = engine.codecs(); |
3312 EXPECT_TRUE(channel.SetRecvParameters(parameters)); | 3323 EXPECT_TRUE(channel.SetRecvParameters(parameters)); |
3313 } | 3324 } |
OLD | NEW |