Index: webrtc/video/send_statistics_proxy.cc |
diff --git a/webrtc/video/send_statistics_proxy.cc b/webrtc/video/send_statistics_proxy.cc |
index 3b9134b08e4d5308c3ebc8a33e20ae604fde57ba..afaeed904d4d7e273ffe264be118f0e27ca64ff9 100644 |
--- a/webrtc/video/send_statistics_proxy.cc |
+++ b/webrtc/video/send_statistics_proxy.cc |
@@ -293,6 +293,24 @@ void SendStatisticsProxy::UmaSamplesContainer::UpdateHistograms( |
} |
} |
+ quality_scaling_timer_.Stop(clock_->TimeInMilliseconds()); |
+ int64_t elapsed_sec = quality_scaling_timer_.total_ms / 1000; |
+ if (elapsed_sec >= metrics::kMinRunTimeInSeconds) { |
+ int quality_changes = current_stats.number_of_quality_adapt_changes - |
+ start_stats_.number_of_quality_adapt_changes; |
+ RTC_HISTOGRAMS_COUNTS_100(kIndex, |
+ uma_prefix_ + "AdaptChangesPerMinute.Quality", |
+ quality_changes * 60 / elapsed_sec); |
+ } |
+ cpu_scaling_timer_.Stop(clock_->TimeInMilliseconds()); |
+ elapsed_sec = cpu_scaling_timer_.total_ms / 1000; |
+ if (elapsed_sec >= metrics::kMinRunTimeInSeconds) { |
+ int cpu_changes = current_stats.number_of_cpu_adapt_changes - |
+ start_stats_.number_of_cpu_adapt_changes; |
+ RTC_HISTOGRAMS_COUNTS_100(kIndex, uma_prefix_ + "AdaptChangesPerMinute.Cpu", |
+ cpu_changes * 60 / elapsed_sec); |
+ } |
+ |
if (first_rtcp_stats_time_ms_ != -1) { |
int64_t elapsed_sec = |
(clock_->TimeInMilliseconds() - first_rtcp_stats_time_ms_) / 1000; |
@@ -684,15 +702,29 @@ void SendStatisticsProxy::OnIncomingFrame(int width, int height) { |
"ssrc", rtp_config_.ssrcs[0]); |
} |
-void SendStatisticsProxy::SetCpuScalingStats(bool cpu_restricted_resolution) { |
+void SendStatisticsProxy::SetCpuScalingStats(int num_cpu_downscales) { |
rtc::CritScope lock(&crit_); |
- stats_.cpu_limited_resolution = cpu_restricted_resolution; |
+ stats_.cpu_limited_resolution = num_cpu_downscales > 0; |
+ |
+ if (num_cpu_downscales >= 0) { |
+ // Scaling enabled. |
+ uma_container_->cpu_scaling_timer_.Start(clock_->TimeInMilliseconds()); |
+ } else { |
+ uma_container_->cpu_scaling_timer_.Stop(clock_->TimeInMilliseconds()); |
+ } |
} |
void SendStatisticsProxy::SetQualityScalingStats(int num_quality_downscales) { |
rtc::CritScope lock(&crit_); |
quality_downscales_ = num_quality_downscales; |
stats_.bw_limited_resolution = quality_downscales_ > 0; |
+ |
+ if (num_quality_downscales >= 0) { |
+ // Scaling enabled. |
+ uma_container_->quality_scaling_timer_.Start(clock_->TimeInMilliseconds()); |
+ } else { |
+ uma_container_->quality_scaling_timer_.Stop(clock_->TimeInMilliseconds()); |
+ } |
} |
void SendStatisticsProxy::OnCpuRestrictedResolutionChanged( |
@@ -700,7 +732,7 @@ void SendStatisticsProxy::OnCpuRestrictedResolutionChanged( |
rtc::CritScope lock(&crit_); |
stats_.cpu_limited_resolution = cpu_restricted_resolution; |
++stats_.number_of_cpu_adapt_changes; |
- TRACE_EVENT_INSTANT0("webrtc_stats", "WebRTC.Video.AdaptationChanges"); |
+ TRACE_EVENT_INSTANT0("webrtc_stats", "WebRTC.Video.CpuAdaptationChanges"); |
} |
void SendStatisticsProxy::OnQualityRestrictedResolutionChanged( |
@@ -761,8 +793,12 @@ void SendStatisticsProxy::DataCountersUpdated( |
} |
stats->rtp_stats = counters; |
- if (uma_container_->first_rtp_stats_time_ms_ == -1) |
- uma_container_->first_rtp_stats_time_ms_ = clock_->TimeInMilliseconds(); |
+ if (uma_container_->first_rtp_stats_time_ms_ == -1) { |
+ int64_t now_ms = clock_->TimeInMilliseconds(); |
+ uma_container_->first_rtp_stats_time_ms_ = now_ms; |
+ uma_container_->cpu_scaling_timer_.Restart(now_ms); |
+ uma_container_->quality_scaling_timer_.Restart(now_ms); |
+ } |
uma_container_->total_byte_counter_.Set(counters.transmitted.TotalBytes(), |
ssrc); |
@@ -818,6 +854,24 @@ void SendStatisticsProxy::SendSideDelayUpdated(int avg_delay_ms, |
uma_container_->max_delay_counter_.Add(max_delay_ms); |
} |
+void SendStatisticsProxy::StatsTimer::Start(int64_t now_ms) { |
+ if (start_ms == -1) |
+ start_ms = now_ms; |
+} |
+ |
+void SendStatisticsProxy::StatsTimer::Stop(int64_t now_ms) { |
+ if (start_ms != -1) { |
+ total_ms += now_ms - start_ms; |
+ start_ms = -1; |
+ } |
+} |
+ |
+void SendStatisticsProxy::StatsTimer::Restart(int64_t now_ms) { |
+ total_ms = 0; |
+ if (start_ms != -1) |
+ start_ms = now_ms; |
+} |
+ |
void SendStatisticsProxy::SampleCounter::Add(int sample) { |
sum += sample; |
++num_samples; |