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:
parent
9b96a172ed
commit
160e4a78e3
@ -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);
|
||||
|
||||
@ -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(),
|
||||
|
||||
@ -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;
|
||||
|
||||
@ -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;
|
||||
|
||||
@ -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),
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user