| Index: webrtc/video/send_statistics_proxy.cc
|
| diff --git a/webrtc/video/send_statistics_proxy.cc b/webrtc/video/send_statistics_proxy.cc
|
| index 82d7f0dc7593bf2cd694aa69d55d8b6e91572915..e9139c1877621f1121bf0e62fd56a725864310a4 100644
|
| --- a/webrtc/video/send_statistics_proxy.cc
|
| +++ b/webrtc/video/send_statistics_proxy.cc
|
| @@ -322,6 +322,16 @@ void SendStatisticsProxy::UmaSamplesContainer::UpdateHistograms(
|
| int64_t elapsed_sec =
|
| (clock_->TimeInMilliseconds() - first_rtp_stats_time_ms_) / 1000;
|
| if (elapsed_sec >= metrics::kMinRunTimeInSeconds) {
|
| + RTC_HISTOGRAMS_COUNTS_100(kIndex, uma_prefix_ + "NumberOfPauseEvents",
|
| + target_rate_updates_.pause_resume_events);
|
| +
|
| + int paused_time_percent =
|
| + paused_time_counter_.Percent(metrics::kMinRunTimeInSeconds * 1000);
|
| + if (paused_time_percent != -1) {
|
| + RTC_HISTOGRAMS_PERCENTAGE(kIndex, uma_prefix_ + "PausedTimeInPercent",
|
| + paused_time_percent);
|
| + }
|
| +
|
| StreamDataCounters rtp;
|
| StreamDataCounters rtx;
|
| AccumulateRtxStats(current_stats, rtp_config.rtx.ssrcs, &rtp, &rtx);
|
| @@ -467,6 +477,25 @@ void SendStatisticsProxy::OnInactiveSsrc(uint32_t ssrc) {
|
|
|
| void SendStatisticsProxy::OnSetEncoderTargetRate(uint32_t bitrate_bps) {
|
| rtc::CritScope lock(&crit_);
|
| + if (uma_container_->target_rate_updates_.last_ms == -1 && bitrate_bps == 0)
|
| + return; // Start on first non-zero bitrate, may initially be zero.
|
| +
|
| + int64_t now = clock_->TimeInMilliseconds();
|
| + if (uma_container_->target_rate_updates_.last_ms != -1) {
|
| + bool was_paused = stats_.target_media_bitrate_bps == 0;
|
| + int64_t diff_ms = now - uma_container_->target_rate_updates_.last_ms;
|
| + uma_container_->paused_time_counter_.Add(was_paused, diff_ms);
|
| +
|
| + // Use last to not include update when stream is stopped and video disabled.
|
| + if (uma_container_->target_rate_updates_.last_paused_or_resumed)
|
| + ++uma_container_->target_rate_updates_.pause_resume_events;
|
| +
|
| + // Check if video is paused/resumed.
|
| + uma_container_->target_rate_updates_.last_paused_or_resumed =
|
| + (bitrate_bps == 0) != was_paused;
|
| + }
|
| + uma_container_->target_rate_updates_.last_ms = now;
|
| +
|
| stats_.target_media_bitrate_bps = bitrate_bps;
|
| }
|
|
|
| @@ -694,10 +723,11 @@ void SendStatisticsProxy::SampleCounter::Add(int sample) {
|
| ++num_samples;
|
| }
|
|
|
| -int SendStatisticsProxy::SampleCounter::Avg(int min_required_samples) const {
|
| +int SendStatisticsProxy::SampleCounter::Avg(
|
| + int64_t min_required_samples) const {
|
| if (num_samples < min_required_samples || num_samples == 0)
|
| return -1;
|
| - return (sum + (num_samples / 2)) / num_samples;
|
| + return static_cast<int>((sum + (num_samples / 2)) / num_samples);
|
| }
|
|
|
| void SendStatisticsProxy::BoolSampleCounter::Add(bool sample) {
|
| @@ -706,18 +736,24 @@ void SendStatisticsProxy::BoolSampleCounter::Add(bool sample) {
|
| ++num_samples;
|
| }
|
|
|
| +void SendStatisticsProxy::BoolSampleCounter::Add(bool sample, int64_t count) {
|
| + if (sample)
|
| + sum += count;
|
| + num_samples += count;
|
| +}
|
| int SendStatisticsProxy::BoolSampleCounter::Percent(
|
| - int min_required_samples) const {
|
| + int64_t min_required_samples) const {
|
| return Fraction(min_required_samples, 100.0f);
|
| }
|
|
|
| int SendStatisticsProxy::BoolSampleCounter::Permille(
|
| - int min_required_samples) const {
|
| + int64_t min_required_samples) const {
|
| return Fraction(min_required_samples, 1000.0f);
|
| }
|
|
|
| int SendStatisticsProxy::BoolSampleCounter::Fraction(
|
| - int min_required_samples, float multiplier) const {
|
| + int64_t min_required_samples,
|
| + float multiplier) const {
|
| if (num_samples < min_required_samples || num_samples == 0)
|
| return -1;
|
| return static_cast<int>((sum * multiplier / num_samples) + 0.5f);
|
|
|