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-Original-Commit-Position: refs/heads/master@{#19560}
Cr-Mirrored-From: https://chromium.googlesource.com/external/webrtc
Cr-Mirrored-Commit: 0e320ec5baf3a0845cfef5d3a347501093aeeaad
diff --git a/api/statstypes.cc b/api/statstypes.cc
index fb9e1e5..29a171e 100644
--- a/api/statstypes.cc
+++ b/api/statstypes.cc
@@ -590,6 +590,8 @@
return "googRtt";
case kStatsValueNameSecondaryDecodedRate:
return "googSecondaryDecodedRate";
+ case kStatsValueNameSecondaryDiscardedRate:
+ return "googSecondaryDiscardedRate";
case kStatsValueNameSendPacketsDiscarded:
return "packetsDiscardedOnSend";
case kStatsValueNameSpeechExpandRate:
diff --git a/api/statstypes.h b/api/statstypes.h
index 819bfe0..1cc5cda 100644
--- a/api/statstypes.h
+++ b/api/statstypes.h
@@ -210,6 +210,7 @@
kStatsValueNameRetransmitBitrate,
kStatsValueNameRtt,
kStatsValueNameSecondaryDecodedRate,
+ kStatsValueNameSecondaryDiscardedRate,
kStatsValueNameSendPacketsDiscarded,
kStatsValueNameSpeechExpandRate,
kStatsValueNameSrtpCipher,
diff --git a/audio/audio_receive_stream.cc b/audio/audio_receive_stream.cc
index d2200f4..b7ea047 100644
--- a/audio/audio_receive_stream.cc
+++ b/audio/audio_receive_stream.cc
@@ -199,6 +199,7 @@
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);
diff --git a/audio/audio_receive_stream_unittest.cc b/audio/audio_receive_stream_unittest.cc
index 9723ee65..0d58614 100644
--- a/audio/audio_receive_stream_unittest.cc
+++ b/audio/audio_receive_stream_unittest.cc
@@ -327,6 +327,8 @@
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),
diff --git a/call/audio_receive_stream.h b/call/audio_receive_stream.h
index 78f1bff..fdf1698 100644
--- a/call/audio_receive_stream.h
+++ b/call/audio_receive_stream.h
@@ -64,6 +64,7 @@
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;
diff --git a/common_types.h b/common_types.h
index 843d9b8..fcb4381 100644
--- a/common_types.h
+++ b/common_types.h
@@ -393,7 +393,10 @@
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;
diff --git a/media/base/mediachannel.h b/media/base/mediachannel.h
index 76328ef..99ed291 100644
--- a/media/base/mediachannel.h
+++ b/media/base/mediachannel.h
@@ -658,6 +658,7 @@
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 @@
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.
diff --git a/media/engine/webrtcvoiceengine.cc b/media/engine/webrtcvoiceengine.cc
index fdbb5c7..8c45e95 100644
--- a/media/engine/webrtcvoiceengine.cc
+++ b/media/engine/webrtcvoiceengine.cc
@@ -2288,6 +2288,7 @@
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 =
diff --git a/media/engine/webrtcvoiceengine_unittest.cc b/media/engine/webrtcvoiceengine_unittest.cc
index 28d09e8..5ccd7d6 100644
--- a/media/engine/webrtcvoiceengine_unittest.cc
+++ b/media/engine/webrtcvoiceengine_unittest.cc
@@ -601,6 +601,7 @@
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 @@
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,
diff --git a/pc/statscollector.cc b/pc/statscollector.cc
index 2dc2c3b..97bae3d 100644
--- a/pc/statscollector.cc
+++ b/pc/statscollector.cc
@@ -142,6 +142,8 @@
{ 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,
diff --git a/pc/statscollector_unittest.cc b/pc/statscollector_unittest.cc
index 0fad6ad..56d4fca 100644
--- a/pc/statscollector_unittest.cc
+++ b/pc/statscollector_unittest.cc
@@ -332,6 +332,11 @@
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 @@
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 {