| Index: content/renderer/media/rtc_peer_connection_handler.cc
|
| diff --git a/content/renderer/media/rtc_peer_connection_handler.cc b/content/renderer/media/rtc_peer_connection_handler.cc
|
| index c5c68e4d7418ba6b9d591e72cfbb5fd56e2e8657..7f1b85aeab0cc6671169f9cfa7629d69cb7909dc 100644
|
| --- a/content/renderer/media/rtc_peer_connection_handler.cc
|
| +++ b/content/renderer/media/rtc_peer_connection_handler.cc
|
| @@ -390,7 +390,9 @@ RTCPeerConnectionHandler::RTCPeerConnectionHandler(
|
| dependency_factory_(dependency_factory),
|
| frame_(NULL),
|
| peer_connection_tracker_(NULL),
|
| - num_data_channels_created_(0) {
|
| + num_data_channels_created_(0),
|
| + num_local_candidates_ipv4_(0),
|
| + num_local_candidates_ipv6_(0) {
|
| g_peer_connection_handlers.Get().insert(this);
|
| }
|
|
|
| @@ -894,6 +896,18 @@ void RTCPeerConnectionHandler::OnIceGatheringChange(
|
| // to signal end of candidates.
|
| blink::WebRTCICECandidate null_candidate;
|
| client_->didGenerateICECandidate(null_candidate);
|
| +
|
| + UMA_HISTOGRAM_COUNTS_100("WebRTC.PeerConnection.IPv4LocalCandidates",
|
| + num_local_candidates_ipv4_);
|
| +
|
| + UMA_HISTOGRAM_COUNTS_100("WebRTC.PeerConnection.IPv6LocalCandidates",
|
| + num_local_candidates_ipv6_);
|
| + } else if (new_state ==
|
| + webrtc::PeerConnectionInterface::kIceGatheringGathering) {
|
| + // ICE restarts will change gathering state back to "gathering",
|
| + // reset the counter.
|
| + num_local_candidates_ipv6_ = 0;
|
| + num_local_candidates_ipv4_ = 0;
|
| }
|
|
|
| blink::WebRTCPeerConnectionHandlerClient::ICEGatheringState state =
|
| @@ -968,6 +982,18 @@ void RTCPeerConnectionHandler::OnIceCandidate(
|
| peer_connection_tracker_->TrackAddIceCandidate(
|
| this, web_candidate, PeerConnectionTracker::SOURCE_LOCAL, true);
|
|
|
| + // Only the first m line's first component is tracked to avoid
|
| + // miscounting when doing BUNDLE or rtcp mux.
|
| + if (candidate->sdp_mline_index() == 0 &&
|
| + candidate->candidate().component() == 1) {
|
| + if (candidate->candidate().address().family() == AF_INET) {
|
| + num_local_candidates_ipv4_++;
|
| + } else if (candidate->candidate().address().family() == AF_INET6) {
|
| + num_local_candidates_ipv6_++;
|
| + } else {
|
| + NOTREACHED();
|
| + }
|
| + }
|
| client_->didGenerateICECandidate(web_candidate);
|
| }
|
|
|
|
|