Make RTCStats IDs more concise.

Ultimately, IDs should be random according to spec[1], so we shouldn't
rely on the ID to convey easily readable information. By making the IDs
shorter we reduce the overhead of string copies and make report dumps a
little bit smaller.

Drive-by: Add "DEPRECATED_" prefic to the RTCMediaStreamStats ID.

[1] https://w3c.github.io/webrtc-pc/#dom-rtcstats-id

# Examples of IDs before and after this CL #

RTCDataChannel_3
-> D3

RTCPeerConnection
-> P

RTCTransport_0_1
-> T01

RTCCodec_RTCTransport_0_1_100_minptime=10;useinbandfec=1
-> CIT01_100_minptime=10;useinbandfec=1

RTCInboundRTPAudioStream_6666
-> IA6666

RTCAudioSource_1
-> SA1

RTCOutboundRTPAudioStream_2943129392
-> OA2943129392

RTCRemoteInboundRtpAudioStream_3541280085
-> RIA3541280085

RTCIceCandidate_6cWRqicY
-> I6cWRqicY

RTCIceCandidatePair_6cWRqicY_haEcM2xD
-> CP6cWRqicY_haEcM2xD

RTCCertificate_FD1:BC:58:90:DF:E8:40:58:8D:04:91:44:93:4E:6C:52:9E:F0:14:98:AA:67:7B:8B:C8:30:C8:31:D0:84:1B:BF
-> CFD1:BC:58:90:DF:E8:40:58:8D:04:91:44:93:4E:6C:52:9E:F0:14:98:AA:67:7B:8B:C8:30:C8:31:D0:84:1B:BF

DEPRECATED_RTCMediaStreamTrack_receiver_3
-> DEPRECATED_TI3

RTCMediaStream_45a6e766-5d1a-40f9-a55c-ea8fdefcde49
-> DEPRECATED_S45a6e766-5d1a-40f9-a55c-ea8fdefcde49

Bug: webrtc:14416, webrtc:14419
Change-Id: I11f0a8b8354203fea1df1093d8864a6d47ee71e6
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/273709
Reviewed-by: Taylor Brandstetter <deadbeef@webrtc.org>
Commit-Queue: Henrik Boström <hbos@webrtc.org>
Cr-Commit-Position: refs/heads/main@{#37992}
This commit is contained in:
Henrik Boström
2022-09-02 09:39:29 +02:00
committed by WebRTC LUCI CQ
parent a5d80a7646
commit 8dfc90f947
2 changed files with 205 additions and 248 deletions

View File

@ -662,13 +662,13 @@ class RTCStatsCollectorTest : public ::testing::Test {
const CertificateInfo& certinfo) {
for (size_t i = 0; i < certinfo.fingerprints.size(); ++i) {
RTCCertificateStats expected_certificate_stats(
"RTCCertificate_" + certinfo.fingerprints[i], report->timestamp_us());
"CF" + certinfo.fingerprints[i], report->timestamp_us());
expected_certificate_stats.fingerprint = certinfo.fingerprints[i];
expected_certificate_stats.fingerprint_algorithm = "sha-1";
expected_certificate_stats.base64_certificate = certinfo.pems[i];
if (i + 1 < certinfo.fingerprints.size()) {
expected_certificate_stats.issuer_certificate_id =
"RTCCertificate_" + certinfo.fingerprints[i + 1];
"CF" + certinfo.fingerprints[i + 1];
}
ASSERT_TRUE(report->Get(expected_certificate_stats.id()));
EXPECT_EQ(expected_certificate_stats,
@ -705,7 +705,7 @@ class RTCStatsCollectorTest : public ::testing::Test {
ExampleStatsGraph graph;
// codec (send)
graph.send_codec_id = "RTCCodec_RTCTransport_TransportName_1_Send_1";
graph.send_codec_id = "COTTransportName1_1";
cricket::VideoMediaInfo video_media_info;
RtpCodecParameters send_codec;
send_codec.payload_type = 1;
@ -713,14 +713,14 @@ class RTCStatsCollectorTest : public ::testing::Test {
video_media_info.send_codecs.insert(
std::make_pair(send_codec.payload_type, send_codec));
// codec (recv)
graph.recv_codec_id = "RTCCodec_RTCTransport_TransportName_1_Recv_2";
graph.recv_codec_id = "CITTransportName1_2";
RtpCodecParameters recv_codec;
recv_codec.payload_type = 2;
recv_codec.clock_rate = 0;
video_media_info.receive_codecs.insert(
std::make_pair(recv_codec.payload_type, recv_codec));
// outbound-rtp
graph.outbound_rtp_id = "RTCOutboundRTPVideoStream_3";
graph.outbound_rtp_id = "OV3";
video_media_info.senders.push_back(cricket::VideoSenderInfo());
video_media_info.senders[0].local_stats.push_back(
cricket::SsrcSenderInfo());
@ -728,31 +728,30 @@ class RTCStatsCollectorTest : public ::testing::Test {
video_media_info.senders[0].codec_payload_type = send_codec.payload_type;
video_media_info.aggregated_senders.push_back(video_media_info.senders[0]);
// inbound-rtp
graph.inbound_rtp_id = "RTCInboundRTPVideoStream_4";
graph.inbound_rtp_id = "IV4";
video_media_info.receivers.push_back(cricket::VideoReceiverInfo());
video_media_info.receivers[0].local_stats.push_back(
cricket::SsrcReceiverInfo());
video_media_info.receivers[0].local_stats[0].ssrc = 4;
video_media_info.receivers[0].codec_payload_type = recv_codec.payload_type;
// transport
graph.transport_id = "RTCTransport_TransportName_1";
graph.transport_id = "TTransportName1";
pc_->AddVideoChannel("VideoMid", "TransportName", video_media_info);
// track (sender)
graph.sender = stats_->SetupLocalTrackAndSender(
cricket::MEDIA_TYPE_VIDEO, "LocalVideoTrackID", 3, false, 50);
graph.sender_track_id = "DEPRECATED_RTCMediaStreamTrack_sender_" +
rtc::ToString(graph.sender->AttachmentId());
graph.sender_track_id =
"DEPRECATED_TO" + rtc::ToString(graph.sender->AttachmentId());
// track (receiver) and stream (remote stream)
graph.receiver = stats_->SetupRemoteTrackAndReceiver(
cricket::MEDIA_TYPE_VIDEO, "RemoteVideoTrackID", "RemoteStreamId", 4);
graph.receiver_track_id = "DEPRECATED_RTCMediaStreamTrack_receiver_" +
rtc::ToString(graph.receiver->AttachmentId());
graph.remote_stream_id = "RTCMediaStream_RemoteStreamId";
graph.receiver_track_id =
"DEPRECATED_TI" + rtc::ToString(graph.receiver->AttachmentId());
graph.remote_stream_id = "DEPRECATED_SRemoteStreamId";
// peer-connection
graph.peer_connection_id = "RTCPeerConnection";
graph.peer_connection_id = "P";
// media-source (kind: video)
graph.media_source_id =
"RTCVideoSource_" + rtc::ToString(graph.sender->AttachmentId());
graph.media_source_id = "SV" + rtc::ToString(graph.sender->AttachmentId());
// Expected stats graph:
//
@ -806,7 +805,7 @@ class RTCStatsCollectorTest : public ::testing::Test {
ExampleStatsGraph graph;
// codec (send)
graph.send_codec_id = "RTCCodec_RTCTransport_TransportName_1_Send_1";
graph.send_codec_id = "COTTransportName1_1";
cricket::VoiceMediaInfo media_info;
RtpCodecParameters send_codec;
send_codec.payload_type = 1;
@ -814,27 +813,27 @@ class RTCStatsCollectorTest : public ::testing::Test {
media_info.send_codecs.insert(
std::make_pair(send_codec.payload_type, send_codec));
// codec (recv)
graph.recv_codec_id = "RTCCodec_RTCTransport_TransportName_1_Recv_2";
graph.recv_codec_id = "CITTransportName1_2";
RtpCodecParameters recv_codec;
recv_codec.payload_type = 2;
recv_codec.clock_rate = 0;
media_info.receive_codecs.insert(
std::make_pair(recv_codec.payload_type, recv_codec));
// outbound-rtp
graph.outbound_rtp_id = "RTCOutboundRTPAudioStream_3";
graph.outbound_rtp_id = "OA3";
media_info.senders.push_back(cricket::VoiceSenderInfo());
media_info.senders[0].local_stats.push_back(cricket::SsrcSenderInfo());
media_info.senders[0].local_stats[0].ssrc = kLocalSsrc;
media_info.senders[0].codec_payload_type = send_codec.payload_type;
// inbound-rtp
graph.inbound_rtp_id = "RTCInboundRTPAudioStream_4";
graph.inbound_rtp_id = "IA4";
media_info.receivers.push_back(cricket::VoiceReceiverInfo());
media_info.receivers[0].local_stats.push_back(cricket::SsrcReceiverInfo());
media_info.receivers[0].local_stats[0].ssrc = kRemoteSsrc;
media_info.receivers[0].codec_payload_type = recv_codec.payload_type;
// remote-outbound-rtp
if (add_remote_outbound_stats) {
graph.remote_outbound_rtp_id = "RTCRemoteOutboundRTPAudioStream_4";
graph.remote_outbound_rtp_id = "ROA4";
media_info.receivers[0].last_sender_report_timestamp_ms =
kRemoteOutboundStatsTimestampMs;
media_info.receivers[0].last_sender_report_remote_timestamp_ms =
@ -848,25 +847,24 @@ class RTCStatsCollectorTest : public ::testing::Test {
}
// transport
graph.transport_id = "RTCTransport_TransportName_1";
graph.transport_id = "TTransportName1";
pc_->AddVoiceChannel("VoiceMid", "TransportName", media_info);
// track (sender)
graph.sender = stats_->SetupLocalTrackAndSender(
cricket::MEDIA_TYPE_AUDIO, "LocalAudioTrackID", kLocalSsrc, false, 50);
graph.sender_track_id = "DEPRECATED_RTCMediaStreamTrack_sender_" +
rtc::ToString(graph.sender->AttachmentId());
graph.sender_track_id =
"DEPRECATED_TO" + rtc::ToString(graph.sender->AttachmentId());
// track (receiver) and stream (remote stream)
graph.receiver = stats_->SetupRemoteTrackAndReceiver(
cricket::MEDIA_TYPE_AUDIO, "RemoteAudioTrackID", "RemoteStreamId",
kRemoteSsrc);
graph.receiver_track_id = "DEPRECATED_RTCMediaStreamTrack_receiver_" +
rtc::ToString(graph.receiver->AttachmentId());
graph.remote_stream_id = "RTCMediaStream_RemoteStreamId";
graph.receiver_track_id =
"DEPRECATED_TI" + rtc::ToString(graph.receiver->AttachmentId());
graph.remote_stream_id = "DEPRECATED_SRemoteStreamId";
// peer-connection
graph.peer_connection_id = "RTCPeerConnection";
graph.peer_connection_id = "P";
// media-source (kind: video)
graph.media_source_id =
"RTCAudioSource_" + rtc::ToString(graph.sender->AttachmentId());
graph.media_source_id = "SA" + rtc::ToString(graph.sender->AttachmentId());
// Expected stats graph:
//
@ -1063,25 +1061,24 @@ TEST_F(RTCStatsCollectorTest, CollectRTCCodecStats) {
rtc::scoped_refptr<const RTCStatsReport> report = stats_->GetStatsReport();
RTCCodecStats expected_inbound_audio_codec(
"RTCCodec_RTCTransport_TransportName_1_Recv_1_minptime=10;useinbandfec=1",
report->timestamp_us());
"CITTransportName1_1_minptime=10;useinbandfec=1", report->timestamp_us());
expected_inbound_audio_codec.payload_type = 1;
expected_inbound_audio_codec.mime_type = "audio/opus";
expected_inbound_audio_codec.clock_rate = 1337;
expected_inbound_audio_codec.channels = 1;
expected_inbound_audio_codec.sdp_fmtp_line = "minptime=10;useinbandfec=1";
expected_inbound_audio_codec.transport_id = "RTCTransport_TransportName_1";
expected_inbound_audio_codec.transport_id = "TTransportName1";
RTCCodecStats expected_outbound_audio_codec(
"RTCCodec_RTCTransport_TransportName_1_Send_2", report->timestamp_us());
RTCCodecStats expected_outbound_audio_codec("COTTransportName1_2",
report->timestamp_us());
expected_outbound_audio_codec.payload_type = 2;
expected_outbound_audio_codec.mime_type = "audio/isac";
expected_outbound_audio_codec.clock_rate = 1338;
expected_outbound_audio_codec.channels = 2;
expected_outbound_audio_codec.transport_id = "RTCTransport_TransportName_1";
expected_outbound_audio_codec.transport_id = "TTransportName1";
RTCCodecStats expected_inbound_video_codec(
"RTCCodec_RTCTransport_TransportName_1_Recv_3_level-asymmetry-allowed=1;"
"CITTransportName1_3_level-asymmetry-allowed=1;"
"packetization-mode=1;profile-level-id=42001f",
report->timestamp_us());
expected_inbound_video_codec.payload_type = 3;
@ -1089,14 +1086,14 @@ TEST_F(RTCStatsCollectorTest, CollectRTCCodecStats) {
expected_inbound_video_codec.clock_rate = 1339;
expected_inbound_video_codec.sdp_fmtp_line =
"level-asymmetry-allowed=1;packetization-mode=1;profile-level-id=42001f";
expected_inbound_video_codec.transport_id = "RTCTransport_TransportName_1";
expected_inbound_video_codec.transport_id = "TTransportName1";
RTCCodecStats expected_outbound_video_codec(
"RTCCodec_RTCTransport_TransportName_1_Send_4", report->timestamp_us());
RTCCodecStats expected_outbound_video_codec("COTTransportName1_4",
report->timestamp_us());
expected_outbound_video_codec.payload_type = 4;
expected_outbound_video_codec.mime_type = "video/VP8";
expected_outbound_video_codec.clock_rate = 1340;
expected_outbound_video_codec.transport_id = "RTCTransport_TransportName_1";
expected_outbound_video_codec.transport_id = "TTransportName1";
ASSERT_TRUE(report->Get(expected_inbound_audio_codec.id()));
EXPECT_EQ(
@ -1306,7 +1303,7 @@ TEST_F(RTCStatsCollectorTest, CollectRTCDataChannelStats) {
pc_->AddSctpDataChannel(rtc::make_ref_counted<MockSctpDataChannel>(
0, "MockSctpDataChannel0", DataChannelInterface::kConnecting, "udp", 1, 2,
3, 4));
RTCDataChannelStats expected_data_channel0("RTCDataChannel_0", 0);
RTCDataChannelStats expected_data_channel0("D0", 0);
expected_data_channel0.label = "MockSctpDataChannel0";
expected_data_channel0.protocol = "udp";
expected_data_channel0.data_channel_identifier = 0;
@ -1319,7 +1316,7 @@ TEST_F(RTCStatsCollectorTest, CollectRTCDataChannelStats) {
pc_->AddSctpDataChannel(rtc::make_ref_counted<MockSctpDataChannel>(
1, "MockSctpDataChannel1", DataChannelInterface::kOpen, "tcp", 5, 6, 7,
8));
RTCDataChannelStats expected_data_channel1("RTCDataChannel_1", 0);
RTCDataChannelStats expected_data_channel1("D1", 0);
expected_data_channel1.label = "MockSctpDataChannel1";
expected_data_channel1.protocol = "tcp";
expected_data_channel1.data_channel_identifier = 1;
@ -1332,7 +1329,7 @@ TEST_F(RTCStatsCollectorTest, CollectRTCDataChannelStats) {
pc_->AddSctpDataChannel(rtc::make_ref_counted<MockSctpDataChannel>(
2, "MockSctpDataChannel2", DataChannelInterface::kClosing, "udp", 9, 10,
11, 12));
RTCDataChannelStats expected_data_channel2("RTCDataChannel_2", 0);
RTCDataChannelStats expected_data_channel2("D2", 0);
expected_data_channel2.label = "MockSctpDataChannel2";
expected_data_channel2.protocol = "udp";
expected_data_channel2.data_channel_identifier = 2;
@ -1345,7 +1342,7 @@ TEST_F(RTCStatsCollectorTest, CollectRTCDataChannelStats) {
pc_->AddSctpDataChannel(rtc::make_ref_counted<MockSctpDataChannel>(
3, "MockSctpDataChannel3", DataChannelInterface::kClosed, "tcp", 13, 14,
15, 16));
RTCDataChannelStats expected_data_channel3("RTCDataChannel_3", 0);
RTCDataChannelStats expected_data_channel3("D3", 0);
expected_data_channel3.label = "MockSctpDataChannel3";
expected_data_channel3.protocol = "tcp";
expected_data_channel3.data_channel_identifier = 3;
@ -1380,9 +1377,8 @@ TEST_F(RTCStatsCollectorTest, CollectRTCIceCandidateStats) {
std::unique_ptr<cricket::Candidate> a_local_host = CreateFakeCandidate(
"1.2.3.4", 5, "a_local_host's protocol", rtc::ADAPTER_TYPE_VPN,
cricket::LOCAL_PORT_TYPE, 0, rtc::ADAPTER_TYPE_ETHERNET);
RTCLocalIceCandidateStats expected_a_local_host(
"RTCIceCandidate_" + a_local_host->id(), 0);
expected_a_local_host.transport_id = "RTCTransport_a_0";
RTCLocalIceCandidateStats expected_a_local_host("I" + a_local_host->id(), 0);
expected_a_local_host.transport_id = "Ta0";
expected_a_local_host.network_type = "vpn";
expected_a_local_host.ip = "1.2.3.4";
expected_a_local_host.address = "1.2.3.4";
@ -1396,9 +1392,9 @@ TEST_F(RTCStatsCollectorTest, CollectRTCIceCandidateStats) {
std::unique_ptr<cricket::Candidate> a_remote_srflx = CreateFakeCandidate(
"6.7.8.9", 10, "remote_srflx's protocol", rtc::ADAPTER_TYPE_UNKNOWN,
cricket::STUN_PORT_TYPE, 1);
RTCRemoteIceCandidateStats expected_a_remote_srflx(
"RTCIceCandidate_" + a_remote_srflx->id(), 0);
expected_a_remote_srflx.transport_id = "RTCTransport_a_0";
RTCRemoteIceCandidateStats expected_a_remote_srflx("I" + a_remote_srflx->id(),
0);
expected_a_remote_srflx.transport_id = "Ta0";
expected_a_remote_srflx.ip = "6.7.8.9";
expected_a_remote_srflx.address = "6.7.8.9";
expected_a_remote_srflx.port = 10;
@ -1409,9 +1405,9 @@ TEST_F(RTCStatsCollectorTest, CollectRTCIceCandidateStats) {
std::unique_ptr<cricket::Candidate> a_local_prflx = CreateFakeCandidate(
"11.12.13.14", 15, "a_local_prflx's protocol",
rtc::ADAPTER_TYPE_CELLULAR_2G, cricket::PRFLX_PORT_TYPE, 2);
RTCLocalIceCandidateStats expected_a_local_prflx(
"RTCIceCandidate_" + a_local_prflx->id(), 0);
expected_a_local_prflx.transport_id = "RTCTransport_a_0";
RTCLocalIceCandidateStats expected_a_local_prflx("I" + a_local_prflx->id(),
0);
expected_a_local_prflx.transport_id = "Ta0";
expected_a_local_prflx.network_type = "cellular";
expected_a_local_prflx.ip = "11.12.13.14";
expected_a_local_prflx.address = "11.12.13.14";
@ -1426,9 +1422,9 @@ TEST_F(RTCStatsCollectorTest, CollectRTCIceCandidateStats) {
std::unique_ptr<cricket::Candidate> a_remote_relay = CreateFakeCandidate(
"16.17.18.19", 20, "a_remote_relay's protocol", rtc::ADAPTER_TYPE_UNKNOWN,
cricket::RELAY_PORT_TYPE, 3);
RTCRemoteIceCandidateStats expected_a_remote_relay(
"RTCIceCandidate_" + a_remote_relay->id(), 0);
expected_a_remote_relay.transport_id = "RTCTransport_a_0";
RTCRemoteIceCandidateStats expected_a_remote_relay("I" + a_remote_relay->id(),
0);
expected_a_remote_relay.transport_id = "Ta0";
expected_a_remote_relay.ip = "16.17.18.19";
expected_a_remote_relay.address = "16.17.18.19";
expected_a_remote_relay.port = 20;
@ -1442,9 +1438,9 @@ TEST_F(RTCStatsCollectorTest, CollectRTCIceCandidateStats) {
a_local_relay->set_relay_protocol("tcp");
a_local_relay->set_url("turn:url1");
RTCLocalIceCandidateStats expected_a_local_relay(
"RTCIceCandidate_" + a_local_relay->id(), 0);
expected_a_local_relay.transport_id = "RTCTransport_a_0";
RTCLocalIceCandidateStats expected_a_local_relay("I" + a_local_relay->id(),
0);
expected_a_local_relay.transport_id = "Ta0";
expected_a_local_relay.network_type = "unknown";
expected_a_local_relay.ip = "16.17.18.19";
expected_a_local_relay.address = "16.17.18.19";
@ -1463,8 +1459,8 @@ TEST_F(RTCStatsCollectorTest, CollectRTCIceCandidateStats) {
a_local_relay_prflx->set_relay_protocol("udp");
RTCLocalIceCandidateStats expected_a_local_relay_prflx(
"RTCIceCandidate_" + a_local_relay_prflx->id(), 0);
expected_a_local_relay_prflx.transport_id = "RTCTransport_a_0";
"I" + a_local_relay_prflx->id(), 0);
expected_a_local_relay_prflx.transport_id = "Ta0";
expected_a_local_relay_prflx.network_type = "unknown";
expected_a_local_relay_prflx.ip = "11.12.13.20";
expected_a_local_relay_prflx.address = "11.12.13.20";
@ -1483,8 +1479,8 @@ TEST_F(RTCStatsCollectorTest, CollectRTCIceCandidateStats) {
rtc::ADAPTER_TYPE_VPN, cricket::LOCAL_PORT_TYPE, 0,
rtc::ADAPTER_TYPE_ETHERNET);
RTCLocalIceCandidateStats expected_a_local_host_not_paired(
"RTCIceCandidate_" + a_local_host_not_paired->id(), 0);
expected_a_local_host_not_paired.transport_id = "RTCTransport_a_0";
"I" + a_local_host_not_paired->id(), 0);
expected_a_local_host_not_paired.transport_id = "Ta0";
expected_a_local_host_not_paired.network_type = "vpn";
expected_a_local_host_not_paired.ip = "1.2.3.4";
expected_a_local_host_not_paired.address = "1.2.3.4";
@ -1501,9 +1497,8 @@ TEST_F(RTCStatsCollectorTest, CollectRTCIceCandidateStats) {
std::unique_ptr<cricket::Candidate> b_local =
CreateFakeCandidate("42.42.42.42", 42, "b_local's protocol",
rtc::ADAPTER_TYPE_WIFI, cricket::LOCAL_PORT_TYPE, 42);
RTCLocalIceCandidateStats expected_b_local("RTCIceCandidate_" + b_local->id(),
0);
expected_b_local.transport_id = "RTCTransport_b_0";
RTCLocalIceCandidateStats expected_b_local("I" + b_local->id(), 0);
expected_b_local.transport_id = "Tb0";
expected_b_local.network_type = "wifi";
expected_b_local.ip = "42.42.42.42";
expected_b_local.address = "42.42.42.42";
@ -1517,9 +1512,8 @@ TEST_F(RTCStatsCollectorTest, CollectRTCIceCandidateStats) {
std::unique_ptr<cricket::Candidate> b_remote = CreateFakeCandidate(
"42.42.42.42", 42, "b_remote's protocol", rtc::ADAPTER_TYPE_UNKNOWN,
cricket::LOCAL_PORT_TYPE, 42);
RTCRemoteIceCandidateStats expected_b_remote(
"RTCIceCandidate_" + b_remote->id(), 0);
expected_b_remote.transport_id = "RTCTransport_b_0";
RTCRemoteIceCandidateStats expected_b_remote("I" + b_remote->id(), 0);
expected_b_remote.transport_id = "Tb0";
expected_b_remote.ip = "42.42.42.42";
expected_b_remote.address = "42.42.42.42";
expected_b_remote.port = 42;
@ -1606,8 +1600,8 @@ TEST_F(RTCStatsCollectorTest, CollectRTCIceCandidateStats) {
ASSERT_TRUE(report->Get(expected_b_remote.id()));
EXPECT_EQ(expected_b_remote, report->Get(expected_b_remote.id())
->cast_to<RTCRemoteIceCandidateStats>());
EXPECT_TRUE(report->Get("RTCTransport_a_0"));
EXPECT_TRUE(report->Get("RTCTransport_b_0"));
EXPECT_TRUE(report->Get("Ta0"));
EXPECT_TRUE(report->Get("Tb0"));
}
TEST_F(RTCStatsCollectorTest, CollectRTCIceCandidatePairStats) {
@ -1652,16 +1646,13 @@ TEST_F(RTCStatsCollectorTest, CollectRTCIceCandidatePairStats) {
rtc::scoped_refptr<const RTCStatsReport> report = stats_->GetStatsReport();
RTCIceCandidatePairStats expected_pair("RTCIceCandidatePair_" +
local_candidate->id() + "_" +
remote_candidate->id(),
report->timestamp_us());
RTCIceCandidatePairStats expected_pair(
"CP" + local_candidate->id() + "_" + remote_candidate->id(),
report->timestamp_us());
expected_pair.transport_id =
"RTCTransport_transport_" +
rtc::ToString(cricket::ICE_CANDIDATE_COMPONENT_RTP);
expected_pair.local_candidate_id = "RTCIceCandidate_" + local_candidate->id();
expected_pair.remote_candidate_id =
"RTCIceCandidate_" + remote_candidate->id();
"Ttransport" + rtc::ToString(cricket::ICE_CANDIDATE_COMPONENT_RTP);
expected_pair.local_candidate_id = "I" + local_candidate->id();
expected_pair.remote_candidate_id = "I" + remote_candidate->id();
expected_pair.state = RTCStatsIceCandidatePairState::kInProgress;
expected_pair.priority = 5555;
expected_pair.nominated = false;
@ -1780,14 +1771,11 @@ TEST_F(RTCStatsCollectorTest, CollectRTCIceCandidatePairStats) {
TEST_F(RTCStatsCollectorTest, CollectRTCPeerConnectionStats) {
{
rtc::scoped_refptr<const RTCStatsReport> report = stats_->GetStatsReport();
RTCPeerConnectionStats expected("RTCPeerConnection",
report->timestamp_us());
RTCPeerConnectionStats expected("P", report->timestamp_us());
expected.data_channels_opened = 0;
expected.data_channels_closed = 0;
ASSERT_TRUE(report->Get("RTCPeerConnection"));
EXPECT_EQ(
expected,
report->Get("RTCPeerConnection")->cast_to<RTCPeerConnectionStats>());
ASSERT_TRUE(report->Get("P"));
EXPECT_EQ(expected, report->Get("P")->cast_to<RTCPeerConnectionStats>());
}
// TODO(bugs.webrtc.org/11547): Supply a separate network thread.
@ -1808,14 +1796,11 @@ TEST_F(RTCStatsCollectorTest, CollectRTCPeerConnectionStats) {
{
rtc::scoped_refptr<const RTCStatsReport> report =
stats_->GetFreshStatsReport();
RTCPeerConnectionStats expected("RTCPeerConnection",
report->timestamp_us());
RTCPeerConnectionStats expected("P", report->timestamp_us());
expected.data_channels_opened = 1;
expected.data_channels_closed = 0;
ASSERT_TRUE(report->Get("RTCPeerConnection"));
EXPECT_EQ(
expected,
report->Get("RTCPeerConnection")->cast_to<RTCPeerConnectionStats>());
ASSERT_TRUE(report->Get("P"));
EXPECT_EQ(expected, report->Get("P")->cast_to<RTCPeerConnectionStats>());
}
dummy_channel_b->SignalOpened(dummy_channel_b.get());
@ -1824,14 +1809,11 @@ TEST_F(RTCStatsCollectorTest, CollectRTCPeerConnectionStats) {
{
rtc::scoped_refptr<const RTCStatsReport> report =
stats_->GetFreshStatsReport();
RTCPeerConnectionStats expected("RTCPeerConnection",
report->timestamp_us());
RTCPeerConnectionStats expected("P", report->timestamp_us());
expected.data_channels_opened = 2;
expected.data_channels_closed = 1;
ASSERT_TRUE(report->Get("RTCPeerConnection"));
EXPECT_EQ(
expected,
report->Get("RTCPeerConnection")->cast_to<RTCPeerConnectionStats>());
ASSERT_TRUE(report->Get("P"));
EXPECT_EQ(expected, report->Get("P")->cast_to<RTCPeerConnectionStats>());
}
// Re-opening a data channel (or opening a new data channel that is re-using
@ -1841,14 +1823,11 @@ TEST_F(RTCStatsCollectorTest, CollectRTCPeerConnectionStats) {
{
rtc::scoped_refptr<const RTCStatsReport> report =
stats_->GetFreshStatsReport();
RTCPeerConnectionStats expected("RTCPeerConnection",
report->timestamp_us());
RTCPeerConnectionStats expected("P", report->timestamp_us());
expected.data_channels_opened = 3;
expected.data_channels_closed = 1;
ASSERT_TRUE(report->Get("RTCPeerConnection"));
EXPECT_EQ(
expected,
report->Get("RTCPeerConnection")->cast_to<RTCPeerConnectionStats>());
ASSERT_TRUE(report->Get("P"));
EXPECT_EQ(expected, report->Get("P")->cast_to<RTCPeerConnectionStats>());
}
dummy_channel_a->SignalClosed(dummy_channel_a.get());
@ -1857,14 +1836,11 @@ TEST_F(RTCStatsCollectorTest, CollectRTCPeerConnectionStats) {
{
rtc::scoped_refptr<const RTCStatsReport> report =
stats_->GetFreshStatsReport();
RTCPeerConnectionStats expected("RTCPeerConnection",
report->timestamp_us());
RTCPeerConnectionStats expected("P", report->timestamp_us());
expected.data_channels_opened = 3;
expected.data_channels_closed = 3;
ASSERT_TRUE(report->Get("RTCPeerConnection"));
EXPECT_EQ(
expected,
report->Get("RTCPeerConnection")->cast_to<RTCPeerConnectionStats>());
ASSERT_TRUE(report->Get("P"));
EXPECT_EQ(expected, report->Get("P")->cast_to<RTCPeerConnectionStats>());
}
}
@ -1910,7 +1886,7 @@ TEST_F(RTCStatsCollectorTest,
RTCMediaStreamTrackKind::kAudio);
expected_local_audio_track_ssrc1.track_identifier = local_audio_track->id();
expected_local_audio_track_ssrc1.media_source_id =
"RTCAudioSource_11"; // Attachment ID = SSRC + 10
"SA11"; // Attachment ID = SSRC + 10
expected_local_audio_track_ssrc1.remote_source = false;
expected_local_audio_track_ssrc1.ended = true;
expected_local_audio_track_ssrc1.detached = false;
@ -2055,7 +2031,7 @@ TEST_F(RTCStatsCollectorTest,
RTCMediaStreamTrackKind::kVideo);
expected_local_video_track_ssrc1.track_identifier = local_video_track->id();
expected_local_video_track_ssrc1.media_source_id =
"RTCVideoSource_11"; // Attachment ID = SSRC + 10
"SV11"; // Attachment ID = SSRC + 10
expected_local_video_track_ssrc1.remote_source = false;
expected_local_video_track_ssrc1.ended = false;
expected_local_video_track_ssrc1.detached = false;
@ -2207,16 +2183,15 @@ TEST_F(RTCStatsCollectorTest, CollectRTCInboundRTPStreamStats_Audio) {
auto stats_of_track_type = report->GetStatsOfType<RTCMediaStreamTrackStats>();
ASSERT_EQ(1U, stats_of_track_type.size());
RTCInboundRTPStreamStats expected_audio("RTCInboundRTPAudioStream_1",
report->timestamp_us());
RTCInboundRTPStreamStats expected_audio("IA1", report->timestamp_us());
expected_audio.ssrc = 1;
expected_audio.media_type = "audio";
expected_audio.kind = "audio";
expected_audio.track_identifier = "RemoteAudioTrackID";
expected_audio.mid = "AudioMid";
expected_audio.track_id = stats_of_track_type[0]->id();
expected_audio.transport_id = "RTCTransport_TransportName_1";
expected_audio.codec_id = "RTCCodec_RTCTransport_TransportName_1_Recv_42";
expected_audio.transport_id = "TTransportName1";
expected_audio.codec_id = "CITTransportName1_42";
expected_audio.packets_received = 2;
expected_audio.nack_count = 5;
expected_audio.fec_packets_discarded = 5566;
@ -2327,16 +2302,15 @@ TEST_F(RTCStatsCollectorTest, CollectRTCInboundRTPStreamStats_Video) {
rtc::scoped_refptr<const RTCStatsReport> report = stats_->GetStatsReport();
RTCInboundRTPStreamStats expected_video("RTCInboundRTPVideoStream_1",
report->timestamp_us());
RTCInboundRTPStreamStats expected_video("IV1", report->timestamp_us());
expected_video.ssrc = 1;
expected_video.media_type = "video";
expected_video.kind = "video";
expected_video.track_identifier = "RemoteVideoTrackID";
expected_video.mid = "VideoMid";
expected_video.track_id = IdForType<RTCMediaStreamTrackStats>(report.get());
expected_video.transport_id = "RTCTransport_TransportName_1";
expected_video.codec_id = "RTCCodec_RTCTransport_TransportName_1_Recv_42";
expected_video.transport_id = "TTransportName1";
expected_video.codec_id = "CITTransportName1_42";
expected_video.fir_count = 5;
expected_video.pli_count = 6;
expected_video.nack_count = 7;
@ -2426,17 +2400,16 @@ TEST_F(RTCStatsCollectorTest, CollectRTCOutboundRTPStreamStats_Audio) {
rtc::scoped_refptr<const RTCStatsReport> report = stats_->GetStatsReport();
RTCOutboundRTPStreamStats expected_audio("RTCOutboundRTPAudioStream_1",
report->timestamp_us());
expected_audio.media_source_id = "RTCAudioSource_50";
RTCOutboundRTPStreamStats expected_audio("OA1", report->timestamp_us());
expected_audio.media_source_id = "SA50";
// `expected_audio.remote_id` should be undefined.
expected_audio.mid = "AudioMid";
expected_audio.ssrc = 1;
expected_audio.media_type = "audio";
expected_audio.kind = "audio";
expected_audio.track_id = IdForType<RTCMediaStreamTrackStats>(report.get());
expected_audio.transport_id = "RTCTransport_TransportName_1";
expected_audio.codec_id = "RTCCodec_RTCTransport_TransportName_1_Send_42";
expected_audio.transport_id = "TTransportName1";
expected_audio.codec_id = "COTTransportName1_42";
expected_audio.packets_sent = 2;
expected_audio.retransmitted_packets_sent = 20;
expected_audio.bytes_sent = 3;
@ -2518,15 +2491,15 @@ TEST_F(RTCStatsCollectorTest, CollectRTCOutboundRTPStreamStats_Video) {
RTCOutboundRTPStreamStats expected_video(stats_of_my_type[0]->id(),
report->timestamp_us());
expected_video.media_source_id = "RTCVideoSource_50";
expected_video.media_source_id = "SV50";
// `expected_video.remote_id` should be undefined.
expected_video.mid = "VideoMid";
expected_video.ssrc = 1;
expected_video.media_type = "video";
expected_video.kind = "video";
expected_video.track_id = stats_of_track_type[0]->id();
expected_video.transport_id = "RTCTransport_TransportName_1";
expected_video.codec_id = "RTCCodec_RTCTransport_TransportName_1_Send_42";
expected_video.transport_id = "TTransportName1";
expected_video.codec_id = "COTTransportName1_42";
expected_video.fir_count = 2;
expected_video.pli_count = 3;
expected_video.nack_count = 4;
@ -2629,8 +2602,7 @@ TEST_F(RTCStatsCollectorTest, CollectRTCTransportStats) {
rtc::scoped_refptr<const RTCStatsReport> report = stats_->GetStatsReport();
RTCTransportStats expected_rtp_transport(
"RTCTransport_transport_" +
rtc::ToString(cricket::ICE_CANDIDATE_COMPONENT_RTP),
"Ttransport" + rtc::ToString(cricket::ICE_CANDIDATE_COMPONENT_RTP),
report->timestamp_us());
expected_rtp_transport.bytes_sent = 42;
expected_rtp_transport.packets_sent = 1;
@ -2678,8 +2650,7 @@ TEST_F(RTCStatsCollectorTest, CollectRTCTransportStats) {
report = stats_->GetFreshStatsReport();
RTCTransportStats expected_rtcp_transport(
"RTCTransport_transport_" +
rtc::ToString(cricket::ICE_CANDIDATE_COMPONENT_RTCP),
"Ttransport" + rtc::ToString(cricket::ICE_CANDIDATE_COMPONENT_RTCP),
report->timestamp_us());
expected_rtcp_transport.bytes_sent = 1337;
expected_rtcp_transport.packets_sent = 1;
@ -2711,8 +2682,7 @@ TEST_F(RTCStatsCollectorTest, CollectRTCTransportStats) {
report = stats_->GetFreshStatsReport();
expected_rtcp_transport.selected_candidate_pair_id =
"RTCIceCandidatePair_" + rtcp_local_candidate->id() + "_" +
rtcp_remote_candidate->id();
"CP" + rtcp_local_candidate->id() + "_" + rtcp_remote_candidate->id();
ASSERT_TRUE(report->Get(expected_rtp_transport.id()));
EXPECT_EQ(
@ -2737,9 +2707,9 @@ TEST_F(RTCStatsCollectorTest, CollectRTCTransportStats) {
report = stats_->GetFreshStatsReport();
expected_rtp_transport.local_certificate_id =
"RTCCertificate_" + local_certinfo->fingerprints[0];
"CF" + local_certinfo->fingerprints[0];
expected_rtp_transport.remote_certificate_id =
"RTCCertificate_" + remote_certinfo->fingerprints[0];
"CF" + remote_certinfo->fingerprints[0];
expected_rtcp_transport.local_certificate_id =
*expected_rtp_transport.local_certificate_id;
@ -2805,8 +2775,7 @@ TEST_F(RTCStatsCollectorTest, CollectRTCTransportStatsWithCrypto) {
rtc::scoped_refptr<const RTCStatsReport> report = stats_->GetStatsReport();
RTCTransportStats expected_rtp_transport(
"RTCTransport_transport_" +
rtc::ToString(cricket::ICE_CANDIDATE_COMPONENT_RTP),
"Ttransport" + rtc::ToString(cricket::ICE_CANDIDATE_COMPONENT_RTP),
report->timestamp_us());
expected_rtp_transport.dtls_state = RTCDtlsTransportState::kConnected;
expected_rtp_transport.selected_candidate_pair_changes = 1;
@ -2861,16 +2830,15 @@ TEST_F(RTCStatsCollectorTest, CollectNoStreamRTCOutboundRTPStreamStats_Audio) {
rtc::scoped_refptr<const RTCStatsReport> report = stats_->GetStatsReport();
RTCOutboundRTPStreamStats expected_audio("RTCOutboundRTPAudioStream_1",
report->timestamp_us());
expected_audio.media_source_id = "RTCAudioSource_50";
RTCOutboundRTPStreamStats expected_audio("OA1", report->timestamp_us());
expected_audio.media_source_id = "SA50";
expected_audio.mid = "AudioMid";
expected_audio.ssrc = 1;
expected_audio.media_type = "audio";
expected_audio.kind = "audio";
expected_audio.track_id = IdForType<RTCMediaStreamTrackStats>(report.get());
expected_audio.transport_id = "RTCTransport_TransportName_1";
expected_audio.codec_id = "RTCCodec_RTCTransport_TransportName_1_Send_42";
expected_audio.transport_id = "TTransportName1";
expected_audio.codec_id = "COTTransportName1_42";
expected_audio.packets_sent = 2;
expected_audio.retransmitted_packets_sent = 20;
expected_audio.bytes_sent = 3;
@ -2909,8 +2877,7 @@ TEST_F(RTCStatsCollectorTest, RTCAudioSourceStatsCollectedForSenderWithTrack) {
rtc::scoped_refptr<const RTCStatsReport> report = stats_->GetStatsReport();
RTCAudioSourceStats expected_audio("RTCAudioSource_42",
report->timestamp_us());
RTCAudioSourceStats expected_audio("SA42", report->timestamp_us());
expected_audio.track_identifier = "LocalAudioTrackID";
expected_audio.kind = "audio";
expected_audio.audio_level = 1.0; // [0,1]
@ -2955,8 +2922,7 @@ TEST_F(RTCStatsCollectorTest, RTCVideoSourceStatsCollectedForSenderWithTrack) {
rtc::scoped_refptr<const RTCStatsReport> report = stats_->GetStatsReport();
RTCVideoSourceStats expected_video("RTCVideoSource_42",
report->timestamp_us());
RTCVideoSourceStats expected_video("SV42", report->timestamp_us());
expected_video.track_identifier = "LocalVideoTrackID";
expected_video.kind = "video";
expected_video.width = kVideoSourceWidth;
@ -2999,9 +2965,8 @@ TEST_F(RTCStatsCollectorTest,
pc_->AddSender(sender);
rtc::scoped_refptr<const RTCStatsReport> report = stats_->GetStatsReport();
ASSERT_TRUE(report->Get("RTCVideoSource_42"));
auto video_stats =
report->Get("RTCVideoSource_42")->cast_to<RTCVideoSourceStats>();
ASSERT_TRUE(report->Get("SV42"));
auto video_stats = report->Get("SV42")->cast_to<RTCVideoSourceStats>();
EXPECT_FALSE(video_stats.frames_per_second.is_defined());
EXPECT_FALSE(video_stats.frames.is_defined());
}
@ -3030,9 +2995,8 @@ TEST_F(RTCStatsCollectorTest,
pc_->AddSender(sender);
rtc::scoped_refptr<const RTCStatsReport> report = stats_->GetStatsReport();
ASSERT_TRUE(report->Get("RTCVideoSource_42"));
auto video_stats =
report->Get("RTCVideoSource_42")->cast_to<RTCVideoSourceStats>();
ASSERT_TRUE(report->Get("SV42"));
auto video_stats = report->Get("SV42")->cast_to<RTCVideoSourceStats>();
EXPECT_FALSE(video_stats.width.is_defined());
EXPECT_FALSE(video_stats.height.is_defined());
}
@ -3054,7 +3018,7 @@ TEST_F(RTCStatsCollectorTest,
pc_->AddSender(sender);
rtc::scoped_refptr<const RTCStatsReport> report = stats_->GetStatsReport();
EXPECT_FALSE(report->Get("RTCAudioSource_42"));
EXPECT_FALSE(report->Get("SA42"));
}
// Parameterized tests on cricket::MediaType (audio or video).
@ -3067,12 +3031,25 @@ class RTCStatsCollectorTestWithParamKind
media_type_ == cricket::MEDIA_TYPE_VIDEO);
}
std::string MediaTypeUpperCase() const {
std::string MediaTypeCharStr() const {
switch (media_type_) {
case cricket::MEDIA_TYPE_AUDIO:
return "Audio";
return "A";
case cricket::MEDIA_TYPE_VIDEO:
return "Video";
return "V";
case cricket::MEDIA_TYPE_DATA:
case cricket::MEDIA_TYPE_UNSUPPORTED:
RTC_DCHECK_NOTREACHED();
return "?";
}
}
std::string MediaTypeKind() const {
switch (media_type_) {
case cricket::MEDIA_TYPE_AUDIO:
return "audio";
case cricket::MEDIA_TYPE_VIDEO:
return "video";
case cricket::MEDIA_TYPE_DATA:
case cricket::MEDIA_TYPE_UNSUPPORTED:
RTC_DCHECK_NOTREACHED();
@ -3080,12 +3057,6 @@ class RTCStatsCollectorTestWithParamKind
}
}
std::string MediaTypeLowerCase() const {
std::string str = MediaTypeUpperCase();
std::transform(str.begin(), str.end(), str.begin(), ::tolower);
return str;
}
// Adds a sender and channel of the appropriate kind, creating a sender info
// with the report block's `source_ssrc` and report block data.
void AddSenderInfoAndMediaChannel(
@ -3176,20 +3147,18 @@ TEST_P(RTCStatsCollectorTestWithParamKind,
rtc::scoped_refptr<const RTCStatsReport> report = stats_->GetStatsReport();
for (auto ssrc : ssrcs) {
std::string stream_id = "Stream_" + std::to_string(ssrc);
std::string stream_id = "" + std::to_string(ssrc);
RTCRemoteInboundRtpStreamStats expected_remote_inbound_rtp(
"RTCRemoteInboundRtp" + MediaTypeUpperCase() + stream_id,
kReportBlockTimestampUtcUs);
"RI" + MediaTypeCharStr() + stream_id, kReportBlockTimestampUtcUs);
expected_remote_inbound_rtp.ssrc = ssrc;
expected_remote_inbound_rtp.fraction_lost =
static_cast<double>(kFractionLost) / (1 << 8);
expected_remote_inbound_rtp.kind = MediaTypeLowerCase();
expected_remote_inbound_rtp.kind = MediaTypeKind();
expected_remote_inbound_rtp.transport_id =
"RTCTransport_TransportName_1"; // 1 for RTP (we have no RTCP
// transport)
"TTransportName1"; // 1 for RTP (we have no RTCP
// transport)
expected_remote_inbound_rtp.packets_lost = 7;
expected_remote_inbound_rtp.local_id =
"RTCOutboundRTP" + MediaTypeUpperCase() + stream_id;
expected_remote_inbound_rtp.local_id = "O" + MediaTypeCharStr() + stream_id;
expected_remote_inbound_rtp.round_trip_time = kRoundTripTimeSample2Seconds;
expected_remote_inbound_rtp.total_round_trip_time =
kRoundTripTimeSample1Seconds + kRoundTripTimeSample2Seconds;
@ -3231,8 +3200,7 @@ TEST_P(RTCStatsCollectorTestWithParamKind,
rtc::scoped_refptr<const RTCStatsReport> report = stats_->GetStatsReport();
std::string remote_inbound_rtp_id =
"RTCRemoteInboundRtp" + MediaTypeUpperCase() + "Stream_12";
std::string remote_inbound_rtp_id = "RI" + MediaTypeCharStr() + "12";
ASSERT_TRUE(report->Get(remote_inbound_rtp_id));
auto& remote_inbound_rtp = report->Get(remote_inbound_rtp_id)
->cast_to<RTCRemoteInboundRtpStreamStats>();
@ -3265,8 +3233,7 @@ TEST_P(RTCStatsCollectorTestWithParamKind,
rtc::scoped_refptr<const RTCStatsReport> report = stats_->GetStatsReport();
std::string remote_inbound_rtp_id =
"RTCRemoteInboundRtp" + MediaTypeUpperCase() + "Stream_12";
std::string remote_inbound_rtp_id = "RI" + MediaTypeCharStr() + "12";
ASSERT_TRUE(report->Get(remote_inbound_rtp_id));
auto& remote_inbound_rtp = report->Get(remote_inbound_rtp_id)
->cast_to<RTCRemoteInboundRtpStreamStats>();
@ -3306,14 +3273,13 @@ TEST_P(RTCStatsCollectorTestWithParamKind,
rtc::scoped_refptr<const RTCStatsReport> report = stats_->GetStatsReport();
std::string remote_inbound_rtp_id =
"RTCRemoteInboundRtp" + MediaTypeUpperCase() + "Stream_12";
std::string remote_inbound_rtp_id = "RI" + MediaTypeCharStr() + "12";
ASSERT_TRUE(report->Get(remote_inbound_rtp_id));
auto& remote_inbound_rtp = report->Get(remote_inbound_rtp_id)
->cast_to<RTCRemoteInboundRtpStreamStats>();
EXPECT_TRUE(remote_inbound_rtp.transport_id.is_defined());
EXPECT_EQ("RTCTransport_TransportName_2", // 2 for RTCP
EXPECT_EQ("TTransportName2", // 2 for RTCP
*remote_inbound_rtp.transport_id);
EXPECT_TRUE(report->Get(*remote_inbound_rtp.transport_id));
}
@ -3379,7 +3345,7 @@ TEST_F(RTCStatsCollectorTest,
pc_->AddSender(sender);
rtc::scoped_refptr<const RTCStatsReport> report = stats_->GetStatsReport();
EXPECT_FALSE(report->Get("RTCVideoSource_42"));
EXPECT_FALSE(report->Get("SV42"));
}
// Test collecting echo return loss stats from the audio processor attached to
@ -3412,7 +3378,7 @@ TEST_F(RTCStatsCollectorTest, CollectEchoReturnLossFromTrackAudioProcessor) {
RTCMediaStreamTrackKind::kAudio);
expected_local_audio_track_ssrc1.track_identifier = local_audio_track->id();
expected_local_audio_track_ssrc1.media_source_id =
"RTCAudioSource_11"; // Attachment ID = SSRC + 10
"SA11"; // Attachment ID = SSRC + 10
expected_local_audio_track_ssrc1.remote_source = false;
expected_local_audio_track_ssrc1.ended = true;
expected_local_audio_track_ssrc1.detached = false;
@ -3425,8 +3391,7 @@ TEST_F(RTCStatsCollectorTest, CollectEchoReturnLossFromTrackAudioProcessor) {
report->Get(expected_local_audio_track_ssrc1.id())
->cast_to<RTCMediaStreamTrackStats>());
RTCAudioSourceStats expected_audio("RTCAudioSource_11",
report->timestamp_us());
RTCAudioSourceStats expected_audio("SA11", report->timestamp_us());
expected_audio.track_identifier = "LocalAudioTrackID";
expected_audio.kind = "audio";
expected_audio.audio_level = 0;