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

Side by Side Diff: webrtc/api/rtcstatscollector.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.h ('k') | webrtc/api/rtcstatscollector_unittest.cc » ('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
(...skipping 15 matching lines...) Expand all
26 #include "webrtc/p2p/base/port.h" 26 #include "webrtc/p2p/base/port.h"
27 27
28 namespace webrtc { 28 namespace webrtc {
29 29
30 namespace { 30 namespace {
31 31
32 std::string RTCCertificateIDFromFingerprint(const std::string& fingerprint) { 32 std::string RTCCertificateIDFromFingerprint(const std::string& fingerprint) {
33 return "RTCCertificate_" + fingerprint; 33 return "RTCCertificate_" + fingerprint;
34 } 34 }
35 35
36 std::string RTCCodecStatsIDFromDirectionMediaAndPayload(
37 bool inbound, bool audio, uint32_t payload_type) {
38 // TODO(hbos): When we are able to handle multiple m= lines of the same media
39 // type (and multiple BaseChannels for the same type is possible?) this needs
40 // to be updated to differentiate the transport being used, and stats need to
41 // be collected for all of them. crbug.com/659117
42 if (inbound) {
43 return audio ? "RTCCodec_InboundAudio_" + rtc::ToString<>(payload_type)
44 : "RTCCodec_InboundVideo_" + rtc::ToString<>(payload_type);
45 }
46 return audio ? "RTCCodec_OutboundAudio_" + rtc::ToString<>(payload_type)
47 : "RTCCodec_OutboundVideo_" + rtc::ToString<>(payload_type);
48 }
49
36 std::string RTCIceCandidatePairStatsIDFromConnectionInfo( 50 std::string RTCIceCandidatePairStatsIDFromConnectionInfo(
37 const cricket::ConnectionInfo& info) { 51 const cricket::ConnectionInfo& info) {
38 return "RTCIceCandidatePair_" + info.local_candidate.id() + "_" + 52 return "RTCIceCandidatePair_" + info.local_candidate.id() + "_" +
39 info.remote_candidate.id(); 53 info.remote_candidate.id();
40 } 54 }
41 55
42 std::string RTCMediaStreamTrackStatsIDFromMediaStreamTrackInterface( 56 std::string RTCMediaStreamTrackStatsIDFromMediaStreamTrackInterface(
43 const MediaStreamTrackInterface& track) { 57 const MediaStreamTrackInterface& track) {
44 return "RTCMediaStreamTrack_" + track.id(); 58 return "RTCMediaStreamTrack_" + track.id();
45 } 59 }
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after
93 case DataChannelInterface::kClosing: 107 case DataChannelInterface::kClosing:
94 return RTCDataChannelState::kClosing; 108 return RTCDataChannelState::kClosing;
95 case DataChannelInterface::kClosed: 109 case DataChannelInterface::kClosed:
96 return RTCDataChannelState::kClosed; 110 return RTCDataChannelState::kClosed;
97 default: 111 default:
98 RTC_NOTREACHED(); 112 RTC_NOTREACHED();
99 return nullptr; 113 return nullptr;
100 } 114 }
101 } 115 }
102 116
117 std::unique_ptr<RTCCodecStats> CodecStatsFromRtpCodecParameters(
118 uint64_t timestamp_us, bool inbound, bool audio,
119 const RtpCodecParameters& codec_params) {
120 RTC_DCHECK_GE(codec_params.payload_type, 0);
121 RTC_DCHECK_LE(codec_params.payload_type, 127);
122 uint32_t payload_type = static_cast<uint32_t>(codec_params.payload_type);
123 std::unique_ptr<RTCCodecStats> codec_stats(new RTCCodecStats(
124 RTCCodecStatsIDFromDirectionMediaAndPayload(inbound, audio, payload_type),
125 timestamp_us));
126 codec_stats->payload_type = payload_type;
127 codec_stats->codec = (audio ? "audio/" : "video/") + codec_params.mime_type;
128 codec_stats->clock_rate = static_cast<uint32_t>(codec_params.clock_rate);
129 return codec_stats;
130 }
131
103 void SetMediaStreamTrackStatsFromMediaStreamTrackInterface( 132 void SetMediaStreamTrackStatsFromMediaStreamTrackInterface(
104 const MediaStreamTrackInterface& track, 133 const MediaStreamTrackInterface& track,
105 RTCMediaStreamTrackStats* track_stats) { 134 RTCMediaStreamTrackStats* track_stats) {
106 track_stats->track_identifier = track.id(); 135 track_stats->track_identifier = track.id();
107 track_stats->ended = (track.state() == MediaStreamTrackInterface::kEnded); 136 track_stats->ended = (track.state() == MediaStreamTrackInterface::kEnded);
108 } 137 }
109 138
110 // Provides the media independent counters (both audio and video). 139 // Provides the media independent counters (both audio and video).
111 void SetInboundRTPStreamStatsFromMediaReceiverInfo( 140 void SetInboundRTPStreamStatsFromMediaReceiverInfo(
112 const cricket::MediaReceiverInfo& media_receiver_info, 141 const cricket::MediaReceiverInfo& media_receiver_info,
(...skipping 282 matching lines...) Expand 10 before | Expand all | Expand 10 after
395 424
396 void RTCStatsCollector::ProducePartialResultsOnSignalingThread( 425 void RTCStatsCollector::ProducePartialResultsOnSignalingThread(
397 int64_t timestamp_us) { 426 int64_t timestamp_us) {
398 RTC_DCHECK(signaling_thread_->IsCurrent()); 427 RTC_DCHECK(signaling_thread_->IsCurrent());
399 rtc::scoped_refptr<RTCStatsReport> report = RTCStatsReport::Create( 428 rtc::scoped_refptr<RTCStatsReport> report = RTCStatsReport::Create(
400 timestamp_us); 429 timestamp_us);
401 430
402 SessionStats session_stats; 431 SessionStats session_stats;
403 if (pc_->session()->GetTransportStats(&session_stats)) { 432 if (pc_->session()->GetTransportStats(&session_stats)) {
404 std::map<std::string, CertificateStatsPair> transport_cert_stats = 433 std::map<std::string, CertificateStatsPair> transport_cert_stats =
405 PrepareTransportCertificateStats_s(session_stats); 434 PrepareTransportCertificateStats(session_stats);
435 MediaInfo media_info = PrepareMediaInfo(session_stats);
406 436
407 ProduceCertificateStats_s( 437 ProduceCertificateStats_s(
408 timestamp_us, transport_cert_stats, report.get()); 438 timestamp_us, transport_cert_stats, report.get());
439 ProduceCodecStats_s(
440 timestamp_us, media_info, report.get());
409 ProduceIceCandidateAndPairStats_s( 441 ProduceIceCandidateAndPairStats_s(
410 timestamp_us, session_stats, report.get()); 442 timestamp_us, session_stats, report.get());
411 ProduceRTPStreamStats_s( 443 ProduceRTPStreamStats_s(
412 timestamp_us, session_stats, report.get()); 444 timestamp_us, session_stats, media_info, report.get());
413 ProduceTransportStats_s( 445 ProduceTransportStats_s(
414 timestamp_us, session_stats, transport_cert_stats, report.get()); 446 timestamp_us, session_stats, transport_cert_stats, report.get());
415 } 447 }
416 ProduceDataChannelStats_s(timestamp_us, report.get()); 448 ProduceDataChannelStats_s(timestamp_us, report.get());
417 ProduceMediaStreamAndTrackStats_s(timestamp_us, report.get()); 449 ProduceMediaStreamAndTrackStats_s(timestamp_us, report.get());
418 ProducePeerConnectionStats_s(timestamp_us, report.get()); 450 ProducePeerConnectionStats_s(timestamp_us, report.get());
419 451
420 AddPartialResults(report); 452 AddPartialResults(report);
421 } 453 }
422 454
(...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after
504 ProduceCertificateStatsFromSSLCertificateStats( 536 ProduceCertificateStatsFromSSLCertificateStats(
505 timestamp_us, *transport_cert_stats_pair.second.local.get(), report); 537 timestamp_us, *transport_cert_stats_pair.second.local.get(), report);
506 } 538 }
507 if (transport_cert_stats_pair.second.remote) { 539 if (transport_cert_stats_pair.second.remote) {
508 ProduceCertificateStatsFromSSLCertificateStats( 540 ProduceCertificateStatsFromSSLCertificateStats(
509 timestamp_us, *transport_cert_stats_pair.second.remote.get(), report); 541 timestamp_us, *transport_cert_stats_pair.second.remote.get(), report);
510 } 542 }
511 } 543 }
512 } 544 }
513 545
546 void RTCStatsCollector::ProduceCodecStats_s(
547 int64_t timestamp_us, const MediaInfo& media_info,
548 RTCStatsReport* report) const {
549 RTC_DCHECK(signaling_thread_->IsCurrent());
550 // Audio
551 if (media_info.voice) {
552 // Inbound
553 for (const auto& pair : media_info.voice->receive_codecs) {
554 report->AddStats(CodecStatsFromRtpCodecParameters(
555 timestamp_us, true, true, pair.second));
556 }
557 // Outbound
558 for (const auto& pair : media_info.voice->send_codecs) {
559 report->AddStats(CodecStatsFromRtpCodecParameters(
560 timestamp_us, false, true, pair.second));
561 }
562 }
563 // Video
564 if (media_info.video) {
565 // Inbound
566 for (const auto& pair : media_info.video->receive_codecs) {
567 report->AddStats(CodecStatsFromRtpCodecParameters(
568 timestamp_us, true, false, pair.second));
569 }
570 // Outbound
571 for (const auto& pair : media_info.video->send_codecs) {
572 report->AddStats(CodecStatsFromRtpCodecParameters(
573 timestamp_us, false, false, pair.second));
574 }
575 }
576 }
577
514 void RTCStatsCollector::ProduceDataChannelStats_s( 578 void RTCStatsCollector::ProduceDataChannelStats_s(
515 int64_t timestamp_us, RTCStatsReport* report) const { 579 int64_t timestamp_us, RTCStatsReport* report) const {
516 RTC_DCHECK(signaling_thread_->IsCurrent()); 580 RTC_DCHECK(signaling_thread_->IsCurrent());
517 for (const rtc::scoped_refptr<DataChannel>& data_channel : 581 for (const rtc::scoped_refptr<DataChannel>& data_channel :
518 pc_->sctp_data_channels()) { 582 pc_->sctp_data_channels()) {
519 std::unique_ptr<RTCDataChannelStats> data_channel_stats( 583 std::unique_ptr<RTCDataChannelStats> data_channel_stats(
520 new RTCDataChannelStats( 584 new RTCDataChannelStats(
521 "RTCDataChannel_" + rtc::ToString<>(data_channel->id()), 585 "RTCDataChannel_" + rtc::ToString<>(data_channel->id()),
522 timestamp_us)); 586 timestamp_us));
523 data_channel_stats->label = data_channel->label(); 587 data_channel_stats->label = data_channel->label();
(...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after
595 RTC_DCHECK(signaling_thread_->IsCurrent()); 659 RTC_DCHECK(signaling_thread_->IsCurrent());
596 std::unique_ptr<RTCPeerConnectionStats> stats( 660 std::unique_ptr<RTCPeerConnectionStats> stats(
597 new RTCPeerConnectionStats("RTCPeerConnection", timestamp_us)); 661 new RTCPeerConnectionStats("RTCPeerConnection", timestamp_us));
598 stats->data_channels_opened = internal_record_.data_channels_opened; 662 stats->data_channels_opened = internal_record_.data_channels_opened;
599 stats->data_channels_closed = internal_record_.data_channels_closed; 663 stats->data_channels_closed = internal_record_.data_channels_closed;
600 report->AddStats(std::move(stats)); 664 report->AddStats(std::move(stats));
601 } 665 }
602 666
603 void RTCStatsCollector::ProduceRTPStreamStats_s( 667 void RTCStatsCollector::ProduceRTPStreamStats_s(
604 int64_t timestamp_us, const SessionStats& session_stats, 668 int64_t timestamp_us, const SessionStats& session_stats,
605 RTCStatsReport* report) const { 669 const MediaInfo& media_info, RTCStatsReport* report) const {
606 RTC_DCHECK(signaling_thread_->IsCurrent()); 670 RTC_DCHECK(signaling_thread_->IsCurrent());
607 671
608 // Audio 672 // Audio
609 if (pc_->session()->voice_channel()) { 673 if (media_info.voice) {
610 cricket::VoiceMediaInfo voice_media_info; 674 std::string transport_id = RTCTransportStatsIDFromBaseChannel(
611 if (pc_->session()->voice_channel()->GetStats(&voice_media_info)) { 675 session_stats.proxy_to_transport, *pc_->session()->voice_channel());
612 std::string transport_id = RTCTransportStatsIDFromBaseChannel( 676 RTC_DCHECK(!transport_id.empty());
613 session_stats.proxy_to_transport, *pc_->session()->voice_channel()); 677 // Inbound
614 RTC_DCHECK(!transport_id.empty()); 678 for (const cricket::VoiceReceiverInfo& voice_receiver_info :
615 // Inbound 679 media_info.voice->receivers) {
616 for (const cricket::VoiceReceiverInfo& voice_receiver_info : 680 // TODO(nisse): SSRC == 0 currently means none. Delete check when that
617 voice_media_info.receivers) { 681 // is fixed.
618 // TODO(nisse): SSRC == 0 currently means none. Delete check when that 682 if (voice_receiver_info.ssrc() == 0)
619 // is fixed. 683 continue;
620 if (voice_receiver_info.ssrc() == 0) 684 std::unique_ptr<RTCInboundRTPStreamStats> inbound_audio(
621 continue; 685 new RTCInboundRTPStreamStats(
622 std::unique_ptr<RTCInboundRTPStreamStats> inbound_audio( 686 RTCInboundRTPStreamStatsIDFromSSRC(
623 new RTCInboundRTPStreamStats( 687 true, voice_receiver_info.ssrc()),
624 RTCInboundRTPStreamStatsIDFromSSRC( 688 timestamp_us));
625 true, voice_receiver_info.ssrc()), 689 SetInboundRTPStreamStatsFromVoiceReceiverInfo(
626 timestamp_us)); 690 voice_receiver_info, inbound_audio.get());
627 SetInboundRTPStreamStatsFromVoiceReceiverInfo( 691 inbound_audio->transport_id = transport_id;
628 voice_receiver_info, inbound_audio.get()); 692 if (voice_receiver_info.codec_payload_type) {
629 inbound_audio->transport_id = transport_id; 693 inbound_audio->codec_id =
630 report->AddStats(std::move(inbound_audio)); 694 RTCCodecStatsIDFromDirectionMediaAndPayload(
695 true, true, *voice_receiver_info.codec_payload_type);
631 } 696 }
632 // Outbound 697 report->AddStats(std::move(inbound_audio));
633 for (const cricket::VoiceSenderInfo& voice_sender_info : 698 }
634 voice_media_info.senders) { 699 // Outbound
635 // TODO(nisse): SSRC == 0 currently means none. Delete check when that 700 for (const cricket::VoiceSenderInfo& voice_sender_info :
636 // is fixed. 701 media_info.voice->senders) {
637 if (voice_sender_info.ssrc() == 0) 702 // TODO(nisse): SSRC == 0 currently means none. Delete check when that
638 continue; 703 // is fixed.
639 std::unique_ptr<RTCOutboundRTPStreamStats> outbound_audio( 704 if (voice_sender_info.ssrc() == 0)
640 new RTCOutboundRTPStreamStats( 705 continue;
641 RTCOutboundRTPStreamStatsIDFromSSRC( 706 std::unique_ptr<RTCOutboundRTPStreamStats> outbound_audio(
642 true, voice_sender_info.ssrc()), 707 new RTCOutboundRTPStreamStats(
643 timestamp_us)); 708 RTCOutboundRTPStreamStatsIDFromSSRC(
644 SetOutboundRTPStreamStatsFromVoiceSenderInfo( 709 true, voice_sender_info.ssrc()),
645 voice_sender_info, outbound_audio.get()); 710 timestamp_us));
646 outbound_audio->transport_id = transport_id; 711 SetOutboundRTPStreamStatsFromVoiceSenderInfo(
647 report->AddStats(std::move(outbound_audio)); 712 voice_sender_info, outbound_audio.get());
713 outbound_audio->transport_id = transport_id;
714 if (voice_sender_info.codec_payload_type) {
715 outbound_audio->codec_id =
716 RTCCodecStatsIDFromDirectionMediaAndPayload(
717 false, true, *voice_sender_info.codec_payload_type);
648 } 718 }
719 report->AddStats(std::move(outbound_audio));
649 } 720 }
650 } 721 }
651 // Video 722 // Video
652 if (pc_->session()->video_channel()) { 723 if (media_info.video) {
653 cricket::VideoMediaInfo video_media_info; 724 std::string transport_id = RTCTransportStatsIDFromBaseChannel(
654 if (pc_->session()->video_channel()->GetStats(&video_media_info)) { 725 session_stats.proxy_to_transport, *pc_->session()->video_channel());
655 std::string transport_id = RTCTransportStatsIDFromBaseChannel( 726 RTC_DCHECK(!transport_id.empty());
656 session_stats.proxy_to_transport, *pc_->session()->video_channel()); 727 // Inbound
657 RTC_DCHECK(!transport_id.empty()); 728 for (const cricket::VideoReceiverInfo& video_receiver_info :
658 // Inbound 729 media_info.video->receivers) {
659 for (const cricket::VideoReceiverInfo& video_receiver_info : 730 // TODO(nisse): SSRC == 0 currently means none. Delete check when that
660 video_media_info.receivers) { 731 // is fixed.
661 // TODO(nisse): SSRC == 0 currently means none. Delete check when that 732 if (video_receiver_info.ssrc() == 0)
662 // is fixed. 733 continue;
663 if (video_receiver_info.ssrc() == 0) 734 std::unique_ptr<RTCInboundRTPStreamStats> inbound_video(
664 continue; 735 new RTCInboundRTPStreamStats(
665 std::unique_ptr<RTCInboundRTPStreamStats> inbound_video( 736 RTCInboundRTPStreamStatsIDFromSSRC(
666 new RTCInboundRTPStreamStats( 737 false, video_receiver_info.ssrc()),
667 RTCInboundRTPStreamStatsIDFromSSRC( 738 timestamp_us));
668 false, video_receiver_info.ssrc()), 739 SetInboundRTPStreamStatsFromVideoReceiverInfo(
669 timestamp_us)); 740 video_receiver_info, inbound_video.get());
670 SetInboundRTPStreamStatsFromVideoReceiverInfo( 741 inbound_video->transport_id = transport_id;
671 video_receiver_info, inbound_video.get()); 742 if (video_receiver_info.codec_payload_type) {
672 inbound_video->transport_id = transport_id; 743 inbound_video->codec_id =
673 report->AddStats(std::move(inbound_video)); 744 RTCCodecStatsIDFromDirectionMediaAndPayload(
745 true, false, *video_receiver_info.codec_payload_type);
674 } 746 }
675 // Outbound 747 report->AddStats(std::move(inbound_video));
676 for (const cricket::VideoSenderInfo& video_sender_info : 748 }
677 video_media_info.senders) { 749 // Outbound
678 // TODO(nisse): SSRC == 0 currently means none. Delete check when that 750 for (const cricket::VideoSenderInfo& video_sender_info :
679 // is fixed. 751 media_info.video->senders) {
680 if (video_sender_info.ssrc() == 0) 752 // TODO(nisse): SSRC == 0 currently means none. Delete check when that
681 continue; 753 // is fixed.
682 std::unique_ptr<RTCOutboundRTPStreamStats> outbound_video( 754 if (video_sender_info.ssrc() == 0)
683 new RTCOutboundRTPStreamStats( 755 continue;
684 RTCOutboundRTPStreamStatsIDFromSSRC( 756 std::unique_ptr<RTCOutboundRTPStreamStats> outbound_video(
685 false, video_sender_info.ssrc()), 757 new RTCOutboundRTPStreamStats(
686 timestamp_us)); 758 RTCOutboundRTPStreamStatsIDFromSSRC(
687 SetOutboundRTPStreamStatsFromVideoSenderInfo( 759 false, video_sender_info.ssrc()),
688 video_sender_info, outbound_video.get()); 760 timestamp_us));
689 outbound_video->transport_id = transport_id; 761 SetOutboundRTPStreamStatsFromVideoSenderInfo(
690 report->AddStats(std::move(outbound_video)); 762 video_sender_info, outbound_video.get());
763 outbound_video->transport_id = transport_id;
764 if (video_sender_info.codec_payload_type) {
765 outbound_video->codec_id =
766 RTCCodecStatsIDFromDirectionMediaAndPayload(
767 false, false, *video_sender_info.codec_payload_type);
691 } 768 }
769 report->AddStats(std::move(outbound_video));
692 } 770 }
693 } 771 }
694 } 772 }
695 773
696 void RTCStatsCollector::ProduceTransportStats_s( 774 void RTCStatsCollector::ProduceTransportStats_s(
697 int64_t timestamp_us, const SessionStats& session_stats, 775 int64_t timestamp_us, const SessionStats& session_stats,
698 const std::map<std::string, CertificateStatsPair>& transport_cert_stats, 776 const std::map<std::string, CertificateStatsPair>& transport_cert_stats,
699 RTCStatsReport* report) const { 777 RTCStatsReport* report) const {
700 RTC_DCHECK(signaling_thread_->IsCurrent()); 778 RTC_DCHECK(signaling_thread_->IsCurrent());
701 for (const auto& transport : session_stats.transport_stats) { 779 for (const auto& transport : session_stats.transport_stats) {
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after
753 if (!local_certificate_id.empty()) 831 if (!local_certificate_id.empty())
754 transport_stats->local_certificate_id = local_certificate_id; 832 transport_stats->local_certificate_id = local_certificate_id;
755 if (!remote_certificate_id.empty()) 833 if (!remote_certificate_id.empty())
756 transport_stats->remote_certificate_id = remote_certificate_id; 834 transport_stats->remote_certificate_id = remote_certificate_id;
757 report->AddStats(std::move(transport_stats)); 835 report->AddStats(std::move(transport_stats));
758 } 836 }
759 } 837 }
760 } 838 }
761 839
762 std::map<std::string, RTCStatsCollector::CertificateStatsPair> 840 std::map<std::string, RTCStatsCollector::CertificateStatsPair>
763 RTCStatsCollector::PrepareTransportCertificateStats_s( 841 RTCStatsCollector::PrepareTransportCertificateStats(
764 const SessionStats& session_stats) const { 842 const SessionStats& session_stats) const {
765 RTC_DCHECK(signaling_thread_->IsCurrent()); 843 RTC_DCHECK(signaling_thread_->IsCurrent());
766 std::map<std::string, CertificateStatsPair> transport_cert_stats; 844 std::map<std::string, CertificateStatsPair> transport_cert_stats;
767 for (const auto& transport_stats : session_stats.transport_stats) { 845 for (const auto& transport_stats : session_stats.transport_stats) {
768 CertificateStatsPair certificate_stats_pair; 846 CertificateStatsPair certificate_stats_pair;
769 rtc::scoped_refptr<rtc::RTCCertificate> local_certificate; 847 rtc::scoped_refptr<rtc::RTCCertificate> local_certificate;
770 if (pc_->session()->GetLocalCertificate( 848 if (pc_->session()->GetLocalCertificate(
771 transport_stats.second.transport_name, &local_certificate)) { 849 transport_stats.second.transport_name, &local_certificate)) {
772 certificate_stats_pair.local = 850 certificate_stats_pair.local =
773 local_certificate->ssl_certificate().GetStats(); 851 local_certificate->ssl_certificate().GetStats();
774 } 852 }
775 std::unique_ptr<rtc::SSLCertificate> remote_certificate = 853 std::unique_ptr<rtc::SSLCertificate> remote_certificate =
776 pc_->session()->GetRemoteSSLCertificate( 854 pc_->session()->GetRemoteSSLCertificate(
777 transport_stats.second.transport_name); 855 transport_stats.second.transport_name);
778 if (remote_certificate) { 856 if (remote_certificate) {
779 certificate_stats_pair.remote = remote_certificate->GetStats(); 857 certificate_stats_pair.remote = remote_certificate->GetStats();
780 } 858 }
781 transport_cert_stats.insert( 859 transport_cert_stats.insert(
782 std::make_pair(transport_stats.second.transport_name, 860 std::make_pair(transport_stats.second.transport_name,
783 std::move(certificate_stats_pair))); 861 std::move(certificate_stats_pair)));
784 } 862 }
785 return transport_cert_stats; 863 return transport_cert_stats;
786 } 864 }
787 865
866 RTCStatsCollector::MediaInfo RTCStatsCollector::PrepareMediaInfo(
867 const SessionStats& session_stats) const {
868 MediaInfo media_info;
869 if (pc_->session()->voice_channel()) {
870 cricket::VoiceMediaInfo voice_media_info;
871 if (pc_->session()->voice_channel()->GetStats(&voice_media_info)) {
872 media_info.voice = rtc::Optional<cricket::VoiceMediaInfo>(
873 std::move(voice_media_info));
874 }
875 }
876 if (pc_->session()->video_channel()) {
877 cricket::VideoMediaInfo video_media_info;
878 if (pc_->session()->video_channel()->GetStats(&video_media_info)) {
879 media_info.video = rtc::Optional<cricket::VideoMediaInfo>(
880 std::move(video_media_info));
881 }
882 }
883 return media_info;
884 }
885
788 void RTCStatsCollector::OnDataChannelCreated(DataChannel* channel) { 886 void RTCStatsCollector::OnDataChannelCreated(DataChannel* channel) {
789 channel->SignalOpened.connect(this, &RTCStatsCollector::OnDataChannelOpened); 887 channel->SignalOpened.connect(this, &RTCStatsCollector::OnDataChannelOpened);
790 channel->SignalClosed.connect(this, &RTCStatsCollector::OnDataChannelClosed); 888 channel->SignalClosed.connect(this, &RTCStatsCollector::OnDataChannelClosed);
791 } 889 }
792 890
793 void RTCStatsCollector::OnDataChannelOpened(DataChannel* channel) { 891 void RTCStatsCollector::OnDataChannelOpened(DataChannel* channel) {
794 RTC_DCHECK(signaling_thread_->IsCurrent()); 892 RTC_DCHECK(signaling_thread_->IsCurrent());
795 bool result = internal_record_.opened_data_channels.insert( 893 bool result = internal_record_.opened_data_channels.insert(
796 reinterpret_cast<uintptr_t>(channel)).second; 894 reinterpret_cast<uintptr_t>(channel)).second;
797 ++internal_record_.data_channels_opened; 895 ++internal_record_.data_channels_opened;
(...skipping 15 matching lines...) Expand all
813 const std::string& type) { 911 const std::string& type) {
814 return CandidateTypeToRTCIceCandidateType(type); 912 return CandidateTypeToRTCIceCandidateType(type);
815 } 913 }
816 914
817 const char* DataStateToRTCDataChannelStateForTesting( 915 const char* DataStateToRTCDataChannelStateForTesting(
818 DataChannelInterface::DataState state) { 916 DataChannelInterface::DataState state) {
819 return DataStateToRTCDataChannelState(state); 917 return DataStateToRTCDataChannelState(state);
820 } 918 }
821 919
822 } // namespace webrtc 920 } // namespace webrtc
OLDNEW
« no previous file with comments | « webrtc/api/rtcstatscollector.h ('k') | webrtc/api/rtcstatscollector_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698