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

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

Issue 2567243003: RTCStatsCollector: Utilize network thread to minimize thread hops. (Closed)
Patch Set: Rebase and rename Get[Session]Stats_n 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 398 matching lines...) Expand 10 before | Expand all | Expand 10 after
409 // "Now" using a system clock, relative to the UNIX epoch (Jan 1, 1970, 409 // "Now" using a system clock, relative to the UNIX epoch (Jan 1, 1970,
410 // UTC), in microseconds. The system clock could be modified and is not 410 // UTC), in microseconds. The system clock could be modified and is not
411 // necessarily monotonically increasing. 411 // necessarily monotonically increasing.
412 int64_t timestamp_us = rtc::TimeUTCMicros(); 412 int64_t timestamp_us = rtc::TimeUTCMicros();
413 413
414 num_pending_partial_reports_ = 3; 414 num_pending_partial_reports_ = 3;
415 partial_report_timestamp_us_ = cache_now_us; 415 partial_report_timestamp_us_ = cache_now_us;
416 invoker_.AsyncInvoke<void>(RTC_FROM_HERE, signaling_thread_, 416 invoker_.AsyncInvoke<void>(RTC_FROM_HERE, signaling_thread_,
417 rtc::Bind(&RTCStatsCollector::ProducePartialResultsOnSignalingThread, 417 rtc::Bind(&RTCStatsCollector::ProducePartialResultsOnSignalingThread,
418 rtc::scoped_refptr<RTCStatsCollector>(this), timestamp_us)); 418 rtc::scoped_refptr<RTCStatsCollector>(this), timestamp_us));
419
420 // TODO(hbos): No stats are gathered by
421 // |ProducePartialResultsOnWorkerThread|, remove it.
419 invoker_.AsyncInvoke<void>(RTC_FROM_HERE, worker_thread_, 422 invoker_.AsyncInvoke<void>(RTC_FROM_HERE, worker_thread_,
420 rtc::Bind(&RTCStatsCollector::ProducePartialResultsOnWorkerThread, 423 rtc::Bind(&RTCStatsCollector::ProducePartialResultsOnWorkerThread,
421 rtc::scoped_refptr<RTCStatsCollector>(this), timestamp_us)); 424 rtc::scoped_refptr<RTCStatsCollector>(this), timestamp_us));
425
426 // Prepare |channel_names_| and |media_info_| for use in
427 // |ProducePartialResultsOnNetworkThread|.
428 channel_name_pairs_.reset(new ChannelNamePairs());
429 if (pc_->session()->voice_channel()) {
430 channel_name_pairs_->voice = rtc::Optional<ChannelNamePair>(
431 ChannelNamePair(pc_->session()->voice_channel()->content_name(),
432 pc_->session()->voice_channel()->transport_name()));
433 }
434 if (pc_->session()->video_channel()) {
435 channel_name_pairs_->video = rtc::Optional<ChannelNamePair>(
436 ChannelNamePair(pc_->session()->video_channel()->content_name(),
437 pc_->session()->video_channel()->transport_name()));
438 }
439 if (pc_->session()->data_channel()) {
440 channel_name_pairs_->data = rtc::Optional<ChannelNamePair>(
441 ChannelNamePair(pc_->session()->data_channel()->content_name(),
442 pc_->session()->data_channel()->transport_name()));
443 }
444 media_info_.reset(PrepareMediaInfo_s().release());
422 invoker_.AsyncInvoke<void>(RTC_FROM_HERE, network_thread_, 445 invoker_.AsyncInvoke<void>(RTC_FROM_HERE, network_thread_,
423 rtc::Bind(&RTCStatsCollector::ProducePartialResultsOnNetworkThread, 446 rtc::Bind(&RTCStatsCollector::ProducePartialResultsOnNetworkThread,
424 rtc::scoped_refptr<RTCStatsCollector>(this), timestamp_us)); 447 rtc::scoped_refptr<RTCStatsCollector>(this), timestamp_us));
425 } 448 }
426 } 449 }
427 450
428 void RTCStatsCollector::ClearCachedStatsReport() { 451 void RTCStatsCollector::ClearCachedStatsReport() {
429 RTC_DCHECK(signaling_thread_->IsCurrent()); 452 RTC_DCHECK(signaling_thread_->IsCurrent());
430 cached_report_ = nullptr; 453 cached_report_ = nullptr;
431 } 454 }
432 455
433 void RTCStatsCollector::ProducePartialResultsOnSignalingThread( 456 void RTCStatsCollector::ProducePartialResultsOnSignalingThread(
434 int64_t timestamp_us) { 457 int64_t timestamp_us) {
435 RTC_DCHECK(signaling_thread_->IsCurrent()); 458 RTC_DCHECK(signaling_thread_->IsCurrent());
436 rtc::scoped_refptr<RTCStatsReport> report = RTCStatsReport::Create( 459 rtc::scoped_refptr<RTCStatsReport> report = RTCStatsReport::Create(
437 timestamp_us); 460 timestamp_us);
438 461
439 SessionStats session_stats;
440 if (pc_->session()->GetTransportStats(&session_stats)) {
441 std::map<std::string, CertificateStatsPair> transport_cert_stats =
442 PrepareTransportCertificateStats(session_stats);
443 MediaInfo media_info = PrepareMediaInfo(session_stats);
444
445 ProduceCertificateStats_s(
446 timestamp_us, transport_cert_stats, report.get());
447 ProduceCodecStats_s(
448 timestamp_us, media_info, report.get());
449 ProduceIceCandidateAndPairStats_s(
450 timestamp_us, session_stats, report.get());
451 ProduceRTPStreamStats_s(
452 timestamp_us, session_stats, media_info, report.get());
453 ProduceTransportStats_s(
454 timestamp_us, session_stats, transport_cert_stats, report.get());
455 }
456 ProduceDataChannelStats_s(timestamp_us, report.get()); 462 ProduceDataChannelStats_s(timestamp_us, report.get());
457 ProduceMediaStreamAndTrackStats_s(timestamp_us, report.get()); 463 ProduceMediaStreamAndTrackStats_s(timestamp_us, report.get());
458 ProducePeerConnectionStats_s(timestamp_us, report.get()); 464 ProducePeerConnectionStats_s(timestamp_us, report.get());
459 465
460 AddPartialResults(report); 466 AddPartialResults(report);
461 } 467 }
462 468
463 void RTCStatsCollector::ProducePartialResultsOnWorkerThread( 469 void RTCStatsCollector::ProducePartialResultsOnWorkerThread(
464 int64_t timestamp_us) { 470 int64_t timestamp_us) {
465 RTC_DCHECK(worker_thread_->IsCurrent()); 471 RTC_DCHECK(worker_thread_->IsCurrent());
466 rtc::scoped_refptr<RTCStatsReport> report = RTCStatsReport::Create( 472 rtc::scoped_refptr<RTCStatsReport> report = RTCStatsReport::Create(
467 timestamp_us); 473 timestamp_us);
468 474
469 // TODO(hbos): Gather stats on worker thread. 475 // TODO(hbos): There are no stats to be gathered on this thread, remove this
470 // pc_->session()'s channels are owned by the signaling thread but there are 476 // method.
471 // some stats that are gathered on the worker thread. Instead of a synchronous
472 // invoke on "s->w" we could to the "w" work here asynchronously if it wasn't
473 // for the ownership issue. Synchronous invokes in other places makes it
474 // difficult to introduce locks without introducing deadlocks and the channels
475 // are not reference counted.
476 477
477 AddPartialResults(report); 478 AddPartialResults(report);
478 } 479 }
479 480
480 void RTCStatsCollector::ProducePartialResultsOnNetworkThread( 481 void RTCStatsCollector::ProducePartialResultsOnNetworkThread(
481 int64_t timestamp_us) { 482 int64_t timestamp_us) {
482 RTC_DCHECK(network_thread_->IsCurrent()); 483 RTC_DCHECK(network_thread_->IsCurrent());
483 rtc::scoped_refptr<RTCStatsReport> report = RTCStatsReport::Create( 484 rtc::scoped_refptr<RTCStatsReport> report = RTCStatsReport::Create(
484 timestamp_us); 485 timestamp_us);
485 486
486 // TODO(hbos): Gather stats on network thread. 487 std::unique_ptr<SessionStats> session_stats =
487 // pc_->session()'s channels are owned by the signaling thread but there are 488 pc_->session()->GetStats(*channel_name_pairs_);
488 // some stats that are gathered on the network thread. Instead of a 489 if (session_stats) {
489 // synchronous invoke on "s->n" we could to the "n" work here asynchronously 490 std::map<std::string, CertificateStatsPair> transport_cert_stats =
490 // if it wasn't for the ownership issue. Synchronous invokes in other places 491 PrepareTransportCertificateStats_n(*session_stats);
491 // makes it difficult to introduce locks without introducing deadlocks and the 492
492 // channels are not reference counted. 493 ProduceCertificateStats_n(
494 timestamp_us, transport_cert_stats, report.get());
495 ProduceCodecStats_n(
496 timestamp_us, *media_info_, report.get());
497 ProduceIceCandidateAndPairStats_n(
498 timestamp_us, *session_stats, report.get());
499 ProduceRTPStreamStats_n(
500 timestamp_us, *session_stats, *media_info_, report.get());
501 ProduceTransportStats_n(
502 timestamp_us, *session_stats, transport_cert_stats, report.get());
503 }
493 504
494 AddPartialResults(report); 505 AddPartialResults(report);
495 } 506 }
496 507
497 void RTCStatsCollector::AddPartialResults( 508 void RTCStatsCollector::AddPartialResults(
498 const rtc::scoped_refptr<RTCStatsReport>& partial_report) { 509 const rtc::scoped_refptr<RTCStatsReport>& partial_report) {
499 if (!signaling_thread_->IsCurrent()) { 510 if (!signaling_thread_->IsCurrent()) {
500 invoker_.AsyncInvoke<void>(RTC_FROM_HERE, signaling_thread_, 511 invoker_.AsyncInvoke<void>(RTC_FROM_HERE, signaling_thread_,
501 rtc::Bind(&RTCStatsCollector::AddPartialResults_s, 512 rtc::Bind(&RTCStatsCollector::AddPartialResults_s,
502 rtc::scoped_refptr<RTCStatsCollector>(this), 513 rtc::scoped_refptr<RTCStatsCollector>(this),
(...skipping 24 matching lines...) Expand all
527 RTC_DCHECK(signaling_thread_->IsCurrent()); 538 RTC_DCHECK(signaling_thread_->IsCurrent());
528 RTC_DCHECK(!callbacks_.empty()); 539 RTC_DCHECK(!callbacks_.empty());
529 RTC_DCHECK(cached_report_); 540 RTC_DCHECK(cached_report_);
530 for (const rtc::scoped_refptr<RTCStatsCollectorCallback>& callback : 541 for (const rtc::scoped_refptr<RTCStatsCollectorCallback>& callback :
531 callbacks_) { 542 callbacks_) {
532 callback->OnStatsDelivered(cached_report_); 543 callback->OnStatsDelivered(cached_report_);
533 } 544 }
534 callbacks_.clear(); 545 callbacks_.clear();
535 } 546 }
536 547
537 void RTCStatsCollector::ProduceCertificateStats_s( 548 void RTCStatsCollector::ProduceCertificateStats_n(
538 int64_t timestamp_us, 549 int64_t timestamp_us,
539 const std::map<std::string, CertificateStatsPair>& transport_cert_stats, 550 const std::map<std::string, CertificateStatsPair>& transport_cert_stats,
540 RTCStatsReport* report) const { 551 RTCStatsReport* report) const {
541 RTC_DCHECK(signaling_thread_->IsCurrent()); 552 RTC_DCHECK(network_thread_->IsCurrent());
542 for (const auto& transport_cert_stats_pair : transport_cert_stats) { 553 for (const auto& transport_cert_stats_pair : transport_cert_stats) {
543 if (transport_cert_stats_pair.second.local) { 554 if (transport_cert_stats_pair.second.local) {
544 ProduceCertificateStatsFromSSLCertificateStats( 555 ProduceCertificateStatsFromSSLCertificateStats(
545 timestamp_us, *transport_cert_stats_pair.second.local.get(), report); 556 timestamp_us, *transport_cert_stats_pair.second.local.get(), report);
546 } 557 }
547 if (transport_cert_stats_pair.second.remote) { 558 if (transport_cert_stats_pair.second.remote) {
548 ProduceCertificateStatsFromSSLCertificateStats( 559 ProduceCertificateStatsFromSSLCertificateStats(
549 timestamp_us, *transport_cert_stats_pair.second.remote.get(), report); 560 timestamp_us, *transport_cert_stats_pair.second.remote.get(), report);
550 } 561 }
551 } 562 }
552 } 563 }
553 564
554 void RTCStatsCollector::ProduceCodecStats_s( 565 void RTCStatsCollector::ProduceCodecStats_n(
555 int64_t timestamp_us, const MediaInfo& media_info, 566 int64_t timestamp_us, const MediaInfo& media_info,
556 RTCStatsReport* report) const { 567 RTCStatsReport* report) const {
557 RTC_DCHECK(signaling_thread_->IsCurrent()); 568 RTC_DCHECK(network_thread_->IsCurrent());
558 // Audio 569 // Audio
559 if (media_info.voice) { 570 if (media_info.voice) {
560 // Inbound 571 // Inbound
561 for (const auto& pair : media_info.voice->receive_codecs) { 572 for (const auto& pair : media_info.voice->receive_codecs) {
562 report->AddStats(CodecStatsFromRtpCodecParameters( 573 report->AddStats(CodecStatsFromRtpCodecParameters(
563 timestamp_us, true, true, pair.second)); 574 timestamp_us, true, true, pair.second));
564 } 575 }
565 // Outbound 576 // Outbound
566 for (const auto& pair : media_info.voice->send_codecs) { 577 for (const auto& pair : media_info.voice->send_codecs) {
567 report->AddStats(CodecStatsFromRtpCodecParameters( 578 report->AddStats(CodecStatsFromRtpCodecParameters(
(...skipping 30 matching lines...) Expand all
598 data_channel_stats->state = 609 data_channel_stats->state =
599 DataStateToRTCDataChannelState(data_channel->state()); 610 DataStateToRTCDataChannelState(data_channel->state());
600 data_channel_stats->messages_sent = data_channel->messages_sent(); 611 data_channel_stats->messages_sent = data_channel->messages_sent();
601 data_channel_stats->bytes_sent = data_channel->bytes_sent(); 612 data_channel_stats->bytes_sent = data_channel->bytes_sent();
602 data_channel_stats->messages_received = data_channel->messages_received(); 613 data_channel_stats->messages_received = data_channel->messages_received();
603 data_channel_stats->bytes_received = data_channel->bytes_received(); 614 data_channel_stats->bytes_received = data_channel->bytes_received();
604 report->AddStats(std::move(data_channel_stats)); 615 report->AddStats(std::move(data_channel_stats));
605 } 616 }
606 } 617 }
607 618
608 void RTCStatsCollector::ProduceIceCandidateAndPairStats_s( 619 void RTCStatsCollector::ProduceIceCandidateAndPairStats_n(
609 int64_t timestamp_us, const SessionStats& session_stats, 620 int64_t timestamp_us, const SessionStats& session_stats,
610 RTCStatsReport* report) const { 621 RTCStatsReport* report) const {
611 RTC_DCHECK(signaling_thread_->IsCurrent()); 622 RTC_DCHECK(network_thread_->IsCurrent());
612 for (const auto& transport_stats : session_stats.transport_stats) { 623 for (const auto& transport_stats : session_stats.transport_stats) {
613 for (const auto& channel_stats : transport_stats.second.channel_stats) { 624 for (const auto& channel_stats : transport_stats.second.channel_stats) {
614 std::string transport_id = RTCTransportStatsIDFromTransportChannel( 625 std::string transport_id = RTCTransportStatsIDFromTransportChannel(
615 transport_stats.second.transport_name, channel_stats.component); 626 transport_stats.second.transport_name, channel_stats.component);
616 for (const cricket::ConnectionInfo& info : 627 for (const cricket::ConnectionInfo& info :
617 channel_stats.connection_infos) { 628 channel_stats.connection_infos) {
618 std::unique_ptr<RTCIceCandidatePairStats> candidate_pair_stats( 629 std::unique_ptr<RTCIceCandidatePairStats> candidate_pair_stats(
619 new RTCIceCandidatePairStats( 630 new RTCIceCandidatePairStats(
620 RTCIceCandidatePairStatsIDFromConnectionInfo(info), 631 RTCIceCandidatePairStatsIDFromConnectionInfo(info),
621 timestamp_us)); 632 timestamp_us));
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after
674 void RTCStatsCollector::ProducePeerConnectionStats_s( 685 void RTCStatsCollector::ProducePeerConnectionStats_s(
675 int64_t timestamp_us, RTCStatsReport* report) const { 686 int64_t timestamp_us, RTCStatsReport* report) const {
676 RTC_DCHECK(signaling_thread_->IsCurrent()); 687 RTC_DCHECK(signaling_thread_->IsCurrent());
677 std::unique_ptr<RTCPeerConnectionStats> stats( 688 std::unique_ptr<RTCPeerConnectionStats> stats(
678 new RTCPeerConnectionStats("RTCPeerConnection", timestamp_us)); 689 new RTCPeerConnectionStats("RTCPeerConnection", timestamp_us));
679 stats->data_channels_opened = internal_record_.data_channels_opened; 690 stats->data_channels_opened = internal_record_.data_channels_opened;
680 stats->data_channels_closed = internal_record_.data_channels_closed; 691 stats->data_channels_closed = internal_record_.data_channels_closed;
681 report->AddStats(std::move(stats)); 692 report->AddStats(std::move(stats));
682 } 693 }
683 694
684 void RTCStatsCollector::ProduceRTPStreamStats_s( 695 void RTCStatsCollector::ProduceRTPStreamStats_n(
685 int64_t timestamp_us, const SessionStats& session_stats, 696 int64_t timestamp_us, const SessionStats& session_stats,
686 const MediaInfo& media_info, RTCStatsReport* report) const { 697 const MediaInfo& media_info, RTCStatsReport* report) const {
687 RTC_DCHECK(signaling_thread_->IsCurrent()); 698 RTC_DCHECK(network_thread_->IsCurrent());
688 699
689 // Audio 700 // Audio
690 if (media_info.voice) { 701 if (media_info.voice) {
691 std::string transport_id = RTCTransportStatsIDFromBaseChannel( 702 std::string transport_id = RTCTransportStatsIDFromBaseChannel(
692 session_stats.proxy_to_transport, *pc_->session()->voice_channel()); 703 session_stats.proxy_to_transport, *pc_->session()->voice_channel());
693 RTC_DCHECK(!transport_id.empty()); 704 RTC_DCHECK(!transport_id.empty());
694 // Inbound 705 // Inbound
695 for (const cricket::VoiceReceiverInfo& voice_receiver_info : 706 for (const cricket::VoiceReceiverInfo& voice_receiver_info :
696 media_info.voice->receivers) { 707 media_info.voice->receivers) {
697 // TODO(nisse): SSRC == 0 currently means none. Delete check when that 708 // TODO(nisse): SSRC == 0 currently means none. Delete check when that
(...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after
781 if (video_sender_info.codec_payload_type) { 792 if (video_sender_info.codec_payload_type) {
782 outbound_video->codec_id = 793 outbound_video->codec_id =
783 RTCCodecStatsIDFromDirectionMediaAndPayload( 794 RTCCodecStatsIDFromDirectionMediaAndPayload(
784 false, false, *video_sender_info.codec_payload_type); 795 false, false, *video_sender_info.codec_payload_type);
785 } 796 }
786 report->AddStats(std::move(outbound_video)); 797 report->AddStats(std::move(outbound_video));
787 } 798 }
788 } 799 }
789 } 800 }
790 801
791 void RTCStatsCollector::ProduceTransportStats_s( 802 void RTCStatsCollector::ProduceTransportStats_n(
792 int64_t timestamp_us, const SessionStats& session_stats, 803 int64_t timestamp_us, const SessionStats& session_stats,
793 const std::map<std::string, CertificateStatsPair>& transport_cert_stats, 804 const std::map<std::string, CertificateStatsPair>& transport_cert_stats,
794 RTCStatsReport* report) const { 805 RTCStatsReport* report) const {
795 RTC_DCHECK(signaling_thread_->IsCurrent()); 806 RTC_DCHECK(network_thread_->IsCurrent());
796 for (const auto& transport : session_stats.transport_stats) { 807 for (const auto& transport : session_stats.transport_stats) {
797 // Get reference to RTCP channel, if it exists. 808 // Get reference to RTCP channel, if it exists.
798 std::string rtcp_transport_stats_id; 809 std::string rtcp_transport_stats_id;
799 for (const auto& channel_stats : transport.second.channel_stats) { 810 for (const auto& channel_stats : transport.second.channel_stats) {
800 if (channel_stats.component == 811 if (channel_stats.component ==
801 cricket::ICE_CANDIDATE_COMPONENT_RTCP) { 812 cricket::ICE_CANDIDATE_COMPONENT_RTCP) {
802 rtcp_transport_stats_id = RTCTransportStatsIDFromTransportChannel( 813 rtcp_transport_stats_id = RTCTransportStatsIDFromTransportChannel(
803 transport.second.transport_name, channel_stats.component); 814 transport.second.transport_name, channel_stats.component);
804 break; 815 break;
805 } 816 }
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
848 if (!local_certificate_id.empty()) 859 if (!local_certificate_id.empty())
849 transport_stats->local_certificate_id = local_certificate_id; 860 transport_stats->local_certificate_id = local_certificate_id;
850 if (!remote_certificate_id.empty()) 861 if (!remote_certificate_id.empty())
851 transport_stats->remote_certificate_id = remote_certificate_id; 862 transport_stats->remote_certificate_id = remote_certificate_id;
852 report->AddStats(std::move(transport_stats)); 863 report->AddStats(std::move(transport_stats));
853 } 864 }
854 } 865 }
855 } 866 }
856 867
857 std::map<std::string, RTCStatsCollector::CertificateStatsPair> 868 std::map<std::string, RTCStatsCollector::CertificateStatsPair>
858 RTCStatsCollector::PrepareTransportCertificateStats( 869 RTCStatsCollector::PrepareTransportCertificateStats_n(
859 const SessionStats& session_stats) const { 870 const SessionStats& session_stats) const {
860 RTC_DCHECK(signaling_thread_->IsCurrent()); 871 RTC_DCHECK(network_thread_->IsCurrent());
861 std::map<std::string, CertificateStatsPair> transport_cert_stats; 872 std::map<std::string, CertificateStatsPair> transport_cert_stats;
862 for (const auto& transport_stats : session_stats.transport_stats) { 873 for (const auto& transport_stats : session_stats.transport_stats) {
863 CertificateStatsPair certificate_stats_pair; 874 CertificateStatsPair certificate_stats_pair;
864 rtc::scoped_refptr<rtc::RTCCertificate> local_certificate; 875 rtc::scoped_refptr<rtc::RTCCertificate> local_certificate;
865 if (pc_->session()->GetLocalCertificate( 876 if (pc_->session()->GetLocalCertificate(
866 transport_stats.second.transport_name, &local_certificate)) { 877 transport_stats.second.transport_name, &local_certificate)) {
867 certificate_stats_pair.local = 878 certificate_stats_pair.local =
868 local_certificate->ssl_certificate().GetStats(); 879 local_certificate->ssl_certificate().GetStats();
869 } 880 }
870 std::unique_ptr<rtc::SSLCertificate> remote_certificate = 881 std::unique_ptr<rtc::SSLCertificate> remote_certificate =
871 pc_->session()->GetRemoteSSLCertificate( 882 pc_->session()->GetRemoteSSLCertificate(
872 transport_stats.second.transport_name); 883 transport_stats.second.transport_name);
873 if (remote_certificate) { 884 if (remote_certificate) {
874 certificate_stats_pair.remote = remote_certificate->GetStats(); 885 certificate_stats_pair.remote = remote_certificate->GetStats();
875 } 886 }
876 transport_cert_stats.insert( 887 transport_cert_stats.insert(
877 std::make_pair(transport_stats.second.transport_name, 888 std::make_pair(transport_stats.second.transport_name,
878 std::move(certificate_stats_pair))); 889 std::move(certificate_stats_pair)));
879 } 890 }
880 return transport_cert_stats; 891 return transport_cert_stats;
881 } 892 }
882 893
883 RTCStatsCollector::MediaInfo RTCStatsCollector::PrepareMediaInfo( 894 std::unique_ptr<RTCStatsCollector::MediaInfo>
884 const SessionStats& session_stats) const { 895 RTCStatsCollector::PrepareMediaInfo_s() const {
885 MediaInfo media_info; 896 RTC_DCHECK(signaling_thread_->IsCurrent());
897 std::unique_ptr<MediaInfo> media_info(new MediaInfo());
886 if (pc_->session()->voice_channel()) { 898 if (pc_->session()->voice_channel()) {
887 cricket::VoiceMediaInfo voice_media_info; 899 cricket::VoiceMediaInfo voice_media_info;
888 if (pc_->session()->voice_channel()->GetStats(&voice_media_info)) { 900 if (pc_->session()->voice_channel()->GetStats(&voice_media_info)) {
889 media_info.voice = rtc::Optional<cricket::VoiceMediaInfo>( 901 media_info->voice = rtc::Optional<cricket::VoiceMediaInfo>(
890 std::move(voice_media_info)); 902 std::move(voice_media_info));
891 } 903 }
892 } 904 }
893 if (pc_->session()->video_channel()) { 905 if (pc_->session()->video_channel()) {
894 cricket::VideoMediaInfo video_media_info; 906 cricket::VideoMediaInfo video_media_info;
895 if (pc_->session()->video_channel()->GetStats(&video_media_info)) { 907 if (pc_->session()->video_channel()->GetStats(&video_media_info)) {
896 media_info.video = rtc::Optional<cricket::VideoMediaInfo>( 908 media_info->video = rtc::Optional<cricket::VideoMediaInfo>(
897 std::move(video_media_info)); 909 std::move(video_media_info));
898 } 910 }
899 } 911 }
900 return media_info; 912 return media_info;
901 } 913 }
902 914
903 void RTCStatsCollector::OnDataChannelCreated(DataChannel* channel) { 915 void RTCStatsCollector::OnDataChannelCreated(DataChannel* channel) {
904 channel->SignalOpened.connect(this, &RTCStatsCollector::OnDataChannelOpened); 916 channel->SignalOpened.connect(this, &RTCStatsCollector::OnDataChannelOpened);
905 channel->SignalClosed.connect(this, &RTCStatsCollector::OnDataChannelClosed); 917 channel->SignalClosed.connect(this, &RTCStatsCollector::OnDataChannelClosed);
906 } 918 }
(...skipping 21 matching lines...) Expand all
928 const std::string& type) { 940 const std::string& type) {
929 return CandidateTypeToRTCIceCandidateType(type); 941 return CandidateTypeToRTCIceCandidateType(type);
930 } 942 }
931 943
932 const char* DataStateToRTCDataChannelStateForTesting( 944 const char* DataStateToRTCDataChannelStateForTesting(
933 DataChannelInterface::DataState state) { 945 DataChannelInterface::DataState state) {
934 return DataStateToRTCDataChannelState(state); 946 return DataStateToRTCDataChannelState(state);
935 } 947 }
936 948
937 } // namespace webrtc 949 } // 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