| 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(),
|
|
|