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

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

Issue 3008983002: Change reporting of timing frames conditions in GetStats on receive side (Closed)
Patch Set: Implement Tommi@ comments Created 3 years, 3 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 67 matching lines...) Expand 10 before | Expand all | Expand 10 after
78 render_pixel_tracker_(100, 10u), 78 render_pixel_tracker_(100, 10u),
79 total_byte_tracker_(100, 10u), // bucket_interval_ms, bucket_count 79 total_byte_tracker_(100, 10u), // bucket_interval_ms, bucket_count
80 e2e_delay_max_ms_video_(-1), 80 e2e_delay_max_ms_video_(-1),
81 e2e_delay_max_ms_screenshare_(-1), 81 e2e_delay_max_ms_screenshare_(-1),
82 interframe_delay_max_ms_video_(-1), 82 interframe_delay_max_ms_video_(-1),
83 interframe_delay_max_ms_screenshare_(-1), 83 interframe_delay_max_ms_screenshare_(-1),
84 interframe_delay_max_moving_(kMovingMaxWindowMs), 84 interframe_delay_max_moving_(kMovingMaxWindowMs),
85 freq_offset_counter_(clock, nullptr, kFreqOffsetProcessIntervalMs), 85 freq_offset_counter_(clock, nullptr, kFreqOffsetProcessIntervalMs),
86 first_report_block_time_ms_(-1), 86 first_report_block_time_ms_(-1),
87 avg_rtt_ms_(0), 87 avg_rtt_ms_(0),
88 last_content_type_(VideoContentType::UNSPECIFIED) { 88 last_content_type_(VideoContentType::UNSPECIFIED),
89 timing_frame_info_counter_(kMovingMaxWindowMs) {
89 stats_.ssrc = config_.rtp.remote_ssrc; 90 stats_.ssrc = config_.rtp.remote_ssrc;
90 // TODO(brandtr): Replace |rtx_stats_| with a single instance of 91 // TODO(brandtr): Replace |rtx_stats_| with a single instance of
91 // StreamDataCounters. 92 // StreamDataCounters.
92 if (config_.rtp.rtx_ssrc) { 93 if (config_.rtp.rtx_ssrc) {
93 rtx_stats_[config_.rtp.rtx_ssrc] = StreamDataCounters(); 94 rtx_stats_[config_.rtp.rtx_ssrc] = StreamDataCounters();
94 } 95 }
95 } 96 }
96 97
97 ReceiveStatisticsProxy::~ReceiveStatisticsProxy() { 98 ReceiveStatisticsProxy::~ReceiveStatisticsProxy() {
98 UpdateHistograms(); 99 UpdateHistograms();
(...skipping 294 matching lines...) Expand 10 before | Expand all | Expand 10 after
393 // Get current frame rates here, as only updating them on new frames prevents 394 // Get current frame rates here, as only updating them on new frames prevents
394 // us from ever correctly displaying frame rate of 0. 395 // us from ever correctly displaying frame rate of 0.
395 int64_t now_ms = clock_->TimeInMilliseconds(); 396 int64_t now_ms = clock_->TimeInMilliseconds();
396 UpdateFramerate(now_ms); 397 UpdateFramerate(now_ms);
397 stats_.render_frame_rate = renders_fps_estimator_.Rate(now_ms).value_or(0); 398 stats_.render_frame_rate = renders_fps_estimator_.Rate(now_ms).value_or(0);
398 stats_.decode_frame_rate = decode_fps_estimator_.Rate(now_ms).value_or(0); 399 stats_.decode_frame_rate = decode_fps_estimator_.Rate(now_ms).value_or(0);
399 stats_.total_bitrate_bps = 400 stats_.total_bitrate_bps =
400 static_cast<int>(total_byte_tracker_.ComputeRate() * 8); 401 static_cast<int>(total_byte_tracker_.ComputeRate() * 8);
401 stats_.interframe_delay_max_ms = 402 stats_.interframe_delay_max_ms =
402 interframe_delay_max_moving_.Max(now_ms).value_or(-1); 403 interframe_delay_max_moving_.Max(now_ms).value_or(-1);
404 stats_.timing_frame_info = timing_frame_info_counter_.Max(now_ms);
403 return stats_; 405 return stats_;
404 } 406 }
405 407
406 rtc::Optional<TimingFrameInfo>
407 ReceiveStatisticsProxy::GetAndResetTimingFrameInfo() {
408 rtc::CritScope lock(&crit_);
409 rtc::Optional<TimingFrameInfo> info = timing_frame_info_;
410 // Reset reported value to empty, so it will be always
411 // overwritten in |OnTimingFrameInfoUpdated|, thus allowing to store new
412 // value instead of reported one.
413 timing_frame_info_.reset();
414 return info;
415 }
416
417 void ReceiveStatisticsProxy::OnIncomingPayloadType(int payload_type) { 408 void ReceiveStatisticsProxy::OnIncomingPayloadType(int payload_type) {
418 rtc::CritScope lock(&crit_); 409 rtc::CritScope lock(&crit_);
419 stats_.current_payload_type = payload_type; 410 stats_.current_payload_type = payload_type;
420 } 411 }
421 412
422 void ReceiveStatisticsProxy::OnDecoderImplementationName( 413 void ReceiveStatisticsProxy::OnDecoderImplementationName(
423 const char* implementation_name) { 414 const char* implementation_name) {
424 rtc::CritScope lock(&crit_); 415 rtc::CritScope lock(&crit_);
425 stats_.decoder_implementation_name = implementation_name; 416 stats_.decoder_implementation_name = implementation_name;
426 } 417 }
(...skipping 24 matching lines...) Expand all
451 jitter_buffer_delay_counter_.Add(jitter_buffer_ms); 442 jitter_buffer_delay_counter_.Add(jitter_buffer_ms);
452 target_delay_counter_.Add(target_delay_ms); 443 target_delay_counter_.Add(target_delay_ms);
453 current_delay_counter_.Add(current_delay_ms); 444 current_delay_counter_.Add(current_delay_ms);
454 // Network delay (rtt/2) + target_delay_ms (jitter delay + decode time + 445 // Network delay (rtt/2) + target_delay_ms (jitter delay + decode time +
455 // render delay). 446 // render delay).
456 delay_counter_.Add(target_delay_ms + avg_rtt_ms_ / 2); 447 delay_counter_.Add(target_delay_ms + avg_rtt_ms_ / 2);
457 } 448 }
458 449
459 void ReceiveStatisticsProxy::OnTimingFrameInfoUpdated( 450 void ReceiveStatisticsProxy::OnTimingFrameInfoUpdated(
460 const TimingFrameInfo& info) { 451 const TimingFrameInfo& info) {
452 int64_t now_ms = clock_->TimeInMilliseconds();
461 rtc::CritScope lock(&crit_); 453 rtc::CritScope lock(&crit_);
462 // Only the frame which was processed the longest since the last 454 timing_frame_info_counter_.Add(info, now_ms);
463 // GetStats() call is reported. Therefore, only single 'longest' frame is
464 // stored.
465 if (!timing_frame_info_ || info.IsLongerThan(*timing_frame_info_)) {
466 timing_frame_info_.emplace(info);
467 }
468 } 455 }
469 456
470 void ReceiveStatisticsProxy::RtcpPacketTypesCounterUpdated( 457 void ReceiveStatisticsProxy::RtcpPacketTypesCounterUpdated(
471 uint32_t ssrc, 458 uint32_t ssrc,
472 const RtcpPacketTypeCounter& packet_counter) { 459 const RtcpPacketTypeCounter& packet_counter) {
473 rtc::CritScope lock(&crit_); 460 rtc::CritScope lock(&crit_);
474 if (stats_.ssrc != ssrc) 461 if (stats_.ssrc != ssrc)
475 return; 462 return;
476 stats_.rtcp_packet_type_counts = packet_counter; 463 stats_.rtcp_packet_type_counts = packet_counter;
477 } 464 }
(...skipping 201 matching lines...) Expand 10 before | Expand all | Expand 10 after
679 sum = 0; 666 sum = 0;
680 } 667 }
681 668
682 void ReceiveStatisticsProxy::OnRttUpdate(int64_t avg_rtt_ms, 669 void ReceiveStatisticsProxy::OnRttUpdate(int64_t avg_rtt_ms,
683 int64_t max_rtt_ms) { 670 int64_t max_rtt_ms) {
684 rtc::CritScope lock(&crit_); 671 rtc::CritScope lock(&crit_);
685 avg_rtt_ms_ = avg_rtt_ms; 672 avg_rtt_ms_ = avg_rtt_ms;
686 } 673 }
687 674
688 } // namespace webrtc 675 } // namespace webrtc
OLDNEW
« no previous file with comments | « webrtc/video/receive_statistics_proxy.h ('k') | webrtc/video/receive_statistics_proxy_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698