Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(30)

Unified Diff: media/audio/audio_manager.cc

Issue 1901583005: Revert of Pass task runners to AudioManager constructor. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « media/audio/audio_manager.h ('k') | media/audio/audio_manager_base.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: media/audio/audio_manager.cc
diff --git a/media/audio/audio_manager.cc b/media/audio/audio_manager.cc
index edc327a662c3debce744c4913f60f348c8cd4821..5d5f3b3a63337dd1df6fb307a6a17f046529704b 100644
--- a/media/audio/audio_manager.cc
+++ b/media/audio/audio_manager.cc
@@ -76,9 +76,9 @@
}
void StartHangTimer(
- scoped_refptr<base::SingleThreadTaskRunner> monitor_task_runner) {
+ const scoped_refptr<base::SingleThreadTaskRunner>& monitor_task_runner) {
CHECK(!monitor_task_runner_);
- monitor_task_runner_ = std::move(monitor_task_runner);
+ monitor_task_runner_ = monitor_task_runner;
base::PowerMonitor::Get()->AddObserver(this);
failed_pings_ = 0;
io_task_running_ = audio_task_running_ = true;
@@ -255,51 +255,14 @@
} // namespace
-void AudioManagerDeleter::operator()(const AudioManager* instance) const {
- CHECK(instance);
- // We reset g_last_created here instead of in the destructor of AudioManager
- // because the destructor runs on the audio thread. We want to always change
- // g_last_created from the main thread.
- if (g_last_created == instance) {
- g_last_created = nullptr;
- } else {
- // We create multiple instances of AudioManager only when testing.
- // We should not encounter this case in production.
- LOG(WARNING) << "Multiple instances of AudioManager detected";
- }
-
- // AudioManager must be destroyed on the audio thread.
- if (!instance->GetTaskRunner()->DeleteSoon(FROM_HERE, instance)) {
- LOG(WARNING) << "Failed to delete AudioManager instance.";
- }
-}
-
// Forward declaration of the platform specific AudioManager factory function.
-ScopedAudioManagerPtr CreateAudioManager(
- scoped_refptr<base::SingleThreadTaskRunner> task_runner,
- scoped_refptr<base::SingleThreadTaskRunner> worker_task_runner,
- AudioLogFactory* audio_log_factory);
-
-AudioManager::AudioManager(
- scoped_refptr<base::SingleThreadTaskRunner> task_runner,
- scoped_refptr<base::SingleThreadTaskRunner> worker_task_runner)
- : task_runner_(std::move(task_runner)),
- worker_task_runner_(std::move(worker_task_runner)) {
- DCHECK(task_runner_);
- DCHECK(worker_task_runner_);
-
- if (g_last_created) {
- // We create multiple instances of AudioManager only when testing.
- // We should not encounter this case in production.
- LOG(WARNING) << "Multiple instances of AudioManager detected";
- }
- // We always override |g_last_created| irrespective of whether it is already
- // set or not becuase it represents the last created instance.
- g_last_created = this;
-}
+AudioManager* CreateAudioManager(AudioLogFactory* audio_log_factory);
+
+AudioManager::AudioManager() {}
AudioManager::~AudioManager() {
- DCHECK(task_runner_->BelongsToCurrentThread());
+ CHECK(!g_last_created || g_last_created == this);
+ g_last_created = nullptr;
}
// static
@@ -319,38 +282,37 @@
}
// static
-ScopedAudioManagerPtr AudioManager::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) {
- DCHECK(task_runner);
- DCHECK(worker_task_runner);
- ScopedAudioManagerPtr manager;
- if (g_audio_manager_factory) {
- manager = g_audio_manager_factory->CreateInstance(
- std::move(task_runner), std::move(worker_task_runner),
- audio_log_factory);
- } else {
- manager =
- CreateAudioManager(std::move(task_runner),
- std::move(worker_task_runner), audio_log_factory);
- }
-
- if (monitor_task_runner)
- g_helper.Pointer()->StartHangTimer(std::move(monitor_task_runner));
+AudioManager* AudioManager::Create(AudioLogFactory* audio_log_factory) {
+ CHECK(!g_last_created);
+ if (g_audio_manager_factory)
+ g_last_created = g_audio_manager_factory->CreateInstance(audio_log_factory);
+ else
+ g_last_created = CreateAudioManager(audio_log_factory);
+
+ return g_last_created;
+}
+
+// static
+AudioManager* AudioManager::CreateWithHangTimer(
+ AudioLogFactory* audio_log_factory,
+ const scoped_refptr<base::SingleThreadTaskRunner>& monitor_task_runner) {
+ AudioManager* manager = Create(audio_log_factory);
+
+// On OSX the audio thread is the UI thread, for which a hang monitor is not
+// necessary or recommended.
+#if !defined(OS_MACOSX)
+ g_helper.Pointer()->StartHangTimer(monitor_task_runner);
+#endif
return manager;
}
// static
-ScopedAudioManagerPtr AudioManager::CreateForTesting(
- scoped_refptr<base::SingleThreadTaskRunner> task_runner) {
+AudioManager* AudioManager::CreateForTesting() {
#if defined(OS_WIN)
g_helper.Pointer()->InitializeCOMForTesting();
#endif
- return Create(task_runner, task_runner, nullptr,
- g_helper.Pointer()->fake_log_factory());
+ return Create(g_helper.Pointer()->fake_log_factory());
}
// static
« no previous file with comments | « media/audio/audio_manager.h ('k') | media/audio/audio_manager_base.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698