Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(117)

Unified Diff: webrtc/video/send_statistics_proxy.cc

Issue 1720883002: Move RTCP histograms from vie_channel to video channel stats proxies. (Closed) Base URL: https://chromium.googlesource.com/external/webrtc.git@master
Patch Set: Rebase Created 4 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « webrtc/video/send_statistics_proxy.h ('k') | webrtc/video/send_statistics_proxy_unittest.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: webrtc/video/send_statistics_proxy.cc
diff --git a/webrtc/video/send_statistics_proxy.cc b/webrtc/video/send_statistics_proxy.cc
index 11dd241afaa05c41f90133f5917d7eb0476afdc0..729c77535d27c3cbd492aa946f63d71687f314e6 100644
--- a/webrtc/video/send_statistics_proxy.cc
+++ b/webrtc/video/send_statistics_proxy.cc
@@ -77,26 +77,34 @@ SendStatisticsProxy::SendStatisticsProxy(
content_type_(content_type),
last_sent_frame_timestamp_(0),
encode_time_(kEncodeTimeWeigthFactor),
- uma_container_(new UmaSamplesContainer(GetUmaPrefix(content_type_))) {
+ uma_container_(
+ new UmaSamplesContainer(GetUmaPrefix(content_type_), stats_, clock)) {
UpdateCodecTypeHistogram(config_.encoder_settings.payload_name);
}
-SendStatisticsProxy::~SendStatisticsProxy() {}
+SendStatisticsProxy::~SendStatisticsProxy() {
+ rtc::CritScope lock(&crit_);
+ uma_container_->UpdateHistograms(config_, stats_);
+}
SendStatisticsProxy::UmaSamplesContainer::UmaSamplesContainer(
- const char* prefix)
+ const char* prefix,
+ const VideoSendStream::Stats& stats,
+ Clock* const clock)
: uma_prefix_(prefix),
+ clock_(clock),
max_sent_width_per_timestamp_(0),
max_sent_height_per_timestamp_(0),
input_frame_rate_tracker_(100u, 10u),
sent_frame_rate_tracker_(100u, 10u),
- first_rtcp_stats_time_ms_(-1) {}
+ first_rtcp_stats_time_ms_(-1),
+ start_stats_(stats) {}
-SendStatisticsProxy::UmaSamplesContainer::~UmaSamplesContainer() {
- UpdateHistograms();
-}
+SendStatisticsProxy::UmaSamplesContainer::~UmaSamplesContainer() {}
-void SendStatisticsProxy::UmaSamplesContainer::UpdateHistograms() {
+void SendStatisticsProxy::UmaSamplesContainer::UpdateHistograms(
+ const VideoSendStream::Config& config,
+ const VideoSendStream::Stats& current_stats) {
RTC_DCHECK(uma_prefix_ == kRealtimePrefix || uma_prefix_ == kScreenPrefix);
const int kIndex = uma_prefix_ == kScreenPrefix ? 1 : 0;
const int kMinRequiredSamples = 200;
@@ -167,14 +175,52 @@ void SendStatisticsProxy::UmaSamplesContainer::UpdateHistograms() {
RTC_HISTOGRAMS_COUNTS_100000(kIndex, uma_prefix_ + "SendSideDelayMaxInMs",
max_delay_ms);
}
- int fraction_lost = report_block_stats_.FractionLostInPercent();
+
if (first_rtcp_stats_time_ms_ != -1) {
- int64_t elapsed_time_ms = Clock::GetRealTimeClock()->TimeInMilliseconds() -
- first_rtcp_stats_time_ms_;
- if (elapsed_time_ms / 1000 >= metrics::kMinRunTimeInSeconds &&
- fraction_lost != -1) {
- RTC_HISTOGRAMS_PERCENTAGE(
- kIndex, uma_prefix_ + "SentPacketsLostInPercent", fraction_lost);
+ int64_t elapsed_sec =
+ (clock_->TimeInMilliseconds() - first_rtcp_stats_time_ms_) / 1000;
+ if (elapsed_sec >= metrics::kMinRunTimeInSeconds) {
+ int fraction_lost = report_block_stats_.FractionLostInPercent();
+ if (fraction_lost != -1) {
+ RTC_HISTOGRAMS_PERCENTAGE(
+ kIndex, uma_prefix_ + "SentPacketsLostInPercent", fraction_lost);
+ }
+
+ // The RTCP packet type counters, delivered via the
+ // RtcpPacketTypeCounterObserver interface, are aggregates over the entire
+ // life of the send stream and are not reset when switching content type.
+ // For the purpose of these statistics though, we want new counts when
+ // switching since we switch histogram name. On every reset of the
+ // UmaSamplesContainer, we save the initial state of the counters, so that
+ // we can calculate the delta here and aggregate over all ssrcs.
+ RtcpPacketTypeCounter counters;
+ for (uint32_t ssrc : config.rtp.ssrcs) {
+ auto kv = current_stats.substreams.find(ssrc);
+ if (kv == current_stats.substreams.end())
+ continue;
+
+ RtcpPacketTypeCounter stream_counters =
+ kv->second.rtcp_packet_type_counts;
+ kv = start_stats_.substreams.find(ssrc);
+ if (kv != start_stats_.substreams.end())
+ stream_counters.Subtract(kv->second.rtcp_packet_type_counts);
+
+ counters.Add(stream_counters);
+ }
+ RTC_HISTOGRAMS_COUNTS_10000(kIndex,
+ uma_prefix_ + "NackPacketsReceivedPerMinute",
+ counters.nack_packets * 60 / elapsed_sec);
+ RTC_HISTOGRAMS_COUNTS_10000(kIndex,
+ uma_prefix_ + "FirPacketsReceivedPerMinute",
+ counters.fir_packets * 60 / elapsed_sec);
+ RTC_HISTOGRAMS_COUNTS_10000(kIndex,
+ uma_prefix_ + "PliPacketsReceivedPerMinute",
+ counters.pli_packets * 60 / elapsed_sec);
+ if (counters.nack_requests > 0) {
+ RTC_HISTOGRAMS_PERCENTAGE(
+ kIndex, uma_prefix_ + "UniqueNackRequestsReceivedInPercent",
+ counters.UniqueNackRequestsInPercent());
+ }
}
}
}
@@ -183,7 +229,9 @@ void SendStatisticsProxy::SetContentType(
VideoEncoderConfig::ContentType content_type) {
rtc::CritScope lock(&crit_);
if (content_type_ != content_type) {
- uma_container_.reset(new UmaSamplesContainer(GetUmaPrefix(content_type)));
+ uma_container_->UpdateHistograms(config_, stats_);
+ uma_container_.reset(
+ new UmaSamplesContainer(GetUmaPrefix(content_type), stats_, clock_));
content_type_ = content_type;
}
}
@@ -355,6 +403,8 @@ void SendStatisticsProxy::RtcpPacketTypesCounterUpdated(
return;
stats->rtcp_packet_type_counts = packet_counter;
+ if (uma_container_->first_rtcp_stats_time_ms_ == -1)
+ uma_container_->first_rtcp_stats_time_ms_ = clock_->TimeInMilliseconds();
}
void SendStatisticsProxy::StatisticsUpdated(const RtcpStatistics& statistics,
@@ -366,8 +416,6 @@ void SendStatisticsProxy::StatisticsUpdated(const RtcpStatistics& statistics,
stats->rtcp_stats = statistics;
uma_container_->report_block_stats_.Store(statistics, 0, ssrc);
- if (uma_container_->first_rtcp_stats_time_ms_ == -1)
- uma_container_->first_rtcp_stats_time_ms_ = clock_->TimeInMilliseconds();
}
void SendStatisticsProxy::CNameChanged(const char* cname, uint32_t ssrc) {}
« no previous file with comments | « webrtc/video/send_statistics_proxy.h ('k') | webrtc/video/send_statistics_proxy_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698