Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(560)

Side by Side Diff: webrtc/api/rtcstatscollector_unittest.cc

Issue 2509803004: RTCCodecStats added (Closed)
Patch Set: Addressed comments Created 4 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « webrtc/api/rtcstatscollector.cc ('k') | webrtc/api/stats/rtcstats_objects.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * Copyright 2016 The WebRTC project authors. All Rights Reserved. 2 * Copyright 2016 The WebRTC project authors. All Rights Reserved.
3 * 3 *
4 * Use of this source code is governed by a BSD-style license 4 * Use of this source code is governed by a BSD-style license
5 * that can be found in the LICENSE file in the root of the source 5 * that can be found in the LICENSE file in the root of the source
6 * tree. An additional intellectual property rights grant can be found 6 * tree. An additional intellectual property rights grant can be found
7 * in the file PATENTS. All contributing project authors may 7 * in the file PATENTS. All contributing project authors may
8 * be found in the AUTHORS file in the root of the source tree. 8 * be found in the AUTHORS file in the root of the source tree.
9 */ 9 */
10 10
11 #include "webrtc/api/rtcstatscollector.h" 11 #include "webrtc/api/rtcstatscollector.h"
12 12
13 #include <memory> 13 #include <memory>
14 #include <ostream> 14 #include <ostream>
15 #include <string> 15 #include <string>
16 #include <vector> 16 #include <vector>
17 17
18 #include "webrtc/api/jsepsessiondescription.h"
18 #include "webrtc/api/mediastream.h" 19 #include "webrtc/api/mediastream.h"
19 #include "webrtc/api/mediastreamtrack.h" 20 #include "webrtc/api/mediastreamtrack.h"
20 #include "webrtc/api/jsepsessiondescription.h" 21 #include "webrtc/api/rtpparameters.h"
21 #include "webrtc/api/stats/rtcstats_objects.h" 22 #include "webrtc/api/stats/rtcstats_objects.h"
22 #include "webrtc/api/stats/rtcstatsreport.h" 23 #include "webrtc/api/stats/rtcstatsreport.h"
23 #include "webrtc/api/test/mock_datachannel.h" 24 #include "webrtc/api/test/mock_datachannel.h"
24 #include "webrtc/api/test/mock_peerconnection.h" 25 #include "webrtc/api/test/mock_peerconnection.h"
25 #include "webrtc/api/test/mock_webrtcsession.h" 26 #include "webrtc/api/test/mock_webrtcsession.h"
26 #include "webrtc/base/checks.h" 27 #include "webrtc/base/checks.h"
27 #include "webrtc/base/fakeclock.h" 28 #include "webrtc/base/fakeclock.h"
28 #include "webrtc/base/fakesslidentity.h" 29 #include "webrtc/base/fakesslidentity.h"
29 #include "webrtc/base/gunit.h" 30 #include "webrtc/base/gunit.h"
30 #include "webrtc/base/logging.h" 31 #include "webrtc/base/logging.h"
(...skipping 14 matching lines...) Expand all
45 using testing::ReturnRef; 46 using testing::ReturnRef;
46 using testing::SetArgPointee; 47 using testing::SetArgPointee;
47 48
48 namespace webrtc { 49 namespace webrtc {
49 50
50 // These are used by gtest code, such as if |EXPECT_EQ| fails. 51 // These are used by gtest code, such as if |EXPECT_EQ| fails.
51 void PrintTo(const RTCCertificateStats& stats, ::std::ostream* os) { 52 void PrintTo(const RTCCertificateStats& stats, ::std::ostream* os) {
52 *os << stats.ToString(); 53 *os << stats.ToString();
53 } 54 }
54 55
56 void PrintTo(const RTCCodecStats& stats, ::std::ostream* os) {
57 *os << stats.ToString();
58 }
59
55 void PrintTo(const RTCDataChannelStats& stats, ::std::ostream* os) { 60 void PrintTo(const RTCDataChannelStats& stats, ::std::ostream* os) {
56 *os << stats.ToString(); 61 *os << stats.ToString();
57 } 62 }
58 63
59 void PrintTo(const RTCIceCandidatePairStats& stats, ::std::ostream* os) { 64 void PrintTo(const RTCIceCandidatePairStats& stats, ::std::ostream* os) {
60 *os << stats.ToString(); 65 *os << stats.ToString();
61 } 66 }
62 67
63 void PrintTo(const RTCLocalIceCandidateStats& stats, ::std::ostream* os) { 68 void PrintTo(const RTCLocalIceCandidateStats& stats, ::std::ostream* os) {
64 *os << stats.ToString(); 69 *os << stats.ToString();
(...skipping 734 matching lines...) Expand 10 before | Expand all | Expand 10 after
799 if (transport_name == "transport") 804 if (transport_name == "transport")
800 return remote_certinfo->certificate->ssl_certificate().GetReference(); 805 return remote_certinfo->certificate->ssl_certificate().GetReference();
801 return static_cast<rtc::SSLCertificate*>(nullptr); 806 return static_cast<rtc::SSLCertificate*>(nullptr);
802 })); 807 }));
803 808
804 rtc::scoped_refptr<const RTCStatsReport> report = GetStatsReport(); 809 rtc::scoped_refptr<const RTCStatsReport> report = GetStatsReport();
805 ExpectReportContainsCertificateInfo(report, *local_certinfo.get()); 810 ExpectReportContainsCertificateInfo(report, *local_certinfo.get());
806 ExpectReportContainsCertificateInfo(report, *remote_certinfo.get()); 811 ExpectReportContainsCertificateInfo(report, *remote_certinfo.get());
807 } 812 }
808 813
814 TEST_F(RTCStatsCollectorTest, CollectRTCCodecStats) {
815 MockVoiceMediaChannel* voice_media_channel = new MockVoiceMediaChannel();
816 cricket::VoiceChannel voice_channel(
817 test_->worker_thread(), test_->network_thread(), test_->media_engine(),
818 voice_media_channel, nullptr, "VoiceContentName", false);
819
820 MockVideoMediaChannel* video_media_channel = new MockVideoMediaChannel();
821 cricket::VideoChannel video_channel(
822 test_->worker_thread(), test_->network_thread(), video_media_channel,
823 nullptr, "VideoContentName", false);
824
825 // Audio
826 cricket::VoiceMediaInfo voice_media_info;
827
828 RtpCodecParameters inbound_audio_codec;
829 inbound_audio_codec.payload_type = 1;
830 inbound_audio_codec.mime_type = "opus";
831 inbound_audio_codec.clock_rate = 1337;
832 voice_media_info.receive_codecs.insert(
833 std::make_pair(inbound_audio_codec.payload_type, inbound_audio_codec));
834
835 RtpCodecParameters outbound_audio_codec;
836 outbound_audio_codec.payload_type = 2;
837 outbound_audio_codec.mime_type = "isac";
838 outbound_audio_codec.clock_rate = 1338;
839 voice_media_info.send_codecs.insert(
840 std::make_pair(outbound_audio_codec.payload_type, outbound_audio_codec));
841
842 EXPECT_CALL(*voice_media_channel, GetStats(_))
843 .WillOnce(DoAll(SetArgPointee<0>(voice_media_info), Return(true)));
844
845 // Video
846 cricket::VideoMediaInfo video_media_info;
847
848 RtpCodecParameters inbound_video_codec;
849 inbound_video_codec.payload_type = 3;
850 inbound_video_codec.mime_type = "H264";
851 inbound_video_codec.clock_rate = 1339;
852 video_media_info.receive_codecs.insert(
853 std::make_pair(inbound_video_codec.payload_type, inbound_video_codec));
854
855 RtpCodecParameters outbound_video_codec;
856 outbound_video_codec.payload_type = 4;
857 outbound_video_codec.mime_type = "VP8";
858 outbound_video_codec.clock_rate = 1340;
859 video_media_info.send_codecs.insert(
860 std::make_pair(outbound_video_codec.payload_type, outbound_video_codec));
861
862 EXPECT_CALL(*video_media_channel, GetStats(_))
863 .WillOnce(DoAll(SetArgPointee<0>(video_media_info), Return(true)));
864
865 SessionStats session_stats;
866 session_stats.proxy_to_transport["VoiceContentName"] = "TransportName";
867 session_stats.proxy_to_transport["VideoContentName"] = "TransportName";
868 session_stats.transport_stats["TransportName"].transport_name =
869 "TransportName";
870
871 EXPECT_CALL(test_->session(), GetTransportStats(_))
872 .WillRepeatedly(DoAll(SetArgPointee<0>(session_stats), Return(true)));
873 EXPECT_CALL(test_->session(), voice_channel())
874 .WillRepeatedly(Return(&voice_channel));
875 EXPECT_CALL(test_->session(), video_channel())
876 .WillRepeatedly(Return(&video_channel));
877
878 rtc::scoped_refptr<const RTCStatsReport> report = GetStatsReport();
879
880 RTCCodecStats expected_inbound_audio_codec(
881 "RTCCodec_InboundAudio_1", report->timestamp_us());
882 expected_inbound_audio_codec.payload_type = 1;
883 expected_inbound_audio_codec.codec = "audio/opus";
884 expected_inbound_audio_codec.clock_rate = 1337;
885
886 RTCCodecStats expected_outbound_audio_codec(
887 "RTCCodec_OutboundAudio_2", report->timestamp_us());
888 expected_outbound_audio_codec.payload_type = 2;
889 expected_outbound_audio_codec.codec = "audio/isac";
890 expected_outbound_audio_codec.clock_rate = 1338;
891
892 RTCCodecStats expected_inbound_video_codec(
893 "RTCCodec_InboundVideo_3", report->timestamp_us());
894 expected_inbound_video_codec.payload_type = 3;
895 expected_inbound_video_codec.codec = "video/H264";
896 expected_inbound_video_codec.clock_rate = 1339;
897
898 RTCCodecStats expected_outbound_video_codec(
899 "RTCCodec_OutboundVideo_4", report->timestamp_us());
900 expected_outbound_video_codec.payload_type = 4;
901 expected_outbound_video_codec.codec = "video/VP8";
902 expected_outbound_video_codec.clock_rate = 1340;
903
904 ASSERT(report->Get(expected_inbound_audio_codec.id()));
905 EXPECT_EQ(expected_inbound_audio_codec,
906 report->Get(expected_inbound_audio_codec.id())->cast_to<
907 RTCCodecStats>());
908
909 ASSERT(report->Get(expected_outbound_audio_codec.id()));
910 EXPECT_EQ(expected_outbound_audio_codec,
911 report->Get(expected_outbound_audio_codec.id())->cast_to<
912 RTCCodecStats>());
913
914 ASSERT(report->Get(expected_inbound_video_codec.id()));
915 EXPECT_EQ(expected_inbound_video_codec,
916 report->Get(expected_inbound_video_codec.id())->cast_to<
917 RTCCodecStats>());
918
919 ASSERT(report->Get(expected_outbound_video_codec.id()));
920 EXPECT_EQ(expected_outbound_video_codec,
921 report->Get(expected_outbound_video_codec.id())->cast_to<
922 RTCCodecStats>());
923 }
924
809 TEST_F(RTCStatsCollectorTest, CollectRTCCertificateStatsMultiple) { 925 TEST_F(RTCStatsCollectorTest, CollectRTCCertificateStatsMultiple) {
810 std::unique_ptr<CertificateInfo> audio_local_certinfo = 926 std::unique_ptr<CertificateInfo> audio_local_certinfo =
811 CreateFakeCertificateAndInfoFromDers( 927 CreateFakeCertificateAndInfoFromDers(
812 std::vector<std::string>({ "(local) audio" })); 928 std::vector<std::string>({ "(local) audio" }));
813 audio_local_certinfo = CreateFakeCertificateAndInfoFromDers( 929 audio_local_certinfo = CreateFakeCertificateAndInfoFromDers(
814 audio_local_certinfo->ders); 930 audio_local_certinfo->ders);
815 std::unique_ptr<CertificateInfo> audio_remote_certinfo = 931 std::unique_ptr<CertificateInfo> audio_remote_certinfo =
816 CreateFakeCertificateAndInfoFromDers( 932 CreateFakeCertificateAndInfoFromDers(
817 std::vector<std::string>({ "(remote) audio" })); 933 std::vector<std::string>({ "(remote) audio" }));
818 audio_remote_certinfo = CreateFakeCertificateAndInfoFromDers( 934 audio_remote_certinfo = CreateFakeCertificateAndInfoFromDers(
(...skipping 494 matching lines...) Expand 10 before | Expand all | Expand 10 after
1313 RTCMediaStreamTrackStats>()); 1429 RTCMediaStreamTrackStats>());
1314 } 1430 }
1315 1431
1316 TEST_F(RTCStatsCollectorTest, CollectRTCInboundRTPStreamStats_Audio) { 1432 TEST_F(RTCStatsCollectorTest, CollectRTCInboundRTPStreamStats_Audio) {
1317 MockVoiceMediaChannel* voice_media_channel = new MockVoiceMediaChannel(); 1433 MockVoiceMediaChannel* voice_media_channel = new MockVoiceMediaChannel();
1318 cricket::VoiceChannel voice_channel( 1434 cricket::VoiceChannel voice_channel(
1319 test_->worker_thread(), test_->network_thread(), test_->media_engine(), 1435 test_->worker_thread(), test_->network_thread(), test_->media_engine(),
1320 voice_media_channel, nullptr, "VoiceContentName", false); 1436 voice_media_channel, nullptr, "VoiceContentName", false);
1321 1437
1322 cricket::VoiceMediaInfo voice_media_info; 1438 cricket::VoiceMediaInfo voice_media_info;
1439
1323 voice_media_info.receivers.push_back(cricket::VoiceReceiverInfo()); 1440 voice_media_info.receivers.push_back(cricket::VoiceReceiverInfo());
1324 voice_media_info.receivers[0].local_stats.push_back( 1441 voice_media_info.receivers[0].local_stats.push_back(
1325 cricket::SsrcReceiverInfo()); 1442 cricket::SsrcReceiverInfo());
1326 voice_media_info.receivers[0].local_stats[0].ssrc = 1; 1443 voice_media_info.receivers[0].local_stats[0].ssrc = 1;
1327 voice_media_info.receivers[0].packets_rcvd = 2; 1444 voice_media_info.receivers[0].packets_rcvd = 2;
1328 voice_media_info.receivers[0].bytes_rcvd = 3; 1445 voice_media_info.receivers[0].bytes_rcvd = 3;
1446 voice_media_info.receivers[0].codec_payload_type = rtc::Optional<int>(42);
1329 voice_media_info.receivers[0].jitter_ms = 4500; 1447 voice_media_info.receivers[0].jitter_ms = 4500;
1330 voice_media_info.receivers[0].fraction_lost = 5.5f; 1448 voice_media_info.receivers[0].fraction_lost = 5.5f;
1449
1450 RtpCodecParameters codec_parameters;
1451 codec_parameters.payload_type = 42;
1452 codec_parameters.mime_type = "dummy";
1453 codec_parameters.clock_rate = 0;
1454 voice_media_info.receive_codecs.insert(
1455 std::make_pair(codec_parameters.payload_type, codec_parameters));
1456
1331 EXPECT_CALL(*voice_media_channel, GetStats(_)) 1457 EXPECT_CALL(*voice_media_channel, GetStats(_))
1332 .WillOnce(DoAll(SetArgPointee<0>(voice_media_info), Return(true))); 1458 .WillOnce(DoAll(SetArgPointee<0>(voice_media_info), Return(true)));
1333 1459
1334 SessionStats session_stats; 1460 SessionStats session_stats;
1335 session_stats.proxy_to_transport["VoiceContentName"] = "TransportName"; 1461 session_stats.proxy_to_transport["VoiceContentName"] = "TransportName";
1336 session_stats.transport_stats["TransportName"].transport_name = 1462 session_stats.transport_stats["TransportName"].transport_name =
1337 "TransportName"; 1463 "TransportName";
1338 1464
1339 // Make sure the associated |RTCTransportStats| is created. 1465 // Make sure the associated |RTCTransportStats| is created.
1340 cricket::TransportChannelStats channel_stats; 1466 cricket::TransportChannelStats channel_stats;
1341 channel_stats.component = cricket::ICE_CANDIDATE_COMPONENT_RTP; 1467 channel_stats.component = cricket::ICE_CANDIDATE_COMPONENT_RTP;
1342 session_stats.transport_stats["TransportName"].channel_stats.push_back( 1468 session_stats.transport_stats["TransportName"].channel_stats.push_back(
1343 channel_stats); 1469 channel_stats);
1344 1470
1345 EXPECT_CALL(test_->session(), GetTransportStats(_)) 1471 EXPECT_CALL(test_->session(), GetTransportStats(_))
1346 .WillRepeatedly(DoAll(SetArgPointee<0>(session_stats), Return(true))); 1472 .WillRepeatedly(DoAll(SetArgPointee<0>(session_stats), Return(true)));
1347 EXPECT_CALL(test_->session(), voice_channel()) 1473 EXPECT_CALL(test_->session(), voice_channel())
1348 .WillRepeatedly(Return(&voice_channel)); 1474 .WillRepeatedly(Return(&voice_channel));
1349 1475
1350 rtc::scoped_refptr<const RTCStatsReport> report = GetStatsReport(); 1476 rtc::scoped_refptr<const RTCStatsReport> report = GetStatsReport();
1351 1477
1352 RTCInboundRTPStreamStats expected_audio( 1478 RTCInboundRTPStreamStats expected_audio(
1353 "RTCInboundRTPAudioStream_1", report->timestamp_us()); 1479 "RTCInboundRTPAudioStream_1", report->timestamp_us());
1354 expected_audio.ssrc = "1"; 1480 expected_audio.ssrc = "1";
1355 expected_audio.is_remote = false; 1481 expected_audio.is_remote = false;
1356 expected_audio.media_type = "audio"; 1482 expected_audio.media_type = "audio";
1357 expected_audio.transport_id = "RTCTransport_TransportName_" + 1483 expected_audio.transport_id = "RTCTransport_TransportName_" +
1358 rtc::ToString<>(cricket::ICE_CANDIDATE_COMPONENT_RTP); 1484 rtc::ToString<>(cricket::ICE_CANDIDATE_COMPONENT_RTP);
1485 expected_audio.codec_id = "RTCCodec_InboundAudio_42";
1359 expected_audio.packets_received = 2; 1486 expected_audio.packets_received = 2;
1360 expected_audio.bytes_received = 3; 1487 expected_audio.bytes_received = 3;
1361 expected_audio.jitter = 4.5; 1488 expected_audio.jitter = 4.5;
1362 expected_audio.fraction_lost = 5.5; 1489 expected_audio.fraction_lost = 5.5;
1363 1490
1364 ASSERT(report->Get(expected_audio.id())); 1491 ASSERT(report->Get(expected_audio.id()));
1365 const RTCInboundRTPStreamStats& audio = report->Get( 1492 const RTCInboundRTPStreamStats& audio = report->Get(
1366 expected_audio.id())->cast_to<RTCInboundRTPStreamStats>(); 1493 expected_audio.id())->cast_to<RTCInboundRTPStreamStats>();
1367 EXPECT_EQ(audio, expected_audio); 1494 EXPECT_EQ(audio, expected_audio);
1368 1495
1369 EXPECT_TRUE(report->Get(*expected_audio.transport_id)); 1496 EXPECT_TRUE(report->Get(*expected_audio.transport_id));
1497 EXPECT_TRUE(report->Get(*expected_audio.codec_id));
1370 } 1498 }
1371 1499
1372 TEST_F(RTCStatsCollectorTest, CollectRTCInboundRTPStreamStats_Video) { 1500 TEST_F(RTCStatsCollectorTest, CollectRTCInboundRTPStreamStats_Video) {
1373 MockVideoMediaChannel* video_media_channel = new MockVideoMediaChannel(); 1501 MockVideoMediaChannel* video_media_channel = new MockVideoMediaChannel();
1374 cricket::VideoChannel video_channel( 1502 cricket::VideoChannel video_channel(
1375 test_->worker_thread(), test_->network_thread(), video_media_channel, 1503 test_->worker_thread(), test_->network_thread(), video_media_channel,
1376 nullptr, "VideoContentName", false); 1504 nullptr, "VideoContentName", false);
1377 1505
1378 cricket::VideoMediaInfo video_media_info; 1506 cricket::VideoMediaInfo video_media_info;
1507
1379 video_media_info.receivers.push_back(cricket::VideoReceiverInfo()); 1508 video_media_info.receivers.push_back(cricket::VideoReceiverInfo());
1380 video_media_info.receivers[0].local_stats.push_back( 1509 video_media_info.receivers[0].local_stats.push_back(
1381 cricket::SsrcReceiverInfo()); 1510 cricket::SsrcReceiverInfo());
1382 video_media_info.receivers[0].local_stats[0].ssrc = 1; 1511 video_media_info.receivers[0].local_stats[0].ssrc = 1;
1383 video_media_info.receivers[0].packets_rcvd = 2; 1512 video_media_info.receivers[0].packets_rcvd = 2;
1384 video_media_info.receivers[0].bytes_rcvd = 3; 1513 video_media_info.receivers[0].bytes_rcvd = 3;
1385 video_media_info.receivers[0].fraction_lost = 4.5f; 1514 video_media_info.receivers[0].fraction_lost = 4.5f;
1515 video_media_info.receivers[0].codec_payload_type = rtc::Optional<int>(42);
1386 video_media_info.receivers[0].firs_sent = 5; 1516 video_media_info.receivers[0].firs_sent = 5;
1387 video_media_info.receivers[0].plis_sent = 6; 1517 video_media_info.receivers[0].plis_sent = 6;
1388 video_media_info.receivers[0].nacks_sent = 7; 1518 video_media_info.receivers[0].nacks_sent = 7;
1519
1520 RtpCodecParameters codec_parameters;
1521 codec_parameters.payload_type = 42;
1522 codec_parameters.mime_type = "dummy";
1523 codec_parameters.clock_rate = 0;
1524 video_media_info.receive_codecs.insert(
1525 std::make_pair(codec_parameters.payload_type, codec_parameters));
1526
1389 EXPECT_CALL(*video_media_channel, GetStats(_)) 1527 EXPECT_CALL(*video_media_channel, GetStats(_))
1390 .WillOnce(DoAll(SetArgPointee<0>(video_media_info), Return(true))); 1528 .WillOnce(DoAll(SetArgPointee<0>(video_media_info), Return(true)));
1391 1529
1392 SessionStats session_stats; 1530 SessionStats session_stats;
1393 session_stats.proxy_to_transport["VideoContentName"] = "TransportName"; 1531 session_stats.proxy_to_transport["VideoContentName"] = "TransportName";
1394 session_stats.transport_stats["TransportName"].transport_name = 1532 session_stats.transport_stats["TransportName"].transport_name =
1395 "TransportName"; 1533 "TransportName";
1396 1534
1397 // Make sure the associated |RTCTransportStats| is created. 1535 // Make sure the associated |RTCTransportStats| is created.
1398 cricket::TransportChannelStats channel_stats; 1536 cricket::TransportChannelStats channel_stats;
1399 channel_stats.component = cricket::ICE_CANDIDATE_COMPONENT_RTP; 1537 channel_stats.component = cricket::ICE_CANDIDATE_COMPONENT_RTP;
1400 session_stats.transport_stats["TransportName"].channel_stats.push_back( 1538 session_stats.transport_stats["TransportName"].channel_stats.push_back(
1401 channel_stats); 1539 channel_stats);
1402 1540
1403 EXPECT_CALL(test_->session(), GetTransportStats(_)) 1541 EXPECT_CALL(test_->session(), GetTransportStats(_))
1404 .WillRepeatedly(DoAll(SetArgPointee<0>(session_stats), Return(true))); 1542 .WillRepeatedly(DoAll(SetArgPointee<0>(session_stats), Return(true)));
1405 EXPECT_CALL(test_->session(), video_channel()) 1543 EXPECT_CALL(test_->session(), video_channel())
1406 .WillRepeatedly(Return(&video_channel)); 1544 .WillRepeatedly(Return(&video_channel));
1407 1545
1408 rtc::scoped_refptr<const RTCStatsReport> report = GetStatsReport(); 1546 rtc::scoped_refptr<const RTCStatsReport> report = GetStatsReport();
1409 1547
1410 RTCInboundRTPStreamStats expected_video( 1548 RTCInboundRTPStreamStats expected_video(
1411 "RTCInboundRTPVideoStream_1", report->timestamp_us()); 1549 "RTCInboundRTPVideoStream_1", report->timestamp_us());
1412 expected_video.ssrc = "1"; 1550 expected_video.ssrc = "1";
1413 expected_video.is_remote = false; 1551 expected_video.is_remote = false;
1414 expected_video.media_type = "video"; 1552 expected_video.media_type = "video";
1415 expected_video.transport_id = "RTCTransport_TransportName_" + 1553 expected_video.transport_id = "RTCTransport_TransportName_" +
1416 rtc::ToString<>(cricket::ICE_CANDIDATE_COMPONENT_RTP); 1554 rtc::ToString<>(cricket::ICE_CANDIDATE_COMPONENT_RTP);
1555 expected_video.codec_id = "RTCCodec_InboundVideo_42";
1417 expected_video.fir_count = 5; 1556 expected_video.fir_count = 5;
1418 expected_video.pli_count = 6; 1557 expected_video.pli_count = 6;
1419 expected_video.nack_count = 7; 1558 expected_video.nack_count = 7;
1420 expected_video.packets_received = 2; 1559 expected_video.packets_received = 2;
1421 expected_video.bytes_received = 3; 1560 expected_video.bytes_received = 3;
1422 expected_video.fraction_lost = 4.5; 1561 expected_video.fraction_lost = 4.5;
1423 1562
1424 ASSERT(report->Get(expected_video.id())); 1563 ASSERT(report->Get(expected_video.id()));
1425 const RTCInboundRTPStreamStats& video = report->Get( 1564 const RTCInboundRTPStreamStats& video = report->Get(
1426 expected_video.id())->cast_to<RTCInboundRTPStreamStats>(); 1565 expected_video.id())->cast_to<RTCInboundRTPStreamStats>();
1427 EXPECT_EQ(video, expected_video); 1566 EXPECT_EQ(video, expected_video);
1428 1567
1429 EXPECT_TRUE(report->Get(*expected_video.transport_id)); 1568 EXPECT_TRUE(report->Get(*expected_video.transport_id));
1569 EXPECT_TRUE(report->Get(*video.codec_id));
1430 } 1570 }
1431 1571
1432 TEST_F(RTCStatsCollectorTest, CollectRTCOutboundRTPStreamStats_Audio) { 1572 TEST_F(RTCStatsCollectorTest, CollectRTCOutboundRTPStreamStats_Audio) {
1433 MockVoiceMediaChannel* voice_media_channel = new MockVoiceMediaChannel(); 1573 MockVoiceMediaChannel* voice_media_channel = new MockVoiceMediaChannel();
1434 cricket::VoiceChannel voice_channel( 1574 cricket::VoiceChannel voice_channel(
1435 test_->worker_thread(), test_->network_thread(), test_->media_engine(), 1575 test_->worker_thread(), test_->network_thread(), test_->media_engine(),
1436 voice_media_channel, nullptr, "VoiceContentName", false); 1576 voice_media_channel, nullptr, "VoiceContentName", false);
1437 1577
1438 cricket::VoiceMediaInfo voice_media_info; 1578 cricket::VoiceMediaInfo voice_media_info;
1579
1439 voice_media_info.senders.push_back(cricket::VoiceSenderInfo()); 1580 voice_media_info.senders.push_back(cricket::VoiceSenderInfo());
1440 voice_media_info.senders[0].local_stats.push_back(cricket::SsrcSenderInfo()); 1581 voice_media_info.senders[0].local_stats.push_back(cricket::SsrcSenderInfo());
1441 voice_media_info.senders[0].local_stats[0].ssrc = 1; 1582 voice_media_info.senders[0].local_stats[0].ssrc = 1;
1442 voice_media_info.senders[0].packets_sent = 2; 1583 voice_media_info.senders[0].packets_sent = 2;
1443 voice_media_info.senders[0].bytes_sent = 3; 1584 voice_media_info.senders[0].bytes_sent = 3;
1444 voice_media_info.senders[0].rtt_ms = 4500; 1585 voice_media_info.senders[0].rtt_ms = 4500;
1586 voice_media_info.senders[0].codec_payload_type = rtc::Optional<int>(42);
1587
1588 RtpCodecParameters codec_parameters;
1589 codec_parameters.payload_type = 42;
1590 codec_parameters.mime_type = "dummy";
1591 codec_parameters.clock_rate = 0;
1592 voice_media_info.send_codecs.insert(
1593 std::make_pair(codec_parameters.payload_type, codec_parameters));
1594
1445 EXPECT_CALL(*voice_media_channel, GetStats(_)) 1595 EXPECT_CALL(*voice_media_channel, GetStats(_))
1446 .WillOnce(DoAll(SetArgPointee<0>(voice_media_info), Return(true))); 1596 .WillOnce(DoAll(SetArgPointee<0>(voice_media_info), Return(true)));
1447 1597
1448 SessionStats session_stats; 1598 SessionStats session_stats;
1449 session_stats.proxy_to_transport["VoiceContentName"] = "TransportName"; 1599 session_stats.proxy_to_transport["VoiceContentName"] = "TransportName";
1450 session_stats.transport_stats["TransportName"].transport_name = 1600 session_stats.transport_stats["TransportName"].transport_name =
1451 "TransportName"; 1601 "TransportName";
1452 1602
1453 // Make sure the associated |RTCTransportStats| is created. 1603 // Make sure the associated |RTCTransportStats| is created.
1454 cricket::TransportChannelStats channel_stats; 1604 cricket::TransportChannelStats channel_stats;
1455 channel_stats.component = cricket::ICE_CANDIDATE_COMPONENT_RTP; 1605 channel_stats.component = cricket::ICE_CANDIDATE_COMPONENT_RTP;
1456 session_stats.transport_stats["TransportName"].channel_stats.push_back( 1606 session_stats.transport_stats["TransportName"].channel_stats.push_back(
1457 channel_stats); 1607 channel_stats);
1458 1608
1459 EXPECT_CALL(test_->session(), GetTransportStats(_)) 1609 EXPECT_CALL(test_->session(), GetTransportStats(_))
1460 .WillRepeatedly(DoAll(SetArgPointee<0>(session_stats), Return(true))); 1610 .WillRepeatedly(DoAll(SetArgPointee<0>(session_stats), Return(true)));
1461 EXPECT_CALL(test_->session(), voice_channel()) 1611 EXPECT_CALL(test_->session(), voice_channel())
1462 .WillRepeatedly(Return(&voice_channel)); 1612 .WillRepeatedly(Return(&voice_channel));
1463 1613
1464 rtc::scoped_refptr<const RTCStatsReport> report = GetStatsReport(); 1614 rtc::scoped_refptr<const RTCStatsReport> report = GetStatsReport();
1465 1615
1466 RTCOutboundRTPStreamStats expected_audio( 1616 RTCOutboundRTPStreamStats expected_audio(
1467 "RTCOutboundRTPAudioStream_1", report->timestamp_us()); 1617 "RTCOutboundRTPAudioStream_1", report->timestamp_us());
1468 expected_audio.ssrc = "1"; 1618 expected_audio.ssrc = "1";
1469 expected_audio.is_remote = false; 1619 expected_audio.is_remote = false;
1470 expected_audio.media_type = "audio"; 1620 expected_audio.media_type = "audio";
1471 expected_audio.transport_id = "RTCTransport_TransportName_" + 1621 expected_audio.transport_id = "RTCTransport_TransportName_" +
1472 rtc::ToString<>(cricket::ICE_CANDIDATE_COMPONENT_RTP); 1622 rtc::ToString<>(cricket::ICE_CANDIDATE_COMPONENT_RTP);
1623 expected_audio.codec_id = "RTCCodec_OutboundAudio_42";
1473 expected_audio.packets_sent = 2; 1624 expected_audio.packets_sent = 2;
1474 expected_audio.bytes_sent = 3; 1625 expected_audio.bytes_sent = 3;
1475 expected_audio.round_trip_time = 4.5; 1626 expected_audio.round_trip_time = 4.5;
1476 1627
1477 ASSERT(report->Get(expected_audio.id())); 1628 ASSERT(report->Get(expected_audio.id()));
1478 const RTCOutboundRTPStreamStats& audio = report->Get( 1629 const RTCOutboundRTPStreamStats& audio = report->Get(
1479 expected_audio.id())->cast_to<RTCOutboundRTPStreamStats>(); 1630 expected_audio.id())->cast_to<RTCOutboundRTPStreamStats>();
1480 EXPECT_EQ(audio, expected_audio); 1631 EXPECT_EQ(audio, expected_audio);
1481 1632
1482 EXPECT_TRUE(report->Get(*expected_audio.transport_id)); 1633 EXPECT_TRUE(report->Get(*expected_audio.transport_id));
1634 EXPECT_TRUE(report->Get(*expected_audio.codec_id));
1483 } 1635 }
1484 1636
1485 TEST_F(RTCStatsCollectorTest, CollectRTCOutboundRTPStreamStats_Video) { 1637 TEST_F(RTCStatsCollectorTest, CollectRTCOutboundRTPStreamStats_Video) {
1486 MockVideoMediaChannel* video_media_channel = new MockVideoMediaChannel(); 1638 MockVideoMediaChannel* video_media_channel = new MockVideoMediaChannel();
1487 cricket::VideoChannel video_channel( 1639 cricket::VideoChannel video_channel(
1488 test_->worker_thread(), test_->network_thread(), video_media_channel, 1640 test_->worker_thread(), test_->network_thread(), video_media_channel,
1489 nullptr, "VideoContentName", false); 1641 nullptr, "VideoContentName", false);
1490 1642
1491 cricket::VideoMediaInfo video_media_info; 1643 cricket::VideoMediaInfo video_media_info;
1644
1492 video_media_info.senders.push_back(cricket::VideoSenderInfo()); 1645 video_media_info.senders.push_back(cricket::VideoSenderInfo());
1493 video_media_info.senders[0].local_stats.push_back(cricket::SsrcSenderInfo()); 1646 video_media_info.senders[0].local_stats.push_back(cricket::SsrcSenderInfo());
1494 video_media_info.senders[0].local_stats[0].ssrc = 1; 1647 video_media_info.senders[0].local_stats[0].ssrc = 1;
1495 video_media_info.senders[0].firs_rcvd = 2; 1648 video_media_info.senders[0].firs_rcvd = 2;
1496 video_media_info.senders[0].plis_rcvd = 3; 1649 video_media_info.senders[0].plis_rcvd = 3;
1497 video_media_info.senders[0].nacks_rcvd = 4; 1650 video_media_info.senders[0].nacks_rcvd = 4;
1498 video_media_info.senders[0].packets_sent = 5; 1651 video_media_info.senders[0].packets_sent = 5;
1499 video_media_info.senders[0].bytes_sent = 6; 1652 video_media_info.senders[0].bytes_sent = 6;
1500 video_media_info.senders[0].rtt_ms = 7500; 1653 video_media_info.senders[0].rtt_ms = 7500;
1654 video_media_info.senders[0].codec_payload_type = rtc::Optional<int>(42);
1655
1656 RtpCodecParameters codec_parameters;
1657 codec_parameters.payload_type = 42;
1658 codec_parameters.mime_type = "dummy";
1659 codec_parameters.clock_rate = 0;
1660 video_media_info.send_codecs.insert(
1661 std::make_pair(codec_parameters.payload_type, codec_parameters));
1662
1501 EXPECT_CALL(*video_media_channel, GetStats(_)) 1663 EXPECT_CALL(*video_media_channel, GetStats(_))
1502 .WillOnce(DoAll(SetArgPointee<0>(video_media_info), Return(true))); 1664 .WillOnce(DoAll(SetArgPointee<0>(video_media_info), Return(true)));
1503 1665
1504 SessionStats session_stats; 1666 SessionStats session_stats;
1505 session_stats.proxy_to_transport["VideoContentName"] = "TransportName"; 1667 session_stats.proxy_to_transport["VideoContentName"] = "TransportName";
1506 session_stats.transport_stats["TransportName"].transport_name = 1668 session_stats.transport_stats["TransportName"].transport_name =
1507 "TransportName"; 1669 "TransportName";
1508 1670
1509 // Make sure the associated |RTCTransportStats| is created. 1671 // Make sure the associated |RTCTransportStats| is created.
1510 cricket::TransportChannelStats channel_stats; 1672 cricket::TransportChannelStats channel_stats;
1511 channel_stats.component = cricket::ICE_CANDIDATE_COMPONENT_RTP; 1673 channel_stats.component = cricket::ICE_CANDIDATE_COMPONENT_RTP;
1512 session_stats.transport_stats["TransportName"].channel_stats.push_back( 1674 session_stats.transport_stats["TransportName"].channel_stats.push_back(
1513 channel_stats); 1675 channel_stats);
1514 1676
1515 EXPECT_CALL(test_->session(), GetTransportStats(_)) 1677 EXPECT_CALL(test_->session(), GetTransportStats(_))
1516 .WillRepeatedly(DoAll(SetArgPointee<0>(session_stats), Return(true))); 1678 .WillRepeatedly(DoAll(SetArgPointee<0>(session_stats), Return(true)));
1517 EXPECT_CALL(test_->session(), video_channel()) 1679 EXPECT_CALL(test_->session(), video_channel())
1518 .WillRepeatedly(Return(&video_channel)); 1680 .WillRepeatedly(Return(&video_channel));
1519 1681
1520 rtc::scoped_refptr<const RTCStatsReport> report = GetStatsReport(); 1682 rtc::scoped_refptr<const RTCStatsReport> report = GetStatsReport();
1521 1683
1522 RTCOutboundRTPStreamStats expected_video( 1684 RTCOutboundRTPStreamStats expected_video(
1523 "RTCOutboundRTPVideoStream_1", report->timestamp_us()); 1685 "RTCOutboundRTPVideoStream_1", report->timestamp_us());
1524 expected_video.ssrc = "1"; 1686 expected_video.ssrc = "1";
1525 expected_video.is_remote = false; 1687 expected_video.is_remote = false;
1526 expected_video.media_type = "video"; 1688 expected_video.media_type = "video";
1527 expected_video.transport_id = "RTCTransport_TransportName_" + 1689 expected_video.transport_id = "RTCTransport_TransportName_" +
1528 rtc::ToString<>(cricket::ICE_CANDIDATE_COMPONENT_RTP); 1690 rtc::ToString<>(cricket::ICE_CANDIDATE_COMPONENT_RTP);
1691 expected_video.codec_id = "RTCCodec_OutboundVideo_42";
1529 expected_video.fir_count = 2; 1692 expected_video.fir_count = 2;
1530 expected_video.pli_count = 3; 1693 expected_video.pli_count = 3;
1531 expected_video.nack_count = 4; 1694 expected_video.nack_count = 4;
1532 expected_video.packets_sent = 5; 1695 expected_video.packets_sent = 5;
1533 expected_video.bytes_sent = 6; 1696 expected_video.bytes_sent = 6;
1534 expected_video.round_trip_time = 7.5; 1697 expected_video.round_trip_time = 7.5;
1535 1698
1536 ASSERT(report->Get(expected_video.id())); 1699 ASSERT(report->Get(expected_video.id()));
1537 const RTCOutboundRTPStreamStats& video = report->Get( 1700 const RTCOutboundRTPStreamStats& video = report->Get(
1538 expected_video.id())->cast_to<RTCOutboundRTPStreamStats>(); 1701 expected_video.id())->cast_to<RTCOutboundRTPStreamStats>();
1539 EXPECT_EQ(video, expected_video); 1702 EXPECT_EQ(video, expected_video);
1540 1703
1541 EXPECT_TRUE(report->Get(*expected_video.transport_id)); 1704 EXPECT_TRUE(report->Get(*expected_video.transport_id));
1705 EXPECT_TRUE(report->Get(*expected_video.codec_id));
1542 } 1706 }
1543 1707
1544 TEST_F(RTCStatsCollectorTest, CollectRTCTransportStats) { 1708 TEST_F(RTCStatsCollectorTest, CollectRTCTransportStats) {
1545 std::unique_ptr<cricket::Candidate> rtp_local_candidate = CreateFakeCandidate( 1709 std::unique_ptr<cricket::Candidate> rtp_local_candidate = CreateFakeCandidate(
1546 "42.42.42.42", 42, "protocol", cricket::LOCAL_PORT_TYPE, 42); 1710 "42.42.42.42", 42, "protocol", cricket::LOCAL_PORT_TYPE, 42);
1547 std::unique_ptr<cricket::Candidate> rtp_remote_candidate = 1711 std::unique_ptr<cricket::Candidate> rtp_remote_candidate =
1548 CreateFakeCandidate("42.42.42.42", 42, "protocol", 1712 CreateFakeCandidate("42.42.42.42", 42, "protocol",
1549 cricket::LOCAL_PORT_TYPE, 42); 1713 cricket::LOCAL_PORT_TYPE, 42);
1550 std::unique_ptr<cricket::Candidate> rtcp_local_candidate = 1714 std::unique_ptr<cricket::Candidate> rtcp_local_candidate =
1551 CreateFakeCandidate("42.42.42.42", 42, "protocol", 1715 CreateFakeCandidate("42.42.42.42", 42, "protocol",
(...skipping 101 matching lines...) Expand 10 before | Expand all | Expand 10 after
1653 rtc::scoped_refptr<FakeRTCStatsCollector> collector_; 1817 rtc::scoped_refptr<FakeRTCStatsCollector> collector_;
1654 }; 1818 };
1655 1819
1656 TEST_F(RTCStatsCollectorTestWithFakeCollector, ThreadUsageAndResultsMerging) { 1820 TEST_F(RTCStatsCollectorTestWithFakeCollector, ThreadUsageAndResultsMerging) {
1657 collector_->VerifyThreadUsageAndResultsMerging(); 1821 collector_->VerifyThreadUsageAndResultsMerging();
1658 } 1822 }
1659 1823
1660 } // namespace 1824 } // namespace
1661 1825
1662 } // namespace webrtc 1826 } // namespace webrtc
OLDNEW
« no previous file with comments | « webrtc/api/rtcstatscollector.cc ('k') | webrtc/api/stats/rtcstats_objects.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698