Index: media/audio/audio_manager_base.h |
=================================================================== |
--- media/audio/audio_manager_base.h (revision 114012) |
+++ media/audio/audio_manager_base.h (working copy) |
@@ -7,6 +7,7 @@ |
#include <map> |
+#include "base/atomic_ref_count.h" |
#include "base/compiler_specific.h" |
#include "base/threading/thread.h" |
#include "media/audio/audio_manager.h" |
@@ -23,8 +24,15 @@ |
AudioManagerBase(); |
+#ifndef NDEBUG |
+ // Overridden to make sure we don't accidentally get added reference counts on |
+ // the audio thread. The AudioManagerBase instance must always be deleted |
+ // from outside the audio thread. |
+ virtual void AddRef() const OVERRIDE; |
+ virtual void Release() const OVERRIDE; |
+#endif |
+ |
virtual void Init() OVERRIDE; |
- virtual void Cleanup() OVERRIDE; |
virtual MessageLoop* GetMessageLoop() OVERRIDE; |
@@ -44,6 +52,11 @@ |
void IncreaseActiveInputStreamCount(); |
void DecreaseActiveInputStreamCount(); |
+ // Shuts down the audio thread and releases all the audio output dispatchers |
+ // on the audio thread. All AudioOutputProxy instances should be freed before |
+ // Shutdown is called. |
+ void Shutdown(); |
+ |
protected: |
virtual ~AudioManagerBase(); |
@@ -51,25 +64,20 @@ |
AudioParameters::Compare> |
AudioOutputDispatchersMap; |
- bool initialized() { return initialized_; } |
+ void ShutdownOnAudioThread(); |
+ bool initialized() { return audio_thread_.IsRunning(); } |
+ |
// Thread used to interact with AudioOutputStreams created by this |
// audio manger. |
base::Thread audio_thread_; |
- bool initialized_; |
- |
AudioOutputDispatchersMap output_dispatchers_; |
// Counts the number of active input streams to find out if something else |
// is currently recording in Chrome. |
- int num_active_input_streams_; |
+ base::AtomicRefCount num_active_input_streams_; |
- // Lock used to synchronize the access to num_active_input_streams_. |
- // Do not use for anything else and try to avoid using other locks |
- // in this code whenever possible. |
- base::Lock active_input_streams_lock_; |
- |
DISALLOW_COPY_AND_ASSIGN(AudioManagerBase); |
}; |