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); |
} |