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

Unified Diff: media/audio/mac/audio_manager_mac.cc

Issue 154543002: Cleanup AudioManager initialization on OSX to reduce startup delay. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Rework. Created 6 years, 10 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « media/audio/mac/audio_manager_mac.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: media/audio/mac/audio_manager_mac.cc
diff --git a/media/audio/mac/audio_manager_mac.cc b/media/audio/mac/audio_manager_mac.cc
index c08efff93363beb5cd62d1bc2f606c664f7558ee..73f193068279c48cea9a2ab3257db55331cfbeee 100644
--- a/media/audio/mac/audio_manager_mac.cc
+++ b/media/audio/mac/audio_manager_mac.cc
@@ -273,26 +273,25 @@ class AudioManagerMac::AudioPowerObserver : public base::PowerObserver {
AudioManagerMac::AudioManagerMac(AudioLogFactory* audio_log_factory)
: AudioManagerBase(audio_log_factory),
- current_sample_rate_(0) {
- current_output_device_ = kAudioDeviceUnknown;
-
+ current_sample_rate_(0),
+ current_output_device_(kAudioDeviceUnknown) {
SetMaxOutputStreamsAllowed(kMaxOutputStreams);
// Task must be posted last to avoid races from handing out "this" to the
// audio thread. Always PostTask even if we're on the right thread since
// AudioManager creation is on the startup path and this may be slow.
GetTaskRunner()->PostTask(FROM_HERE, base::Bind(
- &AudioManagerMac::CreateDeviceListener, base::Unretained(this)));
+ &AudioManagerMac::InitializeOnAudioThread, base::Unretained(this)));
}
AudioManagerMac::~AudioManagerMac() {
if (GetTaskRunner()->BelongsToCurrentThread()) {
- DestroyDeviceListener();
+ ShutdownOnAudioThread();
} else {
// It's safe to post a task here since Shutdown() will wait for all tasks to
// complete before returning.
GetTaskRunner()->PostTask(FROM_HERE, base::Bind(
- &AudioManagerMac::DestroyDeviceListener, base::Unretained(this)));
+ &AudioManagerMac::ShutdownOnAudioThread, base::Unretained(this)));
}
Shutdown();
@@ -580,6 +579,19 @@ AudioOutputStream* AudioManagerMac::MakeLowLatencyOutputStream(
DLOG(ERROR) << "Failed to open output device: " << device_id;
return NULL;
}
+
+ // Lazily create the audio device listener on the first stream creation.
+ if (!output_device_listener_) {
+ output_device_listener_.reset(new AudioDeviceListenerMac(base::Bind(
+ &AudioManagerMac::HandleDeviceChanges, base::Unretained(this))));
+ // Only set the current output device for the default device.
+ if (device_id.empty())
tommi (sloooow) - chröme 2014/02/13 06:56:20 Check for AudioManagerBase::kDefaultDeviceId?
DaleCurtis 2014/02/13 19:24:35 That's only for input no?
DaleCurtis 2014/02/13 20:31:53 Done.
+ current_output_device_ = device;
+ // Just use the current sample rate since we don't allow non-native sample
+ // rates on OSX.
+ current_sample_rate_ = params.sample_rate();
+ }
+
return new AUHALStream(this, params, device);
}
@@ -741,21 +753,12 @@ AudioParameters AudioManagerMac::GetPreferredOutputStreamParameters(
AudioParameters::NO_EFFECTS);
}
-void AudioManagerMac::CreateDeviceListener() {
+void AudioManagerMac::InitializeOnAudioThread() {
DCHECK(GetTaskRunner()->BelongsToCurrentThread());
-
- // Get a baseline for the sample-rate and current device,
- // so we can intelligently handle device notifications only when necessary.
- current_sample_rate_ = HardwareSampleRate();
- if (!GetDefaultOutputDevice(&current_output_device_))
- current_output_device_ = kAudioDeviceUnknown;
-
- output_device_listener_.reset(new AudioDeviceListenerMac(base::Bind(
- &AudioManagerMac::HandleDeviceChanges, base::Unretained(this))));
power_observer_.reset(new AudioPowerObserver());
}
-void AudioManagerMac::DestroyDeviceListener() {
+void AudioManagerMac::ShutdownOnAudioThread() {
DCHECK(GetTaskRunner()->BelongsToCurrentThread());
output_device_listener_.reset();
power_observer_.reset();
« no previous file with comments | « media/audio/mac/audio_manager_mac.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698