Chromium Code Reviews| 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..012a59a5b74c1698ee37db675afe209d9440603e 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,17 @@ void AudioManagerAndroid::InitializeIfNeeded() { |
| base::Unretained(this))); |
| } |
| +void AudioManagerAndroid::ShutdownOnAudioThread() { |
| + AudioManagerBase::ShutdownOnAudioThread(); |
| + |
| + if (!j_audio_manager_.is_null()) { |
|
o1ka
2017/05/10 15:57:56
Add a comment why we must do it now on audio threa
alokp
2017/05/10 18:04:03
Done.
|
| + 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; |
| } |