RTCMediaStreamTrackStats.kind added and collected.

Implements recent spec change:
https://github.com/w3c/webrtc-stats/pull/127

BUG=chromium:659137, chromium:627816

Review-Url: https://codereview.webrtc.org/2623513006
Cr-Commit-Position: refs/heads/master@{#16111}
This commit is contained in:
hbos 2017-01-17 02:53:23 -08:00 committed by Commit bot
parent 9b96a172ed
commit 160e4a78e3
5 changed files with 52 additions and 17 deletions

View File

@ -429,13 +429,21 @@ class RTCStatsReportVerifier {
verifier.TestMemberIsDefined(media_stream_track.remote_source);
verifier.TestMemberIsDefined(media_stream_track.ended);
verifier.TestMemberIsDefined(media_stream_track.detached);
verifier.TestMemberIsDefined(media_stream_track.kind);
// Video or audio media stream track?
if (media_stream_track.frame_width.is_defined()) {
if (*media_stream_track.kind == RTCMediaStreamTrackKind::kVideo) {
// Video-only members
verifier.TestMemberIsNonNegative<uint32_t>(
media_stream_track.frame_width);
verifier.TestMemberIsNonNegative<uint32_t>(
media_stream_track.frame_height);
if (!*media_stream_track.remote_source) {
verifier.TestMemberIsNonNegative<uint32_t>(
media_stream_track.frame_width);
verifier.TestMemberIsNonNegative<uint32_t>(
media_stream_track.frame_height);
} else {
// TODO(hbos): Frame width/height should be defined for the remote case.
// Is this a real problem or an artifact of testing? crbug.com/659137
verifier.TestMemberIsUndefined(media_stream_track.frame_width);
verifier.TestMemberIsUndefined(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);

View File

@ -354,7 +354,8 @@ void ProduceMediaStreamAndTrackStats(
continue;
}
std::unique_ptr<RTCMediaStreamTrackStats> audio_track_stats(
new RTCMediaStreamTrackStats(id, timestamp_us));
new RTCMediaStreamTrackStats(id, timestamp_us,
RTCMediaStreamTrackKind::kAudio));
stream_stats->track_ids->push_back(audio_track_stats->id());
SetMediaStreamTrackStatsFromMediaStreamTrackInterface(
*audio_track.get(),
@ -392,7 +393,8 @@ void ProduceMediaStreamAndTrackStats(
continue;
}
std::unique_ptr<RTCMediaStreamTrackStats> video_track_stats(
new RTCMediaStreamTrackStats(id, timestamp_us));
new RTCMediaStreamTrackStats(id, timestamp_us,
RTCMediaStreamTrackKind::kVideo));
stream_stats->track_ids->push_back(video_track_stats->id());
SetMediaStreamTrackStatsFromMediaStreamTrackInterface(
*video_track.get(),

View File

@ -1379,7 +1379,8 @@ TEST_F(RTCStatsCollectorTest,
RTCMediaStreamStats>());
RTCMediaStreamTrackStats expected_local_audio_track(
"RTCMediaStreamTrack_local_LocalAudioTrackID", report->timestamp_us());
"RTCMediaStreamTrack_local_LocalAudioTrackID", report->timestamp_us(),
RTCMediaStreamTrackKind::kAudio);
expected_local_audio_track.track_identifier = local_audio_track->id();
expected_local_audio_track.remote_source = false;
expected_local_audio_track.ended = true;
@ -1393,7 +1394,8 @@ TEST_F(RTCStatsCollectorTest,
RTCMediaStreamTrackStats>());
RTCMediaStreamTrackStats expected_remote_audio_track(
"RTCMediaStreamTrack_remote_RemoteAudioTrackID", report->timestamp_us());
"RTCMediaStreamTrack_remote_RemoteAudioTrackID", report->timestamp_us(),
RTCMediaStreamTrackKind::kAudio);
expected_remote_audio_track.track_identifier = remote_audio_track->id();
expected_remote_audio_track.remote_source = true;
expected_remote_audio_track.ended = false;
@ -1433,7 +1435,8 @@ TEST_F(RTCStatsCollectorTest,
rtc::scoped_refptr<const RTCStatsReport> report = GetStatsReport();
RTCMediaStreamTrackStats expected_local_audio_track(
"RTCMediaStreamTrack_local_LocalAudioTrackID", report->timestamp_us());
"RTCMediaStreamTrack_local_LocalAudioTrackID", report->timestamp_us(),
RTCMediaStreamTrackKind::kAudio);
expected_local_audio_track.track_identifier = local_audio_track->id();
expected_local_audio_track.remote_source = false;
expected_local_audio_track.ended = true;
@ -1516,7 +1519,8 @@ TEST_F(RTCStatsCollectorTest,
RTCMediaStreamStats>());
RTCMediaStreamTrackStats expected_local_video_track(
"RTCMediaStreamTrack_local_LocalVideoTrackID", report->timestamp_us());
"RTCMediaStreamTrack_local_LocalVideoTrackID", report->timestamp_us(),
RTCMediaStreamTrackKind::kVideo);
expected_local_video_track.track_identifier = local_video_track->id();
expected_local_video_track.remote_source = false;
expected_local_video_track.ended = false;
@ -1529,7 +1533,8 @@ TEST_F(RTCStatsCollectorTest,
RTCMediaStreamTrackStats>());
RTCMediaStreamTrackStats expected_remote_video_track(
"RTCMediaStreamTrack_remote_RemoteVideoTrackID", report->timestamp_us());
"RTCMediaStreamTrack_remote_RemoteVideoTrackID", report->timestamp_us(),
RTCMediaStreamTrackKind::kVideo);
expected_remote_video_track.track_identifier = remote_video_track->id();
expected_remote_video_track.remote_source = true;
expected_remote_video_track.ended = true;

View File

@ -51,6 +51,14 @@ struct RTCDtlsTransportState {
static const char* kFailed;
};
// |RTCMediaStreamTrackStats::kind| is not an enum in the spec but the only
// valid values are "audio" and "video".
// https://w3c.github.io/webrtc-stats/#dom-rtcmediastreamtrackstats-kind
struct RTCMediaStreamTrackKind {
static const char* kAudio;
static const char* kVideo;
};
// https://w3c.github.io/webrtc-stats/#certificatestats-dict*
class RTCCertificateStats final : public RTCStats {
public:
@ -237,8 +245,10 @@ class RTCMediaStreamTrackStats final : public RTCStats {
public:
WEBRTC_RTCSTATS_DECL();
RTCMediaStreamTrackStats(const std::string& id, int64_t timestamp_us);
RTCMediaStreamTrackStats(std::string&& id, int64_t timestamp_us);
RTCMediaStreamTrackStats(const std::string& id, int64_t timestamp_us,
const char* kind);
RTCMediaStreamTrackStats(std::string&& id, int64_t timestamp_us,
const char* kind);
RTCMediaStreamTrackStats(const RTCMediaStreamTrackStats& other);
~RTCMediaStreamTrackStats() override;
@ -248,6 +258,8 @@ class RTCMediaStreamTrackStats final : public RTCStats {
// TODO(hbos): |RTCStatsCollector| does not return stats for detached tracks.
// crbug.com/659137
RTCStatsMember<bool> detached;
// See |RTCMediaStreamTrackKind| for valid values.
RTCStatsMember<std::string> kind;
// Video-only members
RTCStatsMember<uint32_t> frame_width;
RTCStatsMember<uint32_t> frame_height;

View File

@ -35,6 +35,9 @@ const char* RTCDtlsTransportState::kConnected = "connected";
const char* RTCDtlsTransportState::kClosed = "closed";
const char* RTCDtlsTransportState::kFailed = "failed";
const char* RTCMediaStreamTrackKind::kAudio = "audio";
const char* RTCMediaStreamTrackKind::kVideo = "video";
WEBRTC_RTCSTATS_IMPL(RTCCertificateStats, RTCStats, "certificate",
&fingerprint,
&fingerprint_algorithm,
@ -350,6 +353,7 @@ WEBRTC_RTCSTATS_IMPL(RTCMediaStreamTrackStats, RTCStats, "track",
&remote_source,
&ended,
&detached,
&kind,
&frame_width,
&frame_height,
&frames_per_second,
@ -365,17 +369,18 @@ WEBRTC_RTCSTATS_IMPL(RTCMediaStreamTrackStats, RTCStats, "track",
&echo_return_loss_enhancement);
RTCMediaStreamTrackStats::RTCMediaStreamTrackStats(
const std::string& id, int64_t timestamp_us)
: RTCMediaStreamTrackStats(std::string(id), timestamp_us) {
const std::string& id, int64_t timestamp_us, const char* kind)
: RTCMediaStreamTrackStats(std::string(id), timestamp_us, kind) {
}
RTCMediaStreamTrackStats::RTCMediaStreamTrackStats(
std::string&& id, int64_t timestamp_us)
std::string&& id, int64_t timestamp_us, const char* kind)
: RTCStats(std::move(id), timestamp_us),
track_identifier("trackIdentifier"),
remote_source("remoteSource"),
ended("ended"),
detached("detached"),
kind("kind", kind),
frame_width("frameWidth"),
frame_height("frameHeight"),
frames_per_second("framesPerSecond"),
@ -389,6 +394,8 @@ RTCMediaStreamTrackStats::RTCMediaStreamTrackStats(
audio_level("audioLevel"),
echo_return_loss("echoReturnLoss"),
echo_return_loss_enhancement("echoReturnLossEnhancement") {
RTC_DCHECK(kind == RTCMediaStreamTrackKind::kAudio ||
kind == RTCMediaStreamTrackKind::kVideo);
}
RTCMediaStreamTrackStats::RTCMediaStreamTrackStats(
@ -398,6 +405,7 @@ RTCMediaStreamTrackStats::RTCMediaStreamTrackStats(
remote_source(other.remote_source),
ended(other.ended),
detached(other.detached),
kind(other.kind),
frame_width(other.frame_width),
frame_height(other.frame_height),
frames_per_second(other.frames_per_second),