Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(19)

Side by Side Diff: content/renderer/media/rtc_peer_connection_handler.cc

Issue 1335023002: Add UMA metrics and finch experiment for DTLS1.2 in WebRTC. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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
11 #include "base/command_line.h" 11 #include "base/command_line.h"
12 #include "base/lazy_instance.h" 12 #include "base/lazy_instance.h"
13 #include "base/location.h" 13 #include "base/location.h"
14 #include "base/logging.h" 14 #include "base/logging.h"
15 #include "base/memory/scoped_ptr.h" 15 #include "base/memory/scoped_ptr.h"
16 #include "base/metrics/histogram.h" 16 #include "base/metrics/histogram.h"
17 #include "base/metrics/sparse_histogram.h"
17 #include "base/stl_util.h" 18 #include "base/stl_util.h"
18 #include "base/strings/utf_string_conversions.h" 19 #include "base/strings/utf_string_conversions.h"
19 #include "base/thread_task_runner_handle.h" 20 #include "base/thread_task_runner_handle.h"
20 #include "base/trace_event/trace_event.h" 21 #include "base/trace_event/trace_event.h"
21 #include "content/public/common/content_switches.h" 22 #include "content/public/common/content_switches.h"
22 #include "content/renderer/media/media_stream_track.h" 23 #include "content/renderer/media/media_stream_track.h"
23 #include "content/renderer/media/peer_connection_tracker.h" 24 #include "content/renderer/media/peer_connection_tracker.h"
24 #include "content/renderer/media/remote_media_stream_impl.h" 25 #include "content/renderer/media/remote_media_stream_impl.h"
25 #include "content/renderer/media/rtc_data_channel_handler.h" 26 #include "content/renderer/media/rtc_data_channel_handler.h"
26 #include "content/renderer/media/rtc_dtmf_sender_handler.h" 27 #include "content/renderer/media/rtc_dtmf_sender_handler.h"
27 #include "content/renderer/media/rtc_media_constraints.h" 28 #include "content/renderer/media/rtc_media_constraints.h"
28 #include "content/renderer/media/webrtc/peer_connection_dependency_factory.h" 29 #include "content/renderer/media/webrtc/peer_connection_dependency_factory.h"
29 #include "content/renderer/media/webrtc/webrtc_media_stream_adapter.h" 30 #include "content/renderer/media/webrtc/webrtc_media_stream_adapter.h"
30 #include "content/renderer/media/webrtc_audio_capturer.h" 31 #include "content/renderer/media/webrtc_audio_capturer.h"
31 #include "content/renderer/media/webrtc_audio_device_impl.h" 32 #include "content/renderer/media/webrtc_audio_device_impl.h"
32 #include "content/renderer/media/webrtc_uma_histograms.h" 33 #include "content/renderer/media/webrtc_uma_histograms.h"
33 #include "content/renderer/render_thread_impl.h" 34 #include "content/renderer/render_thread_impl.h"
35 #include "net/third_party/nss/ssl/sslproto.h"
Ryan Sleevi 2015/09/22 21:21:10 BUG: You should not be directly including NSS head
34 #include "third_party/WebKit/public/platform/WebMediaConstraints.h" 36 #include "third_party/WebKit/public/platform/WebMediaConstraints.h"
35 #include "third_party/WebKit/public/platform/WebRTCConfiguration.h" 37 #include "third_party/WebKit/public/platform/WebRTCConfiguration.h"
36 #include "third_party/WebKit/public/platform/WebRTCDataChannelInit.h" 38 #include "third_party/WebKit/public/platform/WebRTCDataChannelInit.h"
37 #include "third_party/WebKit/public/platform/WebRTCICECandidate.h" 39 #include "third_party/WebKit/public/platform/WebRTCICECandidate.h"
38 #include "third_party/WebKit/public/platform/WebRTCOfferOptions.h" 40 #include "third_party/WebKit/public/platform/WebRTCOfferOptions.h"
39 #include "third_party/WebKit/public/platform/WebRTCSessionDescription.h" 41 #include "third_party/WebKit/public/platform/WebRTCSessionDescription.h"
40 #include "third_party/WebKit/public/platform/WebRTCSessionDescriptionRequest.h" 42 #include "third_party/WebKit/public/platform/WebRTCSessionDescriptionRequest.h"
41 #include "third_party/WebKit/public/platform/WebRTCVoidRequest.h" 43 #include "third_party/WebKit/public/platform/WebRTCVoidRequest.h"
42 #include "third_party/WebKit/public/platform/WebURL.h" 44 #include "third_party/WebKit/public/platform/WebURL.h"
43 #include "third_party/libjingle/source/talk/session/media/mediasession.h" 45 #include "third_party/libjingle/source/talk/session/media/mediasession.h"
(...skipping 11 matching lines...) Expand all
55 57
56 // Used to back histogram value of "WebRTC.PeerConnection.RtcpMux", 58 // Used to back histogram value of "WebRTC.PeerConnection.RtcpMux",
57 // so treat as append-only. 59 // so treat as append-only.
58 enum RtcpMux { 60 enum RtcpMux {
59 RTCP_MUX_DISABLED, 61 RTCP_MUX_DISABLED,
60 RTCP_MUX_ENABLED, 62 RTCP_MUX_ENABLED,
61 RTCP_MUX_NO_MEDIA, 63 RTCP_MUX_NO_MEDIA,
62 RTCP_MUX_MAX 64 RTCP_MUX_MAX
63 }; 65 };
64 66
67 #define SSLCIPHER_ENTRY(cipher) \
68 { webrtc::SslCipherType_##cipher, cipher }
69
70 uint16 ConvertWebRtcSslCipherToStandard(int cipher) {
71 static struct {
72 webrtc::SslCipherType webrtc_cipher;
73 uint16 cipher;
74 } kWebRtcSslCipherMapping[] = {
75 // TLS v1.0 ciphersuites from RFC2246.
76 {webrtc::SslCipherType_TLS_RSA_RC4_128_SHA, TLS_RSA_WITH_RC4_128_SHA},
77 SSLCIPHER_ENTRY(TLS_RSA_WITH_3DES_EDE_CBC_SHA),
78
79 // AES ciphersuites from RFC3268.
80 SSLCIPHER_ENTRY(TLS_RSA_WITH_AES_128_CBC_SHA),
81 SSLCIPHER_ENTRY(TLS_DHE_RSA_WITH_AES_128_CBC_SHA),
82 SSLCIPHER_ENTRY(TLS_RSA_WITH_AES_256_CBC_SHA),
83 SSLCIPHER_ENTRY(TLS_DHE_RSA_WITH_AES_256_CBC_SHA),
84
85 // ECC ciphersuites from RFC4492.
86 SSLCIPHER_ENTRY(TLS_ECDHE_ECDSA_WITH_RC4_128_SHA),
87 SSLCIPHER_ENTRY(TLS_ECDHE_ECDSA_WITH_3DES_EDE_CBC_SHA),
88 SSLCIPHER_ENTRY(TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA),
89 SSLCIPHER_ENTRY(TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA),
90
91 SSLCIPHER_ENTRY(TLS_ECDHE_RSA_WITH_RC4_128_SHA),
92 SSLCIPHER_ENTRY(TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA),
93 SSLCIPHER_ENTRY(TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA),
94 SSLCIPHER_ENTRY(TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA),
95
96 // TLS v1.2 ciphersuites.
97 SSLCIPHER_ENTRY(TLS_RSA_WITH_AES_128_CBC_SHA256),
98 SSLCIPHER_ENTRY(TLS_RSA_WITH_AES_256_CBC_SHA256),
99 SSLCIPHER_ENTRY(TLS_DHE_RSA_WITH_AES_128_CBC_SHA256),
100 SSLCIPHER_ENTRY(TLS_DHE_RSA_WITH_AES_256_CBC_SHA256),
101
102 // TLS v1.2 GCM ciphersuites from RFC5288.
103 SSLCIPHER_ENTRY(TLS_RSA_WITH_AES_128_GCM_SHA256),
104 // SSLCIPHER_ENTRY(TLS_RSA_WITH_AES_256_GCM_SHA384),
105 SSLCIPHER_ENTRY(TLS_DHE_RSA_WITH_AES_128_GCM_SHA256),
106 // SSLCIPHER_ENTRY(TLS_DHE_RSA_WITH_AES_256_GCM_SHA384),
107 // SSLCIPHER_ENTRY(TLS_DH_RSA_WITH_AES_128_GCM_SHA256),
108 // SSLCIPHER_ENTRY(TLS_DH_RSA_WITH_AES_256_GCM_SHA384),
109
110 // ECDH HMAC based ciphersuites from RFC5289.
111 SSLCIPHER_ENTRY(TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256),
112 // SSLCIPHER_ENTRY(TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384),
113 SSLCIPHER_ENTRY(TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256),
114 // SSLCIPHER_ENTRY(TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384),
115
116 // ECDH GCM based ciphersuites from RFC5289.
117 SSLCIPHER_ENTRY(TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256),
118 // SSLCIPHER_ENTRY(TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384),
119 SSLCIPHER_ENTRY(TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256),
120 // SSLCIPHER_ENTRY(TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384),
121 };
122
123 for (auto c : kWebRtcSslCipherMapping) {
124 if (c.webrtc_cipher == cipher)
125 return c.cipher;
126 }
Ryan Sleevi 2015/09/22 21:21:10 This is very inefficient for what it does - given
davidben 2015/09/22 21:29:46 +1 to that. TLS already provides standard well-kno
127 return 0;
128 }
129
65 // Converter functions from libjingle types to WebKit types. 130 // Converter functions from libjingle types to WebKit types.
66 blink::WebRTCPeerConnectionHandlerClient::ICEGatheringState 131 blink::WebRTCPeerConnectionHandlerClient::ICEGatheringState
67 GetWebKitIceGatheringState( 132 GetWebKitIceGatheringState(
68 webrtc::PeerConnectionInterface::IceGatheringState state) { 133 webrtc::PeerConnectionInterface::IceGatheringState state) {
69 using blink::WebRTCPeerConnectionHandlerClient; 134 using blink::WebRTCPeerConnectionHandlerClient;
70 switch (state) { 135 switch (state) {
71 case webrtc::PeerConnectionInterface::kIceGatheringNew: 136 case webrtc::PeerConnectionInterface::kIceGatheringNew:
72 return WebRTCPeerConnectionHandlerClient::ICEGatheringStateNew; 137 return WebRTCPeerConnectionHandlerClient::ICEGatheringStateNew;
73 case webrtc::PeerConnectionInterface::kIceGatheringGathering: 138 case webrtc::PeerConnectionInterface::kIceGatheringGathering:
74 return WebRTCPeerConnectionHandlerClient::ICEGatheringStateGathering; 139 return WebRTCPeerConnectionHandlerClient::ICEGatheringStateGathering;
(...skipping 449 matching lines...) Expand 10 before | Expand all | Expand 10 after
524 counter_max); 589 counter_max);
525 break; 590 break;
526 case webrtc::kEnumCounterIceCandidatePairTypeUdp: 591 case webrtc::kEnumCounterIceCandidatePairTypeUdp:
527 UMA_HISTOGRAM_ENUMERATION("WebRTC.PeerConnection.CandidatePairType_UDP", 592 UMA_HISTOGRAM_ENUMERATION("WebRTC.PeerConnection.CandidatePairType_UDP",
528 counter, counter_max); 593 counter, counter_max);
529 break; 594 break;
530 case webrtc::kEnumCounterIceCandidatePairTypeTcp: 595 case webrtc::kEnumCounterIceCandidatePairTypeTcp:
531 UMA_HISTOGRAM_ENUMERATION("WebRTC.PeerConnection.CandidatePairType_TCP", 596 UMA_HISTOGRAM_ENUMERATION("WebRTC.PeerConnection.CandidatePairType_TCP",
532 counter, counter_max); 597 counter, counter_max);
533 break; 598 break;
599 case webrtc::kEnumCounterAudioSrtpCipher:
600 UMA_HISTOGRAM_ENUMERATION("WebRTC.PeerConnection.Cipher.Audio.Srtp",
601 counter, counter_max);
602 break;
603 case webrtc::kEnumCounterAudioSslCipher:
604 UMA_HISTOGRAM_SPARSE_SLOWLY("WebRTC.PeerConnection.Cipher.Audio.Ssl",
605 ConvertWebRtcSslCipherToStandard(counter));
606 break;
607 case webrtc::kEnumCounterVideoSrtpCipher:
608 UMA_HISTOGRAM_ENUMERATION("WebRTC.PeerConnection.Cipher.Video.Srtp",
609 counter, counter_max);
610 break;
611 case webrtc::kEnumCounterVideoSslCipher:
612 UMA_HISTOGRAM_SPARSE_SLOWLY("WebRTC.PeerConnection.Cipher.Video.Ssl",
613 ConvertWebRtcSslCipherToStandard(counter));
614 break;
615 case webrtc::kEnumCounterDataSrtpCipher:
616 UMA_HISTOGRAM_ENUMERATION("WebRTC.PeerConnection.Cipher.Data.Srtp",
617 counter, counter_max);
618 break;
619 case webrtc::kEnumCounterDataSslCipher:
620 UMA_HISTOGRAM_SPARSE_SLOWLY("WebRTC.PeerConnection.Cipher.Data.Ssl",
621 ConvertWebRtcSslCipherToStandard(counter));
622 break;
534 default: 623 default:
535 NOTREACHED();
536 break; 624 break;
537 } 625 }
538 } 626 }
539 627
540 void AddHistogramSample(webrtc::PeerConnectionUMAMetricsName type, 628 void AddHistogramSample(webrtc::PeerConnectionUMAMetricsName type,
541 int value) override { 629 int value) override {
542 // Runs on libjingle's signaling thread. 630 // Runs on libjingle's signaling thread.
543 switch (type) { 631 switch (type) {
544 case webrtc::kTimeToConnect: 632 case webrtc::kTimeToConnect:
545 UMA_HISTOGRAM_MEDIUM_TIMES( 633 UMA_HISTOGRAM_MEDIUM_TIMES(
(...skipping 1065 matching lines...) Expand 10 before | Expand all | Expand 10 after
1611 } 1699 }
1612 1700
1613 void RTCPeerConnectionHandler::ResetUMAStats() { 1701 void RTCPeerConnectionHandler::ResetUMAStats() {
1614 DCHECK(thread_checker_.CalledOnValidThread()); 1702 DCHECK(thread_checker_.CalledOnValidThread());
1615 num_local_candidates_ipv6_ = 0; 1703 num_local_candidates_ipv6_ = 0;
1616 num_local_candidates_ipv4_ = 0; 1704 num_local_candidates_ipv4_ = 0;
1617 ice_connection_checking_start_ = base::TimeTicks(); 1705 ice_connection_checking_start_ = base::TimeTicks();
1618 memset(ice_state_seen_, 0, sizeof(ice_state_seen_)); 1706 memset(ice_state_seen_, 0, sizeof(ice_state_seen_));
1619 } 1707 }
1620 } // namespace content 1708 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698