RTCMediaStreamTrackStats.framesReceived collected by RTCStatsCollector.

VideoReceiverInfo::frames_received added based on
VideoReceiveStream::Stats::frame_counts (.key_frames + .delta_frames).

BUG=webrtc:6757, chromium:659137, chromium:627816

Review-Url: https://codereview.webrtc.org/2607913002
Cr-Commit-Position: refs/heads/master@{#16185}
This commit is contained in:
hbos 2017-01-20 03:56:50 -08:00 committed by Commit bot
parent 7319f26632
commit 42f6d2fb6c
7 changed files with 22 additions and 3 deletions

View File

@ -439,7 +439,12 @@ class RTCStatsReportVerifier {
media_stream_track.frame_height);
verifier.TestMemberIsUndefined(media_stream_track.frames_per_second);
verifier.TestMemberIsUndefined(media_stream_track.frames_sent);
verifier.TestMemberIsUndefined(media_stream_track.frames_received);
if (*media_stream_track.remote_source) {
verifier.TestMemberIsNonNegative<uint32_t>(
media_stream_track.frames_received);
} else {
verifier.TestMemberIsUndefined(media_stream_track.frames_received);
}
verifier.TestMemberIsUndefined(media_stream_track.frames_decoded);
verifier.TestMemberIsUndefined(media_stream_track.frames_dropped);
verifier.TestMemberIsUndefined(media_stream_track.frames_corrupted);
@ -451,6 +456,8 @@ class RTCStatsReportVerifier {
verifier.TestMemberIsUndefined(
media_stream_track.echo_return_loss_enhancement);
} else {
RTC_DCHECK_EQ(*media_stream_track.kind,
RTCMediaStreamTrackKind::kAudio);
// Video-only members should be undefined
verifier.TestMemberIsUndefined(media_stream_track.frame_width);
verifier.TestMemberIsUndefined(media_stream_track.frame_height);

View File

@ -436,6 +436,7 @@ ProduceMediaStreamTrackStatsFromVideoReceiverInfo(
video_track_stats->frame_height = static_cast<uint32_t>(
video_receiver_info.frame_height);
}
video_track_stats->frames_received = video_receiver_info.frames_received;
return video_track_stats;
}

View File

@ -1540,6 +1540,7 @@ TEST_F(RTCStatsCollectorTest,
video_receiver_info_ssrc3.local_stats[0].ssrc = 3;
video_receiver_info_ssrc3.frame_width = 6789;
video_receiver_info_ssrc3.frame_height = 9876;
video_receiver_info_ssrc3.frames_received = 2468;
// Remote video track with undefined (default) values
rtc::scoped_refptr<MediaStreamTrackInterface> remote_video_track_ssrc4 =
@ -1553,6 +1554,7 @@ TEST_F(RTCStatsCollectorTest,
video_receiver_info_ssrc4.local_stats[0].ssrc = 4;
video_receiver_info_ssrc4.frame_width = 0;
video_receiver_info_ssrc4.frame_height = 0;
video_receiver_info_ssrc4.frames_received = 0;
test_->CreateMockRtpSendersReceiversAndChannels(
{}, {},
@ -1625,6 +1627,7 @@ TEST_F(RTCStatsCollectorTest,
expected_remote_video_track_ssrc3.detached = false;
expected_remote_video_track_ssrc3.frame_width = 6789;
expected_remote_video_track_ssrc3.frame_height = 9876;
expected_remote_video_track_ssrc3.frames_received = 2468;
ASSERT_TRUE(report->Get(expected_remote_video_track_ssrc3.id()));
EXPECT_EQ(expected_remote_video_track_ssrc3,
report->Get(expected_remote_video_track_ssrc3.id())->cast_to<
@ -1638,6 +1641,7 @@ TEST_F(RTCStatsCollectorTest,
expected_remote_video_track_ssrc4.remote_source = true;
expected_remote_video_track_ssrc4.ended = false;
expected_remote_video_track_ssrc4.detached = false;
expected_remote_video_track_ssrc4.frames_received = 0;
// Should be undefined: |expected_remote_video_track_ssrc4.frame_width| and
// |expected_remote_video_track_ssrc4.frame_height|.
ASSERT_TRUE(report->Get(expected_remote_video_track_ssrc4.id()));

View File

@ -267,7 +267,6 @@ class RTCMediaStreamTrackStats final : public RTCStats {
RTCStatsMember<double> frames_per_second;
// TODO(hbos): Not collected by |RTCStatsCollector|. crbug.com/659137
RTCStatsMember<uint32_t> frames_sent;
// TODO(hbos): Not collected by |RTCStatsCollector|. crbug.com/659137
RTCStatsMember<uint32_t> frames_received;
// TODO(hbos): Not collected by |RTCStatsCollector|. crbug.com/659137
RTCStatsMember<uint32_t> frames_decoded;

View File

@ -749,6 +749,7 @@ struct VideoReceiverInfo : public MediaReceiverInfo {
framerate_output(0),
framerate_render_input(0),
framerate_render_output(0),
frames_received(0),
frames_decoded(0),
decode_ms(0),
max_decode_ms(0),
@ -776,6 +777,7 @@ struct VideoReceiverInfo : public MediaReceiverInfo {
int framerate_render_input;
// Framerate that the renderer reports.
int framerate_render_output;
uint32_t frames_received;
uint32_t frames_decoded;
// All stats below are gathered per-VideoReceiver, but some will be correlated

View File

@ -2383,6 +2383,8 @@ WebRtcVideoChannel2::WebRtcVideoReceiveStream::GetVideoReceiverInfo(
info.jitter_buffer_ms = stats.jitter_buffer_ms;
info.min_playout_delay_ms = stats.min_playout_delay_ms;
info.render_delay_ms = stats.render_delay_ms;
info.frames_received = stats.frame_counts.key_frames +
stats.frame_counts.delta_frames;
info.frames_decoded = stats.frames_decoded;
info.codec_name = GetCodecNameFromPayloadType(stats.current_payload_type);

View File

@ -3301,7 +3301,9 @@ TEST_F(WebRtcVideoChannel2Test, GetStatsTranslatesDecodeStatsCorrectly) {
stats.render_delay_ms = 8;
stats.width = 9;
stats.height = 10;
stats.frames_decoded = 11;
stats.frame_counts.key_frames = 11;
stats.frame_counts.delta_frames = 12;
stats.frames_decoded = 13;
stream->SetStats(stats);
cricket::VideoMediaInfo info;
@ -3317,6 +3319,8 @@ TEST_F(WebRtcVideoChannel2Test, GetStatsTranslatesDecodeStatsCorrectly) {
EXPECT_EQ(stats.render_delay_ms, info.receivers[0].render_delay_ms);
EXPECT_EQ(stats.width, info.receivers[0].frame_width);
EXPECT_EQ(stats.height, info.receivers[0].frame_height);
EXPECT_EQ(stats.frame_counts.key_frames + stats.frame_counts.delta_frames,
info.receivers[0].frames_received);
EXPECT_EQ(stats.frames_decoded, info.receivers[0].frames_decoded);
}