Index: webrtc/video/receive_statistics_proxy.cc |
diff --git a/webrtc/video/receive_statistics_proxy.cc b/webrtc/video/receive_statistics_proxy.cc |
index 61b2ad13987aae3afb41f7aed304480b07e9b81f..2af19125c24ea62e8a5e5df136d5943744b4fc07 100644 |
--- a/webrtc/video/receive_statistics_proxy.cc |
+++ b/webrtc/video/receive_statistics_proxy.cc |
@@ -77,6 +77,8 @@ ReceiveStatisticsProxy::ReceiveStatisticsProxy( |
total_byte_tracker_(100, 10u), // bucket_interval_ms, bucket_count |
e2e_delay_max_ms_video_(-1), |
e2e_delay_max_ms_screenshare_(-1), |
+ interframe_delay_max_ms_video_(-1), |
+ interframe_delay_max_ms_screenshare_(-1), |
freq_offset_counter_(clock, nullptr, kFreqOffsetProcessIntervalMs), |
first_report_block_time_ms_(-1), |
avg_rtt_ms_(0), |
@@ -210,6 +212,36 @@ void ReceiveStatisticsProxy::UpdateHistograms() { |
e2e_delay_max_ms_screenshare); |
} |
+ int interframe_delay_ms_screenshare = |
+ interframe_delay_counter_screenshare_.Avg(kMinRequiredSamples); |
+ if (interframe_delay_ms_screenshare != -1) { |
+ RTC_HISTOGRAM_COUNTS_10000("WebRTC.Video.Screenshare.InterframeDelayInMs", |
+ interframe_delay_ms_screenshare); |
+ } |
+ |
+ int interframe_delay_ms_video = |
+ interframe_delay_counter_video_.Avg(kMinRequiredSamples); |
+ if (interframe_delay_ms_video != -1) { |
+ RTC_HISTOGRAM_COUNTS_10000("WebRTC.Video.InterframeDelayInMs", |
+ interframe_delay_ms_video); |
+ } |
+ |
+ int interframe_delay_max_ms_screenshare = |
+ interframe_delay_max_ms_screenshare_; |
+ if (interframe_delay_max_ms_screenshare != -1) { |
+ RTC_HISTOGRAM_COUNTS_10000( |
+ "WebRTC.Video.Screenshare.InterframeDelayMaxInMs", |
+ interframe_delay_ms_screenshare); |
+ } |
+ |
+ int interframe_delay_max_ms_video = interframe_delay_max_ms_video_; |
+ if (interframe_delay_max_ms_video != -1) { |
+ RTC_HISTOGRAM_COUNTS_10000( |
+ "WebRTC.Video.InterframeDelayMaxInMs", |
+ interframe_delay_ms_video); |
+ } |
+ |
+ |
StreamDataCounters rtp = stats_.rtp_stats; |
StreamDataCounters rtx; |
for (auto it : rtx_stats_) |
@@ -516,6 +548,22 @@ void ReceiveStatisticsProxy::OnDecodedFrame(rtc::Optional<uint8_t> qp, |
} |
last_content_type_ = content_type; |
decode_fps_estimator_.Update(1, now); |
+ if (last_decoded_frame_time_ms_) { |
+ int64_t interframe_delay_ms = now - *last_decoded_frame_time_ms_; |
+ RTC_DCHECK_GE(interframe_delay_ms, 0); |
+ if (last_content_type_ == VideoContentType::SCREENSHARE) { |
+ interframe_delay_counter_screenshare_.Add(interframe_delay_ms); |
+ if (interframe_delay_max_ms_screenshare_ < interframe_delay_ms) { |
+ interframe_delay_max_ms_screenshare_ = interframe_delay_ms; |
+ } |
+ } else { |
+ interframe_delay_counter_video_.Add(interframe_delay_ms); |
+ if (interframe_delay_max_ms_video_ < interframe_delay_ms) { |
+ interframe_delay_max_ms_video_ = interframe_delay_ms; |
+ } |
+ } |
+ } |
+ last_decoded_frame_time_ms_.emplace(now); |
} |
void ReceiveStatisticsProxy::OnRenderedFrame(const VideoFrame& frame) { |