Index: content/browser/renderer_host/media/audio_renderer_host.cc |
diff --git a/content/browser/renderer_host/media/audio_renderer_host.cc b/content/browser/renderer_host/media/audio_renderer_host.cc |
index 947c00cd4331e84959852f61e8023fffb8a00680..616478945420cf9dffc2c319893785bd7aa66595 100644 |
--- a/content/browser/renderer_host/media/audio_renderer_host.cc |
+++ b/content/browser/renderer_host/media/audio_renderer_host.cc |
@@ -109,6 +109,13 @@ void MaybeFixAudioParameters(media::AudioParameters* params) { |
*params = media::AudioParameters::UnavailableDeviceParams(); |
} |
+void UMALogDeviceAuthorizationTime(base::TimeTicks auth_start_time) { |
+ UMA_HISTOGRAM_CUSTOM_TIMES("Media.Audio.OutputDeviceAuthorizationTime", |
+ base::TimeTicks::Now() - auth_start_time, |
+ base::TimeDelta::FromMilliseconds(1), |
+ base::TimeDelta::FromMilliseconds(5000), 50); |
+} |
+ |
} // namespace |
class AudioRendererHost::AudioEntry |
@@ -398,6 +405,8 @@ void AudioRendererHost::OnRequestDeviceAuthorization( |
const std::string& device_id, |
const url::Origin& security_origin) { |
DCHECK_CURRENTLY_ON(BrowserThread::IO); |
+ const base::TimeTicks auth_start_time = base::TimeTicks::Now(); |
+ |
DVLOG(1) << "AudioRendererHost@" << this << "::OnRequestDeviceAuthorization" |
<< "(stream_id=" << stream_id |
<< ", render_frame_id=" << render_frame_id |
@@ -408,6 +417,7 @@ void AudioRendererHost::OnRequestDeviceAuthorization( |
return; |
if (!IsValidDeviceId(device_id)) { |
+ UMALogDeviceAuthorizationTime(auth_start_time); |
Send(new AudioMsg_NotifyDeviceAuthorized( |
stream_id, media::OUTPUT_DEVICE_STATUS_ERROR_NOT_FOUND, |
media::AudioParameters::UnavailableDeviceParams(), std::string())); |
@@ -432,6 +442,7 @@ void AudioRendererHost::OnRequestDeviceAuthorization( |
authorizations_.insert(MakeAuthorizationData( |
stream_id, true, info->device.matched_output_device_id)); |
MaybeFixAudioParameters(&output_params); |
+ UMALogDeviceAuthorizationTime(auth_start_time); |
// Hash matched device id and pass it to the renderer |
Send(new AudioMsg_NotifyDeviceAuthorized( |
stream_id, media::OUTPUT_DEVICE_STATUS_OK, output_params, |
@@ -446,22 +457,26 @@ void AudioRendererHost::OnRequestDeviceAuthorization( |
CheckOutputDeviceAccess( |
render_frame_id, device_id, security_origin, |
base::Bind(&AudioRendererHost::OnDeviceAuthorized, this, stream_id, |
- device_id, security_origin)); |
+ device_id, security_origin, auth_start_time)); |
} |
void AudioRendererHost::OnDeviceAuthorized(int stream_id, |
const std::string& device_id, |
const url::Origin& security_origin, |
+ base::TimeTicks auth_start_time, |
bool have_access) { |
DCHECK_CURRENTLY_ON(BrowserThread::IO); |
const auto& auth_data = authorizations_.find(stream_id); |
// A close request was received while access check was in progress. |
- if (auth_data == authorizations_.end()) |
+ if (auth_data == authorizations_.end()) { |
+ UMALogDeviceAuthorizationTime(auth_start_time); |
return; |
+ } |
if (!have_access) { |
authorizations_.erase(auth_data); |
+ UMALogDeviceAuthorizationTime(auth_start_time); |
Send(new AudioMsg_NotifyDeviceAuthorized( |
stream_id, media::OUTPUT_DEVICE_STATUS_ERROR_NOT_AUTHORIZED, |
media::AudioParameters::UnavailableDeviceParams(), std::string())); |
@@ -479,29 +494,33 @@ void AudioRendererHost::OnDeviceAuthorized(int stream_id, |
audio_manager_->GetTaskRunner(), FROM_HERE, |
base::Bind(&GetDefaultDeviceInfoOnDeviceThread, audio_manager_), |
base::Bind(&AudioRendererHost::OnDeviceIDTranslated, this, stream_id, |
- true)); |
+ auth_start_time, true)); |
} else { |
media_stream_manager_->audio_output_device_enumerator()->Enumerate( |
base::Bind(&AudioRendererHost::TranslateDeviceID, this, device_id, |
security_origin, |
base::Bind(&AudioRendererHost::OnDeviceIDTranslated, this, |
- stream_id))); |
+ stream_id, auth_start_time))); |
} |
} |
void AudioRendererHost::OnDeviceIDTranslated( |
int stream_id, |
+ base::TimeTicks auth_start_time, |
bool device_found, |
const AudioOutputDeviceInfo& device_info) { |
DCHECK_CURRENTLY_ON(BrowserThread::IO); |
const auto& auth_data = authorizations_.find(stream_id); |
// A close request was received while translation was in progress |
- if (auth_data == authorizations_.end()) |
+ if (auth_data == authorizations_.end()) { |
+ UMALogDeviceAuthorizationTime(auth_start_time); |
return; |
+ } |
if (!device_found) { |
authorizations_.erase(auth_data); |
+ UMALogDeviceAuthorizationTime(auth_start_time); |
Send(new AudioMsg_NotifyDeviceAuthorized( |
stream_id, media::OUTPUT_DEVICE_STATUS_ERROR_NOT_FOUND, |
media::AudioParameters::UnavailableDeviceParams(), std::string())); |
@@ -513,6 +532,7 @@ void AudioRendererHost::OnDeviceIDTranslated( |
media::AudioParameters output_params = device_info.output_params; |
MaybeFixAudioParameters(&output_params); |
+ UMALogDeviceAuthorizationTime(auth_start_time); |
Send(new AudioMsg_NotifyDeviceAuthorized( |
stream_id, media::OUTPUT_DEVICE_STATUS_OK, output_params, std::string())); |
} |