Wiring discard rate of audio FEC/RED packets up to StatsReport.

BUG=webrtc:7903

Change-Id: I0325725be354ab89cfce1d3564936fe5ff93d303
Reviewed-on: https://chromium-review.googlesource.com/559339
Reviewed-by: Tommi <tommi@webrtc.org>
Reviewed-by: Henrik Boström <hbos@webrtc.org>
Reviewed-by: Henrik Lundin <henrik.lundin@webrtc.org>
Commit-Queue: Minyue Li <minyue@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#19560}
This commit is contained in:
minyue-webrtc 2017-08-28 13:51:27 +02:00 committed by Commit Bot
parent 1a92d0de49
commit 0e320ec5ba
11 changed files with 29 additions and 1 deletions

View File

@ -590,6 +590,8 @@ const char* StatsReport::Value::display_name() const {
return "googRtt";
case kStatsValueNameSecondaryDecodedRate:
return "googSecondaryDecodedRate";
case kStatsValueNameSecondaryDiscardedRate:
return "googSecondaryDiscardedRate";
case kStatsValueNameSendPacketsDiscarded:
return "packetsDiscardedOnSend";
case kStatsValueNameSpeechExpandRate:

View File

@ -210,6 +210,7 @@ class StatsReport {
kStatsValueNameRetransmitBitrate,
kStatsValueNameRtt,
kStatsValueNameSecondaryDecodedRate,
kStatsValueNameSecondaryDiscardedRate,
kStatsValueNameSendPacketsDiscarded,
kStatsValueNameSpeechExpandRate,
kStatsValueNameSrtpCipher,

View File

@ -199,6 +199,7 @@ webrtc::AudioReceiveStream::Stats AudioReceiveStream::GetStats() const {
stats.expand_rate = Q14ToFloat(ns.currentExpandRate);
stats.speech_expand_rate = Q14ToFloat(ns.currentSpeechExpandRate);
stats.secondary_decoded_rate = Q14ToFloat(ns.currentSecondaryDecodedRate);
stats.secondary_discarded_rate = Q14ToFloat(ns.currentSecondaryDiscardedRate);
stats.accelerate_rate = Q14ToFloat(ns.currentAccelerateRate);
stats.preemptive_expand_rate = Q14ToFloat(ns.currentPreemptiveRate);

View File

@ -327,6 +327,8 @@ TEST(AudioReceiveStreamTest, GetStats) {
stats.speech_expand_rate);
EXPECT_EQ(Q14ToFloat(kNetworkStats.currentSecondaryDecodedRate),
stats.secondary_decoded_rate);
EXPECT_EQ(Q14ToFloat(kNetworkStats.currentSecondaryDiscardedRate),
stats.secondary_discarded_rate);
EXPECT_EQ(Q14ToFloat(kNetworkStats.currentAccelerateRate),
stats.accelerate_rate);
EXPECT_EQ(Q14ToFloat(kNetworkStats.currentPreemptiveRate),

View File

@ -64,6 +64,7 @@ class AudioReceiveStream {
float expand_rate = 0.0f;
float speech_expand_rate = 0.0f;
float secondary_decoded_rate = 0.0f;
float secondary_discarded_rate = 0.0f;
float accelerate_rate = 0.0f;
float preemptive_expand_rate = 0.0f;
int32_t decoding_calls_to_silence_generator = 0;

View File

@ -393,7 +393,10 @@ struct NetworkStatistics {
uint16_t currentAccelerateRate;
// fraction of data coming from secondary decoding (in Q14)
uint16_t currentSecondaryDecodedRate;
// fraction of secondary data that is discarded (in Q14).
// Fraction of secondary data, including FEC and RED, that is discarded (in
// Q14). Discarding of secondary data can be caused by the reception of the
// primary data, obsoleting the secondary data. It can also be caused by early
// or late arrival of secondary data.
uint16_t currentSecondaryDiscardedRate;
// clock-drift in parts-per-million (negative or positive)
int32_t clockDriftPPM;

View File

@ -658,6 +658,7 @@ struct VoiceReceiverInfo : public MediaReceiverInfo {
expand_rate(0),
speech_expand_rate(0),
secondary_decoded_rate(0),
secondary_discarded_rate(0),
accelerate_rate(0),
preemptive_expand_rate(0),
decoding_calls_to_silence_generator(0),
@ -693,6 +694,12 @@ struct VoiceReceiverInfo : public MediaReceiverInfo {
float speech_expand_rate;
// fraction of data out of secondary decoding, including FEC and RED.
float secondary_decoded_rate;
// Fraction of secondary data, including FEC and RED, that is discarded.
// Discarding of secondary data can be caused by the reception of the primary
// data, obsoleting the secondary data. It can also be caused by early
// or late arrival of secondary data. This metric is the percentage of
// discarded secondary data since last query of receiver info.
float secondary_discarded_rate;
// Fraction of data removed through time compression.
float accelerate_rate;
// Fraction of data inserted through time stretching.

View File

@ -2288,6 +2288,7 @@ bool WebRtcVoiceMediaChannel::GetStats(VoiceMediaInfo* info) {
rinfo.expand_rate = stats.expand_rate;
rinfo.speech_expand_rate = stats.speech_expand_rate;
rinfo.secondary_decoded_rate = stats.secondary_decoded_rate;
rinfo.secondary_discarded_rate = stats.secondary_discarded_rate;
rinfo.accelerate_rate = stats.accelerate_rate;
rinfo.preemptive_expand_rate = stats.preemptive_expand_rate;
rinfo.decoding_calls_to_silence_generator =

View File

@ -601,6 +601,7 @@ class WebRtcVoiceEngineTestFake : public testing::Test {
stats.expand_rate = 5.67f;
stats.speech_expand_rate = 8.90f;
stats.secondary_decoded_rate = 1.23f;
stats.secondary_discarded_rate = 0.12f;
stats.accelerate_rate = 4.56f;
stats.preemptive_expand_rate = 7.89f;
stats.decoding_calls_to_silence_generator = 12;
@ -639,6 +640,7 @@ class WebRtcVoiceEngineTestFake : public testing::Test {
EXPECT_EQ(info.expand_rate, stats.expand_rate);
EXPECT_EQ(info.speech_expand_rate, stats.speech_expand_rate);
EXPECT_EQ(info.secondary_decoded_rate, stats.secondary_decoded_rate);
EXPECT_EQ(info.secondary_discarded_rate, stats.secondary_discarded_rate);
EXPECT_EQ(info.accelerate_rate, stats.accelerate_rate);
EXPECT_EQ(info.preemptive_expand_rate, stats.preemptive_expand_rate);
EXPECT_EQ(info.decoding_calls_to_silence_generator,

View File

@ -142,6 +142,8 @@ void ExtractStats(const cricket::VoiceReceiverInfo& info, StatsReport* report) {
{ StatsReport::kStatsValueNameExpandRate, info.expand_rate },
{ StatsReport::kStatsValueNameSecondaryDecodedRate,
info.secondary_decoded_rate },
{ StatsReport::kStatsValueNameSecondaryDiscardedRate,
info.secondary_discarded_rate },
{ StatsReport::kStatsValueNameSpeechExpandRate, info.speech_expand_rate },
{ StatsReport::kStatsValueNameAccelerateRate, info.accelerate_rate },
{ StatsReport::kStatsValueNamePreemptiveExpandRate,

View File

@ -332,6 +332,11 @@ void VerifyVoiceReceiverInfoReport(
EXPECT_TRUE(GetValue(report, StatsReport::kStatsValueNameSecondaryDecodedRate,
&value_in_report));
EXPECT_EQ(rtc::ToString<float>(info.secondary_decoded_rate), value_in_report);
EXPECT_TRUE(GetValue(report,
StatsReport::kStatsValueNameSecondaryDiscardedRate,
&value_in_report));
EXPECT_EQ(rtc::ToString<float>(info.secondary_discarded_rate),
value_in_report);
EXPECT_TRUE(GetValue(
report, StatsReport::kStatsValueNamePacketsReceived, &value_in_report));
EXPECT_EQ(rtc::ToString<int>(info.packets_rcvd), value_in_report);
@ -483,6 +488,7 @@ void InitVoiceReceiverInfo(cricket::VoiceReceiverInfo* voice_receiver_info) {
voice_receiver_info->secondary_decoded_rate = 123;
voice_receiver_info->accelerate_rate = 124;
voice_receiver_info->preemptive_expand_rate = 125;
voice_receiver_info->secondary_discarded_rate = 126;
}
class StatsCollectorForTest : public webrtc::StatsCollector {