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

Side by Side Diff: talk/media/webrtc/webrtcvoiceengine_unittest.cc

Issue 1390753002: Implement AudioReceiveStream::GetStats(). (Closed) Base URL: https://chromium.googlesource.com/external/webrtc.git@master
Patch Set: one s Created 5 years, 2 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
« no previous file with comments | « talk/media/webrtc/webrtcvoiceengine.cc ('k') | webrtc/audio/BUILD.gn » ('j') | 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 * 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 20 matching lines...) Expand all
31 #include "talk/media/base/constants.h" 31 #include "talk/media/base/constants.h"
32 #include "talk/media/base/fakemediaengine.h" 32 #include "talk/media/base/fakemediaengine.h"
33 #include "talk/media/base/fakenetworkinterface.h" 33 #include "talk/media/base/fakenetworkinterface.h"
34 #include "talk/media/base/fakertp.h" 34 #include "talk/media/base/fakertp.h"
35 #include "talk/media/webrtc/fakewebrtccall.h" 35 #include "talk/media/webrtc/fakewebrtccall.h"
36 #include "talk/media/webrtc/fakewebrtcvoiceengine.h" 36 #include "talk/media/webrtc/fakewebrtcvoiceengine.h"
37 #include "talk/media/webrtc/webrtcvoiceengine.h" 37 #include "talk/media/webrtc/webrtcvoiceengine.h"
38 #include "webrtc/p2p/base/faketransportcontroller.h" 38 #include "webrtc/p2p/base/faketransportcontroller.h"
39 #include "talk/session/media/channel.h" 39 #include "talk/session/media/channel.h"
40 40
41 // Tests for the WebRtcVoiceEngine/VoiceChannel code.
42
43 using cricket::kRtpAudioLevelHeaderExtension; 41 using cricket::kRtpAudioLevelHeaderExtension;
44 using cricket::kRtpAbsoluteSenderTimeHeaderExtension; 42 using cricket::kRtpAbsoluteSenderTimeHeaderExtension;
45 43
46 static const cricket::AudioCodec kPcmuCodec(0, "PCMU", 8000, 64000, 1, 0); 44 namespace {
47 static const cricket::AudioCodec kIsacCodec(103, "ISAC", 16000, 32000, 1, 0); 45
48 static const cricket::AudioCodec kOpusCodec(111, "opus", 48000, 64000, 2, 0); 46 const cricket::AudioCodec kPcmuCodec(0, "PCMU", 8000, 64000, 1, 0);
49 static const cricket::AudioCodec kG722CodecVoE(9, "G722", 16000, 64000, 1, 0); 47 const cricket::AudioCodec kIsacCodec(103, "ISAC", 16000, 32000, 1, 0);
50 static const cricket::AudioCodec kG722CodecSdp(9, "G722", 8000, 64000, 1, 0); 48 const cricket::AudioCodec kOpusCodec(111, "opus", 48000, 64000, 2, 0);
51 static const cricket::AudioCodec kRedCodec(117, "red", 8000, 0, 1, 0); 49 const cricket::AudioCodec kG722CodecVoE(9, "G722", 16000, 64000, 1, 0);
52 static const cricket::AudioCodec kCn8000Codec(13, "CN", 8000, 0, 1, 0); 50 const cricket::AudioCodec kG722CodecSdp(9, "G722", 8000, 64000, 1, 0);
53 static const cricket::AudioCodec kCn16000Codec(105, "CN", 16000, 0, 1, 0); 51 const cricket::AudioCodec kRedCodec(117, "red", 8000, 0, 1, 0);
54 static const cricket::AudioCodec 52 const cricket::AudioCodec kCn8000Codec(13, "CN", 8000, 0, 1, 0);
55 kTelephoneEventCodec(106, "telephone-event", 8000, 0, 1, 0); 53 const cricket::AudioCodec kCn16000Codec(105, "CN", 16000, 0, 1, 0);
56 static const cricket::AudioCodec* const kAudioCodecs[] = { 54 const cricket::AudioCodec kTelephoneEventCodec(106, "telephone-event", 8000, 0,
55 1, 0);
56 const cricket::AudioCodec* const kAudioCodecs[] = {
57 &kPcmuCodec, &kIsacCodec, &kOpusCodec, &kG722CodecVoE, &kRedCodec, 57 &kPcmuCodec, &kIsacCodec, &kOpusCodec, &kG722CodecVoE, &kRedCodec,
58 &kCn8000Codec, &kCn16000Codec, &kTelephoneEventCodec, 58 &kCn8000Codec, &kCn16000Codec, &kTelephoneEventCodec,
59 }; 59 };
60 static uint32_t kSsrc1 = 0x99; 60 const uint32_t kSsrc1 = 0x99;
61 static uint32_t kSsrc2 = 0x98; 61 const uint32_t kSsrc2 = 0x98;
62 62
63 class FakeVoEWrapper : public cricket::VoEWrapper { 63 class FakeVoEWrapper : public cricket::VoEWrapper {
64 public: 64 public:
65 explicit FakeVoEWrapper(cricket::FakeWebRtcVoiceEngine* engine) 65 explicit FakeVoEWrapper(cricket::FakeWebRtcVoiceEngine* engine)
66 : cricket::VoEWrapper(engine, // processing 66 : cricket::VoEWrapper(engine, // processing
67 engine, // base 67 engine, // base
68 engine, // codec 68 engine, // codec
69 engine, // dtmf 69 engine, // dtmf
70 engine, // hw 70 engine, // hw
71 engine, // neteq
72 engine, // network 71 engine, // network
73 engine, // rtp 72 engine, // rtp
74 engine, // sync
75 engine) { // volume 73 engine) { // volume
76 } 74 }
77 }; 75 };
78 76
79 class FakeVoETraceWrapper : public cricket::VoETraceWrapper { 77 class FakeVoETraceWrapper : public cricket::VoETraceWrapper {
80 public: 78 public:
81 int SetTraceFilter(const unsigned int filter) override { 79 int SetTraceFilter(const unsigned int filter) override {
82 filter_ = filter; 80 filter_ = filter;
83 return 0; 81 return 0;
84 } 82 }
85 int SetTraceFile(const char* fileNameUTF8) override { return 0; } 83 int SetTraceFile(const char* fileNameUTF8) override { return 0; }
86 int SetTraceCallback(webrtc::TraceCallback* callback) override { return 0; } 84 int SetTraceCallback(webrtc::TraceCallback* callback) override { return 0; }
87 unsigned int filter_; 85 unsigned int filter_;
88 }; 86 };
87 } // namespace
89 88
90 class WebRtcVoiceEngineTestFake : public testing::Test { 89 class WebRtcVoiceEngineTestFake : public testing::Test {
91 public: 90 public:
92 WebRtcVoiceEngineTestFake() 91 WebRtcVoiceEngineTestFake()
93 : call_(webrtc::Call::Config()), 92 : call_(webrtc::Call::Config()),
94 voe_(kAudioCodecs, ARRAY_SIZE(kAudioCodecs)), 93 voe_(kAudioCodecs, ARRAY_SIZE(kAudioCodecs)),
95 trace_wrapper_(new FakeVoETraceWrapper()), 94 trace_wrapper_(new FakeVoETraceWrapper()),
96 engine_(new FakeVoEWrapper(&voe_), trace_wrapper_), 95 engine_(new FakeVoEWrapper(&voe_), trace_wrapper_),
97 channel_(nullptr) { 96 channel_(nullptr) {
98 send_parameters_.codecs.push_back(kPcmuCodec); 97 send_parameters_.codecs.push_back(kPcmuCodec);
(...skipping 184 matching lines...) Expand 10 before | Expand all | Expand 10 after
283 EXPECT_NE(channel_num, new_channel_num); 282 EXPECT_NE(channel_num, new_channel_num);
284 EXPECT_EQ(id, voe_.GetReceiveRtpExtensionId(new_channel_num, ext)); 283 EXPECT_EQ(id, voe_.GetReceiveRtpExtensionId(new_channel_num, ext));
285 284
286 // Ensure all extensions go back off with an empty list. 285 // Ensure all extensions go back off with an empty list.
287 parameters.extensions.clear(); 286 parameters.extensions.clear();
288 EXPECT_TRUE(channel_->SetRecvParameters(parameters)); 287 EXPECT_TRUE(channel_->SetRecvParameters(parameters));
289 EXPECT_EQ(-1, voe_.GetReceiveRtpExtensionId(channel_num, ext)); 288 EXPECT_EQ(-1, voe_.GetReceiveRtpExtensionId(channel_num, ext));
290 EXPECT_EQ(-1, voe_.GetReceiveRtpExtensionId(new_channel_num, ext)); 289 EXPECT_EQ(-1, voe_.GetReceiveRtpExtensionId(new_channel_num, ext));
291 } 290 }
292 291
292 const webrtc::AudioReceiveStream::Stats& GetAudioReceiveStreamStats() const {
293 static webrtc::AudioReceiveStream::Stats stats;
294 if (stats.remote_ssrc == 0) {
295 stats.remote_ssrc = 123;
296 stats.bytes_rcvd = 456;
297 stats.packets_rcvd = 768;
298 stats.packets_lost = 101;
299 stats.fraction_lost = 23.45f;
300 stats.codec_name = "codec_name";
301 stats.ext_seqnum = 678;
302 stats.jitter_ms = 901;
303 stats.jitter_buffer_ms = 234;
304 stats.jitter_buffer_preferred_ms = 567;
305 stats.delay_estimate_ms = 890;
306 stats.audio_level = 1234;
307 stats.expand_rate = 5.67f;
308 stats.speech_expand_rate = 8.90f;
309 stats.secondary_decoded_rate = 1.23f;
310 stats.accelerate_rate = 4.56f;
311 stats.preemptive_expand_rate = 7.89f;
312 stats.decoding_calls_to_silence_generator = 012;
313 stats.decoding_calls_to_neteq = 345;
314 stats.decoding_normal = 67890;
315 stats.decoding_plc = 1234;
316 stats.decoding_cng = 5678;
317 stats.decoding_plc_cng = 9012;
318 stats.capture_start_ntp_time_ms = 3456;
319 }
320 return stats;
321 }
322 void SetAudioReceiveStreamStats() {
323 for (auto* s : call_.GetAudioReceiveStreams()) {
324 s->SetStats(GetAudioReceiveStreamStats());
325 }
326 }
327 void VerifyVoiceReceiverInfo(const cricket::VoiceReceiverInfo& info) {
328 const auto& kStats = GetAudioReceiveStreamStats();
329 EXPECT_EQ(info.local_stats.front().ssrc, kStats.remote_ssrc);
330 EXPECT_EQ(info.bytes_rcvd, kStats.bytes_rcvd);
331 EXPECT_EQ(info.packets_rcvd, kStats.packets_rcvd);
332 EXPECT_EQ(info.packets_lost, kStats.packets_lost);
333 EXPECT_EQ(info.fraction_lost, kStats.fraction_lost);
334 EXPECT_EQ(info.codec_name, kStats.codec_name);
335 EXPECT_EQ(info.ext_seqnum, kStats.ext_seqnum);
336 EXPECT_EQ(info.jitter_ms, kStats.jitter_ms);
337 EXPECT_EQ(info.jitter_buffer_ms, kStats.jitter_buffer_ms);
338 EXPECT_EQ(info.jitter_buffer_preferred_ms,
339 kStats.jitter_buffer_preferred_ms);
340 EXPECT_EQ(info.delay_estimate_ms, kStats.delay_estimate_ms);
341 EXPECT_EQ(info.audio_level, kStats.audio_level);
342 EXPECT_EQ(info.expand_rate, kStats.expand_rate);
343 EXPECT_EQ(info.speech_expand_rate, kStats.speech_expand_rate);
344 EXPECT_EQ(info.secondary_decoded_rate, kStats.secondary_decoded_rate);
345 EXPECT_EQ(info.accelerate_rate, kStats.accelerate_rate);
346 EXPECT_EQ(info.preemptive_expand_rate, kStats.preemptive_expand_rate);
347 EXPECT_EQ(info.decoding_calls_to_silence_generator,
348 kStats.decoding_calls_to_silence_generator);
349 EXPECT_EQ(info.decoding_calls_to_neteq, kStats.decoding_calls_to_neteq);
350 EXPECT_EQ(info.decoding_normal, kStats.decoding_normal);
351 EXPECT_EQ(info.decoding_plc, kStats.decoding_plc);
352 EXPECT_EQ(info.decoding_cng, kStats.decoding_cng);
353 EXPECT_EQ(info.decoding_plc_cng, kStats.decoding_plc_cng);
354 EXPECT_EQ(info.capture_start_ntp_time_ms, kStats.capture_start_ntp_time_ms);
355 }
356
293 protected: 357 protected:
294 cricket::FakeCall call_; 358 cricket::FakeCall call_;
295 cricket::FakeWebRtcVoiceEngine voe_; 359 cricket::FakeWebRtcVoiceEngine voe_;
296 FakeVoETraceWrapper* trace_wrapper_; 360 FakeVoETraceWrapper* trace_wrapper_;
297 cricket::WebRtcVoiceEngine engine_; 361 cricket::WebRtcVoiceEngine engine_;
298 cricket::VoiceMediaChannel* channel_; 362 cricket::VoiceMediaChannel* channel_;
299 363
300 cricket::AudioSendParameters send_parameters_; 364 cricket::AudioSendParameters send_parameters_;
301 cricket::AudioRecvParameters recv_parameters_; 365 cricket::AudioRecvParameters recv_parameters_;
302 cricket::AudioOptions options_adjust_agc_; 366 cricket::AudioOptions options_adjust_agc_;
(...skipping 1674 matching lines...) Expand 10 before | Expand all | Expand 10 after
1977 // We need send codec to be set to get all stats. 2041 // We need send codec to be set to get all stats.
1978 EXPECT_TRUE(channel_->SetSendParameters(send_parameters_)); 2042 EXPECT_TRUE(channel_->SetSendParameters(send_parameters_));
1979 EXPECT_TRUE(channel_->SetRecvParameters(recv_parameters_)); 2043 EXPECT_TRUE(channel_->SetRecvParameters(recv_parameters_));
1980 2044
1981 cricket::VoiceMediaInfo info; 2045 cricket::VoiceMediaInfo info;
1982 EXPECT_EQ(true, channel_->GetStats(&info)); 2046 EXPECT_EQ(true, channel_->GetStats(&info));
1983 EXPECT_EQ(static_cast<size_t>(ARRAY_SIZE(kSsrcs4)), info.senders.size()); 2047 EXPECT_EQ(static_cast<size_t>(ARRAY_SIZE(kSsrcs4)), info.senders.size());
1984 2048
1985 // Verify the statistic information is correct. 2049 // Verify the statistic information is correct.
1986 for (unsigned int i = 0; i < ARRAY_SIZE(kSsrcs4); ++i) { 2050 for (unsigned int i = 0; i < ARRAY_SIZE(kSsrcs4); ++i) {
1987 EXPECT_EQ(kSsrcs4[i], info.senders[i].ssrc()); 2051 EXPECT_EQ(kSsrcs4[i], info.senders[i].ssrc());
the sun 2015/10/21 14:31:19 Q: hta@, is there any order requirement on the ret
hta-webrtc 2015/10/22 10:57:28 The JS API interface was created to be oblivious t
1988 EXPECT_EQ(kPcmuCodec.name, info.senders[i].codec_name); 2052 EXPECT_EQ(kPcmuCodec.name, info.senders[i].codec_name);
1989 EXPECT_EQ(cricket::kIntStatValue, info.senders[i].bytes_sent); 2053 EXPECT_EQ(cricket::kIntStatValue, info.senders[i].bytes_sent);
1990 EXPECT_EQ(cricket::kIntStatValue, info.senders[i].packets_sent); 2054 EXPECT_EQ(cricket::kIntStatValue, info.senders[i].packets_sent);
1991 EXPECT_EQ(cricket::kIntStatValue, info.senders[i].packets_lost); 2055 EXPECT_EQ(cricket::kIntStatValue, info.senders[i].packets_lost);
1992 EXPECT_EQ(cricket::kFractionLostStatValue, info.senders[i].fraction_lost); 2056 EXPECT_EQ(cricket::kFractionLostStatValue, info.senders[i].fraction_lost);
1993 EXPECT_EQ(cricket::kIntStatValue, info.senders[i].ext_seqnum); 2057 EXPECT_EQ(cricket::kIntStatValue, info.senders[i].ext_seqnum);
1994 EXPECT_EQ(cricket::kIntStatValue, info.senders[i].rtt_ms); 2058 EXPECT_EQ(cricket::kIntStatValue, info.senders[i].rtt_ms);
1995 EXPECT_EQ(cricket::kIntStatValue, info.senders[i].jitter_ms); 2059 EXPECT_EQ(cricket::kIntStatValue, info.senders[i].jitter_ms);
1996 EXPECT_EQ(kPcmuCodec.name, info.senders[i].codec_name); 2060 EXPECT_EQ(kPcmuCodec.name, info.senders[i].codec_name);
1997 } 2061 }
1998 EXPECT_EQ(0u, info.receivers.size());
1999 2062
2000 // Registered stream's remote SSRC is kSsrc2. Send a packet with SSRC=1. 2063 // We have added one receive stream. We should see empty stats.
2001 // We should drop the packet and no stats should be available. 2064 EXPECT_EQ(info.receivers.size(), 1u);
2002 DeliverPacket(kPcmuFrame, sizeof(kPcmuFrame)); 2065 EXPECT_EQ(info.receivers[0].local_stats.front().ssrc, 0);
2066
2067 // Remove the kSsrc2 stream. No receiver stats.
2068 EXPECT_TRUE(channel_->RemoveRecvStream(kSsrc2));
2003 EXPECT_EQ(true, channel_->GetStats(&info)); 2069 EXPECT_EQ(true, channel_->GetStats(&info));
2004 EXPECT_EQ(0u, info.receivers.size()); 2070 EXPECT_EQ(0u, info.receivers.size());
2005 2071
2006 // Remove the kSsrc2 stream and deliver a new packet - a default receive 2072 // Deliver a new packet - a default receive stream should be created and we
2007 // stream should be created and we should see stats. 2073 // should see stats again.
2008 EXPECT_TRUE(channel_->RemoveRecvStream(kSsrc2));
2009 DeliverPacket(kPcmuFrame, sizeof(kPcmuFrame)); 2074 DeliverPacket(kPcmuFrame, sizeof(kPcmuFrame));
2075 SetAudioReceiveStreamStats();
2010 EXPECT_EQ(true, channel_->GetStats(&info)); 2076 EXPECT_EQ(true, channel_->GetStats(&info));
2011 EXPECT_EQ(1u, info.receivers.size()); 2077 EXPECT_EQ(1u, info.receivers.size());
2012 2078 VerifyVoiceReceiverInfo(info.receivers[0]);
2013 EXPECT_EQ(cricket::kIntStatValue, info.receivers[0].bytes_rcvd);
2014 EXPECT_EQ(cricket::kIntStatValue, info.receivers[0].packets_rcvd);
2015 EXPECT_EQ(cricket::kIntStatValue, info.receivers[0].packets_lost);
2016 EXPECT_EQ(cricket::kIntStatValue, info.receivers[0].ext_seqnum);
2017 EXPECT_EQ(kPcmuCodec.name, info.receivers[0].codec_name);
2018 EXPECT_EQ(static_cast<float>(cricket::kNetStats.currentExpandRate) /
2019 (1 << 14), info.receivers[0].expand_rate);
2020 EXPECT_EQ(static_cast<float>(cricket::kNetStats.currentSpeechExpandRate) /
2021 (1 << 14), info.receivers[0].speech_expand_rate);
2022 EXPECT_EQ(static_cast<float>(cricket::kNetStats.currentSecondaryDecodedRate) /
2023 (1 << 14), info.receivers[0].secondary_decoded_rate);
2024 EXPECT_EQ(
2025 static_cast<float>(cricket::kNetStats.currentAccelerateRate) / (1 << 14),
2026 info.receivers[0].accelerate_rate);
2027 EXPECT_EQ(
2028 static_cast<float>(cricket::kNetStats.currentPreemptiveRate) / (1 << 14),
2029 info.receivers[0].preemptive_expand_rate);
2030 } 2079 }
2031 2080
2032 // Test that we can add and remove receive streams, and do proper send/playout. 2081 // Test that we can add and remove receive streams, and do proper send/playout.
2033 // We can receive on multiple streams while sending one stream. 2082 // We can receive on multiple streams while sending one stream.
2034 TEST_F(WebRtcVoiceEngineTestFake, PlayoutWithMultipleStreams) { 2083 TEST_F(WebRtcVoiceEngineTestFake, PlayoutWithMultipleStreams) {
2035 EXPECT_TRUE(SetupEngineWithSendStream()); 2084 EXPECT_TRUE(SetupEngineWithSendStream());
2036 int channel_num1 = voe_.GetLastChannel(); 2085 int channel_num1 = voe_.GetLastChannel();
2037 2086
2038 // Start playout without a receive stream. 2087 // Start playout without a receive stream.
2039 EXPECT_TRUE(channel_->SetSendParameters(send_parameters_)); 2088 EXPECT_TRUE(channel_->SetSendParameters(send_parameters_));
(...skipping 240 matching lines...) Expand 10 before | Expand all | Expand 10 after
2280 EXPECT_EQ(cricket::kIntStatValue, info.senders[0].jitter_ms); 2329 EXPECT_EQ(cricket::kIntStatValue, info.senders[0].jitter_ms);
2281 EXPECT_EQ(kPcmuCodec.name, info.senders[0].codec_name); 2330 EXPECT_EQ(kPcmuCodec.name, info.senders[0].codec_name);
2282 // TODO(sriniv): Add testing for more fields. These are not populated 2331 // TODO(sriniv): Add testing for more fields. These are not populated
2283 // in FakeWebrtcVoiceEngine yet. 2332 // in FakeWebrtcVoiceEngine yet.
2284 // EXPECT_EQ(cricket::kIntStatValue, info.senders[0].audio_level); 2333 // EXPECT_EQ(cricket::kIntStatValue, info.senders[0].audio_level);
2285 // EXPECT_EQ(cricket::kIntStatValue, info.senders[0].echo_delay_median_ms); 2334 // EXPECT_EQ(cricket::kIntStatValue, info.senders[0].echo_delay_median_ms);
2286 // EXPECT_EQ(cricket::kIntStatValue, info.senders[0].echo_delay_std_ms); 2335 // EXPECT_EQ(cricket::kIntStatValue, info.senders[0].echo_delay_std_ms);
2287 // EXPECT_EQ(cricket::kIntStatValue, info.senders[0].echo_return_loss); 2336 // EXPECT_EQ(cricket::kIntStatValue, info.senders[0].echo_return_loss);
2288 // EXPECT_EQ(cricket::kIntStatValue, 2337 // EXPECT_EQ(cricket::kIntStatValue,
2289 // info.senders[0].echo_return_loss_enhancement); 2338 // info.senders[0].echo_return_loss_enhancement);
2290 EXPECT_EQ(0u, info.receivers.size()); 2339 // We have added one receive stream. We should see empty stats.
2340 EXPECT_EQ(info.receivers.size(), 1u);
2341 EXPECT_EQ(info.receivers[0].local_stats.front().ssrc, 0);
2291 2342
2292 // Registered stream's remote SSRC is kSsrc2. Send a packet with SSRC=1. 2343 // Remove the kSsrc2 stream. No receiver stats.
2293 // We should drop the packet and no stats should be available. 2344 EXPECT_TRUE(channel_->RemoveRecvStream(kSsrc2));
2294 DeliverPacket(kPcmuFrame, sizeof(kPcmuFrame));
2295 EXPECT_EQ(true, channel_->GetStats(&info)); 2345 EXPECT_EQ(true, channel_->GetStats(&info));
2296 EXPECT_EQ(0u, info.receivers.size()); 2346 EXPECT_EQ(0u, info.receivers.size());
2297 2347
2298 // Remove the kSsrc2 stream and deliver a new packet - a default receive 2348 // Deliver a new packet - a default receive stream should be created and we
2299 // stream should be created and we should see stats. 2349 // should see stats again.
2300 EXPECT_TRUE(channel_->RemoveRecvStream(kSsrc2));
2301 DeliverPacket(kPcmuFrame, sizeof(kPcmuFrame)); 2350 DeliverPacket(kPcmuFrame, sizeof(kPcmuFrame));
2351 SetAudioReceiveStreamStats();
2302 EXPECT_EQ(true, channel_->GetStats(&info)); 2352 EXPECT_EQ(true, channel_->GetStats(&info));
2303 EXPECT_EQ(1u, info.receivers.size()); 2353 EXPECT_EQ(1u, info.receivers.size());
2304 2354 VerifyVoiceReceiverInfo(info.receivers[0]);
2305 EXPECT_EQ(cricket::kIntStatValue, info.receivers[0].bytes_rcvd);
2306 EXPECT_EQ(cricket::kIntStatValue, info.receivers[0].packets_rcvd);
2307 EXPECT_EQ(cricket::kIntStatValue, info.receivers[0].packets_lost);
2308 EXPECT_EQ(cricket::kIntStatValue, info.receivers[0].ext_seqnum);
2309 EXPECT_EQ(kPcmuCodec.name, info.receivers[0].codec_name);
2310 EXPECT_EQ(static_cast<float>(cricket::kNetStats.currentExpandRate) /
2311 (1 << 14), info.receivers[0].expand_rate);
2312 EXPECT_EQ(static_cast<float>(cricket::kNetStats.currentSpeechExpandRate) /
2313 (1 << 14), info.receivers[0].speech_expand_rate);
2314 EXPECT_EQ(static_cast<float>(cricket::kNetStats.currentSecondaryDecodedRate) /
2315 (1 << 14), info.receivers[0].secondary_decoded_rate);
2316 // TODO(sriniv): Add testing for more receiver fields.
2317 } 2355 }
2318 2356
2319 // Test that we can set the outgoing SSRC properly with multiple streams. 2357 // Test that we can set the outgoing SSRC properly with multiple streams.
2320 // SSRC is set in SetupEngine by calling AddSendStream. 2358 // SSRC is set in SetupEngine by calling AddSendStream.
2321 TEST_F(WebRtcVoiceEngineTestFake, SetSendSsrcWithMultipleStreams) { 2359 TEST_F(WebRtcVoiceEngineTestFake, SetSendSsrcWithMultipleStreams) {
2322 EXPECT_TRUE(SetupEngineWithSendStream()); 2360 EXPECT_TRUE(SetupEngineWithSendStream());
2323 int channel_num1 = voe_.GetLastChannel(); 2361 int channel_num1 = voe_.GetLastChannel();
2324 unsigned int send_ssrc; 2362 unsigned int send_ssrc;
2325 EXPECT_EQ(0, voe_.GetLocalSSRC(channel_num1, send_ssrc)); 2363 EXPECT_EQ(0, voe_.GetLocalSSRC(channel_num1, send_ssrc));
2326 EXPECT_EQ(kSsrc1, send_ssrc); 2364 EXPECT_EQ(kSsrc1, send_ssrc);
(...skipping 924 matching lines...) Expand 10 before | Expand all | Expand 10 after
3251 cricket::WebRtcVoiceEngine engine; 3289 cricket::WebRtcVoiceEngine engine;
3252 EXPECT_TRUE(engine.Init(rtc::Thread::Current())); 3290 EXPECT_TRUE(engine.Init(rtc::Thread::Current()));
3253 rtc::scoped_ptr<webrtc::Call> call( 3291 rtc::scoped_ptr<webrtc::Call> call(
3254 webrtc::Call::Create(webrtc::Call::Config())); 3292 webrtc::Call::Create(webrtc::Call::Config()));
3255 cricket::WebRtcVoiceMediaChannel channel(&engine, cricket::AudioOptions(), 3293 cricket::WebRtcVoiceMediaChannel channel(&engine, cricket::AudioOptions(),
3256 call.get()); 3294 call.get());
3257 cricket::AudioRecvParameters parameters; 3295 cricket::AudioRecvParameters parameters;
3258 parameters.codecs = engine.codecs(); 3296 parameters.codecs = engine.codecs();
3259 EXPECT_TRUE(channel.SetRecvParameters(parameters)); 3297 EXPECT_TRUE(channel.SetRecvParameters(parameters));
3260 } 3298 }
OLDNEW
« no previous file with comments | « talk/media/webrtc/webrtcvoiceengine.cc ('k') | webrtc/audio/BUILD.gn » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698