stats: add transportId to codec stats

BUG=webrtc:12181

Change-Id: Ib8e38f19ef2ddcb98455356087781f146af8c6b5
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/193280
Reviewed-by: Harald Alvestrand <hta@webrtc.org>
Reviewed-by: Henrik Boström <hbos@webrtc.org>
Commit-Queue: Henrik Boström <hbos@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#32618}
This commit is contained in:
Philipp Hancke 2020-11-16 20:08:27 +01:00 committed by Commit Bot
parent a48515736d
commit 95157a054b
6 changed files with 21 additions and 5 deletions

View File

@ -115,6 +115,7 @@ class RTC_EXPORT RTCCodecStats final : public RTCStats {
RTCCodecStats(const RTCCodecStats& other); RTCCodecStats(const RTCCodecStats& other);
~RTCCodecStats() override; ~RTCCodecStats() override;
RTCStatsMember<std::string> transport_id;
RTCStatsMember<uint32_t> payload_type; RTCStatsMember<uint32_t> payload_type;
RTCStatsMember<std::string> mime_type; RTCStatsMember<std::string> mime_type;
RTCStatsMember<uint32_t> clock_rate; RTCStatsMember<uint32_t> clock_rate;

View File

@ -228,6 +228,7 @@ double DoubleAudioLevelFromIntAudioLevel(int audio_level) {
std::unique_ptr<RTCCodecStats> CodecStatsFromRtpCodecParameters( std::unique_ptr<RTCCodecStats> CodecStatsFromRtpCodecParameters(
uint64_t timestamp_us, uint64_t timestamp_us,
const std::string& mid, const std::string& mid,
const std::string& transport_id,
bool inbound, bool inbound,
const RtpCodecParameters& codec_params) { const RtpCodecParameters& codec_params) {
RTC_DCHECK_GE(codec_params.payload_type, 0); RTC_DCHECK_GE(codec_params.payload_type, 0);
@ -250,6 +251,7 @@ std::unique_ptr<RTCCodecStats> CodecStatsFromRtpCodecParameters(
if (WriteFmtpParameters(codec_params.parameters, &fmtp)) { if (WriteFmtpParameters(codec_params.parameters, &fmtp)) {
codec_stats->sdp_fmtp_line = fmtp.Release(); codec_stats->sdp_fmtp_line = fmtp.Release();
} }
codec_stats->transport_id = transport_id;
return codec_stats; return codec_stats;
} }
@ -1282,6 +1284,9 @@ void RTCStatsCollector::ProduceCodecStats_n(
if (!stats.mid) { if (!stats.mid) {
continue; continue;
} }
std::string transport_id = RTCTransportStatsIDFromTransportChannel(
*stats.transport_name, cricket::ICE_CANDIDATE_COMPONENT_RTP);
const cricket::VoiceMediaInfo* voice_media_info = const cricket::VoiceMediaInfo* voice_media_info =
stats.track_media_info_map->voice_media_info(); stats.track_media_info_map->voice_media_info();
const cricket::VideoMediaInfo* video_media_info = const cricket::VideoMediaInfo* video_media_info =
@ -1291,12 +1296,12 @@ void RTCStatsCollector::ProduceCodecStats_n(
// Inbound // Inbound
for (const auto& pair : voice_media_info->receive_codecs) { for (const auto& pair : voice_media_info->receive_codecs) {
report->AddStats(CodecStatsFromRtpCodecParameters( report->AddStats(CodecStatsFromRtpCodecParameters(
timestamp_us, *stats.mid, true, pair.second)); timestamp_us, *stats.mid, transport_id, true, pair.second));
} }
// Outbound // Outbound
for (const auto& pair : voice_media_info->send_codecs) { for (const auto& pair : voice_media_info->send_codecs) {
report->AddStats(CodecStatsFromRtpCodecParameters( report->AddStats(CodecStatsFromRtpCodecParameters(
timestamp_us, *stats.mid, false, pair.second)); timestamp_us, *stats.mid, transport_id, false, pair.second));
} }
} }
// Video // Video
@ -1304,12 +1309,12 @@ void RTCStatsCollector::ProduceCodecStats_n(
// Inbound // Inbound
for (const auto& pair : video_media_info->receive_codecs) { for (const auto& pair : video_media_info->receive_codecs) {
report->AddStats(CodecStatsFromRtpCodecParameters( report->AddStats(CodecStatsFromRtpCodecParameters(
timestamp_us, *stats.mid, true, pair.second)); timestamp_us, *stats.mid, transport_id, true, pair.second));
} }
// Outbound // Outbound
for (const auto& pair : video_media_info->send_codecs) { for (const auto& pair : video_media_info->send_codecs) {
report->AddStats(CodecStatsFromRtpCodecParameters( report->AddStats(CodecStatsFromRtpCodecParameters(
timestamp_us, *stats.mid, false, pair.second)); timestamp_us, *stats.mid, transport_id, false, pair.second));
} }
} }
} }

View File

@ -874,6 +874,7 @@ TEST_F(RTCStatsCollectorTest, CollectRTCCodecStats) {
expected_inbound_audio_codec.clock_rate = 1337; expected_inbound_audio_codec.clock_rate = 1337;
expected_inbound_audio_codec.channels = 1; expected_inbound_audio_codec.channels = 1;
expected_inbound_audio_codec.sdp_fmtp_line = "minptime=10;useinbandfec=1"; expected_inbound_audio_codec.sdp_fmtp_line = "minptime=10;useinbandfec=1";
expected_inbound_audio_codec.transport_id = "RTCTransport_TransportName_1";
RTCCodecStats expected_outbound_audio_codec("RTCCodec_AudioMid_Outbound_2", RTCCodecStats expected_outbound_audio_codec("RTCCodec_AudioMid_Outbound_2",
report->timestamp_us()); report->timestamp_us());
@ -881,6 +882,7 @@ TEST_F(RTCStatsCollectorTest, CollectRTCCodecStats) {
expected_outbound_audio_codec.mime_type = "audio/isac"; expected_outbound_audio_codec.mime_type = "audio/isac";
expected_outbound_audio_codec.clock_rate = 1338; expected_outbound_audio_codec.clock_rate = 1338;
expected_outbound_audio_codec.channels = 2; expected_outbound_audio_codec.channels = 2;
expected_outbound_audio_codec.transport_id = "RTCTransport_TransportName_1";
RTCCodecStats expected_inbound_video_codec("RTCCodec_VideoMid_Inbound_3", RTCCodecStats expected_inbound_video_codec("RTCCodec_VideoMid_Inbound_3",
report->timestamp_us()); report->timestamp_us());
@ -889,12 +891,14 @@ TEST_F(RTCStatsCollectorTest, CollectRTCCodecStats) {
expected_inbound_video_codec.clock_rate = 1339; expected_inbound_video_codec.clock_rate = 1339;
expected_inbound_video_codec.sdp_fmtp_line = expected_inbound_video_codec.sdp_fmtp_line =
"level-asymmetry-allowed=1;packetization-mode=1;profile-level-id=42001f"; "level-asymmetry-allowed=1;packetization-mode=1;profile-level-id=42001f";
expected_inbound_video_codec.transport_id = "RTCTransport_TransportName_1";
RTCCodecStats expected_outbound_video_codec("RTCCodec_VideoMid_Outbound_4", RTCCodecStats expected_outbound_video_codec("RTCCodec_VideoMid_Outbound_4",
report->timestamp_us()); report->timestamp_us());
expected_outbound_video_codec.payload_type = 4; expected_outbound_video_codec.payload_type = 4;
expected_outbound_video_codec.mime_type = "video/VP8"; expected_outbound_video_codec.mime_type = "video/VP8";
expected_outbound_video_codec.clock_rate = 1340; expected_outbound_video_codec.clock_rate = 1340;
expected_outbound_video_codec.transport_id = "RTCTransport_TransportName_1";
ASSERT_TRUE(report->Get(expected_inbound_audio_codec.id())); ASSERT_TRUE(report->Get(expected_inbound_audio_codec.id()));
EXPECT_EQ( EXPECT_EQ(

View File

@ -442,6 +442,8 @@ class RTCStatsReportVerifier {
bool VerifyRTCCodecStats(const RTCCodecStats& codec) { bool VerifyRTCCodecStats(const RTCCodecStats& codec) {
RTCStatsVerifier verifier(report_, &codec); RTCStatsVerifier verifier(report_, &codec);
verifier.TestMemberIsIDReference(codec.transport_id,
RTCTransportStats::kType);
verifier.TestMemberIsDefined(codec.payload_type); verifier.TestMemberIsDefined(codec.payload_type);
verifier.TestMemberIsDefined(codec.mime_type); verifier.TestMemberIsDefined(codec.mime_type);
verifier.TestMemberIsPositive<uint32_t>(codec.clock_rate); verifier.TestMemberIsPositive<uint32_t>(codec.clock_rate);

View File

@ -76,7 +76,8 @@ std::vector<const std::string*> GetStatsReferencedIds(const RTCStats& stats) {
const auto& certificate = static_cast<const RTCCertificateStats&>(stats); const auto& certificate = static_cast<const RTCCertificateStats&>(stats);
AddIdIfDefined(certificate.issuer_certificate_id, &neighbor_ids); AddIdIfDefined(certificate.issuer_certificate_id, &neighbor_ids);
} else if (type == RTCCodecStats::kType) { } else if (type == RTCCodecStats::kType) {
// RTCCodecStats does not have any neighbor references. const auto& codec = static_cast<const RTCCodecStats&>(stats);
AddIdIfDefined(codec.transport_id, &neighbor_ids);
} else if (type == RTCDataChannelStats::kType) { } else if (type == RTCDataChannelStats::kType) {
// RTCDataChannelStats does not have any neighbor references. // RTCDataChannelStats does not have any neighbor references.
} else if (type == RTCIceCandidatePairStats::kType) { } else if (type == RTCIceCandidatePairStats::kType) {

View File

@ -92,6 +92,7 @@ RTCCertificateStats::~RTCCertificateStats() {}
// clang-format off // clang-format off
WEBRTC_RTCSTATS_IMPL(RTCCodecStats, RTCStats, "codec", WEBRTC_RTCSTATS_IMPL(RTCCodecStats, RTCStats, "codec",
&transport_id,
&payload_type, &payload_type,
&mime_type, &mime_type,
&clock_rate, &clock_rate,
@ -104,6 +105,7 @@ RTCCodecStats::RTCCodecStats(const std::string& id, int64_t timestamp_us)
RTCCodecStats::RTCCodecStats(std::string&& id, int64_t timestamp_us) RTCCodecStats::RTCCodecStats(std::string&& id, int64_t timestamp_us)
: RTCStats(std::move(id), timestamp_us), : RTCStats(std::move(id), timestamp_us),
transport_id("transportId"),
payload_type("payloadType"), payload_type("payloadType"),
mime_type("mimeType"), mime_type("mimeType"),
clock_rate("clockRate"), clock_rate("clockRate"),
@ -112,6 +114,7 @@ RTCCodecStats::RTCCodecStats(std::string&& id, int64_t timestamp_us)
RTCCodecStats::RTCCodecStats(const RTCCodecStats& other) RTCCodecStats::RTCCodecStats(const RTCCodecStats& other)
: RTCStats(other.id(), other.timestamp_us()), : RTCStats(other.id(), other.timestamp_us()),
transport_id(other.transport_id),
payload_type(other.payload_type), payload_type(other.payload_type),
mime_type(other.mime_type), mime_type(other.mime_type),
clock_rate(other.clock_rate), clock_rate(other.clock_rate),