Index: media/audio/audio_manager.h |
diff --git a/media/audio/audio_manager.h b/media/audio/audio_manager.h |
index 41425813cc538a2532e4abb602a4de5a73ec9a06..d3eea4a6b9cdcf5b944e076dc12e983a82109b05 100644 |
--- a/media/audio/audio_manager.h |
+++ b/media/audio/audio_manager.h |
@@ -5,12 +5,10 @@ |
#ifndef MEDIA_AUDIO_AUDIO_MANAGER_H_ |
#define MEDIA_AUDIO_AUDIO_MANAGER_H_ |
-#include <memory> |
#include <string> |
#include "base/macros.h" |
#include "base/memory/ref_counted.h" |
-#include "base/sequenced_task_runner_helpers.h" |
#include "base/strings/string16.h" |
#include "build/build_config.h" |
#include "media/audio/audio_device_name.h" |
@@ -24,16 +22,8 @@ |
namespace media { |
class AudioInputStream; |
-class AudioManager; |
class AudioManagerFactory; |
class AudioOutputStream; |
- |
-class MEDIA_EXPORT AudioManagerDeleter { |
- public: |
- void operator()(const AudioManager* instance) const; |
-}; |
-using ScopedAudioManagerPtr = |
- std::unique_ptr<AudioManager, AudioManagerDeleter>; |
// Manages all audio resources. Provides some convenience functions that avoid |
// the need to provide iterators over the existing streams. |
@@ -44,6 +34,8 @@ |
// logged on Windows (this allows us to report driver hangs to Microsoft). |
class MEDIA_EXPORT AudioManager { |
public: |
+ virtual ~AudioManager(); |
+ |
// This provides an alternative to the statically linked factory method used |
// to create AudioManager. This is useful for dynamically-linked third |
// party clients seeking to provide a platform-specific implementation of |
@@ -54,35 +46,20 @@ |
// which must not be NULL. |
static void SetFactory(AudioManagerFactory* factory); |
- // Construct the audio manager; only one instance is allowed. |
- // The returned instance must be deleted on AudioManager::GetTaskRunnner(). |
- // |
- // The manager will forward CreateAudioLog() calls to the provided |
- // AudioLogFactory; as such |audio_log_factory| must outlive the AudioManager. |
- // |
- // The manager will use |task_runner| for audio IO. This same task runner |
- // is returned by GetTaskRunner(). |
- // On OS_MACOSX, CoreAudio requires that |task_runner| must belong to the |
- // main thread of the process, which in our case is sadly the browser UI |
- // thread. Failure to execute calls on the right thread leads to crashes and |
- // odd behavior. See http://crbug.com/158170. |
- // |
- // The manager will use |worker_task_runner| for heavyweight tasks. |
- // The |worker_task_runner| may be the same as |task_runner|. This same |
- // task runner is returned by GetWorkerTaskRunner. |
- // |
- // If |monitor_task_runner| is not NULL, a monitor will be scheduled on |
- // |monitor_task_runner| to monitor |task_runner|. See EnableHangMonitor(). |
- static ScopedAudioManagerPtr Create( |
- scoped_refptr<base::SingleThreadTaskRunner> task_runner, |
- scoped_refptr<base::SingleThreadTaskRunner> worker_task_runner, |
- scoped_refptr<base::SingleThreadTaskRunner> monitor_task_runner, |
- AudioLogFactory* audio_log_factory); |
- |
- // A convenience wrapper of AudioManager::Create for testing. |
- // The given |task_runner| is shared for both audio io and heavyweight tasks. |
- static ScopedAudioManagerPtr CreateForTesting( |
- scoped_refptr<base::SingleThreadTaskRunner> task_runner); |
+ // Construct the audio manager; only one instance is allowed. The manager |
+ // will forward CreateAudioLog() calls to the provided AudioLogFactory; as |
+ // such |audio_log_factory| must outlive the AudioManager. |
+ static AudioManager* Create(AudioLogFactory* audio_log_factory); |
+ |
+ // Similar to Create() except also schedules a monitor on the given task |
+ // runner to ensure the audio thread is not stuck for more than 60 seconds; if |
+ // a hang is detected, the process will be crashed. See EnableHangMonitor(). |
+ static AudioManager* CreateWithHangTimer( |
+ AudioLogFactory* audio_log_factory, |
+ const scoped_refptr<base::SingleThreadTaskRunner>& monitor_task_runner); |
+ |
+ // Similar to Create() except uses a FakeAudioLogFactory for testing. |
+ static AudioManager* CreateForTesting(); |
// Enables non-crash dumps when audio thread hangs are detected. |
// TODO(dalecurtis): There are no callers to this function at present. A list |
@@ -201,18 +178,12 @@ |
const std::string& device_id) = 0; |
// Returns the task runner used for audio IO. |
- // TODO(alokp): Rename to task_runner(). |
- base::SingleThreadTaskRunner* GetTaskRunner() const { |
- return task_runner_.get(); |
- } |
+ virtual scoped_refptr<base::SingleThreadTaskRunner> GetTaskRunner() = 0; |
// Heavyweight tasks should use GetWorkerTaskRunner() instead of |
// GetTaskRunner(). On most platforms they are the same, but some share the |
// UI loop with the audio IO loop. |
- // TODO(alokp): Rename to worker_task_runner(). |
- base::SingleThreadTaskRunner* GetWorkerTaskRunner() const { |
- return worker_task_runner_.get(); |
- } |
+ virtual scoped_refptr<base::SingleThreadTaskRunner> GetWorkerTaskRunner() = 0; |
// Allows clients to listen for device state changes; e.g. preferred sample |
// rate or channel layout changes. The typical response to receiving this |
@@ -259,15 +230,9 @@ |
AudioLogFactory::AudioComponent component) = 0; |
protected: |
- AudioManager(scoped_refptr<base::SingleThreadTaskRunner> task_runner, |
- scoped_refptr<base::SingleThreadTaskRunner> worker_task_runner); |
- virtual ~AudioManager(); |
+ AudioManager(); |
private: |
- friend class base::DeleteHelper<AudioManager>; |
- |
- scoped_refptr<base::SingleThreadTaskRunner> task_runner_; |
- scoped_refptr<base::SingleThreadTaskRunner> worker_task_runner_; |
DISALLOW_COPY_AND_ASSIGN(AudioManager); |
}; |