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

Side by Side Diff: webrtc/video/send_statistics_proxy.cc

Issue 2804653002: Update stats for cpu/quality adaptation changes to excluded time when video is suspended. (Closed)
Patch Set: Created 3 years, 8 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 unified diff | Download patch
OLDNEW
1 /* 1 /*
2 * Copyright (c) 2013 The WebRTC project authors. All Rights Reserved. 2 * Copyright (c) 2013 The WebRTC project authors. All Rights Reserved.
3 * 3 *
4 * Use of this source code is governed by a BSD-style license 4 * Use of this source code is governed by a BSD-style license
5 * that can be found in the LICENSE file in the root of the source 5 * that can be found in the LICENSE file in the root of the source
6 * tree. An additional intellectual property rights grant can be found 6 * tree. An additional intellectual property rights grant can be found
7 * in the file PATENTS. All contributing project authors may 7 * in the file PATENTS. All contributing project authors may
8 * be found in the AUTHORS file in the root of the source tree. 8 * be found in the AUTHORS file in the root of the source tree.
9 */ 9 */
10 10
(...skipping 275 matching lines...) Expand 10 before | Expand all | Expand 10 after
286 } 286 }
287 int qp_h264 = it.second.h264.Avg(kMinRequiredMetricsSamples); 287 int qp_h264 = it.second.h264.Avg(kMinRequiredMetricsSamples);
288 if (qp_h264 != -1) { 288 if (qp_h264 != -1) {
289 int spatial_idx = it.first; 289 int spatial_idx = it.first;
290 RTC_DCHECK_EQ(-1, spatial_idx); 290 RTC_DCHECK_EQ(-1, spatial_idx);
291 RTC_HISTOGRAMS_COUNTS_100(kIndex, uma_prefix_ + "Encoded.Qp.H264", 291 RTC_HISTOGRAMS_COUNTS_100(kIndex, uma_prefix_ + "Encoded.Qp.H264",
292 qp_h264); 292 qp_h264);
293 } 293 }
294 } 294 }
295 295
296 quality_scaling_timer_.Stop(clock_->TimeInMilliseconds()); 296 if (first_rtp_stats_time_ms_ != -1) {
297 int64_t elapsed_sec = quality_scaling_timer_.total_ms / 1000; 297 quality_scaling_timer_.Stop(clock_->TimeInMilliseconds());
298 if (elapsed_sec >= metrics::kMinRunTimeInSeconds) { 298 int64_t elapsed_sec = quality_scaling_timer_.total_ms / 1000;
299 int quality_changes = current_stats.number_of_quality_adapt_changes - 299 if (elapsed_sec >= metrics::kMinRunTimeInSeconds) {
300 start_stats_.number_of_quality_adapt_changes; 300 int quality_changes = current_stats.number_of_quality_adapt_changes -
301 RTC_HISTOGRAMS_COUNTS_100(kIndex, 301 start_stats_.number_of_quality_adapt_changes;
302 uma_prefix_ + "AdaptChangesPerMinute.Quality", 302 RTC_HISTOGRAMS_COUNTS_100(kIndex,
303 quality_changes * 60 / elapsed_sec); 303 uma_prefix_ + "AdaptChangesPerMinute.Quality",
304 } 304 quality_changes * 60 / elapsed_sec);
305 cpu_scaling_timer_.Stop(clock_->TimeInMilliseconds()); 305 }
306 elapsed_sec = cpu_scaling_timer_.total_ms / 1000; 306 cpu_scaling_timer_.Stop(clock_->TimeInMilliseconds());
307 if (elapsed_sec >= metrics::kMinRunTimeInSeconds) { 307 elapsed_sec = cpu_scaling_timer_.total_ms / 1000;
308 int cpu_changes = current_stats.number_of_cpu_adapt_changes - 308 if (elapsed_sec >= metrics::kMinRunTimeInSeconds) {
309 start_stats_.number_of_cpu_adapt_changes; 309 int cpu_changes = current_stats.number_of_cpu_adapt_changes -
310 RTC_HISTOGRAMS_COUNTS_100(kIndex, uma_prefix_ + "AdaptChangesPerMinute.Cpu", 310 start_stats_.number_of_cpu_adapt_changes;
311 cpu_changes * 60 / elapsed_sec); 311 RTC_HISTOGRAMS_COUNTS_100(kIndex,
312 uma_prefix_ + "AdaptChangesPerMinute.Cpu",
313 cpu_changes * 60 / elapsed_sec);
314 }
312 } 315 }
313 316
314 if (first_rtcp_stats_time_ms_ != -1) { 317 if (first_rtcp_stats_time_ms_ != -1) {
315 int64_t elapsed_sec = 318 int64_t elapsed_sec =
316 (clock_->TimeInMilliseconds() - first_rtcp_stats_time_ms_) / 1000; 319 (clock_->TimeInMilliseconds() - first_rtcp_stats_time_ms_) / 1000;
317 if (elapsed_sec >= metrics::kMinRunTimeInSeconds) { 320 if (elapsed_sec >= metrics::kMinRunTimeInSeconds) {
318 int fraction_lost = report_block_stats_.FractionLostInPercent(); 321 int fraction_lost = report_block_stats_.FractionLostInPercent();
319 if (fraction_lost != -1) { 322 if (fraction_lost != -1) {
320 RTC_HISTOGRAMS_PERCENTAGE( 323 RTC_HISTOGRAMS_PERCENTAGE(
321 kIndex, uma_prefix_ + "SentPacketsLostInPercent", fraction_lost); 324 kIndex, uma_prefix_ + "SentPacketsLostInPercent", fraction_lost);
(...skipping 144 matching lines...) Expand 10 before | Expand all | Expand 10 after
466 stats_.encode_usage_percent = metrics.encode_usage_percent; 469 stats_.encode_usage_percent = metrics.encode_usage_percent;
467 TRACE_EVENT_INSTANT2("webrtc_stats", "WebRTC.Video.EncodeTimeInMs", 470 TRACE_EVENT_INSTANT2("webrtc_stats", "WebRTC.Video.EncodeTimeInMs",
468 "encode_time_ms", stats_.avg_encode_time_ms, 471 "encode_time_ms", stats_.avg_encode_time_ms,
469 "ssrc", rtp_config_.ssrcs[0]); 472 "ssrc", rtp_config_.ssrcs[0]);
470 TRACE_EVENT_INSTANT2("webrtc_stats", "WebRTC.Video.EncodeUsagePercent", 473 TRACE_EVENT_INSTANT2("webrtc_stats", "WebRTC.Video.EncodeUsagePercent",
471 "encode_usage_percent", stats_.encode_usage_percent, 474 "encode_usage_percent", stats_.encode_usage_percent,
472 "ssrc", rtp_config_.ssrcs[0]); 475 "ssrc", rtp_config_.ssrcs[0]);
473 } 476 }
474 477
475 void SendStatisticsProxy::OnSuspendChange(bool is_suspended) { 478 void SendStatisticsProxy::OnSuspendChange(bool is_suspended) {
479 int64_t now_ms = clock_->TimeInMilliseconds();
476 rtc::CritScope lock(&crit_); 480 rtc::CritScope lock(&crit_);
477 stats_.suspended = is_suspended; 481 stats_.suspended = is_suspended;
478 if (is_suspended) { 482 if (is_suspended) {
479 // Pause framerate (add min pause time since there may be frames/packets 483 // Pause framerate (add min pause time since there may be frames/packets
480 // that are not yet sent). 484 // that are not yet sent).
481 const int64_t kMinMs = 500; 485 const int64_t kMinMs = 500;
482 uma_container_->input_fps_counter_.ProcessAndPauseForDuration(kMinMs); 486 uma_container_->input_fps_counter_.ProcessAndPauseForDuration(kMinMs);
483 uma_container_->sent_fps_counter_.ProcessAndPauseForDuration(kMinMs); 487 uma_container_->sent_fps_counter_.ProcessAndPauseForDuration(kMinMs);
484 // Pause bitrate stats. 488 // Pause bitrate stats.
485 uma_container_->total_byte_counter_.ProcessAndPauseForDuration(kMinMs); 489 uma_container_->total_byte_counter_.ProcessAndPauseForDuration(kMinMs);
486 uma_container_->media_byte_counter_.ProcessAndPauseForDuration(kMinMs); 490 uma_container_->media_byte_counter_.ProcessAndPauseForDuration(kMinMs);
487 uma_container_->rtx_byte_counter_.ProcessAndPauseForDuration(kMinMs); 491 uma_container_->rtx_byte_counter_.ProcessAndPauseForDuration(kMinMs);
488 uma_container_->padding_byte_counter_.ProcessAndPauseForDuration(kMinMs); 492 uma_container_->padding_byte_counter_.ProcessAndPauseForDuration(kMinMs);
489 uma_container_->retransmit_byte_counter_.ProcessAndPauseForDuration(kMinMs); 493 uma_container_->retransmit_byte_counter_.ProcessAndPauseForDuration(kMinMs);
490 uma_container_->fec_byte_counter_.ProcessAndPauseForDuration(kMinMs); 494 uma_container_->fec_byte_counter_.ProcessAndPauseForDuration(kMinMs);
495 // Stop adaptation stats.
496 uma_container_->cpu_scaling_timer_.Stop(now_ms);
497 uma_container_->quality_scaling_timer_.Stop(now_ms);
491 } else { 498 } else {
499 // Start adaptation stats if scaling is enabled.
500 if (cpu_downscales_ >= 0)
501 uma_container_->cpu_scaling_timer_.Start(now_ms);
502 if (quality_downscales_ >= 0)
503 uma_container_->quality_scaling_timer_.Start(now_ms);
492 // Stop pause explicitly for stats that may be zero/not updated for some 504 // Stop pause explicitly for stats that may be zero/not updated for some
493 // time. 505 // time.
494 uma_container_->rtx_byte_counter_.ProcessAndStopPause(); 506 uma_container_->rtx_byte_counter_.ProcessAndStopPause();
495 uma_container_->padding_byte_counter_.ProcessAndStopPause(); 507 uma_container_->padding_byte_counter_.ProcessAndStopPause();
496 uma_container_->retransmit_byte_counter_.ProcessAndStopPause(); 508 uma_container_->retransmit_byte_counter_.ProcessAndStopPause();
497 uma_container_->fec_byte_counter_.ProcessAndStopPause(); 509 uma_container_->fec_byte_counter_.ProcessAndStopPause();
498 } 510 }
499 } 511 }
500 512
501 VideoSendStream::Stats SendStatisticsProxy::GetStats() { 513 VideoSendStream::Stats SendStatisticsProxy::GetStats() {
(...skipping 195 matching lines...) Expand 10 before | Expand all | Expand 10 after
697 uma_container_->input_height_counter_.Add(height); 709 uma_container_->input_height_counter_.Add(height);
698 uma_container_->cpu_limited_frame_counter_.Add(stats_.cpu_limited_resolution); 710 uma_container_->cpu_limited_frame_counter_.Add(stats_.cpu_limited_resolution);
699 TRACE_EVENT_INSTANT2("webrtc_stats", "WebRTC.Video.InputFrameRate", 711 TRACE_EVENT_INSTANT2("webrtc_stats", "WebRTC.Video.InputFrameRate",
700 "frame_rate", round( 712 "frame_rate", round(
701 uma_container_->input_frame_rate_tracker_.ComputeRate()), 713 uma_container_->input_frame_rate_tracker_.ComputeRate()),
702 "ssrc", rtp_config_.ssrcs[0]); 714 "ssrc", rtp_config_.ssrcs[0]);
703 } 715 }
704 716
705 void SendStatisticsProxy::SetCpuScalingStats(int num_cpu_downscales) { 717 void SendStatisticsProxy::SetCpuScalingStats(int num_cpu_downscales) {
706 rtc::CritScope lock(&crit_); 718 rtc::CritScope lock(&crit_);
719 cpu_downscales_ = num_cpu_downscales;
707 stats_.cpu_limited_resolution = num_cpu_downscales > 0; 720 stats_.cpu_limited_resolution = num_cpu_downscales > 0;
708 721
709 if (num_cpu_downscales >= 0) { 722 if (num_cpu_downscales >= 0) {
710 // Scaling enabled. 723 // Scaling enabled.
711 uma_container_->cpu_scaling_timer_.Start(clock_->TimeInMilliseconds()); 724 if (!stats_.suspended)
712 } else { 725 uma_container_->cpu_scaling_timer_.Start(clock_->TimeInMilliseconds());
713 uma_container_->cpu_scaling_timer_.Stop(clock_->TimeInMilliseconds()); 726 return;
714 } 727 }
728 uma_container_->cpu_scaling_timer_.Stop(clock_->TimeInMilliseconds());
715 } 729 }
716 730
717 void SendStatisticsProxy::SetQualityScalingStats(int num_quality_downscales) { 731 void SendStatisticsProxy::SetQualityScalingStats(int num_quality_downscales) {
718 rtc::CritScope lock(&crit_); 732 rtc::CritScope lock(&crit_);
719 quality_downscales_ = num_quality_downscales; 733 quality_downscales_ = num_quality_downscales;
720 stats_.bw_limited_resolution = quality_downscales_ > 0; 734 stats_.bw_limited_resolution = quality_downscales_ > 0;
721 735
722 if (num_quality_downscales >= 0) { 736 if (num_quality_downscales >= 0) {
723 // Scaling enabled. 737 // Scaling enabled.
724 uma_container_->quality_scaling_timer_.Start(clock_->TimeInMilliseconds()); 738 if (!stats_.suspended) {
725 } else { 739 uma_container_->quality_scaling_timer_.Start(
726 uma_container_->quality_scaling_timer_.Stop(clock_->TimeInMilliseconds()); 740 clock_->TimeInMilliseconds());
741 }
742 return;
727 } 743 }
744 uma_container_->quality_scaling_timer_.Stop(clock_->TimeInMilliseconds());
728 } 745 }
729 746
730 void SendStatisticsProxy::OnCpuRestrictedResolutionChanged( 747 void SendStatisticsProxy::OnCpuRestrictedResolutionChanged(
731 bool cpu_restricted_resolution) { 748 bool cpu_restricted_resolution) {
732 rtc::CritScope lock(&crit_); 749 rtc::CritScope lock(&crit_);
733 stats_.cpu_limited_resolution = cpu_restricted_resolution; 750 stats_.cpu_limited_resolution = cpu_restricted_resolution;
734 ++stats_.number_of_cpu_adapt_changes; 751 ++stats_.number_of_cpu_adapt_changes;
735 TRACE_EVENT_INSTANT0("webrtc_stats", "WebRTC.Video.CpuAdaptationChanges"); 752 TRACE_EVENT_INSTANT0("webrtc_stats", "WebRTC.Video.CpuAdaptationChanges");
736 } 753 }
737 754
(...skipping 168 matching lines...) Expand 10 before | Expand all | Expand 10 after
906 } 923 }
907 924
908 int SendStatisticsProxy::BoolSampleCounter::Fraction( 925 int SendStatisticsProxy::BoolSampleCounter::Fraction(
909 int64_t min_required_samples, 926 int64_t min_required_samples,
910 float multiplier) const { 927 float multiplier) const {
911 if (num_samples < min_required_samples || num_samples == 0) 928 if (num_samples < min_required_samples || num_samples == 0)
912 return -1; 929 return -1;
913 return static_cast<int>((sum * multiplier / num_samples) + 0.5f); 930 return static_cast<int>((sum * multiplier / num_samples) + 0.5f);
914 } 931 }
915 } // namespace webrtc 932 } // namespace webrtc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698