Index: webrtc/video/send_statistics_proxy.cc |
diff --git a/webrtc/video/send_statistics_proxy.cc b/webrtc/video/send_statistics_proxy.cc |
index 4fcf84261d6e68180753c92b33152aa255c9efcf..87f19cc7145aa4536baf496e6a7a19b9f77b0014 100644 |
--- a/webrtc/video/send_statistics_proxy.cc |
+++ b/webrtc/video/send_statistics_proxy.cc |
@@ -296,8 +296,8 @@ void SendStatisticsProxy::UmaSamplesContainer::UpdateHistograms( |
} |
if (first_rtp_stats_time_ms_ != -1) { |
- quality_scaling_timer_.Stop(clock_->TimeInMilliseconds()); |
- int64_t elapsed_sec = quality_scaling_timer_.total_ms / 1000; |
+ quality_adapt_timer_.Stop(clock_->TimeInMilliseconds()); |
+ int64_t elapsed_sec = quality_adapt_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; |
@@ -305,8 +305,8 @@ void SendStatisticsProxy::UmaSamplesContainer::UpdateHistograms( |
uma_prefix_ + "AdaptChangesPerMinute.Quality", |
quality_changes * 60 / elapsed_sec); |
} |
- cpu_scaling_timer_.Stop(clock_->TimeInMilliseconds()); |
- elapsed_sec = cpu_scaling_timer_.total_ms / 1000; |
+ cpu_adapt_timer_.Stop(clock_->TimeInMilliseconds()); |
+ elapsed_sec = cpu_adapt_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; |
@@ -495,14 +495,14 @@ void SendStatisticsProxy::OnSuspendChange(bool is_suspended) { |
uma_container_->retransmit_byte_counter_.ProcessAndPauseForDuration(kMinMs); |
uma_container_->fec_byte_counter_.ProcessAndPauseForDuration(kMinMs); |
// Stop adaptation stats. |
- uma_container_->cpu_scaling_timer_.Stop(now_ms); |
- uma_container_->quality_scaling_timer_.Stop(now_ms); |
+ uma_container_->cpu_adapt_timer_.Stop(now_ms); |
+ uma_container_->quality_adapt_timer_.Stop(now_ms); |
} else { |
// Start adaptation stats if scaling is enabled. |
if (cpu_downscales_ >= 0) |
- uma_container_->cpu_scaling_timer_.Start(now_ms); |
+ uma_container_->cpu_adapt_timer_.Start(now_ms); |
if (quality_downscales_ >= 0) |
- uma_container_->quality_scaling_timer_.Start(now_ms); |
+ uma_container_->quality_adapt_timer_.Start(now_ms); |
// Stop pause explicitly for stats that may be zero/not updated for some |
// time. |
uma_container_->rtx_byte_counter_.ProcessAndStopPause(); |
@@ -719,50 +719,53 @@ void SendStatisticsProxy::OnIncomingFrame(int width, int height) { |
"ssrc", rtp_config_.ssrcs[0]); |
} |
-void SendStatisticsProxy::SetCpuScalingStats(int num_cpu_downscales) { |
+void SendStatisticsProxy::SetAdaptationStats( |
+ const ViEEncoder::AdaptCounts& cpu_counts, |
+ const ViEEncoder::AdaptCounts& quality_counts) { |
rtc::CritScope lock(&crit_); |
- cpu_downscales_ = num_cpu_downscales; |
- stats_.cpu_limited_resolution = num_cpu_downscales > 0; |
- |
- if (num_cpu_downscales >= 0) { |
- // Scaling enabled. |
- if (!stats_.suspended) |
- uma_container_->cpu_scaling_timer_.Start(clock_->TimeInMilliseconds()); |
- return; |
- } |
- 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. |
- if (!stats_.suspended) { |
- uma_container_->quality_scaling_timer_.Start( |
- clock_->TimeInMilliseconds()); |
- } |
- return; |
- } |
- uma_container_->quality_scaling_timer_.Stop(clock_->TimeInMilliseconds()); |
+ SetAdaptTimer(cpu_counts, &uma_container_->cpu_adapt_timer_); |
+ SetAdaptTimer(quality_counts, &uma_container_->quality_adapt_timer_); |
+ UpdateAdaptationStats(cpu_counts, quality_counts); |
} |
-void SendStatisticsProxy::OnCpuRestrictedResolutionChanged( |
- bool cpu_restricted_resolution) { |
+void SendStatisticsProxy::OnCpuAdaptationChanged( |
+ const ViEEncoder::AdaptCounts& cpu_counts, |
+ const ViEEncoder::AdaptCounts& quality_counts) { |
rtc::CritScope lock(&crit_); |
- stats_.cpu_limited_resolution = cpu_restricted_resolution; |
++stats_.number_of_cpu_adapt_changes; |
+ UpdateAdaptationStats(cpu_counts, quality_counts); |
TRACE_EVENT_INSTANT0("webrtc_stats", "WebRTC.Video.CpuAdaptationChanges"); |
} |
-void SendStatisticsProxy::OnQualityRestrictedResolutionChanged( |
- int num_quality_downscales) { |
+void SendStatisticsProxy::OnQualityAdaptationChanged( |
+ const ViEEncoder::AdaptCounts& cpu_counts, |
+ const ViEEncoder::AdaptCounts& quality_counts) { |
rtc::CritScope lock(&crit_); |
++stats_.number_of_quality_adapt_changes; |
- quality_downscales_ = num_quality_downscales; |
- stats_.bw_limited_resolution = quality_downscales_ > 0; |
+ UpdateAdaptationStats(cpu_counts, quality_counts); |
+} |
+ |
+void SendStatisticsProxy::UpdateAdaptationStats( |
+ const ViEEncoder::AdaptCounts& cpu_counts, |
+ const ViEEncoder::AdaptCounts& quality_counts) { |
+ cpu_downscales_ = cpu_counts.resolution; |
+ quality_downscales_ = quality_counts.resolution; |
+ |
+ stats_.cpu_limited_resolution = cpu_counts.resolution > 0; |
+ stats_.cpu_limited_framerate = cpu_counts.fps > 0; |
+ stats_.bw_limited_resolution = quality_counts.resolution > 0; |
+ stats_.bw_limited_framerate = quality_counts.fps > 0; |
+} |
+ |
+void SendStatisticsProxy::SetAdaptTimer(const ViEEncoder::AdaptCounts& counts, |
+ StatsTimer* timer) { |
+ if (counts.resolution >= 0 || counts.fps >= 0) { |
+ // Adaptation enabled. |
+ if (!stats_.suspended) |
+ timer->Start(clock_->TimeInMilliseconds()); |
+ return; |
+ } |
+ timer->Stop(clock_->TimeInMilliseconds()); |
} |
void SendStatisticsProxy::RtcpPacketTypesCounterUpdated( |
@@ -818,8 +821,8 @@ void SendStatisticsProxy::DataCountersUpdated( |
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_->cpu_adapt_timer_.Restart(now_ms); |
+ uma_container_->quality_adapt_timer_.Restart(now_ms); |
} |
uma_container_->total_byte_counter_.Set(counters.transmitted.TotalBytes(), |