diff --git a/webrtc/video/end_to_end_tests.cc b/webrtc/video/end_to_end_tests.cc index 9094b13003..ef1771ad50 100644 --- a/webrtc/video/end_to_end_tests.cc +++ b/webrtc/video/end_to_end_tests.cc @@ -2147,6 +2147,9 @@ void EndToEndTest::VerifyHistogramStats(bool use_rtx, "WebRTC.Video.DecodedFramesPerSecond")); EXPECT_EQ(1, test::NumHistogramSamples("WebRTC.Video.RenderFramesPerSecond")); + EXPECT_EQ(1, test::NumHistogramSamples("WebRTC.Video.JitterBufferDelayInMs")); + EXPECT_EQ(1, test::NumHistogramSamples("WebRTC.Video.TargetDelayInMs")); + EXPECT_EQ(1, test::NumHistogramSamples("WebRTC.Video.CurrentDelayInMs")); EXPECT_EQ(1, test::NumHistogramSamples("WebRTC.Video.OnewayDelayInMs")); EXPECT_EQ( 1, test::NumHistogramSamples("WebRTC.Video.RenderSqrtPixelsPerSecond")); diff --git a/webrtc/video/receive_statistics_proxy.cc b/webrtc/video/receive_statistics_proxy.cc index ff419249d4..97c1cf17b6 100644 --- a/webrtc/video/receive_statistics_proxy.cc +++ b/webrtc/video/receive_statistics_proxy.cc @@ -77,6 +77,22 @@ void ReceiveStatisticsProxy::UpdateHistograms() { if (decode_ms != -1) RTC_LOGGED_HISTOGRAM_COUNTS_1000("WebRTC.Video.DecodeTimeInMs", decode_ms); + int jb_delay_ms = jitter_buffer_delay_counter_.Avg(kMinRequiredDecodeSamples); + if (jb_delay_ms != -1) { + RTC_LOGGED_HISTOGRAM_COUNTS_10000("WebRTC.Video.JitterBufferDelayInMs", + jb_delay_ms); + } + int target_delay_ms = target_delay_counter_.Avg(kMinRequiredDecodeSamples); + if (target_delay_ms != -1) { + RTC_LOGGED_HISTOGRAM_COUNTS_10000("WebRTC.Video.TargetDelayInMs", + target_delay_ms); + } + int current_delay_ms = current_delay_counter_.Avg(kMinRequiredDecodeSamples); + if (current_delay_ms != -1) { + RTC_LOGGED_HISTOGRAM_COUNTS_10000("WebRTC.Video.CurrentDelayInMs", + current_delay_ms); + } + int delay_ms = delay_counter_.Avg(kMinRequiredDecodeSamples); if (delay_ms != -1) RTC_LOGGED_HISTOGRAM_COUNTS_10000("WebRTC.Video.OnewayDelayInMs", delay_ms); @@ -170,6 +186,9 @@ void ReceiveStatisticsProxy::OnDecoderTiming(int decode_ms, stats_.min_playout_delay_ms = min_playout_delay_ms; stats_.render_delay_ms = render_delay_ms; decode_time_counter_.Add(decode_ms); + jitter_buffer_delay_counter_.Add(jitter_buffer_ms); + target_delay_counter_.Add(target_delay_ms); + current_delay_counter_.Add(current_delay_ms); // Network delay (rtt/2) + target_delay_ms (jitter delay + decode time + // render delay). delay_counter_.Add(target_delay_ms + rtt_ms / 2); diff --git a/webrtc/video/receive_statistics_proxy.h b/webrtc/video/receive_statistics_proxy.h index a1ff0eb36b..879100ab03 100644 --- a/webrtc/video/receive_statistics_proxy.h +++ b/webrtc/video/receive_statistics_proxy.h @@ -108,6 +108,9 @@ class ReceiveStatisticsProxy : public VCMReceiveStatisticsCallback, SampleCounter render_height_counter_ GUARDED_BY(crit_); SampleCounter sync_offset_counter_ GUARDED_BY(crit_); SampleCounter decode_time_counter_ GUARDED_BY(crit_); + SampleCounter jitter_buffer_delay_counter_ GUARDED_BY(crit_); + SampleCounter target_delay_counter_ GUARDED_BY(crit_); + SampleCounter current_delay_counter_ GUARDED_BY(crit_); SampleCounter delay_counter_ GUARDED_BY(crit_); ReportBlockStats report_block_stats_ GUARDED_BY(crit_); QpCounters qp_counters_; // Only accessed on the decoding thread.