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

Unified Diff: webrtc/video/send_statistics_proxy.cc

Issue 2871623002: Update video adaptation stats to support degradations in both resolution and framerate. (Closed)
Patch Set: address comments Created 3 years, 7 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 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(),
« 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