From 43cb716e55eab1cf1ae8afd2ac79b51a604d0fa5 Mon Sep 17 00:00:00 2001 From: asapersson Date: Tue, 15 Nov 2016 08:20:48 -0800 Subject: [PATCH] Add ToString method to AggregatedStats and log stats at the end of a call. BUG=webrtc:5283 Review-Url: https://codereview.webrtc.org/2494423002 Cr-Commit-Position: refs/heads/master@{#15088} --- webrtc/call/call.cc | 12 ++++++++++++ webrtc/video/receive_statistics_proxy.cc | 2 ++ webrtc/video/send_delay_stats.cc | 1 + webrtc/video/stats_counter.cc | 9 +++++++++ webrtc/video/stats_counter.h | 3 +++ 5 files changed, 27 insertions(+) diff --git a/webrtc/call/call.cc b/webrtc/call/call.cc index 3ed7947539..2f69cf4627 100644 --- a/webrtc/call/call.cc +++ b/webrtc/call/call.cc @@ -349,12 +349,16 @@ void Call::UpdateSendHistograms() { if (send_bitrate_stats.num_samples > kMinRequiredPeriodicSamples) { RTC_HISTOGRAM_COUNTS_100000("WebRTC.Call.EstimatedSendBitrateInKbps", send_bitrate_stats.average); + LOG(LS_INFO) << "WebRTC.Call.EstimatedSendBitrateInKbps, " + << send_bitrate_stats.ToString(); } AggregatedStats pacer_bitrate_stats = pacer_bitrate_kbps_counter_.ProcessAndGetStats(); if (pacer_bitrate_stats.num_samples > kMinRequiredPeriodicSamples) { RTC_HISTOGRAM_COUNTS_100000("WebRTC.Call.PacerBitrateInKbps", pacer_bitrate_stats.average); + LOG(LS_INFO) << "WebRTC.Call.PacerBitrateInKbps, " + << pacer_bitrate_stats.ToString(); } } @@ -365,24 +369,32 @@ void Call::UpdateReceiveHistograms() { if (video_bytes_per_sec.num_samples > kMinRequiredPeriodicSamples) { RTC_HISTOGRAM_COUNTS_100000("WebRTC.Call.VideoBitrateReceivedInKbps", video_bytes_per_sec.average * 8 / 1000); + LOG(LS_INFO) << "WebRTC.Call.VideoBitrateReceivedInKbps, " + << video_bytes_per_sec.ToString(); } AggregatedStats audio_bytes_per_sec = received_audio_bytes_per_second_counter_.GetStats(); if (audio_bytes_per_sec.num_samples > kMinRequiredPeriodicSamples) { RTC_HISTOGRAM_COUNTS_100000("WebRTC.Call.AudioBitrateReceivedInKbps", audio_bytes_per_sec.average * 8 / 1000); + LOG(LS_INFO) << "WebRTC.Call.AudioBitrateReceivedInKbps, " + << audio_bytes_per_sec.ToString(); } AggregatedStats rtcp_bytes_per_sec = received_rtcp_bytes_per_second_counter_.GetStats(); if (rtcp_bytes_per_sec.num_samples > kMinRequiredPeriodicSamples) { RTC_HISTOGRAM_COUNTS_100000("WebRTC.Call.RtcpBitrateReceivedInBps", rtcp_bytes_per_sec.average * 8); + LOG(LS_INFO) << "WebRTC.Call.RtcpBitrateReceivedInBps, " + << rtcp_bytes_per_sec.ToString(); } AggregatedStats recv_bytes_per_sec = received_bytes_per_second_counter_.GetStats(); if (recv_bytes_per_sec.num_samples > kMinRequiredPeriodicSamples) { RTC_HISTOGRAM_COUNTS_100000("WebRTC.Call.BitrateReceivedInKbps", recv_bytes_per_sec.average * 8 / 1000); + LOG(LS_INFO) << "WebRTC.Call.BitrateReceivedInKbps, " + << recv_bytes_per_sec.ToString(); } } diff --git a/webrtc/video/receive_statistics_proxy.cc b/webrtc/video/receive_statistics_proxy.cc index ded510a55e..b15ef682a1 100644 --- a/webrtc/video/receive_statistics_proxy.cc +++ b/webrtc/video/receive_statistics_proxy.cc @@ -77,6 +77,8 @@ void ReceiveStatisticsProxy::UpdateHistograms() { if (freq_offset_stats.num_samples > 0) { RTC_HISTOGRAM_COUNTS_10000("WebRTC.Video.RtpToNtpFreqOffsetInKhz", freq_offset_stats.average); + LOG(LS_INFO) << "WebRTC.Video.RtpToNtpFreqOffsetInKhz, " + << freq_offset_stats.ToString(); } int qp = qp_counters_.vp8.Avg(kMinRequiredSamples); diff --git a/webrtc/video/send_delay_stats.cc b/webrtc/video/send_delay_stats.cc index 8ae0615c59..1c3fd2a600 100644 --- a/webrtc/video/send_delay_stats.cc +++ b/webrtc/video/send_delay_stats.cc @@ -45,6 +45,7 @@ void SendDelayStats::UpdateHistograms() { AggregatedStats stats = it.second->GetStats(); if (stats.num_samples >= kMinRequiredPeriodicSamples) { RTC_HISTOGRAM_COUNTS_10000("WebRTC.Video.SendDelayInMs", stats.average); + LOG(LS_INFO) << "WebRTC.Video.SendDelayInMs, " << stats.ToString(); } } } diff --git a/webrtc/video/stats_counter.cc b/webrtc/video/stats_counter.cc index 9923ed20d7..b1c24ee673 100644 --- a/webrtc/video/stats_counter.cc +++ b/webrtc/video/stats_counter.cc @@ -25,6 +25,15 @@ const int64_t kDefaultProcessIntervalMs = 2000; const uint32_t kStreamId0 = 0; } // namespace +std::string AggregatedStats::ToString() const { + std::stringstream ss; + ss << "periodic_samples:" << num_samples << ", {"; + ss << "min:" << min << ", "; + ss << "avg:" << average << ", "; + ss << "max:" << max << "}"; + return ss.str(); +} + // Class holding periodically computed metrics. class AggregatedCounter { public: diff --git a/webrtc/video/stats_counter.h b/webrtc/video/stats_counter.h index 08663f8015..e84d73b758 100644 --- a/webrtc/video/stats_counter.h +++ b/webrtc/video/stats_counter.h @@ -12,6 +12,7 @@ #define WEBRTC_VIDEO_STATS_COUNTER_H_ #include +#include #include "webrtc/base/constructormagic.h" #include "webrtc/typedefs.h" @@ -31,6 +32,8 @@ class StatsCounterObserver { }; struct AggregatedStats { + std::string ToString() const; + int64_t num_samples = 0; int min = -1; int max = -1;