summaryrefslogtreecommitdiffstats
path: root/media
diff options
context:
space:
mode:
authordalecurtis@chromium.org <dalecurtis@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-10-23 23:20:56 +0000
committerdalecurtis@chromium.org <dalecurtis@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-10-23 23:20:56 +0000
commite3fa1cf9043ffc6aa014bfade911e9af0e0e5785 (patch)
tree7d61387c89b1d0a9eda1f07176d324a945213200 /media
parent168de21fb1f9fb172c07e16822c2e98bd8faacd0 (diff)
downloadchromium_src-e3fa1cf9043ffc6aa014bfade911e9af0e0e5785.zip
chromium_src-e3fa1cf9043ffc6aa014bfade911e9af0e0e5785.tar.gz
chromium_src-e3fa1cf9043ffc6aa014bfade911e9af0e0e5785.tar.bz2
Replace AudioManager::Init() with InitializeOnAudioThread().
Collapses the Init() method into the constructor since it was always called immediately anyways and provides a more useful method for performing initialization on the audio thread. BUG=153056 TEST=media_unittests continue to work and pass. Review URL: https://chromiumcodereview.appspot.com/11175066 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@163720 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'media')
-rw-r--r--media/audio/audio_low_latency_input_output_unittest.cc6
-rw-r--r--media/audio/audio_manager.cc4
-rw-r--r--media/audio/audio_manager.h3
-rw-r--r--media/audio/audio_manager_base.cc21
-rw-r--r--media/audio/audio_manager_base.h22
-rw-r--r--media/audio/audio_output_proxy_unittest.cc4
-rw-r--r--media/audio/linux/audio_manager_linux.cc8
-rw-r--r--media/audio/linux/audio_manager_linux.h3
-rw-r--r--media/audio/mock_audio_manager.cc3
-rw-r--r--media/audio/mock_audio_manager.h2
-rw-r--r--media/audio/openbsd/audio_manager_openbsd.cc4
-rw-r--r--media/audio/openbsd/audio_manager_openbsd.h3
12 files changed, 30 insertions, 53 deletions
diff --git a/media/audio/audio_low_latency_input_output_unittest.cc b/media/audio/audio_low_latency_input_output_unittest.cc
index 725d481..7ca7f03 100644
--- a/media/audio/audio_low_latency_input_output_unittest.cc
+++ b/media/audio/audio_low_latency_input_output_unittest.cc
@@ -81,10 +81,7 @@ struct AudioDelayState {
// the main thread instead of the audio thread.
class MockAudioManager : public AudioManagerAnyPlatform {
public:
- MockAudioManager() {
- Init();
- }
-
+ MockAudioManager() {}
virtual ~MockAudioManager() {}
virtual scoped_refptr<base::MessageLoopProxy> GetMessageLoop() OVERRIDE {
@@ -129,7 +126,6 @@ class AudioLowLatencyInputOutputTest : public testing::Test {
// The total effect is that recorded audio is played out in loop back using
// a sync buffer as temporary storage.
class FullDuplexAudioSinkSource
-
: public AudioInputStream::AudioInputCallback,
public AudioOutputStream::AudioSourceCallback {
public:
diff --git a/media/audio/audio_manager.cc b/media/audio/audio_manager.cc
index 028b409..11af0ac 100644
--- a/media/audio/audio_manager.cc
+++ b/media/audio/audio_manager.cc
@@ -21,9 +21,7 @@ AudioManager::~AudioManager() {
// static
AudioManager* AudioManager::Create() {
- AudioManager* ret = CreateAudioManager();
- ret->Init();
- return ret;
+ return CreateAudioManager();
}
} // namespace media
diff --git a/media/audio/audio_manager.h b/media/audio/audio_manager.h
index 3b61bde..ca4c468 100644
--- a/media/audio/audio_manager.h
+++ b/media/audio/audio_manager.h
@@ -127,9 +127,6 @@ class MEDIA_EXPORT AudioManager {
protected:
AudioManager();
- // Called from Create() to initialize the instance.
- virtual void Init() = 0;
-
private:
DISALLOW_COPY_AND_ASSIGN(AudioManager);
};
diff --git a/media/audio/audio_manager_base.cc b/media/audio/audio_manager_base.cc
index 1963a61..0c42cb0 100644
--- a/media/audio/audio_manager_base.cc
+++ b/media/audio/audio_manager_base.cc
@@ -44,7 +44,15 @@ AudioManagerBase::AudioManagerBase()
max_num_output_streams_(kDefaultMaxOutputStreams),
max_num_input_streams_(kDefaultMaxInputStreams),
num_output_streams_(0),
- num_input_streams_(0) {
+ num_input_streams_(0),
+ audio_thread_(new base::Thread("AudioThread")) {
+#if defined(OS_WIN)
+ audio_thread_->init_com_with_mta(true);
+#endif
+ CHECK(audio_thread_->Start());
+ message_loop_ = audio_thread_->message_loop_proxy();
+ message_loop_->PostTask(FROM_HERE, base::Bind(
+ &AudioManagerBase::InitializeOnAudioThread, base::Unretained(this)));
}
AudioManagerBase::~AudioManagerBase() {
@@ -60,15 +68,8 @@ AudioManagerBase::~AudioManagerBase() {
DCHECK_EQ(0, num_input_streams_);
}
-void AudioManagerBase::Init() {
- base::AutoLock lock(audio_thread_lock_);
- DCHECK(!audio_thread_.get());
- audio_thread_.reset(new base::Thread("AudioThread"));
-#if defined(OS_WIN)
- audio_thread_->init_com_with_mta(true);
-#endif
- CHECK(audio_thread_->Start());
- message_loop_ = audio_thread_->message_loop_proxy();
+void AudioManagerBase::InitializeOnAudioThread() {
+ DCHECK(message_loop_->BelongsToCurrentThread());
}
string16 AudioManagerBase::GetAudioInputDeviceModel() {
diff --git a/media/audio/audio_manager_base.h b/media/audio/audio_manager_base.h
index 3c06522..b6c8b27 100644
--- a/media/audio/audio_manager_base.h
+++ b/media/audio/audio_manager_base.h
@@ -37,8 +37,6 @@ class MEDIA_EXPORT AudioManagerBase : public AudioManager {
virtual ~AudioManagerBase();
- virtual void Init() OVERRIDE;
-
virtual scoped_refptr<base::MessageLoopProxy> GetMessageLoop() OVERRIDE;
virtual string16 GetAudioInputDeviceModel() OVERRIDE;
@@ -111,13 +109,11 @@ class MEDIA_EXPORT AudioManagerBase : public AudioManager {
AudioOutputDispatchersMap;
// Shuts down the audio thread and releases all the audio output dispatchers
- // on the audio thread. All audio streams should be freed before
- // Shutdown is called.
- // This must be called in the destructor of the AudioManager<Platform>.
+ // on the audio thread. All audio streams should be freed before Shutdown()
+ // is called. This must be called in the destructor of every AudioManagerBase
+ // implementation.
void Shutdown();
- void ShutdownOnAudioThread();
-
void SetMaxOutputStreamsAllowed(int max) { max_num_output_streams_ = max; }
// Called by each platform specific AudioManager to notify output state change
@@ -125,11 +121,17 @@ class MEDIA_EXPORT AudioManagerBase : public AudioManager {
// thread.
void NotifyAllOutputDeviceChangeListeners();
+ // Called on |audio_thread_|'s message loop immediately after construction.
+ virtual void InitializeOnAudioThread();
+
// Map of cached AudioOutputDispatcher instances. Must only be touched
// from the audio thread (no locking).
AudioOutputDispatchersMap output_dispatchers_;
private:
+ // Called by Shutdown().
+ void ShutdownOnAudioThread();
+
// Counts the number of active input streams to find out if something else
// is currently recording in Chrome.
base::AtomicRefCount num_active_input_streams_;
@@ -154,9 +156,9 @@ class MEDIA_EXPORT AudioManagerBase : public AudioManager {
scoped_ptr<base::Thread> audio_thread_;
mutable base::Lock audio_thread_lock_;
- // The message loop of the audio thread this object runs on. Set on Init().
- // Used for internal tasks which run on the audio thread even after Shutdown()
- // has been started and GetMessageLoop() starts returning NULL.
+ // The message loop of the audio thread this object runs on. Used for internal
+ // tasks which run on the audio thread even after Shutdown() has been started
+ // and GetMessageLoop() starts returning NULL.
scoped_refptr<base::MessageLoopProxy> message_loop_;
DISALLOW_COPY_AND_ASSIGN(AudioManagerBase);
diff --git a/media/audio/audio_output_proxy_unittest.cc b/media/audio/audio_output_proxy_unittest.cc
index 2d2168d..8fce93e 100644
--- a/media/audio/audio_output_proxy_unittest.cc
+++ b/media/audio/audio_output_proxy_unittest.cc
@@ -96,8 +96,10 @@ class MockAudioOutputStream : public AudioOutputStream {
class MockAudioManager : public AudioManagerBase {
public:
MockAudioManager() {}
+ virtual ~MockAudioManager() {
+ Shutdown();
+ }
- MOCK_METHOD0(Init, void());
MOCK_METHOD0(HasAudioOutputDevices, bool());
MOCK_METHOD0(HasAudioInputDevices, bool());
MOCK_METHOD0(GetAudioInputDeviceModel, string16());
diff --git a/media/audio/linux/audio_manager_linux.cc b/media/audio/linux/audio_manager_linux.cc
index 5f31862..b9d7aeb 100644
--- a/media/audio/linux/audio_manager_linux.cc
+++ b/media/audio/linux/audio_manager_linux.cc
@@ -59,7 +59,8 @@ bool AudioManagerLinux::HasAudioInputDevices() {
return HasAnyAlsaAudioDevice(kStreamCapture);
}
-AudioManagerLinux::AudioManagerLinux() {
+AudioManagerLinux::AudioManagerLinux()
+ : wrapper_(new AlsaWrapper()) {
SetMaxOutputStreamsAllowed(kMaxOutputStreams);
}
@@ -67,11 +68,6 @@ AudioManagerLinux::~AudioManagerLinux() {
Shutdown();
}
-void AudioManagerLinux::Init() {
- AudioManagerBase::Init();
- wrapper_.reset(new AlsaWrapper());
-}
-
bool AudioManagerLinux::CanShowAudioInputSettings() {
scoped_ptr<base::Environment> env(base::Environment::Create());
diff --git a/media/audio/linux/audio_manager_linux.h b/media/audio/linux/audio_manager_linux.h
index 2d71605..7aab32a 100644
--- a/media/audio/linux/audio_manager_linux.h
+++ b/media/audio/linux/audio_manager_linux.h
@@ -19,9 +19,6 @@ class MEDIA_EXPORT AudioManagerLinux : public AudioManagerBase {
public:
AudioManagerLinux();
- // Call before using a newly created AudioManagerLinux instance.
- virtual void Init() OVERRIDE;
-
// Implementation of AudioManager.
virtual bool HasAudioOutputDevices() OVERRIDE;
virtual bool HasAudioInputDevices() OVERRIDE;
diff --git a/media/audio/mock_audio_manager.cc b/media/audio/mock_audio_manager.cc
index bb3d49c..9a40b65 100644
--- a/media/audio/mock_audio_manager.cc
+++ b/media/audio/mock_audio_manager.cc
@@ -66,9 +66,6 @@ scoped_refptr<base::MessageLoopProxy> MockAudioManager::GetMessageLoop() {
return message_loop_proxy_;
}
-void MockAudioManager::Init() {
-}
-
void MockAudioManager::AddOutputDeviceChangeListener(
AudioDeviceListener* listener) {
}
diff --git a/media/audio/mock_audio_manager.h b/media/audio/mock_audio_manager.h
index 347ca50..6a94055 100644
--- a/media/audio/mock_audio_manager.h
+++ b/media/audio/mock_audio_manager.h
@@ -50,8 +50,6 @@ class MockAudioManager : public media::AudioManager {
virtual scoped_refptr<base::MessageLoopProxy> GetMessageLoop() OVERRIDE;
- virtual void Init() OVERRIDE;
-
virtual void AddOutputDeviceChangeListener(
AudioDeviceListener* listener) OVERRIDE;
virtual void RemoveOutputDeviceChangeListener(
diff --git a/media/audio/openbsd/audio_manager_openbsd.cc b/media/audio/openbsd/audio_manager_openbsd.cc
index 3f2cfae..84304a5 100644
--- a/media/audio/openbsd/audio_manager_openbsd.cc
+++ b/media/audio/openbsd/audio_manager_openbsd.cc
@@ -51,10 +51,6 @@ AudioManagerOpenBSD::~AudioManagerOpenBSD() {
Shutdown();
}
-void AudioManagerOpenBSD::Init() {
- AudioManagerBase::Init();
-}
-
AudioOutputStream* AudioManagerOpenBSD::MakeLinearOutputStream(
const AudioParameters& params) {
DCHECK_EQ(AudioParameters::AUDIO_PCM_LINEAR, params.format);
diff --git a/media/audio/openbsd/audio_manager_openbsd.h b/media/audio/openbsd/audio_manager_openbsd.h
index 8fb208d..aeba43e 100644
--- a/media/audio/openbsd/audio_manager_openbsd.h
+++ b/media/audio/openbsd/audio_manager_openbsd.h
@@ -16,9 +16,6 @@ class MEDIA_EXPORT AudioManagerOpenBSD : public AudioManagerBase {
public:
AudioManagerOpenBSD();
- // Call before using a newly created AudioManagerOpenBSD instance.
- virtual void Init() OVERRIDE;
-
// Implementation of AudioManager.
virtual bool HasAudioOutputDevices() OVERRIDE;
virtual bool HasAudioInputDevices() OVERRIDE;