Index: webrtc/modules/audio_coding/neteq/statistics_calculator.cc |
diff --git a/webrtc/modules/audio_coding/neteq/statistics_calculator.cc b/webrtc/modules/audio_coding/neteq/statistics_calculator.cc |
index dd63c122253a6912bd69431dc43108353f90cf90..b4d6a6c1dec8b7c3bb3ec907e97b102376211614 100644 |
--- a/webrtc/modules/audio_coding/neteq/statistics_calculator.cc |
+++ b/webrtc/modules/audio_coding/neteq/statistics_calculator.cc |
@@ -43,6 +43,32 @@ void StatisticsCalculator::DelayedPacketOutagesPerMinuteCounter::LogToUma() |
counter_); |
} |
+void StatisticsCalculator::AverageExcessBufferDelayMs:: |
+ RegisterPacketWaitingTime(int time_ms) { |
+ sum_ += time_ms; |
+ ++num_packets_; |
+} |
+ |
+void StatisticsCalculator::AverageExcessBufferDelayMs::AdvanceClock( |
+ int step_ms) { |
+ timer_ += step_ms; |
+ if (timer_ < kReportIntervalMs) { |
+ return; |
+ } |
+ LogToUma(); |
+ sum_ = 0.0; |
+ num_packets_ = 0; |
+ timer_ -= kReportIntervalMs; |
+ DCHECK_GE(timer_, 0); |
+} |
+ |
+void StatisticsCalculator::AverageExcessBufferDelayMs::LogToUma() { |
+ if (num_packets_ > 0) { |
+ RTC_HISTOGRAM_COUNTS_1000("WebRTC.Audio.AverageExcessBufferDelayMs", |
+ static_cast<int>(sum_ / num_packets_)); |
+ } |
+} |
+ |
StatisticsCalculator::StatisticsCalculator() |
: preemptive_samples_(0), |
accelerate_samples_(0), |
@@ -108,8 +134,9 @@ void StatisticsCalculator::LostSamples(int num_samples) { |
} |
void StatisticsCalculator::IncreaseCounter(int num_samples, int fs_hz) { |
- delayed_packet_outage_counter_.AdvanceClock( |
- rtc::CheckedDivExact(1000 * num_samples, fs_hz)); |
+ const int time_step_ms = rtc::CheckedDivExact(1000 * num_samples, fs_hz); |
+ delayed_packet_outage_counter_.AdvanceClock(time_step_ms); |
+ excess_buffer_delay_.AdvanceClock(time_step_ms); |
timestamps_since_last_report_ += static_cast<uint32_t>(num_samples); |
if (timestamps_since_last_report_ > |
static_cast<uint32_t>(fs_hz * kMaxReportPeriod)) { |
@@ -131,6 +158,7 @@ void StatisticsCalculator::LogDelayedPacketOutageEvent(int outage_duration_ms) { |
} |
void StatisticsCalculator::StoreWaitingTime(int waiting_time_ms) { |
+ excess_buffer_delay_.RegisterPacketWaitingTime(waiting_time_ms); |
assert(next_waiting_time_index_ < kLenWaitingTimes); |
waiting_times_[next_waiting_time_index_] = waiting_time_ms; |
next_waiting_time_index_++; |