Add jitterBufferDelay and jitterBufferEmittedCount stats for video
Bug: webrtc:10450
Change-Id: I6f586a3c6781450b9bfdcc31dc3f49f6289d70e0
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/138265
Commit-Queue: Henrik Boström <hbos@webrtc.org>
Reviewed-by: Magnus Flodman <mflodman@webrtc.org>
Reviewed-by: Henrik Boström <hbos@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#28096}
diff --git a/pc/rtc_stats_integrationtest.cc b/pc/rtc_stats_integrationtest.cc
index 36518c9..c21c796 100644
--- a/pc/rtc_stats_integrationtest.cc
+++ b/pc/rtc_stats_integrationtest.cc
@@ -555,24 +555,16 @@
verifier.TestMemberIsDefined(media_stream_track.ended);
verifier.TestMemberIsDefined(media_stream_track.detached);
verifier.TestMemberIsDefined(media_stream_track.kind);
+ RTC_DCHECK(media_stream_track.remote_source.is_defined());
// Video or audio media stream track?
if (*media_stream_track.kind == RTCMediaStreamTrackKind::kVideo) {
// The type of the referenced media source depends on kind.
- if (media_stream_track.remote_source.is_defined() &&
- !*media_stream_track.remote_source) {
- verifier.TestMemberIsIDReference(media_stream_track.media_source_id,
- RTCVideoSourceStats::kType);
- } else {
- // Remote tracks don't have media source stats.
- verifier.TestMemberIsUndefined(media_stream_track.media_source_id);
- }
- // Video-only members
- verifier.TestMemberIsNonNegative<uint32_t>(
- media_stream_track.frame_width);
- verifier.TestMemberIsNonNegative<uint32_t>(
- media_stream_track.frame_height);
- verifier.TestMemberIsUndefined(media_stream_track.frames_per_second);
if (*media_stream_track.remote_source) {
+ verifier.TestMemberIsUndefined(media_stream_track.media_source_id);
+ verifier.TestMemberIsNonNegative<double>(
+ media_stream_track.jitter_buffer_delay);
+ verifier.TestMemberIsNonNegative<uint64_t>(
+ media_stream_track.jitter_buffer_emitted_count);
verifier.TestMemberIsUndefined(media_stream_track.frames_sent);
verifier.TestMemberIsUndefined(media_stream_track.huge_frames_sent);
verifier.TestMemberIsNonNegative<uint32_t>(
@@ -594,6 +586,12 @@
verifier.TestMemberIsNonNegative<double>(
media_stream_track.sum_squared_frame_durations);
} else {
+ verifier.TestMemberIsIDReference(media_stream_track.media_source_id,
+ RTCVideoSourceStats::kType);
+ // Local tracks have no jitter buffer.
+ verifier.TestMemberIsUndefined(media_stream_track.jitter_buffer_delay);
+ verifier.TestMemberIsUndefined(
+ media_stream_track.jitter_buffer_emitted_count);
verifier.TestMemberIsNonNegative<uint32_t>(
media_stream_track.frames_sent);
verifier.TestMemberIsNonNegative<uint32_t>(
@@ -612,6 +610,12 @@
verifier.TestMemberIsUndefined(
media_stream_track.sum_squared_frame_durations);
}
+ // Video-only members
+ verifier.TestMemberIsNonNegative<uint32_t>(
+ media_stream_track.frame_width);
+ verifier.TestMemberIsNonNegative<uint32_t>(
+ media_stream_track.frame_height);
+ verifier.TestMemberIsUndefined(media_stream_track.frames_per_second);
verifier.TestMemberIsUndefined(media_stream_track.frames_corrupted);
verifier.TestMemberIsUndefined(media_stream_track.partial_frames_lost);
verifier.TestMemberIsUndefined(media_stream_track.full_frames_lost);
@@ -622,16 +626,69 @@
media_stream_track.echo_return_loss_enhancement);
verifier.TestMemberIsUndefined(media_stream_track.total_audio_energy);
verifier.TestMemberIsUndefined(media_stream_track.total_samples_duration);
+ verifier.TestMemberIsUndefined(media_stream_track.total_samples_received);
+ verifier.TestMemberIsUndefined(media_stream_track.concealed_samples);
+ verifier.TestMemberIsUndefined(media_stream_track.concealment_events);
+ verifier.TestMemberIsUndefined(media_stream_track.jitter_buffer_flushes);
+ verifier.TestMemberIsUndefined(
+ media_stream_track.delayed_packet_outage_samples);
+ verifier.TestMemberIsUndefined(
+ media_stream_track.relative_packet_arrival_delay);
+ verifier.TestMemberIsUndefined(media_stream_track.interruption_count);
+ verifier.TestMemberIsUndefined(
+ media_stream_track.total_interruption_duration);
} else {
RTC_DCHECK_EQ(*media_stream_track.kind, RTCMediaStreamTrackKind::kAudio);
// The type of the referenced media source depends on kind.
- if (media_stream_track.remote_source.is_defined() &&
- !*media_stream_track.remote_source) {
- verifier.TestMemberIsIDReference(media_stream_track.media_source_id,
- RTCAudioSourceStats::kType);
- } else {
+ if (*media_stream_track.remote_source) {
// Remote tracks don't have media source stats.
verifier.TestMemberIsUndefined(media_stream_track.media_source_id);
+ verifier.TestMemberIsNonNegative<double>(
+ media_stream_track.jitter_buffer_delay);
+ verifier.TestMemberIsNonNegative<uint64_t>(
+ media_stream_track.jitter_buffer_emitted_count);
+ verifier.TestMemberIsNonNegative<uint64_t>(
+ media_stream_track.total_samples_received);
+ verifier.TestMemberIsNonNegative<uint64_t>(
+ media_stream_track.concealed_samples);
+ verifier.TestMemberIsNonNegative<uint64_t>(
+ media_stream_track.concealment_events);
+ verifier.TestMemberIsNonNegative<uint64_t>(
+ media_stream_track.inserted_samples_for_deceleration);
+ verifier.TestMemberIsNonNegative<uint64_t>(
+ media_stream_track.removed_samples_for_acceleration);
+ verifier.TestMemberIsNonNegative<uint64_t>(
+ media_stream_track.silent_concealed_samples);
+ verifier.TestMemberIsNonNegative<uint64_t>(
+ media_stream_track.jitter_buffer_flushes);
+ verifier.TestMemberIsNonNegative<uint64_t>(
+ media_stream_track.delayed_packet_outage_samples);
+ verifier.TestMemberIsNonNegative<double>(
+ media_stream_track.relative_packet_arrival_delay);
+ verifier.TestMemberIsNonNegative<uint32_t>(
+ media_stream_track.interruption_count);
+ verifier.TestMemberIsNonNegative<double>(
+ media_stream_track.total_interruption_duration);
+ } else {
+ verifier.TestMemberIsIDReference(media_stream_track.media_source_id,
+ RTCAudioSourceStats::kType);
+ // Local audio tracks have no jitter buffer.
+ verifier.TestMemberIsUndefined(media_stream_track.jitter_buffer_delay);
+ verifier.TestMemberIsUndefined(
+ media_stream_track.jitter_buffer_emitted_count);
+ verifier.TestMemberIsUndefined(
+ media_stream_track.total_samples_received);
+ verifier.TestMemberIsUndefined(media_stream_track.concealed_samples);
+ verifier.TestMemberIsUndefined(media_stream_track.concealment_events);
+ verifier.TestMemberIsUndefined(
+ media_stream_track.jitter_buffer_flushes);
+ verifier.TestMemberIsUndefined(
+ media_stream_track.delayed_packet_outage_samples);
+ verifier.TestMemberIsUndefined(
+ media_stream_track.relative_packet_arrival_delay);
+ verifier.TestMemberIsUndefined(media_stream_track.interruption_count);
+ verifier.TestMemberIsUndefined(
+ media_stream_track.total_interruption_duration);
}
// Video-only members should be undefined
verifier.TestMemberIsUndefined(media_stream_track.frame_width);
@@ -666,53 +723,6 @@
verifier.MarkMemberTested(media_stream_track.echo_return_loss_enhancement,
true);
}
- // totalSamplesReceived, concealedSamples and concealmentEvents are only
- // present on inbound audio tracks.
- // jitterBufferDelay is currently only implemented for audio.
- if (*media_stream_track.kind == RTCMediaStreamTrackKind::kAudio &&
- *media_stream_track.remote_source) {
- verifier.TestMemberIsNonNegative<double>(
- media_stream_track.jitter_buffer_delay);
- verifier.TestMemberIsNonNegative<uint64_t>(
- media_stream_track.jitter_buffer_emitted_count);
- verifier.TestMemberIsNonNegative<uint64_t>(
- media_stream_track.total_samples_received);
- verifier.TestMemberIsNonNegative<uint64_t>(
- media_stream_track.concealed_samples);
- verifier.TestMemberIsNonNegative<uint64_t>(
- media_stream_track.concealment_events);
- verifier.TestMemberIsNonNegative<uint64_t>(
- media_stream_track.inserted_samples_for_deceleration);
- verifier.TestMemberIsNonNegative<uint64_t>(
- media_stream_track.removed_samples_for_acceleration);
- verifier.TestMemberIsNonNegative<uint64_t>(
- media_stream_track.silent_concealed_samples);
- verifier.TestMemberIsNonNegative<uint64_t>(
- media_stream_track.jitter_buffer_flushes);
- verifier.TestMemberIsNonNegative<uint64_t>(
- media_stream_track.delayed_packet_outage_samples);
- verifier.TestMemberIsNonNegative<double>(
- media_stream_track.relative_packet_arrival_delay);
- verifier.TestMemberIsNonNegative<uint32_t>(
- media_stream_track.interruption_count);
- verifier.TestMemberIsNonNegative<double>(
- media_stream_track.total_interruption_duration);
- } else {
- verifier.TestMemberIsUndefined(media_stream_track.jitter_buffer_delay);
- verifier.TestMemberIsUndefined(
- media_stream_track.jitter_buffer_emitted_count);
- verifier.TestMemberIsUndefined(media_stream_track.total_samples_received);
- verifier.TestMemberIsUndefined(media_stream_track.concealed_samples);
- verifier.TestMemberIsUndefined(media_stream_track.concealment_events);
- verifier.TestMemberIsUndefined(media_stream_track.jitter_buffer_flushes);
- verifier.TestMemberIsUndefined(
- media_stream_track.delayed_packet_outage_samples);
- verifier.TestMemberIsUndefined(
- media_stream_track.relative_packet_arrival_delay);
- verifier.TestMemberIsUndefined(media_stream_track.interruption_count);
- verifier.TestMemberIsUndefined(
- media_stream_track.total_interruption_duration);
- }
return verifier.ExpectAllMembersSuccessfullyTested();
}