(Auto)update libjingle 66867790-> 66887616
git-svn-id: http://webrtc.googlecode.com/svn/trunk@6128 4adac7df-926f-26a2-2b94-8c16560cd09d
diff --git a/talk/app/webrtc/peerconnection_unittest.cc b/talk/app/webrtc/peerconnection_unittest.cc
index f6003f6..b4d6bcc 100644
--- a/talk/app/webrtc/peerconnection_unittest.cc
+++ b/talk/app/webrtc/peerconnection_unittest.cc
@@ -85,7 +85,7 @@
static const int kMaxWaitMs = 2000;
static const int kMaxWaitForStatsMs = 3000;
-static const int kMaxWaitForFramesMs = 5000;
+static const int kMaxWaitForFramesMs = 10000;
static const int kEndAudioFrameCount = 3;
static const int kEndVideoFrameCount = 3;
diff --git a/talk/app/webrtc/statscollector.cc b/talk/app/webrtc/statscollector.cc
index 013e83f..23d3205 100644
--- a/talk/app/webrtc/statscollector.cc
+++ b/talk/app/webrtc/statscollector.cc
@@ -63,6 +63,18 @@
const char StatsReport::kStatsValueNameContentName[] = "googContentName";
const char StatsReport::kStatsValueNameCpuLimitedResolution[] =
"googCpuLimitedResolution";
+const char StatsReport::kStatsValueNameDecodingCTSG[] =
+ "googDecodingCTSG";
+const char StatsReport::kStatsValueNameDecodingCTN[] =
+ "googDecodingCTN";
+const char StatsReport::kStatsValueNameDecodingNormal[] =
+ "googDecodingNormal";
+const char StatsReport::kStatsValueNameDecodingPLC[] =
+ "googDecodingPLC";
+const char StatsReport::kStatsValueNameDecodingCNG[] =
+ "googDecodingCNG";
+const char StatsReport::kStatsValueNameDecodingPLCCNG[] =
+ "googDecodingPLCCNG";
const char StatsReport::kStatsValueNameDer[] = "googDerBase64";
// Echo metrics from the audio processing module.
const char StatsReport::kStatsValueNameEchoCancellationQualityMin[] =
@@ -273,6 +285,18 @@
info.packets_rcvd);
report->AddValue(StatsReport::kStatsValueNamePacketsLost,
info.packets_lost);
+ report->AddValue(StatsReport::kStatsValueNameDecodingCTSG,
+ info.decoding_calls_to_silence_generator);
+ report->AddValue(StatsReport::kStatsValueNameDecodingCTN,
+ info.decoding_calls_to_neteq);
+ report->AddValue(StatsReport::kStatsValueNameDecodingNormal,
+ info.decoding_normal);
+ report->AddValue(StatsReport::kStatsValueNameDecodingPLC,
+ info.decoding_plc);
+ report->AddValue(StatsReport::kStatsValueNameDecodingCNG,
+ info.decoding_cng);
+ report->AddValue(StatsReport::kStatsValueNameDecodingPLCCNG,
+ info.decoding_plc_cng);
}
void ExtractStats(const cricket::VoiceSenderInfo& info, StatsReport* report) {
diff --git a/talk/app/webrtc/statscollector_unittest.cc b/talk/app/webrtc/statscollector_unittest.cc
index 24be20a..fb55969 100644
--- a/talk/app/webrtc/statscollector_unittest.cc
+++ b/talk/app/webrtc/statscollector_unittest.cc
@@ -263,6 +263,58 @@
EXPECT_EQ(ders.size(), i);
}
+void VerifyVoiceReceiverInfoReport(const StatsReport* report,
+ const cricket::VoiceReceiverInfo& sinfo) {
+ std::string value_in_report;
+ EXPECT_TRUE(GetValue(
+ report, StatsReport::kStatsValueNameAudioOutputLevel, &value_in_report));
+ EXPECT_EQ(talk_base::ToString<int>(sinfo.audio_level), value_in_report);
+ EXPECT_TRUE(GetValue(
+ report, StatsReport::kStatsValueNameBytesReceived, &value_in_report));
+ EXPECT_EQ(talk_base::ToString<int>(sinfo.bytes_rcvd), value_in_report);
+ EXPECT_TRUE(GetValue(
+ report, StatsReport::kStatsValueNameJitterReceived, &value_in_report));
+ EXPECT_EQ(talk_base::ToString<int>(sinfo.jitter_ms), value_in_report);
+ EXPECT_TRUE(GetValue(
+ report, StatsReport::kStatsValueNameJitterBufferMs, &value_in_report));
+ EXPECT_EQ(talk_base::ToString<int>(sinfo.jitter_buffer_ms), value_in_report);
+ EXPECT_TRUE(GetValue(
+ report, StatsReport::kStatsValueNamePreferredJitterBufferMs,
+ &value_in_report));
+ EXPECT_EQ(talk_base::ToString<int>(sinfo.jitter_buffer_preferred_ms),
+ value_in_report);
+ EXPECT_TRUE(GetValue(
+ report, StatsReport::kStatsValueNameCurrentDelayMs, &value_in_report));
+ EXPECT_EQ(talk_base::ToString<int>(sinfo.delay_estimate_ms), value_in_report);
+ EXPECT_TRUE(GetValue(
+ report, StatsReport::kStatsValueNameExpandRate, &value_in_report));
+ EXPECT_EQ(talk_base::ToString<float>(sinfo.expand_rate), value_in_report);
+ EXPECT_TRUE(GetValue(
+ report, StatsReport::kStatsValueNamePacketsReceived, &value_in_report));
+ EXPECT_EQ(talk_base::ToString<int>(sinfo.packets_rcvd), value_in_report);
+ EXPECT_TRUE(GetValue(
+ report, StatsReport::kStatsValueNameDecodingCTSG, &value_in_report));
+ EXPECT_EQ(talk_base::ToString<int>(sinfo.decoding_calls_to_silence_generator),
+ value_in_report);
+ EXPECT_TRUE(GetValue(
+ report, StatsReport::kStatsValueNameDecodingCTN, &value_in_report));
+ EXPECT_EQ(talk_base::ToString<int>(sinfo.decoding_calls_to_neteq),
+ value_in_report);
+ EXPECT_TRUE(GetValue(
+ report, StatsReport::kStatsValueNameDecodingNormal, &value_in_report));
+ EXPECT_EQ(talk_base::ToString<int>(sinfo.decoding_normal), value_in_report);
+ EXPECT_TRUE(GetValue(
+ report, StatsReport::kStatsValueNameDecodingPLC, &value_in_report));
+ EXPECT_EQ(talk_base::ToString<int>(sinfo.decoding_plc), value_in_report);
+ EXPECT_TRUE(GetValue(
+ report, StatsReport::kStatsValueNameDecodingCNG, &value_in_report));
+ EXPECT_EQ(talk_base::ToString<int>(sinfo.decoding_cng), value_in_report);
+ EXPECT_TRUE(GetValue(
+ report, StatsReport::kStatsValueNameDecodingPLCCNG, &value_in_report));
+ EXPECT_EQ(talk_base::ToString<int>(sinfo.decoding_plc_cng), value_in_report);
+}
+
+
void VerifyVoiceSenderInfoReport(const StatsReport* report,
const cricket::VoiceSenderInfo& sinfo) {
std::string value_in_report;
@@ -1067,6 +1119,66 @@
VerifyVoiceSenderInfoReport(track_report, voice_sender_info);
}
+
+// This test verifies that audio receive streams populate stats reports
+// correctly.
+TEST_F(StatsCollectorTest, GetStatsFromRemoteStream) {
+ webrtc::StatsCollector stats; // Implementation under test.
+ MockVoiceMediaChannel* media_channel = new MockVoiceMediaChannel();
+ // The content_name known by the voice channel.
+ const std::string kVcName("vcname");
+ cricket::VoiceChannel voice_channel(talk_base::Thread::Current(),
+ media_engine_, media_channel, &session_, kVcName, false);
+ stream_ = webrtc::MediaStream::Create("remoteStreamLabel");
+ stats.AddStream(stream_);
+
+ stats.set_session(&session_);
+
+ // Instruct the session to return stats containing the transport channel.
+ InitSessionStats(kVcName);
+ EXPECT_CALL(session_, GetStats(_))
+ .WillRepeatedly(DoAll(SetArgPointee<0>(session_stats_),
+ Return(true)));
+
+ cricket::VoiceReceiverInfo voice_receiver_info;
+ voice_receiver_info.add_ssrc(kSsrcOfTrack);
+ voice_receiver_info.bytes_rcvd = 100;
+ voice_receiver_info.packets_rcvd = 101;
+ voice_receiver_info.packets_lost = 102;
+ voice_receiver_info.fraction_lost = 103;
+ voice_receiver_info.packets_lost = 104;
+ voice_receiver_info.ext_seqnum = 105;
+ voice_receiver_info.jitter_ms = 106;
+ voice_receiver_info.jitter_buffer_ms = 107;
+ voice_receiver_info.jitter_buffer_preferred_ms = 108;
+ voice_receiver_info.delay_estimate_ms = 109;
+ voice_receiver_info.audio_level = 110;
+ voice_receiver_info.expand_rate = 111;
+
+ // Constructs an ssrc stats update.
+ cricket::VoiceMediaInfo stats_read;
+ stats_read.receivers.push_back(voice_receiver_info);
+
+ EXPECT_CALL(session_, voice_channel()).WillRepeatedly(Return(&voice_channel));
+ EXPECT_CALL(session_, video_channel()).WillRepeatedly(ReturnNull());
+ EXPECT_CALL(*media_channel, GetStats(_))
+ .WillRepeatedly(DoAll(SetArgPointee<0>(stats_read),
+ Return(true)));
+ EXPECT_CALL(session_, GetTrackIdBySsrc(kSsrcOfTrack, _))
+ .WillRepeatedly(Return(true));
+
+ StatsReports reports; // returned values.
+ stats.UpdateStats(PeerConnectionInterface::kStatsOutputLevelStandard);
+ stats.GetStats(NULL, &reports);
+
+ // Verify the remote report.
+ const StatsReport* report = FindNthReportByType(
+ reports, StatsReport::kStatsReportTypeSsrc, 1);
+ EXPECT_FALSE(report == NULL);
+ VerifyVoiceReceiverInfoReport(report, voice_receiver_info);
+}
+
+
// This test verifies that a local stats object won't update its statistics
// after a RemoveLocalAudioTrack() call.
TEST_F(StatsCollectorTest, GetStatsAfterRemoveAudioStream) {
diff --git a/talk/app/webrtc/statstypes.h b/talk/app/webrtc/statstypes.h
index dd9da0d..e471dc9 100644
--- a/talk/app/webrtc/statstypes.h
+++ b/talk/app/webrtc/statstypes.h
@@ -200,6 +200,12 @@
static const char kStatsValueNameRecvPacketGroupArrivalTimeDebug[];
static const char kStatsValueNameRecvPacketGroupPropagationDeltaDebug[];
static const char kStatsValueNameRecvPacketGroupPropagationDeltaSumDebug[];
+ static const char kStatsValueNameDecodingCTSG[];
+ static const char kStatsValueNameDecodingCTN[];
+ static const char kStatsValueNameDecodingNormal[];
+ static const char kStatsValueNameDecodingPLC[];
+ static const char kStatsValueNameDecodingCNG[];
+ static const char kStatsValueNameDecodingPLCCNG[];
};
typedef std::vector<StatsReport> StatsReports;
diff --git a/talk/app/webrtc/test/peerconnectiontestwrapper.cc b/talk/app/webrtc/test/peerconnectiontestwrapper.cc
index d7c30a8..7d3664f 100644
--- a/talk/app/webrtc/test/peerconnectiontestwrapper.cc
+++ b/talk/app/webrtc/test/peerconnectiontestwrapper.cc
@@ -36,7 +36,7 @@
static const char kStreamLabelBase[] = "stream_label";
static const char kVideoTrackLabelBase[] = "video_track";
static const char kAudioTrackLabelBase[] = "audio_track";
-static const int kMaxWait = 5000;
+static const int kMaxWait = 10000;
static const int kTestAudioFrameCount = 3;
static const int kTestVideoFrameCount = 3;