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

Unified Diff: media/audio/audio_system_impl_unittest.cc

Issue 2784433002: Ensures that audio tasks cannot run after AudioManager is deleted. (Closed)
Patch Set: cleanup Created 3 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
Index: media/audio/audio_system_impl_unittest.cc
diff --git a/media/audio/audio_system_impl_unittest.cc b/media/audio/audio_system_impl_unittest.cc
index 618bf9298e7b37829324f4196926fd63ff181c0b..daf4c560e51ca93c867c6338e944a46962370a7c 100644
--- a/media/audio/audio_system_impl_unittest.cc
+++ b/media/audio/audio_system_impl_unittest.cc
@@ -11,7 +11,9 @@
#include "base/threading/thread_checker.h"
#include "base/threading/thread_task_runner_handle.h"
#include "media/audio/audio_device_description.h"
+#include "media/audio/audio_thread_impl.h"
#include "media/audio/mock_audio_manager.h"
+#include "media/audio/test_audio_thread.h"
#include "media/base/test_helpers.h"
#include "testing/gmock/include/gmock/gmock.h"
#include "testing/gtest/include/gtest/gtest.h"
@@ -32,7 +34,6 @@ class AudioSystemImplTest : public testing::TestWithParam<bool> {
public:
AudioSystemImplTest()
: use_audio_thread_(GetParam()),
- audio_thread_("AudioSystemThread"),
input_params_(AudioParameters::AUDIO_PCM_LINEAR,
CHANNEL_LAYOUT_MONO,
AudioParameters::kTelephoneSampleRate,
@@ -49,14 +50,12 @@ class AudioSystemImplTest : public testing::TestWithParam<bool> {
16,
AudioParameters::kTelephoneSampleRate / 30) {
if (use_audio_thread_) {
- audio_thread_.StartAndWaitForTesting();
- audio_manager_.reset(
- new media::MockAudioManager(audio_thread_.task_runner()));
+ audio_manager_ = base::MakeUnique<MockAudioManager>(
+ base::MakeUnique<AudioThreadImpl>());
} else {
- audio_manager_.reset(new media::MockAudioManager(
- base::ThreadTaskRunnerHandle::Get().get()));
+ audio_manager_ = base::MakeUnique<MockAudioManager>(
+ base::MakeUnique<TestAudioThread>());
o1ka 2017/04/28 13:24:20 Can we have a bool parameter for AudioThreadImpl c
alokp 2017/04/28 17:31:12 I think this is cleaner. Did you have any specific
o1ka 2017/05/02 16:16:00 The problem with this particular test is that |use
alokp 2017/05/02 17:11:28 You are right, but what is the use for testing a c
o1ka 2017/05/02 21:42:23 AudioSystem can be accessed from any thread. In pr
alokp 2017/05/09 19:06:15 I added a bool to TestAudioThread constructor and
}
-
audio_manager_->SetInputStreamParameters(input_params_);
audio_manager_->SetOutputStreamParameters(output_params_);
audio_manager_->SetDefaultOutputStreamParameters(default_output_params_);
@@ -77,13 +76,7 @@ class AudioSystemImplTest : public testing::TestWithParam<bool> {
EXPECT_EQ(AudioSystem::Get(), audio_system_.get());
}
- ~AudioSystemImplTest() override {
- // Deleting |audio_manager_| on its thread.
- audio_system_.reset();
- EXPECT_EQ(AudioSystem::Get(), nullptr);
- audio_manager_.reset();
- audio_thread_.Stop();
- }
+ ~AudioSystemImplTest() override { audio_manager_->Shutdown(); }
o1ka 2017/04/28 13:24:20 Note that in this test the destruction sequence is
alokp 2017/04/28 17:31:12 This one is correct :) We need to fix BML as noted
o1ka 2017/05/02 16:16:00 Right, that's what I thought :)
void OnAudioParams(const AudioParameters& expected,
const AudioParameters& received) {
@@ -132,7 +125,7 @@ class AudioSystemImplTest : public testing::TestWithParam<bool> {
return;
}
WaitableMessageLoopEvent event;
- audio_thread_.task_runner()->PostTaskAndReply(
+ audio_manager_->GetTaskRunner()->PostTaskAndReply(
FROM_HERE, base::Bind(&base::DoNothing), event.GetClosure());
// Runs the loop and waits for the |audio_thread_| to call event's closure,
// which means AudioSystem reply containing device parameters is already
@@ -153,8 +146,7 @@ class AudioSystemImplTest : public testing::TestWithParam<bool> {
base::MessageLoop message_loop_;
base::ThreadChecker thread_checker_;
bool use_audio_thread_;
- base::Thread audio_thread_;
- MockAudioManager::UniquePtr audio_manager_;
+ std::unique_ptr<media::MockAudioManager> audio_manager_;
std::unique_ptr<media::AudioSystem> audio_system_;
AudioParameters input_params_;
AudioParameters output_params_;

Powered by Google App Engine
This is Rietveld 408576698