Add received interframe delay UMA metrics

BUG=webrtc:7420

Review-Url: https://codereview.webrtc.org/2966733002
Cr-Commit-Position: refs/heads/master@{#18875}
This commit is contained in:
ilnik 2017-07-03 01:15:58 -07:00 committed by Commit Bot
parent ad515c459b
commit 4257ab2e02
3 changed files with 64 additions and 0 deletions

View File

@ -2703,6 +2703,9 @@ void EndToEndTest::VerifyHistogramStats(bool use_rtx,
EXPECT_EQ(1, metrics::NumSamples(video_prefix + "EndToEndDelayInMs"));
EXPECT_EQ(1, metrics::NumSamples(video_prefix + "EndToEndDelayMaxInMs"));
EXPECT_EQ(1, metrics::NumSamples(video_prefix + "InterframeDelayInMs"));
EXPECT_EQ(1, metrics::NumSamples(video_prefix + "InterframeDelayMaxInMs"));
EXPECT_EQ(1, metrics::NumSamples("WebRTC.Video.RenderSqrtPixelsPerSecond"));
EXPECT_EQ(1, metrics::NumSamples(video_prefix + "EncodeTimeInMs"));
@ -2861,6 +2864,14 @@ TEST_F(EndToEndTest, MAYBE_ContentTypeSwitches) {
EXPECT_EQ(1, metrics::NumSamples("WebRTC.Video.EndToEndDelayMaxInMs"));
EXPECT_EQ(
1, metrics::NumSamples("WebRTC.Video.Screenshare.EndToEndDelayMaxInMs"));
EXPECT_EQ(1, metrics::NumSamples("WebRTC.Video.InterframeDelayInMs"));
EXPECT_EQ(1,
metrics::NumSamples(
"WebRTC.Video.Screenshare.InterframeDelayInMs"));
EXPECT_EQ(1, metrics::NumSamples("WebRTC.Video.InterframeDelayMaxInMs"));
EXPECT_EQ(1,
metrics::NumSamples(
"WebRTC.Video.Screenshare.InterframeDelayMaxInMs"));
}
TEST_F(EndToEndTest, VerifyHistogramStatsWithRtx) {

View File

@ -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) {

View File

@ -142,8 +142,12 @@ class ReceiveStatisticsProxy : public VCMReceiveStatisticsCallback,
SampleCounter delay_counter_ GUARDED_BY(crit_);
SampleCounter e2e_delay_counter_video_ GUARDED_BY(crit_);
SampleCounter e2e_delay_counter_screenshare_ GUARDED_BY(crit_);
SampleCounter interframe_delay_counter_video_ GUARDED_BY(crit_);
SampleCounter interframe_delay_counter_screenshare_ GUARDED_BY(crit_);
int64_t e2e_delay_max_ms_video_ GUARDED_BY(crit_);
int64_t e2e_delay_max_ms_screenshare_ GUARDED_BY(crit_);
int64_t interframe_delay_max_ms_video_ GUARDED_BY(crit_);
int64_t interframe_delay_max_ms_screenshare_ GUARDED_BY(crit_);
MaxCounter freq_offset_counter_ GUARDED_BY(crit_);
int64_t first_report_block_time_ms_ GUARDED_BY(crit_);
ReportBlockStats report_block_stats_ GUARDED_BY(crit_);
@ -152,6 +156,7 @@ class ReceiveStatisticsProxy : public VCMReceiveStatisticsCallback,
int64_t avg_rtt_ms_ GUARDED_BY(crit_);
mutable std::map<int64_t, size_t> frame_window_ GUARDED_BY(&crit_);
VideoContentType last_content_type_ GUARDED_BY(&crit_);
rtc::Optional<int64_t> last_decoded_frame_time_ms_;
};
} // namespace webrtc