| Index: media/audio/audio_output_dispatcher_impl.h
|
| diff --git a/media/audio/audio_output_dispatcher_impl.h b/media/audio/audio_output_dispatcher_impl.h
|
| index ca30b3a111bc1f03a6a5b560ea22fd9e256dfb93..6228c61c0f16e26681af7f5b54f9f8a1f3162742 100644
|
| --- a/media/audio/audio_output_dispatcher_impl.h
|
| +++ b/media/audio/audio_output_dispatcher_impl.h
|
| @@ -13,12 +13,11 @@
|
| #ifndef MEDIA_AUDIO_AUDIO_OUTPUT_DISPATCHER_IMPL_H_
|
| #define MEDIA_AUDIO_AUDIO_OUTPUT_DISPATCHER_IMPL_H_
|
|
|
| -#include <list>
|
| #include <map>
|
| +#include <vector>
|
|
|
| #include "base/basictypes.h"
|
| #include "base/memory/ref_counted.h"
|
| -#include "base/memory/weak_ptr.h"
|
| #include "base/timer/timer.h"
|
| #include "media/audio/audio_io.h"
|
| #include "media/audio/audio_manager.h"
|
| @@ -31,8 +30,8 @@ class AudioOutputProxy;
|
|
|
| class MEDIA_EXPORT AudioOutputDispatcherImpl : public AudioOutputDispatcher {
|
| public:
|
| - // |close_delay_ms| specifies delay after the stream is paused until
|
| - // the audio device is closed.
|
| + // |close_delay| specifies delay after the stream is idle until the audio
|
| + // device is closed.
|
| AudioOutputDispatcherImpl(AudioManager* audio_manager,
|
| const AudioParameters& params,
|
| const std::string& output_device_id,
|
| @@ -48,13 +47,16 @@ class MEDIA_EXPORT AudioOutputDispatcherImpl : public AudioOutputDispatcher {
|
| virtual bool StartStream(AudioOutputStream::AudioSourceCallback* callback,
|
| AudioOutputProxy* stream_proxy) OVERRIDE;
|
|
|
| - // Holds the physical stream temporarily in |pausing_streams_| and then
|
| - // |stream| is added to the pool of pending streams (i.e. |idle_streams_|).
|
| + // Stops the stream assigned to the specified proxy and moves it into
|
| + // |idle_streams_| for reuse by other proxies.
|
| virtual void StopStream(AudioOutputProxy* stream_proxy) OVERRIDE;
|
|
|
| virtual void StreamVolumeSet(AudioOutputProxy* stream_proxy,
|
| double volume) OVERRIDE;
|
|
|
| + // Closes |idle_streams_| until the number of |idle_streams_| is equal to the
|
| + // |idle_proxies_| count. If there are no |idle_proxies_| a single stream is
|
| + // kept alive until |close_timer_| fires.
|
| virtual void CloseStream(AudioOutputProxy* stream_proxy) OVERRIDE;
|
|
|
| virtual void Shutdown() OVERRIDE;
|
| @@ -63,34 +65,28 @@ class MEDIA_EXPORT AudioOutputDispatcherImpl : public AudioOutputDispatcher {
|
| virtual void RestartStreamsForWedgeFix() OVERRIDE;
|
|
|
| private:
|
| - typedef std::map<AudioOutputProxy*, AudioOutputStream*> AudioStreamMap;
|
| friend class base::RefCountedThreadSafe<AudioOutputDispatcherImpl>;
|
| virtual ~AudioOutputDispatcherImpl();
|
|
|
| - friend class AudioOutputProxyTest;
|
| -
|
| // Creates a new physical output stream, opens it and pushes to
|
| // |idle_streams_|. Returns false if the stream couldn't be created or
|
| // opened.
|
| bool CreateAndOpenStream();
|
|
|
| - // Before a stream is reused, it should sit idle for a bit. This task is
|
| - // called once that time has elapsed.
|
| - void StopStreamTask();
|
| + // Closes all |idle_streams_|.
|
| + void CloseAllIdleStreams();
|
| + // Similar to CloseAllIdleStreams(), but keeps |keep_alive| streams alive.
|
| + void CloseIdleStreams(size_t keep_alive);
|
|
|
| - // Called by |close_timer_|. Closes all pending streams.
|
| - void ClosePendingStreams();
|
| + size_t idle_proxies_;
|
| + std::vector<AudioOutputStream*> idle_streams_;
|
|
|
| - base::TimeDelta pause_delay_;
|
| - size_t paused_proxies_;
|
| - typedef std::list<AudioOutputStream*> AudioOutputStreamList;
|
| - AudioOutputStreamList idle_streams_;
|
| - AudioOutputStreamList pausing_streams_;
|
| -
|
| - // Used to post delayed tasks to ourselves that we cancel inside Shutdown().
|
| - base::WeakPtrFactory<AudioOutputDispatcherImpl> weak_this_;
|
| + // When streams are stopped they're added to |idle_streams_|, if no stream is
|
| + // reused before |close_delay_| elapses |close_timer_| will run
|
| + // CloseIdleStreams().
|
| base::DelayTimer<AudioOutputDispatcherImpl> close_timer_;
|
|
|
| + typedef std::map<AudioOutputProxy*, AudioOutputStream*> AudioStreamMap;
|
| AudioStreamMap proxy_to_physical_map_;
|
|
|
| DISALLOW_COPY_AND_ASSIGN(AudioOutputDispatcherImpl);
|
|
|