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

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

Issue 427713004: Add histogram WebRTC.UserMediaRequest.Events to allow to track getUserMedia failures and hangs. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 6 years, 4 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/media_stream_impl.h" 5 #include "content/renderer/media/media_stream_impl.h"
6 6
7 #include <utility> 7 #include <utility>
8 8
9 #include "base/hash.h" 9 #include "base/hash.h"
10 #include "base/logging.h" 10 #include "base/logging.h"
(...skipping 162 matching lines...) Expand 10 before | Expand all | Expand 10 after
173 WebRtcLogMessage(base::StringPrintf( 173 WebRtcLogMessage(base::StringPrintf(
174 "MSI::requestUserMedia. request_id=%d" 174 "MSI::requestUserMedia. request_id=%d"
175 ", audio source id=%s mandatory= %s " 175 ", audio source id=%s mandatory= %s "
176 ", video source id=%s mandatory= %s", 176 ", video source id=%s mandatory= %s",
177 request_id, 177 request_id,
178 audio_device_id.c_str(), 178 audio_device_id.c_str(),
179 mandatory_audio ? "true":"false", 179 mandatory_audio ? "true":"false",
180 video_device_id.c_str(), 180 video_device_id.c_str(),
181 mandatory_video ? "true":"false")); 181 mandatory_video ? "true":"false"));
182 182
183 LogUserMediaRequestEvent(USERMEDIAREQUEST_CREATED);
183 user_media_requests_.push_back( 184 user_media_requests_.push_back(
184 new UserMediaRequestInfo(request_id, user_media_request, 185 new UserMediaRequestInfo(request_id, user_media_request,
185 enable_automatic_output_device_selection)); 186 enable_automatic_output_device_selection));
186 187
187 media_stream_dispatcher_->GenerateStream( 188 media_stream_dispatcher_->GenerateStream(
188 request_id, 189 request_id,
189 weak_factory_.GetWeakPtr(), 190 weak_factory_.GetWeakPtr(),
190 options, 191 options,
191 security_origin); 192 security_origin);
192 } 193 }
193 194
194 void MediaStreamImpl::cancelUserMediaRequest( 195 void MediaStreamImpl::cancelUserMediaRequest(
195 const blink::WebUserMediaRequest& user_media_request) { 196 const blink::WebUserMediaRequest& user_media_request) {
196 DCHECK(CalledOnValidThread()); 197 DCHECK(CalledOnValidThread());
197 UserMediaRequestInfo* request = FindUserMediaRequestInfo(user_media_request); 198 UserMediaRequestInfo* request = FindUserMediaRequestInfo(user_media_request);
198 if (request) { 199 if (request) {
199 // We can't abort the stream generation process. 200 // We can't abort the stream generation process.
200 // Instead, erase the request. Once the stream is generated we will stop the 201 // Instead, erase the request. Once the stream is generated we will stop the
201 // stream if the request does not exist. 202 // stream if the request does not exist.
203 LogUserMediaRequestEvent(USERMEDIAREQUEST_CANCELLED);
202 DeleteUserMediaRequestInfo(request); 204 DeleteUserMediaRequestInfo(request);
203 } 205 }
204 } 206 }
205 207
206 void MediaStreamImpl::requestMediaDevices( 208 void MediaStreamImpl::requestMediaDevices(
207 const blink::WebMediaDevicesRequest& media_devices_request) { 209 const blink::WebMediaDevicesRequest& media_devices_request) {
208 UpdateWebRTCMethodCount(WEBKIT_GET_MEDIA_DEVICES); 210 UpdateWebRTCMethodCount(WEBKIT_GET_MEDIA_DEVICES);
209 DCHECK(CalledOnValidThread()); 211 DCHECK(CalledOnValidThread());
210 212
211 int audio_input_request_id = g_next_request_id++; 213 int audio_input_request_id = g_next_request_id++;
(...skipping 130 matching lines...) Expand 10 before | Expand all | Expand 10 after
342 << request_id << ")"; 344 << request_id << ")";
343 UserMediaRequestInfo* request_info = FindUserMediaRequestInfo(request_id); 345 UserMediaRequestInfo* request_info = FindUserMediaRequestInfo(request_id);
344 if (!request_info) { 346 if (!request_info) {
345 // This can happen if the request is canceled or the frame reloads while 347 // This can happen if the request is canceled or the frame reloads while
346 // MediaStreamDispatcher is processing the request. 348 // MediaStreamDispatcher is processing the request.
347 DVLOG(1) << "Request ID not found"; 349 DVLOG(1) << "Request ID not found";
348 return; 350 return;
349 } 351 }
350 352
351 GetUserMediaRequestFailed(&request_info->request, result); 353 GetUserMediaRequestFailed(&request_info->request, result);
354 LogUserMediaRequestResult(result);
352 DeleteUserMediaRequestInfo(request_info); 355 DeleteUserMediaRequestInfo(request_info);
353 } 356 }
354 357
355 // Callback from MediaStreamDispatcher. 358 // Callback from MediaStreamDispatcher.
356 // The browser process has stopped a device used by a MediaStream. 359 // The browser process has stopped a device used by a MediaStream.
357 void MediaStreamImpl::OnDeviceStopped( 360 void MediaStreamImpl::OnDeviceStopped(
358 const std::string& label, 361 const std::string& label,
359 const StreamDeviceInfo& device_info) { 362 const StreamDeviceInfo& device_info) {
360 DCHECK(CalledOnValidThread()); 363 DCHECK(CalledOnValidThread());
361 DVLOG(1) << "MediaStreamImpl::OnDeviceStopped(" 364 DVLOG(1) << "MediaStreamImpl::OnDeviceStopped("
(...skipping 134 matching lines...) Expand 10 before | Expand all | Expand 10 after
496 UserMediaRequestInfo* request, 499 UserMediaRequestInfo* request,
497 content::MediaStreamRequestResult result) { 500 content::MediaStreamRequestResult result) {
498 DVLOG(1) << "MediaStreamImpl::OnCreateNativeTracksComplete(" 501 DVLOG(1) << "MediaStreamImpl::OnCreateNativeTracksComplete("
499 << "{request_id = " << request->request_id << "} " 502 << "{request_id = " << request->request_id << "} "
500 << "{result = " << result << "})"; 503 << "{result = " << result << "})";
501 if (result == content::MEDIA_DEVICE_OK) 504 if (result == content::MEDIA_DEVICE_OK)
502 GetUserMediaRequestSucceeded(request->web_stream, &request->request); 505 GetUserMediaRequestSucceeded(request->web_stream, &request->request);
503 else 506 else
504 GetUserMediaRequestFailed(&request->request, result); 507 GetUserMediaRequestFailed(&request->request, result);
505 508
509 LogUserMediaRequestResult(result);
506 DeleteUserMediaRequestInfo(request); 510 DeleteUserMediaRequestInfo(request);
507 } 511 }
508 512
509 void MediaStreamImpl::OnDevicesEnumerated( 513 void MediaStreamImpl::OnDevicesEnumerated(
510 int request_id, 514 int request_id,
511 const StreamDeviceInfoArray& device_array) { 515 const StreamDeviceInfoArray& device_array) {
512 DVLOG(1) << "MediaStreamImpl::OnDevicesEnumerated(" << request_id << ")"; 516 DVLOG(1) << "MediaStreamImpl::OnDevicesEnumerated(" << request_id << ")";
513 517
514 MediaDevicesRequestInfo* request = FindMediaDevicesRequestInfo(request_id); 518 MediaDevicesRequestInfo* request = FindMediaDevicesRequestInfo(request_id);
515 DCHECK(request); 519 DCHECK(request);
(...skipping 235 matching lines...) Expand 10 before | Expand all | Expand 10 after
751 DVLOG(1) << "MediaStreamImpl@" << this << "::FrameWillClose: " 755 DVLOG(1) << "MediaStreamImpl@" << this << "::FrameWillClose: "
752 << "Cancel user media request " << (*request_it)->request_id; 756 << "Cancel user media request " << (*request_it)->request_id;
753 // If the request is not generated, it means that a request 757 // If the request is not generated, it means that a request
754 // has been sent to the MediaStreamDispatcher to generate a stream 758 // has been sent to the MediaStreamDispatcher to generate a stream
755 // but MediaStreamDispatcher has not yet responded and we need to cancel 759 // but MediaStreamDispatcher has not yet responded and we need to cancel
756 // the request. 760 // the request.
757 if (!(*request_it)->generated) { 761 if (!(*request_it)->generated) {
758 media_stream_dispatcher_->CancelGenerateStream( 762 media_stream_dispatcher_->CancelGenerateStream(
759 (*request_it)->request_id, weak_factory_.GetWeakPtr()); 763 (*request_it)->request_id, weak_factory_.GetWeakPtr());
760 } 764 }
765 LogUserMediaRequestEvent(USERMEDIAREQUEST_NO_RESPONSE);
vrk (LEFT CHROMIUM) 2014/08/04 18:22:17 There are a few different "no response" events tha
761 request_it = user_media_requests_.erase(request_it); 766 request_it = user_media_requests_.erase(request_it);
762 } 767 }
763 768
764 // Loop through all current local sources and stop the sources. 769 // Loop through all current local sources and stop the sources.
765 LocalStreamSources::iterator sources_it = local_sources_.begin(); 770 LocalStreamSources::iterator sources_it = local_sources_.begin();
766 while (sources_it != local_sources_.end()) { 771 while (sources_it != local_sources_.end()) {
767 StopLocalSource(*sources_it, true); 772 StopLocalSource(*sources_it, true);
768 sources_it = local_sources_.erase(sources_it); 773 sources_it = local_sources_.erase(sources_it);
769 } 774 }
770 } 775 }
(...skipping 131 matching lines...) Expand 10 before | Expand all | Expand 10 after
902 sources_.begin(); 907 sources_.begin();
903 it != sources_.end(); ++it) { 908 it != sources_.end(); ++it) {
904 if (source.id() == it->id()) { 909 if (source.id() == it->id()) {
905 sources_.erase(it); 910 sources_.erase(it);
906 return; 911 return;
907 } 912 }
908 } 913 }
909 } 914 }
910 915
911 } // namespace content 916 } // namespace content
OLDNEW
« no previous file with comments | « no previous file | content/renderer/media/webrtc_uma_histograms.h » ('j') | content/renderer/media/webrtc_uma_histograms.h » ('J')

Powered by Google App Engine
This is Rietveld 408576698