| Index: media/audio/audio_manager_base.h
|
| ===================================================================
|
| --- media/audio/audio_manager_base.h (revision 113173)
|
| +++ 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;
|
|
|
| @@ -43,33 +51,32 @@
|
|
|
| void IncreaseActiveInputStreamCount();
|
| void DecreaseActiveInputStreamCount();
|
| + void Shutdown();
|
|
|
| protected:
|
| virtual ~AudioManagerBase();
|
|
|
| + // The map holds a weak reference to the AudioOutputDispatcher objects
|
| + // to avoid circular dependencies. When the dispatcher dies, it notifies
|
| + // us via ClearOutputDispatcher.
|
| typedef std::map<AudioParameters, scoped_refptr<AudioOutputDispatcher>,
|
| 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);
|
| };
|
|
|
|
|