| Index: talk/app/webrtc/webrtcsession.cc
|
| diff --git a/talk/app/webrtc/webrtcsession.cc b/talk/app/webrtc/webrtcsession.cc
|
| index c37eadb8a82ceb0cc48f401ab0256957ed9f21f1..fde45104d61ddfafee2791b1e297d164ab6425ac 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,48 @@ 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;
|
| + 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.
|
| @@ -1921,14 +1968,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 {
|
| + CHECK(0);
|
| + }
|
| + 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();
|
| + CHECK(0);
|
| }
|
| +
|
| return;
|
| }
|
| }
|
|
|