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

Side by Side Diff: third_party/WebKit/Source/modules/peerconnection/RTCPeerConnection.cpp

Issue 2095643002: Add RTCPeerConnection RAPPOR metrics. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: record metrics only for connected PCs Created 4 years, 5 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 /* 1 /*
2 * Copyright (C) 2012 Google Inc. All rights reserved. 2 * Copyright (C) 2012 Google Inc. All rights reserved.
3 * 3 *
4 * Redistribution and use in source and binary forms, with or without 4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions 5 * modification, are permitted provided that the following conditions
6 * are met: 6 * are met:
7 * 7 *
8 * 1. Redistributions of source code must retain the above copyright 8 * 1. Redistributions of source code must retain the above copyright
9 * notice, this list of conditions and the following disclaimer. 9 * notice, this list of conditions and the following disclaimer.
10 * 2. Redistributions in binary form must reproduce the above copyright 10 * 2. Redistributions in binary form must reproduce the above copyright
(...skipping 28 matching lines...) Expand all
39 #include "bindings/core/v8/ScriptState.h" 39 #include "bindings/core/v8/ScriptState.h"
40 #include "bindings/core/v8/ScriptValue.h" 40 #include "bindings/core/v8/ScriptValue.h"
41 #include "bindings/core/v8/V8ThrowException.h" 41 #include "bindings/core/v8/V8ThrowException.h"
42 #include "bindings/modules/v8/RTCIceCandidateInitOrRTCIceCandidate.h" 42 #include "bindings/modules/v8/RTCIceCandidateInitOrRTCIceCandidate.h"
43 #include "bindings/modules/v8/V8RTCCertificate.h" 43 #include "bindings/modules/v8/V8RTCCertificate.h"
44 #include "core/dom/DOMException.h" 44 #include "core/dom/DOMException.h"
45 #include "core/dom/DOMTimeStamp.h" 45 #include "core/dom/DOMTimeStamp.h"
46 #include "core/dom/Document.h" 46 #include "core/dom/Document.h"
47 #include "core/dom/ExceptionCode.h" 47 #include "core/dom/ExceptionCode.h"
48 #include "core/dom/ExecutionContext.h" 48 #include "core/dom/ExecutionContext.h"
49 #include "core/frame/HostsUsingFeatures.h"
49 #include "core/frame/LocalFrame.h" 50 #include "core/frame/LocalFrame.h"
50 #include "core/frame/UseCounter.h" 51 #include "core/frame/UseCounter.h"
51 #include "core/html/VoidCallback.h" 52 #include "core/html/VoidCallback.h"
52 #include "core/loader/FrameLoader.h" 53 #include "core/loader/FrameLoader.h"
53 #include "core/loader/FrameLoaderClient.h" 54 #include "core/loader/FrameLoaderClient.h"
54 #include "modules/crypto/CryptoResultImpl.h" 55 #include "modules/crypto/CryptoResultImpl.h"
55 #include "modules/mediastream/MediaConstraintsImpl.h" 56 #include "modules/mediastream/MediaConstraintsImpl.h"
56 #include "modules/mediastream/MediaStreamEvent.h" 57 #include "modules/mediastream/MediaStreamEvent.h"
57 #include "modules/peerconnection/RTCAnswerOptions.h" 58 #include "modules/peerconnection/RTCAnswerOptions.h"
58 #include "modules/peerconnection/RTCDTMFSender.h" 59 #include "modules/peerconnection/RTCDTMFSender.h"
(...skipping 918 matching lines...) Expand 10 before | Expand all | Expand 10 after
977 init.protocol = protocolString; 978 init.protocol = protocolString;
978 979
979 RTCDataChannel* channel = RTCDataChannel::create(getExecutionContext(), m_pe erHandler.get(), label, init, exceptionState); 980 RTCDataChannel* channel = RTCDataChannel::create(getExecutionContext(), m_pe erHandler.get(), label, init, exceptionState);
980 if (exceptionState.hadException()) 981 if (exceptionState.hadException())
981 return nullptr; 982 return nullptr;
982 RTCDataChannel::ReadyState handlerState = channel->getHandlerState(); 983 RTCDataChannel::ReadyState handlerState = channel->getHandlerState();
983 if (handlerState != RTCDataChannel::ReadyStateConnecting) { 984 if (handlerState != RTCDataChannel::ReadyStateConnecting) {
984 // There was an early state transition. Don't miss it! 985 // There was an early state transition. Don't miss it!
985 channel->didChangeReadyState(handlerState); 986 channel->didChangeReadyState(handlerState);
986 } 987 }
988 m_hasDataChannels = true;
989
987 return channel; 990 return channel;
988 } 991 }
989 992
990 bool RTCPeerConnection::hasLocalStreamWithTrackId(const String& trackId) 993 bool RTCPeerConnection::hasLocalStreamWithTrackId(const String& trackId)
991 { 994 {
992 for (MediaStreamVector::iterator iter = m_localStreams.begin(); iter != m_lo calStreams.end(); ++iter) { 995 for (MediaStreamVector::iterator iter = m_localStreams.begin(); iter != m_lo calStreams.end(); ++iter) {
993 if ((*iter)->getTrackById(trackId)) 996 if ((*iter)->getTrackById(trackId))
994 return true; 997 return true;
995 } 998 }
996 return false; 999 return false;
(...skipping 102 matching lines...) Expand 10 before | Expand all | Expand 10 after
1099 void RTCPeerConnection::didAddRemoteDataChannel(WebRTCDataChannelHandler* handle r) 1102 void RTCPeerConnection::didAddRemoteDataChannel(WebRTCDataChannelHandler* handle r)
1100 { 1103 {
1101 DCHECK(!m_closed); 1104 DCHECK(!m_closed);
1102 DCHECK(getExecutionContext()->isContextThread()); 1105 DCHECK(getExecutionContext()->isContextThread());
1103 1106
1104 if (m_signalingState == SignalingStateClosed) 1107 if (m_signalingState == SignalingStateClosed)
1105 return; 1108 return;
1106 1109
1107 RTCDataChannel* channel = RTCDataChannel::create(getExecutionContext(), wrap Unique(handler)); 1110 RTCDataChannel* channel = RTCDataChannel::create(getExecutionContext(), wrap Unique(handler));
1108 scheduleDispatchEvent(RTCDataChannelEvent::create(EventTypeNames::datachanne l, false, false, channel)); 1111 scheduleDispatchEvent(RTCDataChannelEvent::create(EventTypeNames::datachanne l, false, false, channel));
1112 m_hasDataChannels = true;
1109 } 1113 }
1110 1114
1111 void RTCPeerConnection::releasePeerConnectionHandler() 1115 void RTCPeerConnection::releasePeerConnectionHandler()
1112 { 1116 {
1113 stop(); 1117 stop();
1114 } 1118 }
1115 1119
1116 void RTCPeerConnection::closePeerConnection() 1120 void RTCPeerConnection::closePeerConnection()
1117 { 1121 {
1118 DCHECK(m_signalingState != RTCPeerConnection::SignalingStateClosed); 1122 DCHECK(m_signalingState != RTCPeerConnection::SignalingStateClosed);
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
1163 1167
1164 void RTCPeerConnection::changeIceGatheringState(ICEGatheringState iceGatheringSt ate) 1168 void RTCPeerConnection::changeIceGatheringState(ICEGatheringState iceGatheringSt ate)
1165 { 1169 {
1166 m_iceGatheringState = iceGatheringState; 1170 m_iceGatheringState = iceGatheringState;
1167 } 1171 }
1168 1172
1169 bool RTCPeerConnection::setIceConnectionState(ICEConnectionState iceConnectionSt ate) 1173 bool RTCPeerConnection::setIceConnectionState(ICEConnectionState iceConnectionSt ate)
1170 { 1174 {
1171 if (m_iceConnectionState != ICEConnectionStateClosed && m_iceConnectionState != iceConnectionState) { 1175 if (m_iceConnectionState != ICEConnectionStateClosed && m_iceConnectionState != iceConnectionState) {
1172 m_iceConnectionState = iceConnectionState; 1176 m_iceConnectionState = iceConnectionState;
1177 if (m_iceConnectionState == ICEConnectionStateConnected)
1178 recordRapporMetrics();
1179
1173 return true; 1180 return true;
1174 } 1181 }
1175 return false; 1182 return false;
1176 } 1183 }
1177 1184
1178 void RTCPeerConnection::changeIceConnectionState(ICEConnectionState iceConnectio nState) 1185 void RTCPeerConnection::changeIceConnectionState(ICEConnectionState iceConnectio nState)
1179 { 1186 {
1180 if (m_iceConnectionState != ICEConnectionStateClosed) { 1187 if (m_iceConnectionState != ICEConnectionStateClosed) {
1181 scheduleDispatchEvent(Event::create(EventTypeNames::iceconnectionstatech ange), 1188 scheduleDispatchEvent(Event::create(EventTypeNames::iceconnectionstatech ange),
1182 WTF::bind(&RTCPeerConnection::setIceConnectionState, wrapPersistent( this), iceConnectionState)); 1189 WTF::bind(&RTCPeerConnection::setIceConnectionState, wrapPersistent( this), iceConnectionState));
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
1218 HeapVector<Member<EventWrapper>>::iterator it = events.begin(); 1225 HeapVector<Member<EventWrapper>>::iterator it = events.begin();
1219 for (; it != events.end(); ++it) { 1226 for (; it != events.end(); ++it) {
1220 if ((*it)->setup()) { 1227 if ((*it)->setup()) {
1221 dispatchEvent((*it)->m_event.release()); 1228 dispatchEvent((*it)->m_event.release());
1222 } 1229 }
1223 } 1230 }
1224 1231
1225 events.clear(); 1232 events.clear();
1226 } 1233 }
1227 1234
1235 void RTCPeerConnection::recordRapporMetrics()
1236 {
1237 Document* document = toDocument(getExecutionContext());
1238 for (const auto& stream : m_localStreams) {
1239 if (stream->getAudioTracks().size() > 0)
1240 HostsUsingFeatures::countAnyWorld(*document, HostsUsingFeatures::Fea ture::RTCPeerConnectionAudio);
1241 if (stream->getVideoTracks().size() > 0)
1242 HostsUsingFeatures::countAnyWorld(*document, HostsUsingFeatures::Fea ture::RTCPeerConnectionVideo);
1243 }
1244
1245 for (const auto& stream : m_remoteStreams) {
1246 if (stream->getAudioTracks().size() > 0)
1247 HostsUsingFeatures::countAnyWorld(*document, HostsUsingFeatures::Fea ture::RTCPeerConnectionAudio);
1248 if (stream->getVideoTracks().size() > 0)
1249 HostsUsingFeatures::countAnyWorld(*document, HostsUsingFeatures::Fea ture::RTCPeerConnectionVideo);
1250 }
1251
1252 if (m_hasDataChannels)
1253 HostsUsingFeatures::countAnyWorld(*document, HostsUsingFeatures::Feature ::RTCPeerConnectionDataChannel);
1254
1255 }
1256
1228 DEFINE_TRACE(RTCPeerConnection) 1257 DEFINE_TRACE(RTCPeerConnection)
1229 { 1258 {
1230 visitor->trace(m_localStreams); 1259 visitor->trace(m_localStreams);
1231 visitor->trace(m_remoteStreams); 1260 visitor->trace(m_remoteStreams);
1232 visitor->trace(m_dispatchScheduledEventRunner); 1261 visitor->trace(m_dispatchScheduledEventRunner);
1233 visitor->trace(m_scheduledEvents); 1262 visitor->trace(m_scheduledEvents);
1234 EventTargetWithInlineData::trace(visitor); 1263 EventTargetWithInlineData::trace(visitor);
1235 ActiveDOMObject::trace(visitor); 1264 ActiveDOMObject::trace(visitor);
1236 } 1265 }
1237 1266
1238 } // namespace blink 1267 } // namespace blink
OLDNEW
« no previous file with comments | « third_party/WebKit/Source/modules/peerconnection/RTCPeerConnection.h ('k') | tools/metrics/rappor/rappor.xml » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698