Route time-stretching metrics through libjingle

This change connects currentAccelerateRate and currentPreemptiveRate
in webrtc::NetworkStatistics, through corresponding variables in
VoiceReceiverInfo, to googAccelerateRate and googPreemptiveExpandRate.

R=tommi@webrtc.org

Review URL: https://webrtc-codereview.appspot.com/50179004

Cr-Commit-Position: refs/heads/master@{#9350}
This commit is contained in:
Henrik Lundin
2015-06-02 09:24:52 +02:00
parent 76cda01ae2
commit 8e6fd46cc3
7 changed files with 34 additions and 2 deletions

View File

@@ -129,6 +129,9 @@ void ExtractStats(const cricket::VoiceReceiverInfo& info, StatsReport* report) {
{ StatsReport::kStatsValueNameSecondaryDecodedRate, { StatsReport::kStatsValueNameSecondaryDecodedRate,
info.secondary_decoded_rate }, info.secondary_decoded_rate },
{ StatsReport::kStatsValueNameSpeechExpandRate, info.speech_expand_rate }, { StatsReport::kStatsValueNameSpeechExpandRate, info.speech_expand_rate },
{ StatsReport::kStatsValueNameAccelerateRate, info.accelerate_rate },
{ StatsReport::kStatsValueNamePreemptiveExpandRate,
info.preemptive_expand_rate },
}; };
const IntForAdd ints[] = { const IntForAdd ints[] = {

View File

@@ -313,6 +313,12 @@ void VerifyVoiceReceiverInfoReport(
EXPECT_TRUE(GetValue( EXPECT_TRUE(GetValue(
report, StatsReport::kStatsValueNameSpeechExpandRate, &value_in_report)); report, StatsReport::kStatsValueNameSpeechExpandRate, &value_in_report));
EXPECT_EQ(rtc::ToString<float>(info.speech_expand_rate), value_in_report); EXPECT_EQ(rtc::ToString<float>(info.speech_expand_rate), value_in_report);
EXPECT_TRUE(GetValue(report, StatsReport::kStatsValueNameAccelerateRate,
&value_in_report));
EXPECT_EQ(rtc::ToString<float>(info.accelerate_rate), value_in_report);
EXPECT_TRUE(GetValue(report, StatsReport::kStatsValueNamePreemptiveExpandRate,
&value_in_report));
EXPECT_EQ(rtc::ToString<float>(info.preemptive_expand_rate), value_in_report);
EXPECT_TRUE(GetValue(report, StatsReport::kStatsValueNameSecondaryDecodedRate, EXPECT_TRUE(GetValue(report, StatsReport::kStatsValueNameSecondaryDecodedRate,
&value_in_report)); &value_in_report));
EXPECT_EQ(rtc::ToString<float>(info.secondary_decoded_rate), value_in_report); EXPECT_EQ(rtc::ToString<float>(info.secondary_decoded_rate), value_in_report);
@@ -451,6 +457,8 @@ void InitVoiceReceiverInfo(cricket::VoiceReceiverInfo* voice_receiver_info) {
voice_receiver_info->expand_rate = 121; voice_receiver_info->expand_rate = 121;
voice_receiver_info->speech_expand_rate = 122; voice_receiver_info->speech_expand_rate = 122;
voice_receiver_info->secondary_decoded_rate = 123; voice_receiver_info->secondary_decoded_rate = 123;
voice_receiver_info->accelerate_rate = 124;
voice_receiver_info->preemptive_expand_rate = 125;
} }
class StatsCollectorForTest : public webrtc::StatsCollector { class StatsCollectorForTest : public webrtc::StatsCollector {

View File

@@ -408,6 +408,8 @@ const char* StatsReport::Value::display_name() const {
return "datachannelid"; return "datachannelid";
// 'goog' prefixed constants. // 'goog' prefixed constants.
case kStatsValueNameAccelerateRate:
return "googAccelerateRate";
case kStatsValueNameActiveConnection: case kStatsValueNameActiveConnection:
return "googActiveConnection"; return "googActiveConnection";
case kStatsValueNameActualEncBitrate: case kStatsValueNameActualEncBitrate:
@@ -544,6 +546,8 @@ const char* StatsReport::Value::display_name() const {
return "googNacksReceived"; return "googNacksReceived";
case kStatsValueNameNacksSent: case kStatsValueNameNacksSent:
return "googNacksSent"; return "googNacksSent";
case kStatsValueNamePreemptiveExpandRate:
return "googPreemptiveExpandRate";
case kStatsValueNamePlisReceived: case kStatsValueNamePlisReceived:
return "googPlisReceived"; return "googPlisReceived";
case kStatsValueNamePlisSent: case kStatsValueNamePlisSent:

View File

@@ -131,6 +131,7 @@ class StatsReport {
kStatsValueNameTransportId, kStatsValueNameTransportId,
// Internal StatsValue names. // Internal StatsValue names.
kStatsValueNameAccelerateRate,
kStatsValueNameActualEncBitrate, kStatsValueNameActualEncBitrate,
kStatsValueNameAdaptationChanges, kStatsValueNameAdaptationChanges,
kStatsValueNameAvailableReceiveBandwidth, kStatsValueNameAvailableReceiveBandwidth,
@@ -197,6 +198,7 @@ class StatsReport {
kStatsValueNameNacksSent, kStatsValueNameNacksSent,
kStatsValueNamePlisReceived, kStatsValueNamePlisReceived,
kStatsValueNamePlisSent, kStatsValueNamePlisSent,
kStatsValueNamePreemptiveExpandRate,
kStatsValueNamePreferredJitterBufferMs, kStatsValueNamePreferredJitterBufferMs,
kStatsValueNameRemoteAddress, kStatsValueNameRemoteAddress,
kStatsValueNameRemoteCandidateId, kStatsValueNameRemoteCandidateId,

View File

@@ -784,14 +784,15 @@ struct VoiceReceiverInfo : public MediaReceiverInfo {
expand_rate(0), expand_rate(0),
speech_expand_rate(0), speech_expand_rate(0),
secondary_decoded_rate(0), secondary_decoded_rate(0),
accelerate_rate(0),
preemptive_expand_rate(0),
decoding_calls_to_silence_generator(0), decoding_calls_to_silence_generator(0),
decoding_calls_to_neteq(0), decoding_calls_to_neteq(0),
decoding_normal(0), decoding_normal(0),
decoding_plc(0), decoding_plc(0),
decoding_cng(0), decoding_cng(0),
decoding_plc_cng(0), decoding_plc_cng(0),
capture_start_ntp_time_ms(-1) { capture_start_ntp_time_ms(-1) {}
}
int ext_seqnum; int ext_seqnum;
int jitter_ms; int jitter_ms;
@@ -805,6 +806,10 @@ struct VoiceReceiverInfo : public MediaReceiverInfo {
float speech_expand_rate; float speech_expand_rate;
// fraction of data out of secondary decoding, including FEC and RED. // fraction of data out of secondary decoding, including FEC and RED.
float secondary_decoded_rate; float secondary_decoded_rate;
// Fraction of data removed through time compression.
float accelerate_rate;
// Fraction of data inserted through time stretching.
float preemptive_expand_rate;
int decoding_calls_to_silence_generator; int decoding_calls_to_silence_generator;
int decoding_calls_to_neteq; int decoding_calls_to_neteq;
int decoding_normal; int decoding_normal;

View File

@@ -3345,6 +3345,10 @@ bool WebRtcVoiceMediaChannel::GetStats(VoiceMediaInfo* info) {
static_cast<float>(ns.currentSpeechExpandRate) / (1 << 14); static_cast<float>(ns.currentSpeechExpandRate) / (1 << 14);
rinfo.secondary_decoded_rate = rinfo.secondary_decoded_rate =
static_cast<float>(ns.currentSecondaryDecodedRate) / (1 << 14); static_cast<float>(ns.currentSecondaryDecodedRate) / (1 << 14);
rinfo.accelerate_rate =
static_cast<float>(ns.currentAccelerateRate) / (1 << 14);
rinfo.preemptive_expand_rate =
static_cast<float>(ns.currentPreemptiveRate) / (1 << 14);
} }
webrtc::AudioDecodingCallStats ds; webrtc::AudioDecodingCallStats ds;

View File

@@ -2066,6 +2066,12 @@ TEST_F(WebRtcVoiceEngineTestFake, GetStatsWithMultipleSendStreams) {
(1 << 14), info.receivers[0].speech_expand_rate); (1 << 14), info.receivers[0].speech_expand_rate);
EXPECT_EQ(static_cast<float>(cricket::kNetStats.currentSecondaryDecodedRate) / EXPECT_EQ(static_cast<float>(cricket::kNetStats.currentSecondaryDecodedRate) /
(1 << 14), info.receivers[0].secondary_decoded_rate); (1 << 14), info.receivers[0].secondary_decoded_rate);
EXPECT_EQ(
static_cast<float>(cricket::kNetStats.currentAccelerateRate) / (1 << 14),
info.receivers[0].accelerate_rate);
EXPECT_EQ(
static_cast<float>(cricket::kNetStats.currentPreemptiveRate) / (1 << 14),
info.receivers[0].preemptive_expand_rate);
} }
// Test that we can add and remove receive streams, and do proper send/playout. // Test that we can add and remove receive streams, and do proper send/playout.