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

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

Issue 2268253002: UMA stats for browser/renderer audio rendering buffer size mismatch. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: histogram rename Created 4 years, 3 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/audio_device_factory.h" 5 #include "content/renderer/media/audio_device_factory.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 8
9 #include "base/logging.h" 9 #include "base/logging.h"
10 #include "base/metrics/histogram_macros.h" 10 #include "base/metrics/histogram_macros.h"
11 #include "build/build_config.h" 11 #include "build/build_config.h"
12 #include "content/common/content_constants_internal.h" 12 #include "content/common/content_constants_internal.h"
13 #include "content/renderer/media/audio_input_message_filter.h" 13 #include "content/renderer/media/audio_input_message_filter.h"
14 #include "content/renderer/media/audio_message_filter.h" 14 #include "content/renderer/media/audio_message_filter.h"
15 #include "content/renderer/media/audio_renderer_mixer_manager.h" 15 #include "content/renderer/media/audio_renderer_mixer_manager.h"
16 #include "content/renderer/render_thread_impl.h" 16 #include "content/renderer/render_thread_impl.h"
17 #include "media/audio/audio_input_device.h" 17 #include "media/audio/audio_input_device.h"
18 #include "media/audio/audio_output_device.h" 18 #include "media/audio/audio_output_device.h"
19 #include "media/base/audio_latency.h"
20 #include "media/base/audio_renderer_mixer_input.h" 19 #include "media/base/audio_renderer_mixer_input.h"
21 #include "media/base/media_switches.h" 20 #include "media/base/media_switches.h"
22 #include "url/origin.h" 21 #include "url/origin.h"
23 22
24 namespace content { 23 namespace content {
25 24
26 // static 25 // static
27 AudioDeviceFactory* AudioDeviceFactory::factory_ = NULL; 26 AudioDeviceFactory* AudioDeviceFactory::factory_ = NULL;
28 27
29 namespace { 28 namespace {
30 #if defined(OS_WIN) 29 #if defined(OS_WIN)
31 // Due to driver deadlock issues on Windows (http://crbug/422522) there is a 30 // Due to driver deadlock issues on Windows (http://crbug/422522) there is a
32 // chance device authorization response is never received from the browser side. 31 // chance device authorization response is never received from the browser side.
33 // In this case we will time out, to avoid renderer hang forever waiting for 32 // In this case we will time out, to avoid renderer hang forever waiting for
34 // device authorization (http://crbug/615589). This will result in "no audio". 33 // device authorization (http://crbug/615589). This will result in "no audio".
35 const int64_t kMaxAuthorizationTimeoutMs = 1000; 34 const int64_t kMaxAuthorizationTimeoutMs = 1000;
36 #else 35 #else
37 const int64_t kMaxAuthorizationTimeoutMs = 0; // No timeout. 36 const int64_t kMaxAuthorizationTimeoutMs = 0; // No timeout.
38 #endif // defined(OS_WIN) 37 #endif // defined(OS_WIN)
39 38
40 media::AudioLatency::LatencyType GetSourceLatencyType(
41 AudioDeviceFactory::SourceType source) {
42 switch (source) {
43 case AudioDeviceFactory::kSourceWebAudioInteractive:
44 return media::AudioLatency::LATENCY_INTERACTIVE;
45 case AudioDeviceFactory::kSourceNone:
46 case AudioDeviceFactory::kSourceWebRtc:
47 case AudioDeviceFactory::kSourceNonRtcAudioTrack:
48 case AudioDeviceFactory::kSourceWebAudioBalanced:
49 return media::AudioLatency::LATENCY_RTC;
50 case AudioDeviceFactory::kSourceMediaElement:
51 case AudioDeviceFactory::kSourceWebAudioPlayback:
52 return media::AudioLatency::LATENCY_PLAYBACK;
53 case AudioDeviceFactory::kSourceWebAudioExact:
54 return media::AudioLatency::LATENCY_EXACT_MS;
55 }
56 NOTREACHED();
57 return media::AudioLatency::LATENCY_INTERACTIVE;
58 }
59
60 scoped_refptr<media::AudioOutputDevice> NewOutputDevice( 39 scoped_refptr<media::AudioOutputDevice> NewOutputDevice(
61 int render_frame_id, 40 int render_frame_id,
62 int session_id, 41 int session_id,
63 const std::string& device_id, 42 const std::string& device_id,
64 const url::Origin& security_origin) { 43 const url::Origin& security_origin) {
65 AudioMessageFilter* const filter = AudioMessageFilter::Get(); 44 AudioMessageFilter* const filter = AudioMessageFilter::Get();
66 scoped_refptr<media::AudioOutputDevice> device(new media::AudioOutputDevice( 45 scoped_refptr<media::AudioOutputDevice> device(new media::AudioOutputDevice(
67 filter->CreateAudioOutputIPC(render_frame_id), filter->io_task_runner(), 46 filter->CreateAudioOutputIPC(render_frame_id), filter->io_task_runner(),
68 session_id, device_id, security_origin, 47 session_id, device_id, security_origin,
69 // Set authorization request timeout at 80% of renderer hung timeout, but 48 // Set authorization request timeout at 80% of renderer hung timeout, but
(...skipping 17 matching lines...) Expand all
87 scoped_refptr<media::SwitchableAudioRendererSink> NewMixableSink( 66 scoped_refptr<media::SwitchableAudioRendererSink> NewMixableSink(
88 AudioDeviceFactory::SourceType source_type, 67 AudioDeviceFactory::SourceType source_type,
89 int render_frame_id, 68 int render_frame_id,
90 int session_id, 69 int session_id,
91 const std::string& device_id, 70 const std::string& device_id,
92 const url::Origin& security_origin) { 71 const url::Origin& security_origin) {
93 RenderThreadImpl* render_thread = RenderThreadImpl::current(); 72 RenderThreadImpl* render_thread = RenderThreadImpl::current();
94 return scoped_refptr<media::AudioRendererMixerInput>( 73 return scoped_refptr<media::AudioRendererMixerInput>(
95 render_thread->GetAudioRendererMixerManager()->CreateInput( 74 render_thread->GetAudioRendererMixerManager()->CreateInput(
96 render_frame_id, session_id, device_id, security_origin, 75 render_frame_id, session_id, device_id, security_origin,
97 GetSourceLatencyType(source_type))); 76 AudioDeviceFactory::GetSourceLatencyType(source_type)));
98 } 77 }
99 78
100 } // namespace 79 } // namespace
101 80
81 media::AudioLatency::LatencyType AudioDeviceFactory::GetSourceLatencyType(
82 AudioDeviceFactory::SourceType source) {
83 switch (source) {
84 case AudioDeviceFactory::kSourceWebAudioInteractive:
85 return media::AudioLatency::LATENCY_INTERACTIVE;
86 case AudioDeviceFactory::kSourceNone:
87 case AudioDeviceFactory::kSourceWebRtc:
88 case AudioDeviceFactory::kSourceNonRtcAudioTrack:
89 case AudioDeviceFactory::kSourceWebAudioBalanced:
90 return media::AudioLatency::LATENCY_RTC;
91 case AudioDeviceFactory::kSourceMediaElement:
92 case AudioDeviceFactory::kSourceWebAudioPlayback:
93 return media::AudioLatency::LATENCY_PLAYBACK;
94 case AudioDeviceFactory::kSourceWebAudioExact:
95 return media::AudioLatency::LATENCY_EXACT_MS;
96 }
97 NOTREACHED();
98 return media::AudioLatency::LATENCY_INTERACTIVE;
99 }
100
102 scoped_refptr<media::AudioRendererSink> 101 scoped_refptr<media::AudioRendererSink>
103 AudioDeviceFactory::NewAudioRendererMixerSink( 102 AudioDeviceFactory::NewAudioRendererMixerSink(
104 int render_frame_id, 103 int render_frame_id,
105 int session_id, 104 int session_id,
106 const std::string& device_id, 105 const std::string& device_id,
107 const url::Origin& security_origin) { 106 const url::Origin& security_origin) {
108 return NewFinalAudioRendererSink(render_frame_id, session_id, device_id, 107 return NewFinalAudioRendererSink(render_frame_id, session_id, device_id,
109 security_origin); 108 security_origin);
110 } 109 }
111 110
(...skipping 100 matching lines...) Expand 10 before | Expand all | Expand 10 after
212 device_id, security_origin); 211 device_id, security_origin);
213 if (sink) 212 if (sink)
214 return sink; 213 return sink;
215 } 214 }
216 215
217 return NewOutputDevice(render_frame_id, session_id, device_id, 216 return NewOutputDevice(render_frame_id, session_id, device_id,
218 security_origin); 217 security_origin);
219 } 218 }
220 219
221 } // namespace content 220 } // namespace content
OLDNEW
« no previous file with comments | « content/renderer/media/audio_device_factory.h ('k') | content/renderer/media/audio_renderer_mixer_manager.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698