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

Unified Diff: media/audio/android/audio_manager_android.cc

Issue 2784433002: Ensures that audio tasks cannot run after AudioManager is deleted. (Closed)
Patch Set: rebase Created 3 years, 7 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/android/audio_manager_android.h ('k') | media/audio/audio_input_controller_unittest.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: media/audio/android/audio_manager_android.cc
diff --git a/media/audio/android/audio_manager_android.cc b/media/audio/android/audio_manager_android.cc
index 502a8cbf8dc84955a99546cfabc3858b164e0e4e..234a0616bee43d58ee8c4ec59811304a323093df 100644
--- a/media/audio/android/audio_manager_android.cc
+++ b/media/audio/android/audio_manager_android.cc
@@ -11,6 +11,7 @@
#include "base/android/scoped_java_ref.h"
#include "base/bind.h"
#include "base/logging.h"
+#include "base/memory/ptr_util.h"
#include "base/message_loop/message_loop.h"
#include "base/strings/string_number_conversions.h"
#include "jni/AudioManagerAndroid_jni.h"
@@ -46,39 +47,24 @@ const int kDefaultOutputBufferSize = 2048;
} // namespace
-ScopedAudioManagerPtr CreateAudioManager(
- scoped_refptr<base::SingleThreadTaskRunner> task_runner,
- scoped_refptr<base::SingleThreadTaskRunner> worker_task_runner,
+std::unique_ptr<AudioManager> CreateAudioManager(
+ std::unique_ptr<AudioThread> audio_thread,
AudioLogFactory* audio_log_factory) {
- return ScopedAudioManagerPtr(new AudioManagerAndroid(
- std::move(task_runner), std::move(worker_task_runner),
- audio_log_factory));
+ return base::MakeUnique<AudioManagerAndroid>(std::move(audio_thread),
+ audio_log_factory);
}
AudioManagerAndroid::AudioManagerAndroid(
- scoped_refptr<base::SingleThreadTaskRunner> task_runner,
- scoped_refptr<base::SingleThreadTaskRunner> worker_task_runner,
+ std::unique_ptr<AudioThread> audio_thread,
AudioLogFactory* audio_log_factory)
- : AudioManagerBase(std::move(task_runner),
- std::move(worker_task_runner),
- audio_log_factory),
+ : AudioManagerBase(std::move(audio_thread), audio_log_factory),
communication_mode_is_on_(false),
output_volume_override_set_(false),
output_volume_override_(0) {
SetMaxOutputStreamsAllowed(kMaxOutputStreams);
}
-AudioManagerAndroid::~AudioManagerAndroid() {
- DCHECK(GetTaskRunner()->BelongsToCurrentThread());
- Shutdown();
-
- if (j_audio_manager_.is_null())
- return;
- DVLOG(2) << "Destroying Java part of the audio manager";
- Java_AudioManagerAndroid_close(base::android::AttachCurrentThread(),
- j_audio_manager_);
- j_audio_manager_.Reset();
-}
+AudioManagerAndroid::~AudioManagerAndroid() = default;
void AudioManagerAndroid::InitializeIfNeeded() {
GetTaskRunner()->PostTask(
@@ -87,6 +73,19 @@ void AudioManagerAndroid::InitializeIfNeeded() {
base::Unretained(this)));
}
+void AudioManagerAndroid::ShutdownOnAudioThread() {
+ AudioManagerBase::ShutdownOnAudioThread();
+
+ // Destory java android manager here because it can only be accessed on the
+ // audio thread.
+ if (!j_audio_manager_.is_null()) {
+ DVLOG(2) << "Destroying Java part of the audio manager";
+ Java_AudioManagerAndroid_close(base::android::AttachCurrentThread(),
+ j_audio_manager_);
+ j_audio_manager_.Reset();
+ }
+}
+
bool AudioManagerAndroid::HasAudioOutputDevices() {
return true;
}
« no previous file with comments | « media/audio/android/audio_manager_android.h ('k') | media/audio/audio_input_controller_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698