Chromium Code Reviews| Index: talk/app/webrtc/webrtcsession.cc |
| diff --git a/talk/app/webrtc/webrtcsession.cc b/talk/app/webrtc/webrtcsession.cc |
| index 2533328968945e4c2c67a2694e95ae8d19c288ea..4f13bab3827730cc1002d47e6433d8421d561073 100644 |
| --- a/talk/app/webrtc/webrtcsession.cc |
| +++ b/talk/app/webrtc/webrtcsession.cc |
| @@ -57,6 +57,11 @@ using cricket::MediaContentDescription; |
| using cricket::SessionDescription; |
| using cricket::TransportInfo; |
| +using cricket::LOCAL_PORT_TYPE; |
| +using cricket::STUN_PORT_TYPE; |
| +using cricket::RELAY_PORT_TYPE; |
| +using cricket::PRFLX_PORT_TYPE; |
| + |
| namespace webrtc { |
| // Error messages |
| @@ -83,6 +88,50 @@ const char kDtlsSetupFailureRtcp[] = |
| "Couldn't set up DTLS-SRTP on RTCP channel."; |
| const int kMaxUnsignalledRecvStreams = 20; |
| +IceCandidatePairType GetIceCandidatePairCounter( |
| + const cricket::Candidate& local, |
| + const cricket::Candidate& remote) { |
| + const auto& l = local.type(); |
| + const auto& r = remote.type(); |
| + const auto& host = LOCAL_PORT_TYPE; |
| + const auto& srflx = STUN_PORT_TYPE; |
| + const auto& relay = RELAY_PORT_TYPE; |
| + const auto& prflx = PRFLX_PORT_TYPE; |
| + if (l == host && r == host) |
| + return kIceCandidatePairHostHost; |
|
pthatcher2
2015/08/19 18:39:42
host host is here twice.
guoweis_webrtc
2015/08/19 19:03:24
Done.
|
| + if (l == host && r == host) |
| + return kIceCandidatePairHostHost; |
| + if (l == host && r == srflx) |
| + return kIceCandidatePairHostSrflx; |
| + if (l == host && r == relay) |
| + return kIceCandidatePairHostRelay; |
| + if (l == host && r == prflx) |
| + return kIceCandidatePairHostPrflx; |
| + if (l == srflx && r == host) |
| + return kIceCandidatePairSrflxHost; |
| + if (l == srflx && r == srflx) |
| + return kIceCandidatePairSrflxSrflx; |
| + if (l == srflx && r == relay) |
| + return kIceCandidatePairSrflxRelay; |
| + if (l == srflx && r == prflx) |
| + return kIceCandidatePairSrflxPrflx; |
| + if (l == relay && r == host) |
| + return kIceCandidatePairRelayHost; |
| + if (l == relay && r == srflx) |
| + return kIceCandidatePairRelaySrflx; |
| + if (l == relay && r == relay) |
| + return kIceCandidatePairRelayRelay; |
| + if (l == relay && r == prflx) |
| + return kIceCandidatePairRelayPrflx; |
| + if (l == prflx && r == host) |
| + return kIceCandidatePairPrflxHost; |
| + if (l == prflx && r == srflx) |
| + return kIceCandidatePairPrflxSrflx; |
| + if (l == prflx && r == relay) |
| + return kIceCandidatePairPrflxRelay; |
| + return kIceCandidatePairMax; |
| +} |
| + |
| // Compares |answer| against |offer|. Comparision is done |
| // for number of m-lines in answer against offer. If matches true will be |
| // returned otherwise false. |
| @@ -1916,14 +1965,46 @@ void WebRtcSession::ReportBestConnectionState( |
| if (!it_info->best_connection) { |
| continue; |
| } |
| - if (it_info->local_candidate.address().family() == AF_INET) { |
| + |
| + PeerConnectionEnumCounterType type = kPeerConnectionEnumCounterMax; |
| + const cricket::Candidate& local = it_info->local_candidate; |
| + const cricket::Candidate& remote = it_info->remote_candidate; |
| + |
| + // Increment the counter for IceCandidatePairType. |
| + if (local.protocol() == cricket::TCP_PROTOCOL_NAME || |
| + (local.type() == RELAY_PORT_TYPE && |
| + local.relay_protocol() == cricket::TCP_PROTOCOL_NAME)) { |
| + type = kEnumCounterIceCandidatePairTypeTcp; |
| + } else if (local.protocol() == cricket::UDP_PROTOCOL_NAME) { |
| + type = kEnumCounterIceCandidatePairTypeUdp; |
| + } else { |
| + RTC_NOTREACHED(); |
| + } |
| + metrics_observer_->IncrementEnumCounter( |
| + type, GetIceCandidatePairCounter(local, remote), |
| + kIceCandidatePairMax); |
| + |
| + // Increment the counter for IP type. |
| + if (local.address().family() == AF_INET) { |
| + // TODO(guoweis): Remove this next line once IncrementEnumCounter |
| + // implemented for PeerConnectionMetrics. |
| metrics_observer_->IncrementCounter(kBestConnections_IPv4); |
| - } else if (it_info->local_candidate.address().family() == |
| - AF_INET6) { |
| + |
| + metrics_observer_->IncrementEnumCounter( |
| + kEnumCounterAddressFamily, kBestConnections_IPv4, |
| + kPeerConnectionAddressFamilyCounter_Max); |
| + |
| + } else if (local.address().family() == AF_INET6) { |
| + // TODO(guoweis): Remove this next line. |
| metrics_observer_->IncrementCounter(kBestConnections_IPv6); |
| + |
| + metrics_observer_->IncrementEnumCounter( |
| + kEnumCounterAddressFamily, kBestConnections_IPv6, |
| + kPeerConnectionAddressFamilyCounter_Max); |
| } else { |
| RTC_NOTREACHED(); |
| } |
| + |
| return; |
| } |
| } |