OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "content/renderer/media/rtc_peer_connection_handler.h" | 5 #include "content/renderer/media/rtc_peer_connection_handler.h" |
6 | 6 |
7 #include <string> | 7 #include <string> |
8 #include <utility> | 8 #include <utility> |
9 #include <vector> | 9 #include <vector> |
10 | 10 |
(...skipping 487 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
498 if (!pc->GetStats(observer.get(), track.get(), level)) { | 498 if (!pc->GetStats(observer.get(), track.get(), level)) { |
499 DVLOG(1) << "GetStats failed."; | 499 DVLOG(1) << "GetStats failed."; |
500 observer->OnComplete(StatsReports()); | 500 observer->OnComplete(StatsReports()); |
501 } | 501 } |
502 } | 502 } |
503 | 503 |
504 class PeerConnectionUMAObserver : public webrtc::UMAObserver { | 504 class PeerConnectionUMAObserver : public webrtc::UMAObserver { |
505 public: | 505 public: |
506 PeerConnectionUMAObserver() {} | 506 PeerConnectionUMAObserver() {} |
507 ~PeerConnectionUMAObserver() override {} | 507 ~PeerConnectionUMAObserver() override {} |
508 | 508 void IncrementEnumCounter(webrtc::PeerConnectionEnumCounterType counter_type, |
509 void IncrementCounter( | 509 int counter, |
510 webrtc::PeerConnectionUMAMetricsCounter counter) override { | 510 int counter_max) override { |
511 // Runs on libjingle's signaling thread. | 511 switch (counter_type) { |
512 UMA_HISTOGRAM_ENUMERATION("WebRTC.PeerConnection.IPMetrics", | 512 case webrtc::kEnumCounterAddressFamily: |
513 counter, | 513 UMA_HISTOGRAM_ENUMERATION("WebRTC.PeerConnection.IPMetrics", counter, |
514 webrtc::kBoundary); | 514 counter_max); |
| 515 break; |
| 516 case webrtc::kEnumCounterIceCandidatePairTypeUdp: |
| 517 UMA_HISTOGRAM_ENUMERATION("WebRTC.PeerConnection.CandidatePairType_UDP", |
| 518 counter, counter_max); |
| 519 break; |
| 520 case webrtc::kEnumCounterIceCandidatePairTypeTcp: |
| 521 UMA_HISTOGRAM_ENUMERATION("WebRTC.PeerConnection.CandidatePairType_TCP", |
| 522 counter, counter_max); |
| 523 break; |
| 524 case webrtc::kPeerConnectionEnumCounterMax: |
| 525 NOTREACHED(); |
| 526 break; |
| 527 } |
515 } | 528 } |
516 | 529 |
517 void AddHistogramSample(webrtc::PeerConnectionUMAMetricsName type, | 530 void AddHistogramSample(webrtc::PeerConnectionUMAMetricsName type, |
518 int value) override { | 531 int value) override { |
519 // Runs on libjingle's signaling thread. | 532 // Runs on libjingle's signaling thread. |
520 switch (type) { | 533 switch (type) { |
521 case webrtc::kTimeToConnect: | 534 case webrtc::kTimeToConnect: |
522 UMA_HISTOGRAM_MEDIUM_TIMES( | 535 UMA_HISTOGRAM_MEDIUM_TIMES( |
523 "WebRTC.PeerConnection.TimeToConnect", | 536 "WebRTC.PeerConnection.TimeToConnect", |
524 base::TimeDelta::FromMilliseconds(value)); | 537 base::TimeDelta::FromMilliseconds(value)); |
(...skipping 190 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
715 private: | 728 private: |
716 const base::WeakPtr<RTCPeerConnectionHandler> handler_; | 729 const base::WeakPtr<RTCPeerConnectionHandler> handler_; |
717 const scoped_refptr<base::SingleThreadTaskRunner> main_thread_; | 730 const scoped_refptr<base::SingleThreadTaskRunner> main_thread_; |
718 }; | 731 }; |
719 | 732 |
720 RTCPeerConnectionHandler::RTCPeerConnectionHandler( | 733 RTCPeerConnectionHandler::RTCPeerConnectionHandler( |
721 blink::WebRTCPeerConnectionHandlerClient* client, | 734 blink::WebRTCPeerConnectionHandlerClient* client, |
722 PeerConnectionDependencyFactory* dependency_factory) | 735 PeerConnectionDependencyFactory* dependency_factory) |
723 : client_(client), | 736 : client_(client), |
724 dependency_factory_(dependency_factory), | 737 dependency_factory_(dependency_factory), |
725 frame_(NULL), | |
726 num_data_channels_created_(0), | |
727 num_local_candidates_ipv4_(0), | |
728 num_local_candidates_ipv6_(0), | |
729 weak_factory_(this) { | 738 weak_factory_(this) { |
730 g_peer_connection_handlers.Get().insert(this); | 739 g_peer_connection_handlers.Get().insert(this); |
731 } | 740 } |
732 | 741 |
733 RTCPeerConnectionHandler::~RTCPeerConnectionHandler() { | 742 RTCPeerConnectionHandler::~RTCPeerConnectionHandler() { |
734 DCHECK(thread_checker_.CalledOnValidThread()); | 743 DCHECK(thread_checker_.CalledOnValidThread()); |
735 | 744 |
736 stop(); | 745 stop(); |
737 | 746 |
738 g_peer_connection_handlers.Get().erase(this); | 747 g_peer_connection_handlers.Get().erase(this); |
(...skipping 571 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1310 peer_connection_tracker_->TrackSignalingStateChange(this, state); | 1319 peer_connection_tracker_->TrackSignalingStateChange(this, state); |
1311 if (client_) | 1320 if (client_) |
1312 client_->didChangeSignalingState(state); | 1321 client_->didChangeSignalingState(state); |
1313 } | 1322 } |
1314 | 1323 |
1315 // Called any time the IceConnectionState changes | 1324 // Called any time the IceConnectionState changes |
1316 void RTCPeerConnectionHandler::OnIceConnectionChange( | 1325 void RTCPeerConnectionHandler::OnIceConnectionChange( |
1317 webrtc::PeerConnectionInterface::IceConnectionState new_state) { | 1326 webrtc::PeerConnectionInterface::IceConnectionState new_state) { |
1318 TRACE_EVENT0("webrtc", "RTCPeerConnectionHandler::OnIceConnectionChange"); | 1327 TRACE_EVENT0("webrtc", "RTCPeerConnectionHandler::OnIceConnectionChange"); |
1319 DCHECK(thread_checker_.CalledOnValidThread()); | 1328 DCHECK(thread_checker_.CalledOnValidThread()); |
| 1329 ReportICEState(new_state); |
1320 if (new_state == webrtc::PeerConnectionInterface::kIceConnectionChecking) { | 1330 if (new_state == webrtc::PeerConnectionInterface::kIceConnectionChecking) { |
1321 ice_connection_checking_start_ = base::TimeTicks::Now(); | 1331 ice_connection_checking_start_ = base::TimeTicks::Now(); |
1322 } else if (new_state == | 1332 } else if (new_state == |
1323 webrtc::PeerConnectionInterface::kIceConnectionConnected) { | 1333 webrtc::PeerConnectionInterface::kIceConnectionConnected) { |
1324 // If the state becomes connected, send the time needed for PC to become | 1334 // If the state becomes connected, send the time needed for PC to become |
1325 // connected from checking to UMA. UMA data will help to know how much | 1335 // connected from checking to UMA. UMA data will help to know how much |
1326 // time needed for PC to connect with remote peer. | 1336 // time needed for PC to connect with remote peer. |
1327 if (ice_connection_checking_start_.is_null()) { | 1337 if (ice_connection_checking_start_.is_null()) { |
1328 // From UMA, we have observed a large number of calls falling into the | 1338 // From UMA, we have observed a large number of calls falling into the |
1329 // overflow buckets. One possibility is that the Checking is not signaled | 1339 // overflow buckets. One possibility is that the Checking is not signaled |
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1363 | 1373 |
1364 UMA_HISTOGRAM_COUNTS_100("WebRTC.PeerConnection.IPv4LocalCandidates", | 1374 UMA_HISTOGRAM_COUNTS_100("WebRTC.PeerConnection.IPv4LocalCandidates", |
1365 num_local_candidates_ipv4_); | 1375 num_local_candidates_ipv4_); |
1366 | 1376 |
1367 UMA_HISTOGRAM_COUNTS_100("WebRTC.PeerConnection.IPv6LocalCandidates", | 1377 UMA_HISTOGRAM_COUNTS_100("WebRTC.PeerConnection.IPv6LocalCandidates", |
1368 num_local_candidates_ipv6_); | 1378 num_local_candidates_ipv6_); |
1369 } else if (new_state == | 1379 } else if (new_state == |
1370 webrtc::PeerConnectionInterface::kIceGatheringGathering) { | 1380 webrtc::PeerConnectionInterface::kIceGatheringGathering) { |
1371 // ICE restarts will change gathering state back to "gathering", | 1381 // ICE restarts will change gathering state back to "gathering", |
1372 // reset the counter. | 1382 // reset the counter. |
1373 num_local_candidates_ipv6_ = 0; | 1383 ResetUMAStats(); |
1374 num_local_candidates_ipv4_ = 0; | |
1375 } | 1384 } |
1376 | 1385 |
1377 blink::WebRTCPeerConnectionHandlerClient::ICEGatheringState state = | 1386 blink::WebRTCPeerConnectionHandlerClient::ICEGatheringState state = |
1378 GetWebKitIceGatheringState(new_state); | 1387 GetWebKitIceGatheringState(new_state); |
1379 if (peer_connection_tracker_) | 1388 if (peer_connection_tracker_) |
1380 peer_connection_tracker_->TrackIceGatheringStateChange(this, state); | 1389 peer_connection_tracker_->TrackIceGatheringStateChange(this, state); |
1381 if (client_) | 1390 if (client_) |
1382 client_->didChangeICEGatheringState(state); | 1391 client_->didChangeICEGatheringState(state); |
1383 } | 1392 } |
1384 | 1393 |
(...skipping 134 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1519 } else { | 1528 } else { |
1520 base::WaitableEvent event(false, false); | 1529 base::WaitableEvent event(false, false); |
1521 thread->PostTask(FROM_HERE, | 1530 thread->PostTask(FROM_HERE, |
1522 base::Bind(&RunSynchronousClosure, closure, | 1531 base::Bind(&RunSynchronousClosure, closure, |
1523 base::Unretained(trace_event_name), | 1532 base::Unretained(trace_event_name), |
1524 base::Unretained(&event))); | 1533 base::Unretained(&event))); |
1525 event.Wait(); | 1534 event.Wait(); |
1526 } | 1535 } |
1527 } | 1536 } |
1528 | 1537 |
| 1538 void RTCPeerConnectionHandler::ReportICEState( |
| 1539 webrtc::PeerConnectionInterface::IceConnectionState new_state) { |
| 1540 DCHECK(thread_checker_.CalledOnValidThread()); |
| 1541 if (ice_state_seen_[new_state]) |
| 1542 return; |
| 1543 ice_state_seen_[new_state] = true; |
| 1544 UMA_HISTOGRAM_ENUMERATION("WebRTC.PeerConnection.ConnectionState", new_state, |
| 1545 webrtc::PeerConnectionInterface::kIceConnectionMax); |
| 1546 } |
| 1547 |
| 1548 void RTCPeerConnectionHandler::ResetUMAStats() { |
| 1549 DCHECK(thread_checker_.CalledOnValidThread()); |
| 1550 num_local_candidates_ipv6_ = 0; |
| 1551 num_local_candidates_ipv4_ = 0; |
| 1552 ice_connection_checking_start_ = base::TimeTicks(); |
| 1553 memset(ice_state_seen_, 0, sizeof(ice_state_seen_)); |
| 1554 } |
1529 } // namespace content | 1555 } // namespace content |
OLD | NEW |