Index: media/audio/win/audio_output_win_unittest.cc |
diff --git a/media/audio/win/audio_output_win_unittest.cc b/media/audio/win/audio_output_win_unittest.cc |
index 0c59d9b32b3fa1b93e9c2870e5edf1e77d160d4a..8fca2f5509d0a5ad69b7d4619b14a70ed908fe96 100644 |
--- a/media/audio/win/audio_output_win_unittest.cc |
+++ b/media/audio/win/audio_output_win_unittest.cc |
@@ -9,6 +9,7 @@ |
#include "base/base_paths.h" |
#include "base/memory/aligned_memory.h" |
+#include "base/message_loop/message_loop.h" |
#include "base/sync_socket.h" |
#include "base/win/scoped_com_initializer.h" |
#include "base/win/windows_version.h" |
@@ -143,6 +144,23 @@ class ReadOnlyMappedFile { |
uint32_t size_; |
}; |
+class WinAudioTest : public ::testing::Test { |
+ public: |
+ WinAudioTest() { |
+ audio_manager_ = |
+ AudioManager::CreateForTesting(message_loop_.task_runner()); |
+ message_loop_.RunUntilIdle(); |
+ } |
+ ~WinAudioTest() override { |
+ audio_manager_.reset(); |
+ message_loop_.RunUntilIdle(); |
+ } |
+ |
+ protected: |
+ base::MessageLoop message_loop_; |
+ ScopedAudioManagerPtr audio_manager_; |
+}; |
+ |
// =========================================================================== |
// Validation of AudioManager::AUDIO_PCM_LINEAR |
// |
@@ -152,11 +170,10 @@ class ReadOnlyMappedFile { |
// at some point, possibly when the connection goes idle. |
// Test that can it be created and closed. |
-TEST(WinAudioTest, PCMWaveStreamGetAndClose) { |
- scoped_ptr<AudioManager> audio_man(AudioManager::CreateForTesting()); |
- ABORT_AUDIO_TEST_IF_NOT(audio_man->HasAudioOutputDevices()); |
+TEST_F(WinAudioTest, PCMWaveStreamGetAndClose) { |
+ ABORT_AUDIO_TEST_IF_NOT(audio_manager_->HasAudioOutputDevices()); |
- AudioOutputStream* oas = audio_man->MakeAudioOutputStream( |
+ AudioOutputStream* oas = audio_manager_->MakeAudioOutputStream( |
AudioParameters(AudioParameters::AUDIO_PCM_LINEAR, CHANNEL_LAYOUT_STEREO, |
8000, 16, 256), |
std::string()); |
@@ -165,44 +182,53 @@ TEST(WinAudioTest, PCMWaveStreamGetAndClose) { |
} |
// Test that can it be cannot be created with invalid parameters. |
-TEST(WinAudioTest, SanityOnMakeParams) { |
- scoped_ptr<AudioManager> audio_man(AudioManager::CreateForTesting()); |
- ABORT_AUDIO_TEST_IF_NOT(audio_man->HasAudioOutputDevices()); |
+TEST_F(WinAudioTest, SanityOnMakeParams) { |
+ ABORT_AUDIO_TEST_IF_NOT(audio_manager_->HasAudioOutputDevices()); |
AudioParameters::Format fmt = AudioParameters::AUDIO_PCM_LINEAR; |
- EXPECT_TRUE(NULL == audio_man->MakeAudioOutputStream( |
- AudioParameters(fmt, CHANNEL_LAYOUT_UNSUPPORTED, 8000, 16, 256), |
- std::string())); |
- EXPECT_TRUE(NULL == audio_man->MakeAudioOutputStream( |
- AudioParameters(fmt, CHANNEL_LAYOUT_MONO, 1024 * 1024, 16, 256), |
- std::string())); |
- EXPECT_TRUE(NULL == audio_man->MakeAudioOutputStream( |
- AudioParameters(fmt, CHANNEL_LAYOUT_STEREO, 8000, 80, 256), |
- std::string())); |
- EXPECT_TRUE(NULL == audio_man->MakeAudioOutputStream( |
- AudioParameters(fmt, CHANNEL_LAYOUT_UNSUPPORTED, 8000, 16, 256), |
- std::string())); |
- EXPECT_TRUE(NULL == audio_man->MakeAudioOutputStream( |
- AudioParameters(fmt, CHANNEL_LAYOUT_STEREO, -8000, 16, 256), |
- std::string())); |
- EXPECT_TRUE(NULL == audio_man->MakeAudioOutputStream( |
- AudioParameters(fmt, CHANNEL_LAYOUT_MONO, 8000, 16, -100), |
- std::string())); |
- EXPECT_TRUE(NULL == audio_man->MakeAudioOutputStream( |
- AudioParameters(fmt, CHANNEL_LAYOUT_MONO, 8000, 16, 0), |
- std::string())); |
- EXPECT_TRUE(NULL == audio_man->MakeAudioOutputStream( |
- AudioParameters(fmt, CHANNEL_LAYOUT_MONO, 8000, 16, |
- media::limits::kMaxSamplesPerPacket + 1), |
- std::string())); |
+ EXPECT_TRUE( |
+ NULL == |
+ audio_manager_->MakeAudioOutputStream( |
+ AudioParameters(fmt, CHANNEL_LAYOUT_UNSUPPORTED, 8000, 16, 256), |
+ std::string())); |
+ EXPECT_TRUE( |
+ NULL == |
+ audio_manager_->MakeAudioOutputStream( |
+ AudioParameters(fmt, CHANNEL_LAYOUT_MONO, 1024 * 1024, 16, 256), |
+ std::string())); |
+ EXPECT_TRUE(NULL == |
+ audio_manager_->MakeAudioOutputStream( |
+ AudioParameters(fmt, CHANNEL_LAYOUT_STEREO, 8000, 80, 256), |
+ std::string())); |
+ EXPECT_TRUE( |
+ NULL == |
+ audio_manager_->MakeAudioOutputStream( |
+ AudioParameters(fmt, CHANNEL_LAYOUT_UNSUPPORTED, 8000, 16, 256), |
+ std::string())); |
+ EXPECT_TRUE(NULL == |
+ audio_manager_->MakeAudioOutputStream( |
+ AudioParameters(fmt, CHANNEL_LAYOUT_STEREO, -8000, 16, 256), |
+ std::string())); |
+ EXPECT_TRUE(NULL == |
+ audio_manager_->MakeAudioOutputStream( |
+ AudioParameters(fmt, CHANNEL_LAYOUT_MONO, 8000, 16, -100), |
+ std::string())); |
+ EXPECT_TRUE(NULL == |
+ audio_manager_->MakeAudioOutputStream( |
+ AudioParameters(fmt, CHANNEL_LAYOUT_MONO, 8000, 16, 0), |
+ std::string())); |
+ EXPECT_TRUE(NULL == |
+ audio_manager_->MakeAudioOutputStream( |
+ AudioParameters(fmt, CHANNEL_LAYOUT_MONO, 8000, 16, |
+ media::limits::kMaxSamplesPerPacket + 1), |
+ std::string())); |
} |
// Test that it can be opened and closed. |
-TEST(WinAudioTest, PCMWaveStreamOpenAndClose) { |
- scoped_ptr<AudioManager> audio_man(AudioManager::CreateForTesting()); |
- ABORT_AUDIO_TEST_IF_NOT(audio_man->HasAudioOutputDevices()); |
+TEST_F(WinAudioTest, PCMWaveStreamOpenAndClose) { |
+ ABORT_AUDIO_TEST_IF_NOT(audio_manager_->HasAudioOutputDevices()); |
- AudioOutputStream* oas = audio_man->MakeAudioOutputStream( |
+ AudioOutputStream* oas = audio_manager_->MakeAudioOutputStream( |
AudioParameters(AudioParameters::AUDIO_PCM_LINEAR, CHANNEL_LAYOUT_STEREO, |
8000, 16, 256), |
std::string()); |
@@ -212,11 +238,10 @@ TEST(WinAudioTest, PCMWaveStreamOpenAndClose) { |
} |
// Test that it has a maximum packet size. |
-TEST(WinAudioTest, PCMWaveStreamOpenLimit) { |
- scoped_ptr<AudioManager> audio_man(AudioManager::CreateForTesting()); |
- ABORT_AUDIO_TEST_IF_NOT(audio_man->HasAudioOutputDevices()); |
+TEST_F(WinAudioTest, PCMWaveStreamOpenLimit) { |
+ ABORT_AUDIO_TEST_IF_NOT(audio_manager_->HasAudioOutputDevices()); |
- AudioOutputStream* oas = audio_man->MakeAudioOutputStream( |
+ AudioOutputStream* oas = audio_manager_->MakeAudioOutputStream( |
AudioParameters(AudioParameters::AUDIO_PCM_LINEAR, CHANNEL_LAYOUT_STEREO, |
8000, 16, 1024 * 1024 * 1024), |
std::string()); |
@@ -228,11 +253,10 @@ TEST(WinAudioTest, PCMWaveStreamOpenLimit) { |
// Test potential deadlock situation if the source is slow or blocks for some |
// time. The actual EXPECT_GT are mostly meaningless and the real test is that |
// the test completes in reasonable time. |
-TEST(WinAudioTest, PCMWaveSlowSource) { |
- scoped_ptr<AudioManager> audio_man(AudioManager::CreateForTesting()); |
- ABORT_AUDIO_TEST_IF_NOT(audio_man->HasAudioOutputDevices()); |
+TEST_F(WinAudioTest, PCMWaveSlowSource) { |
+ ABORT_AUDIO_TEST_IF_NOT(audio_manager_->HasAudioOutputDevices()); |
- AudioOutputStream* oas = audio_man->MakeAudioOutputStream( |
+ AudioOutputStream* oas = audio_manager_->MakeAudioOutputStream( |
AudioParameters(AudioParameters::AUDIO_PCM_LINEAR, CHANNEL_LAYOUT_MONO, |
16000, 16, 256), |
std::string()); |
@@ -253,12 +277,11 @@ TEST(WinAudioTest, PCMWaveSlowSource) { |
// Test another potential deadlock situation if the thread that calls Start() |
// gets paused. This test is best when run over RDP with audio enabled. See |
// bug 19276 for more details. |
-TEST(WinAudioTest, PCMWaveStreamPlaySlowLoop) { |
- scoped_ptr<AudioManager> audio_man(AudioManager::CreateForTesting()); |
- ABORT_AUDIO_TEST_IF_NOT(audio_man->HasAudioOutputDevices()); |
+TEST_F(WinAudioTest, PCMWaveStreamPlaySlowLoop) { |
+ ABORT_AUDIO_TEST_IF_NOT(audio_manager_->HasAudioOutputDevices()); |
uint32_t samples_100_ms = AudioParameters::kAudioCDSampleRate / 10; |
- AudioOutputStream* oas = audio_man->MakeAudioOutputStream( |
+ AudioOutputStream* oas = audio_manager_->MakeAudioOutputStream( |
AudioParameters(AudioParameters::AUDIO_PCM_LINEAR, CHANNEL_LAYOUT_MONO, |
AudioParameters::kAudioCDSampleRate, 16, samples_100_ms), |
std::string()); |
@@ -281,15 +304,14 @@ TEST(WinAudioTest, PCMWaveStreamPlaySlowLoop) { |
// This test produces actual audio for .5 seconds on the default wave |
// device at 44.1K s/sec. Parameters have been chosen carefully so you should |
// not hear pops or noises while the sound is playing. |
-TEST(WinAudioTest, PCMWaveStreamPlay200HzTone44Kss) { |
- scoped_ptr<AudioManager> audio_man(AudioManager::CreateForTesting()); |
- if (!audio_man->HasAudioOutputDevices()) { |
+TEST_F(WinAudioTest, PCMWaveStreamPlay200HzTone44Kss) { |
+ if (!audio_manager_->HasAudioOutputDevices()) { |
LOG(WARNING) << "No output device detected."; |
return; |
} |
uint32_t samples_100_ms = AudioParameters::kAudioCDSampleRate / 10; |
- AudioOutputStream* oas = audio_man->MakeAudioOutputStream( |
+ AudioOutputStream* oas = audio_manager_->MakeAudioOutputStream( |
AudioParameters(AudioParameters::AUDIO_PCM_LINEAR, CHANNEL_LAYOUT_MONO, |
AudioParameters::kAudioCDSampleRate, 16, samples_100_ms), |
std::string()); |
@@ -309,12 +331,11 @@ TEST(WinAudioTest, PCMWaveStreamPlay200HzTone44Kss) { |
// device at 22K s/sec. Parameters have been chosen carefully so you should |
// not hear pops or noises while the sound is playing. The audio also should |
// sound with a lower volume than PCMWaveStreamPlay200HzTone44Kss. |
-TEST(WinAudioTest, PCMWaveStreamPlay200HzTone22Kss) { |
- scoped_ptr<AudioManager> audio_man(AudioManager::CreateForTesting()); |
- ABORT_AUDIO_TEST_IF_NOT(audio_man->HasAudioOutputDevices()); |
+TEST_F(WinAudioTest, PCMWaveStreamPlay200HzTone22Kss) { |
+ ABORT_AUDIO_TEST_IF_NOT(audio_manager_->HasAudioOutputDevices()); |
uint32_t samples_100_ms = AudioParameters::kAudioCDSampleRate / 20; |
- AudioOutputStream* oas = audio_man->MakeAudioOutputStream( |
+ AudioOutputStream* oas = audio_manager_->MakeAudioOutputStream( |
AudioParameters(AudioParameters::AUDIO_PCM_LINEAR, CHANNEL_LAYOUT_MONO, |
AudioParameters::kAudioCDSampleRate / 2, 16, |
samples_100_ms), |
@@ -341,9 +362,8 @@ TEST(WinAudioTest, PCMWaveStreamPlay200HzTone22Kss) { |
// Uses a restricted source to play ~2 seconds of audio for about 5 seconds. We |
// try hard to generate situation where the two threads are accessing the |
// object roughly at the same time. |
-TEST(WinAudioTest, PushSourceFile16KHz) { |
- scoped_ptr<AudioManager> audio_man(AudioManager::CreateForTesting()); |
- ABORT_AUDIO_TEST_IF_NOT(audio_man->HasAudioOutputDevices()); |
+TEST_F(WinAudioTest, PushSourceFile16KHz) { |
+ ABORT_AUDIO_TEST_IF_NOT(audio_manager_->HasAudioOutputDevices()); |
static const int kSampleRate = 16000; |
SineWaveAudioSource source(1, 200.0, kSampleRate); |
@@ -352,7 +372,7 @@ TEST(WinAudioTest, PushSourceFile16KHz) { |
// Restrict SineWaveAudioSource to 100ms of samples. |
source.CapSamples(kSamples100ms); |
- AudioOutputStream* oas = audio_man->MakeAudioOutputStream( |
+ AudioOutputStream* oas = audio_manager_->MakeAudioOutputStream( |
AudioParameters(AudioParameters::AUDIO_PCM_LINEAR, CHANNEL_LAYOUT_MONO, |
kSampleRate, 16, kSamples100ms), |
std::string()); |
@@ -381,12 +401,11 @@ TEST(WinAudioTest, PushSourceFile16KHz) { |
// This test is to make sure an AudioOutputStream can be started after it was |
// stopped. You will here two .5 seconds wave signal separated by 0.5 seconds |
// of silence. |
-TEST(WinAudioTest, PCMWaveStreamPlayTwice200HzTone44Kss) { |
- scoped_ptr<AudioManager> audio_man(AudioManager::CreateForTesting()); |
- ABORT_AUDIO_TEST_IF_NOT(audio_man->HasAudioOutputDevices()); |
+TEST_F(WinAudioTest, PCMWaveStreamPlayTwice200HzTone44Kss) { |
+ ABORT_AUDIO_TEST_IF_NOT(audio_manager_->HasAudioOutputDevices()); |
uint32_t samples_100_ms = AudioParameters::kAudioCDSampleRate / 10; |
- AudioOutputStream* oas = audio_man->MakeAudioOutputStream( |
+ AudioOutputStream* oas = audio_manager_->MakeAudioOutputStream( |
AudioParameters(AudioParameters::AUDIO_PCM_LINEAR, CHANNEL_LAYOUT_MONO, |
AudioParameters::kAudioCDSampleRate, 16, samples_100_ms), |
std::string()); |
@@ -415,21 +434,20 @@ TEST(WinAudioTest, PCMWaveStreamPlayTwice200HzTone44Kss) { |
// With the low latency mode, WASAPI is utilized by default for Vista and |
// higher and Wave is used for XP and lower. It is possible to utilize a |
// smaller buffer size for WASAPI than for Wave. |
-TEST(WinAudioTest, PCMWaveStreamPlay200HzToneLowLatency) { |
- scoped_ptr<AudioManager> audio_man(AudioManager::CreateForTesting()); |
- ABORT_AUDIO_TEST_IF_NOT(audio_man->HasAudioOutputDevices()); |
+TEST_F(WinAudioTest, PCMWaveStreamPlay200HzToneLowLatency) { |
+ ABORT_AUDIO_TEST_IF_NOT(audio_manager_->HasAudioOutputDevices()); |
// Use 10 ms buffer size for WASAPI and 50 ms buffer size for Wave. |
// Take the existing native sample rate into account. |
- const AudioParameters params = audio_man->GetDefaultOutputStreamParameters(); |
+ const AudioParameters params = |
+ audio_manager_->GetDefaultOutputStreamParameters(); |
int sample_rate = params.sample_rate(); |
uint32_t samples_10_ms = sample_rate / 100; |
int n = 1; |
(base::win::GetVersion() <= base::win::VERSION_XP) ? n = 5 : n = 1; |
- AudioOutputStream* oas = audio_man->MakeAudioOutputStream( |
+ AudioOutputStream* oas = audio_manager_->MakeAudioOutputStream( |
AudioParameters(AudioParameters::AUDIO_PCM_LOW_LATENCY, |
- CHANNEL_LAYOUT_MONO, sample_rate, |
- 16, n * samples_10_ms), |
+ CHANNEL_LAYOUT_MONO, sample_rate, 16, n * samples_10_ms), |
std::string()); |
ASSERT_TRUE(NULL != oas); |
@@ -453,12 +471,11 @@ TEST(WinAudioTest, PCMWaveStreamPlay200HzToneLowLatency) { |
} |
// Check that the pending bytes value is correct what the stream starts. |
-TEST(WinAudioTest, PCMWaveStreamPendingBytes) { |
- scoped_ptr<AudioManager> audio_man(AudioManager::CreateForTesting()); |
- ABORT_AUDIO_TEST_IF_NOT(audio_man->HasAudioOutputDevices()); |
+TEST_F(WinAudioTest, PCMWaveStreamPendingBytes) { |
+ ABORT_AUDIO_TEST_IF_NOT(audio_manager_->HasAudioOutputDevices()); |
uint32_t samples_100_ms = AudioParameters::kAudioCDSampleRate / 10; |
- AudioOutputStream* oas = audio_man->MakeAudioOutputStream( |
+ AudioOutputStream* oas = audio_manager_->MakeAudioOutputStream( |
AudioParameters(AudioParameters::AUDIO_PCM_LINEAR, CHANNEL_LAYOUT_MONO, |
AudioParameters::kAudioCDSampleRate, 16, samples_100_ms), |
std::string()); |
@@ -585,18 +602,16 @@ DWORD __stdcall SyncSocketThread(void* context) { |
// principle of the test still remains and we avoid the additional complexity |
// related to the two different audio-layers for AUDIO_PCM_LOW_LATENCY. |
// In this test you should hear a continuous 200Hz tone for 2 seconds. |
-TEST(WinAudioTest, SyncSocketBasic) { |
- scoped_ptr<AudioManager> audio_man(AudioManager::CreateForTesting()); |
- ABORT_AUDIO_TEST_IF_NOT(audio_man->HasAudioOutputDevices()); |
+TEST_F(WinAudioTest, SyncSocketBasic) { |
+ ABORT_AUDIO_TEST_IF_NOT(audio_manager_->HasAudioOutputDevices()); |
static const int sample_rate = AudioParameters::kAudioCDSampleRate; |
static const uint32_t kSamples20ms = sample_rate / 50; |
AudioParameters params(AudioParameters::AUDIO_PCM_LINEAR, |
CHANNEL_LAYOUT_MONO, sample_rate, 16, kSamples20ms); |
- |
- AudioOutputStream* oas = audio_man->MakeAudioOutputStream(params, |
- std::string()); |
+ AudioOutputStream* oas = |
+ audio_manager_->MakeAudioOutputStream(params, std::string()); |
ASSERT_TRUE(NULL != oas); |
ASSERT_TRUE(oas->Open()); |