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:
parent
ad515c459b
commit
4257ab2e02
@ -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) {
|
||||
|
||||
@ -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) {
|
||||
|
||||
@ -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
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user