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

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

Issue 2583883002: RTCStatsCollector: Utilize network thread to minimize thread hops. (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/webrtcsession.h ('k') | webrtc/api/webrtcsession_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 2012 The WebRTC project authors. All Rights Reserved. 2 * Copyright 2012 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 952 matching lines...) Expand 10 before | Expand all | Expand 10 after
963 } 963 }
964 const TransportInfo* transport_info = 964 const TransportInfo* transport_info =
965 description->GetTransportInfoByName(content_name); 965 description->GetTransportInfoByName(content_name);
966 if (!transport_info) { 966 if (!transport_info) {
967 return false; 967 return false;
968 } 968 }
969 *tdesc = transport_info->description; 969 *tdesc = transport_info->description;
970 return true; 970 return true;
971 } 971 }
972 972
973 bool WebRtcSession::GetTransportStats(SessionStats* stats) { 973 std::unique_ptr<SessionStats> WebRtcSession::GetStats_s() {
974 ASSERT(signaling_thread()->IsCurrent()); 974 ASSERT(signaling_thread()->IsCurrent());
975 return (GetChannelTransportStats(voice_channel(), stats) && 975 ChannelNamePairs channel_name_pairs;
976 GetChannelTransportStats(video_channel(), stats) && 976 if (voice_channel()) {
977 GetChannelTransportStats(data_channel(), stats)); 977 channel_name_pairs.voice = rtc::Optional<ChannelNamePair>(ChannelNamePair(
978 voice_channel()->content_name(), voice_channel()->transport_name()));
979 }
980 if (video_channel()) {
981 channel_name_pairs.video = rtc::Optional<ChannelNamePair>(ChannelNamePair(
982 video_channel()->content_name(), video_channel()->transport_name()));
983 }
984 if (data_channel()) {
985 channel_name_pairs.data = rtc::Optional<ChannelNamePair>(ChannelNamePair(
986 data_channel()->content_name(), data_channel()->transport_name()));
987 }
988 return GetStats(channel_name_pairs);
978 } 989 }
979 990
980 bool WebRtcSession::GetChannelTransportStats(cricket::BaseChannel* ch, 991 std::unique_ptr<SessionStats> WebRtcSession::GetStats(
981 SessionStats* stats) { 992 const ChannelNamePairs& channel_name_pairs) {
982 ASSERT(signaling_thread()->IsCurrent()); 993 if (network_thread()->IsCurrent()) {
983 if (!ch) { 994 return GetStats_n(channel_name_pairs);
984 // Not using this channel.
985 return true;
986 } 995 }
987 996 return network_thread()->Invoke<std::unique_ptr<SessionStats>>(
988 const std::string& content_name = ch->content_name(); 997 RTC_FROM_HERE,
989 const std::string& transport_name = ch->transport_name(); 998 rtc::Bind(&WebRtcSession::GetStats_n, this, channel_name_pairs));
990 stats->proxy_to_transport[content_name] = transport_name;
991 if (stats->transport_stats.find(transport_name) !=
992 stats->transport_stats.end()) {
993 // Transport stats already done for this transport.
994 return true;
995 }
996
997 cricket::TransportStats tstats;
998 if (!transport_controller_->GetStats(transport_name, &tstats)) {
999 return false;
1000 }
1001
1002 stats->transport_stats[transport_name] = tstats;
1003 return true;
1004 } 999 }
1005 1000
1006 bool WebRtcSession::GetLocalCertificate( 1001 bool WebRtcSession::GetLocalCertificate(
1007 const std::string& transport_name, 1002 const std::string& transport_name,
1008 rtc::scoped_refptr<rtc::RTCCertificate>* certificate) { 1003 rtc::scoped_refptr<rtc::RTCCertificate>* certificate) {
1009 ASSERT(signaling_thread()->IsCurrent());
1010 return transport_controller_->GetLocalCertificate(transport_name, 1004 return transport_controller_->GetLocalCertificate(transport_name,
1011 certificate); 1005 certificate);
1012 } 1006 }
1013 1007
1014 std::unique_ptr<rtc::SSLCertificate> WebRtcSession::GetRemoteSSLCertificate( 1008 std::unique_ptr<rtc::SSLCertificate> WebRtcSession::GetRemoteSSLCertificate(
1015 const std::string& transport_name) { 1009 const std::string& transport_name) {
1016 ASSERT(signaling_thread()->IsCurrent());
1017 return transport_controller_->GetRemoteSSLCertificate(transport_name); 1010 return transport_controller_->GetRemoteSSLCertificate(transport_name);
1018 } 1011 }
1019 1012
1020 bool WebRtcSession::EnableBundle(const cricket::ContentGroup& bundle) { 1013 bool WebRtcSession::EnableBundle(const cricket::ContentGroup& bundle) {
1021 const std::string* first_content_name = bundle.FirstContentName(); 1014 const std::string* first_content_name = bundle.FirstContentName();
1022 if (!first_content_name) { 1015 if (!first_content_name) {
1023 LOG(LS_WARNING) << "Tried to BUNDLE with no contents."; 1016 LOG(LS_WARNING) << "Tried to BUNDLE with no contents.";
1024 return false; 1017 return false;
1025 } 1018 }
1026 const std::string& transport_name = *first_content_name; 1019 const std::string& transport_name = *first_content_name;
(...skipping 682 matching lines...) Expand 10 before | Expand all | Expand 10 after
1709 } 1702 }
1710 1703
1711 data_channel_->SignalDtlsSetupFailure.connect( 1704 data_channel_->SignalDtlsSetupFailure.connect(
1712 this, &WebRtcSession::OnDtlsSetupFailure); 1705 this, &WebRtcSession::OnDtlsSetupFailure);
1713 1706
1714 SignalDataChannelCreated(); 1707 SignalDataChannelCreated();
1715 data_channel_->SignalSentPacket.connect(this, &WebRtcSession::OnSentPacket_w); 1708 data_channel_->SignalSentPacket.connect(this, &WebRtcSession::OnSentPacket_w);
1716 return true; 1709 return true;
1717 } 1710 }
1718 1711
1712 std::unique_ptr<SessionStats> WebRtcSession::GetStats_n(
1713 const ChannelNamePairs& channel_name_pairs) {
1714 ASSERT(network_thread()->IsCurrent());
1715 std::unique_ptr<SessionStats> session_stats(new SessionStats());
1716 for (const auto channel_name_pair : { &channel_name_pairs.voice,
1717 &channel_name_pairs.video,
1718 &channel_name_pairs.data }) {
1719 if (*channel_name_pair) {
1720 cricket::TransportStats transport_stats;
1721 if (!transport_controller_->GetStats((*channel_name_pair)->transport_name,
1722 &transport_stats)) {
1723 return nullptr;
1724 }
1725 session_stats->proxy_to_transport[(*channel_name_pair)->content_name] =
1726 (*channel_name_pair)->transport_name;
1727 session_stats->transport_stats[(*channel_name_pair)->transport_name] =
1728 std::move(transport_stats);
1729 }
1730 }
1731 return session_stats;
1732 }
1733
1719 void WebRtcSession::OnDtlsSetupFailure(cricket::BaseChannel*, bool rtcp) { 1734 void WebRtcSession::OnDtlsSetupFailure(cricket::BaseChannel*, bool rtcp) {
1720 SetError(ERROR_TRANSPORT, 1735 SetError(ERROR_TRANSPORT,
1721 rtcp ? kDtlsSetupFailureRtcp : kDtlsSetupFailureRtp); 1736 rtcp ? kDtlsSetupFailureRtcp : kDtlsSetupFailureRtp);
1722 } 1737 }
1723 1738
1724 void WebRtcSession::OnDataChannelMessageReceived( 1739 void WebRtcSession::OnDataChannelMessageReceived(
1725 cricket::DataChannel* channel, 1740 cricket::DataChannel* channel,
1726 const cricket::ReceiveDataParams& params, 1741 const cricket::ReceiveDataParams& params,
1727 const rtc::CopyOnWriteBuffer& payload) { 1742 const rtc::CopyOnWriteBuffer& payload) {
1728 RTC_DCHECK(data_channel_type_ == cricket::DCT_SCTP); 1743 RTC_DCHECK(data_channel_type_ == cricket::DCT_SCTP);
(...skipping 330 matching lines...) Expand 10 before | Expand all | Expand 10 after
2059 } 2074 }
2060 2075
2061 void WebRtcSession::OnDtlsHandshakeError(rtc::SSLHandshakeError error) { 2076 void WebRtcSession::OnDtlsHandshakeError(rtc::SSLHandshakeError error) {
2062 if (metrics_observer_) { 2077 if (metrics_observer_) {
2063 metrics_observer_->IncrementEnumCounter( 2078 metrics_observer_->IncrementEnumCounter(
2064 webrtc::kEnumCounterDtlsHandshakeError, static_cast<int>(error), 2079 webrtc::kEnumCounterDtlsHandshakeError, static_cast<int>(error),
2065 static_cast<int>(rtc::SSLHandshakeError::MAX_VALUE)); 2080 static_cast<int>(rtc::SSLHandshakeError::MAX_VALUE));
2066 } 2081 }
2067 } 2082 }
2068 } // namespace webrtc 2083 } // namespace webrtc
OLDNEW
« no previous file with comments | « webrtc/api/webrtcsession.h ('k') | webrtc/api/webrtcsession_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698