Chromium Code Reviews| Index: media/audio/android/audio_android_unittest.cc |
| diff --git a/media/audio/android/audio_android_unittest.cc b/media/audio/android/audio_android_unittest.cc |
| index a8d66a6900a09c1dc91072195ca8da7a24e39fcd..c613554c428c07fb82558242b0463aecd1e10550 100644 |
| --- a/media/audio/android/audio_android_unittest.cc |
| +++ b/media/audio/android/audio_android_unittest.cc |
| @@ -8,6 +8,7 @@ |
| #include "base/memory/scoped_ptr.h" |
| #include "base/message_loop/message_loop.h" |
| #include "base/path_service.h" |
| +#include "base/run_loop.h" |
| #include "base/strings/stringprintf.h" |
| #include "base/synchronization/lock.h" |
| #include "base/synchronization/waitable_event.h" |
| @@ -410,21 +411,79 @@ class FullDuplexAudioSinkSource |
| // Test fixture class for tests which only exercise the output path. |
| class AudioAndroidOutputTest : public testing::Test { |
| public: |
| - AudioAndroidOutputTest() {} |
| - |
| - protected: |
| - virtual void SetUp() { |
| - audio_manager_.reset(AudioManager::CreateForTesting()); |
| - loop_.reset(new base::MessageLoopForUI()); |
| + AudioAndroidOutputTest() |
| + : loop_(new base::MessageLoopForUI()), |
| + audio_manager_(AudioManager::CreateForTesting()), |
| + audio_output_stream_(NULL) { |
| } |
| - virtual void TearDown() {} |
| + virtual ~AudioAndroidOutputTest() { |
| + } |
| + protected: |
| AudioManager* audio_manager() { return audio_manager_.get(); } |
| base::MessageLoopForUI* loop() { return loop_.get(); } |
| + const AudioParameters& audio_output_parameters() { |
| + return audio_output_parameters_; |
| + } |
| + AudioOutputStream* audio_output_stream() const { |
| + return audio_output_stream_; |
| + } |
| + |
| + // Synchronously runs the provided callback/closure on the audio thread. |
| + void RunOnAudioThread(const base::Closure& closure) { |
| + if (!audio_manager()->GetTaskRunner()->BelongsToCurrentThread()) { |
| + base::WaitableEvent event(false, false); |
| + audio_manager()->GetTaskRunner()->PostTask( |
| + FROM_HERE, |
| + base::Bind(&AudioAndroidOutputTest::RunOnAudioThreadImpl, |
| + base::Unretained(this), |
| + closure, |
| + &event)); |
| + event.Wait(); |
| + } else { |
| + closure.Run(); |
| + } |
| + } |
| + |
| + void RunOnAudioThreadImpl(const base::Closure& closure, |
| + base::WaitableEvent* event) { |
| + DCHECK(audio_manager()->GetTaskRunner()->BelongsToCurrentThread()); |
| + closure.Run(); |
| + event->Signal(); |
| + } |
| + |
| + void GetDefaultOutputStreamParametersOnAudioThread() { |
| + RunOnAudioThread( |
| + base::Bind(&AudioAndroidOutputTest::GetDefaultOutputStreamParameters, |
| + base::Unretained(this))); |
| + } |
| + |
| + void MakeAudioOutputStreamOnAudioThread(const AudioParameters& params) { |
| + RunOnAudioThread( |
| + base::Bind(&AudioAndroidOutputTest::MakeOutputStream, |
| + base::Unretained(this), |
| + params)); |
| + } |
| + |
| + void OpenAndCloseAudioOutputStreamOnAudioThread() { |
| + RunOnAudioThread( |
| + base::Bind(&AudioAndroidOutputTest::OpenAndClose, |
| + base::Unretained(this))); |
| + } |
| + |
| + void OpenAndStartAudioOutputStreamOnAudioThread( |
| + AudioOutputStream::AudioSourceCallback* source) { |
| + RunOnAudioThread( |
| + base::Bind(&AudioAndroidOutputTest::OpenAndStart, |
| + base::Unretained(this), |
| + source)); |
| + } |
| - AudioParameters GetDefaultOutputStreamParameters() { |
| - return audio_manager()->GetDefaultOutputStreamParameters(); |
| + void StopAndCloseAudioOutputStreamOnAudioThread() { |
| + RunOnAudioThread( |
| + base::Bind(&AudioAndroidOutputTest::StopAndClose, |
| + base::Unretained(this))); |
| } |
| double AverageTimeBetweenCallbacks(int num_callbacks) const { |
| @@ -437,9 +496,7 @@ class AudioAndroidOutputTest : public testing::Test { |
| ExpectedTimeBetweenCallbacks(params); |
| const int num_callbacks = |
| (kCallbackTestTimeMs / expected_time_between_callbacks_ms); |
| - AudioOutputStream* stream = audio_manager()->MakeAudioOutputStream( |
| - params, std::string()); |
| - EXPECT_TRUE(stream); |
| + MakeAudioOutputStreamOnAudioThread(params); |
| int count = 0; |
| MockAudioSourceCallback source; |
| @@ -449,16 +506,16 @@ class AudioAndroidOutputTest : public testing::Test { |
| .WillRepeatedly( |
| DoAll(CheckCountAndPostQuitTask(&count, num_callbacks, loop()), |
| Invoke(RealOnMoreData))); |
| - EXPECT_CALL(source, OnError(stream)).Times(0); |
| + EXPECT_CALL(source, OnError(audio_output_stream())).Times(0); |
| EXPECT_CALL(source, OnMoreIOData(_, _, _)).Times(0); |
| - EXPECT_TRUE(stream->Open()); |
| - stream->Start(&source); |
| + OpenAndStartAudioOutputStreamOnAudioThread(&source); |
| + |
| start_time_ = base::TimeTicks::Now(); |
| loop()->Run(); |
| end_time_ = base::TimeTicks::Now(); |
| - stream->Stop(); |
| - stream->Close(); |
| + |
| + StopAndCloseAudioOutputStreamOnAudioThread(); |
| double average_time_between_callbacks_ms = |
| AverageTimeBetweenCallbacks(num_callbacks); |
| @@ -472,8 +529,43 @@ class AudioAndroidOutputTest : public testing::Test { |
| 1.30 * expected_time_between_callbacks_ms); |
| } |
| + void GetDefaultOutputStreamParameters() { |
| + DCHECK(audio_manager()->GetTaskRunner()->BelongsToCurrentThread()); |
| + audio_output_parameters_ = |
| + audio_manager()->GetDefaultOutputStreamParameters(); |
| + EXPECT_TRUE(audio_output_parameters_.IsValid()); |
| + } |
| + |
| + void MakeOutputStream(const AudioParameters& params) { |
| + DCHECK(audio_manager()->GetTaskRunner()->BelongsToCurrentThread()); |
| + audio_output_stream_ = audio_manager()->MakeAudioOutputStream( |
| + params, std::string()); |
| + EXPECT_TRUE(audio_output_stream_); |
| + } |
| + |
| + void OpenAndClose() { |
| + DCHECK(audio_manager()->GetTaskRunner()->BelongsToCurrentThread()); |
| + EXPECT_TRUE(audio_output_stream()->Open()); |
| + audio_output_stream()->Close(); |
|
tommi (sloooow) - chröme
2014/02/18 12:03:35
Everywhere where we do this, we have a dangling po
henrika (OOO until Aug 14)
2014/02/18 12:34:41
Done.
|
| + } |
| + |
| + void OpenAndStart(AudioOutputStream::AudioSourceCallback* source) { |
| + DCHECK(audio_manager()->GetTaskRunner()->BelongsToCurrentThread()); |
| + EXPECT_TRUE(audio_output_stream()->Open()); |
| + audio_output_stream()->Start(source); |
| + } |
| + |
| + void StopAndClose() { |
| + DCHECK(audio_manager()->GetTaskRunner()->BelongsToCurrentThread()); |
| + audio_output_stream()->Stop(); |
| + audio_output_stream()->Close(); |
| + audio_output_stream_ = NULL; |
| + } |
| + |
| scoped_ptr<base::MessageLoopForUI> loop_; |
| scoped_ptr<AudioManager> audio_manager_; |
| + AudioParameters audio_output_parameters_; |
| + AudioOutputStream* audio_output_stream_; |
| base::TimeTicks start_time_; |
| base::TimeTicks end_time_; |
| @@ -497,52 +589,90 @@ std::vector<bool> RunAudioRecordInputPathTests() { |
| class AudioAndroidInputTest : public AudioAndroidOutputTest, |
| public testing::WithParamInterface<bool> { |
| public: |
| - AudioAndroidInputTest() {} |
| + AudioAndroidInputTest() : audio_input_stream_(NULL) {} |
| protected: |
| + AudioInputStream* audio_input_stream() { return audio_input_stream_; } |
| + AudioParameters audio_input_parameters() { return audio_input_parameters_; } |
| + |
| AudioParameters GetInputStreamParameters() { |
| - AudioParameters input_params = audio_manager()->GetInputStreamParameters( |
| - AudioManagerBase::kDefaultDeviceId); |
| + GetDefaultInputStreamParametersOnAudioThread(); |
| + |
| // Override the platform effects setting to use the AudioRecord or OpenSLES |
| // path as requested. |
| int effects = GetParam() ? AudioParameters::ECHO_CANCELLER : |
| AudioParameters::NO_EFFECTS; |
| - AudioParameters params(input_params.format(), |
| - input_params.channel_layout(), |
| - input_params.input_channels(), |
| - input_params.sample_rate(), |
| - input_params.bits_per_sample(), |
| - input_params.frames_per_buffer(), |
| + AudioParameters params(audio_input_parameters().format(), |
| + audio_input_parameters().channel_layout(), |
| + audio_input_parameters().input_channels(), |
| + audio_input_parameters().sample_rate(), |
| + audio_input_parameters().bits_per_sample(), |
| + audio_input_parameters().frames_per_buffer(), |
| effects); |
| return params; |
| } |
| + void GetDefaultInputStreamParametersOnAudioThread() { |
| + RunOnAudioThread( |
| + base::Bind(&AudioAndroidInputTest::GetDefaultInputStreamParameters, |
| + base::Unretained(this))); |
| + } |
| + |
| + void MakeAudioInputStreamOnAudioThread(const AudioParameters& params) { |
| + RunOnAudioThread( |
| + base::Bind(&AudioAndroidInputTest::MakeInputStream, |
| + base::Unretained(this), |
| + params)); |
| + } |
| + |
| + void OpenAndCloseAudioInputStreamOnAudioThread() { |
| + RunOnAudioThread( |
| + base::Bind(&AudioAndroidInputTest::OpenAndClose, |
| + base::Unretained(this))); |
| + } |
| + |
| + void OpenAndStartAudioInputStreamOnAudioThread( |
| + AudioInputStream::AudioInputCallback* sink) { |
| + RunOnAudioThread( |
| + base::Bind(&AudioAndroidInputTest::OpenAndStart, |
| + base::Unretained(this), |
| + sink)); |
| + } |
| + |
| + void StopAndCloseAudioInputStreamOnAudioThread() { |
| + RunOnAudioThread( |
| + base::Bind(&AudioAndroidInputTest::StopAndClose, |
| + base::Unretained(this))); |
| + } |
| + |
| void StartInputStreamCallbacks(const AudioParameters& params) { |
| double expected_time_between_callbacks_ms = |
| ExpectedTimeBetweenCallbacks(params); |
| const int num_callbacks = |
| (kCallbackTestTimeMs / expected_time_between_callbacks_ms); |
| - AudioInputStream* stream = audio_manager()->MakeAudioInputStream( |
| - params, AudioManagerBase::kDefaultDeviceId); |
| - EXPECT_TRUE(stream); |
| + |
| + MakeAudioInputStreamOnAudioThread(params); |
| int count = 0; |
| MockAudioInputCallback sink; |
| EXPECT_CALL(sink, |
| - OnData(stream, NotNull(), params.GetBytesPerBuffer(), _, _)) |
| + OnData(audio_input_stream(), |
| + NotNull(), |
| + params. |
| + GetBytesPerBuffer(), _, _)) |
| .Times(AtLeast(num_callbacks)) |
| .WillRepeatedly( |
| CheckCountAndPostQuitTask(&count, num_callbacks, loop())); |
| - EXPECT_CALL(sink, OnError(stream)).Times(0); |
| + EXPECT_CALL(sink, OnError(audio_input_stream())).Times(0); |
| + |
| + OpenAndStartAudioInputStreamOnAudioThread(&sink); |
| - EXPECT_TRUE(stream->Open()); |
| - stream->Start(&sink); |
| start_time_ = base::TimeTicks::Now(); |
| loop()->Run(); |
| end_time_ = base::TimeTicks::Now(); |
| - stream->Stop(); |
| - stream->Close(); |
| + |
| + StopAndCloseAudioInputStreamOnAudioThread(); |
| double average_time_between_callbacks_ms = |
| AverageTimeBetweenCallbacks(num_callbacks); |
| @@ -556,8 +686,41 @@ class AudioAndroidInputTest : public AudioAndroidOutputTest, |
| 1.30 * expected_time_between_callbacks_ms); |
| } |
| + void GetDefaultInputStreamParameters() { |
| + DCHECK(audio_manager()->GetTaskRunner()->BelongsToCurrentThread()); |
| + audio_input_parameters_ = audio_manager()->GetInputStreamParameters( |
| + AudioManagerBase::kDefaultDeviceId); |
| + } |
| + |
| + void MakeInputStream(const AudioParameters& params) { |
| + DCHECK(audio_manager()->GetTaskRunner()->BelongsToCurrentThread()); |
| + audio_input_stream_ = audio_manager()->MakeAudioInputStream( |
| + params, AudioManagerBase::kDefaultDeviceId); |
| + EXPECT_TRUE(audio_input_stream_); |
| + } |
| + |
| + void OpenAndClose() { |
| + DCHECK(audio_manager()->GetTaskRunner()->BelongsToCurrentThread()); |
| + EXPECT_TRUE(audio_input_stream()->Open()); |
| + audio_input_stream()->Close(); |
|
tommi (sloooow) - chröme
2014/02/18 12:03:35
same for the input side
henrika (OOO until Aug 14)
2014/02/18 12:34:41
Done.
|
| + } |
| + |
| + void OpenAndStart(AudioInputStream::AudioInputCallback* sink) { |
| + DCHECK(audio_manager()->GetTaskRunner()->BelongsToCurrentThread()); |
| + EXPECT_TRUE(audio_input_stream()->Open()); |
| + audio_input_stream()->Start(sink); |
| + } |
| + |
| + void StopAndClose() { |
| + DCHECK(audio_manager()->GetTaskRunner()->BelongsToCurrentThread()); |
| + audio_input_stream()->Stop(); |
| + audio_input_stream()->Close(); |
| + audio_input_stream_ = NULL; |
| + } |
| private: |
| + AudioInputStream* audio_input_stream_; |
| + AudioParameters audio_input_parameters_; |
| DISALLOW_COPY_AND_ASSIGN(AudioAndroidInputTest); |
| }; |
| @@ -565,26 +728,15 @@ class AudioAndroidInputTest : public AudioAndroidOutputTest, |
| TEST_P(AudioAndroidInputTest, GetDefaultInputStreamParameters) { |
| // We don't go through AudioAndroidInputTest::GetInputStreamParameters() here |
| // so that we can log the real (non-overridden) values of the effects. |
| - AudioParameters params = audio_manager()->GetInputStreamParameters( |
| - AudioManagerBase::kDefaultDeviceId); |
| - EXPECT_TRUE(params.IsValid()); |
| - VLOG(1) << params; |
| + GetDefaultInputStreamParametersOnAudioThread(); |
| + EXPECT_TRUE(audio_input_parameters().IsValid()); |
| + VLOG(1) << audio_input_parameters(); |
| } |
| // Get the default audio output parameters and log the result. |
| TEST_F(AudioAndroidOutputTest, GetDefaultOutputStreamParameters) { |
| - AudioParameters params = GetDefaultOutputStreamParameters(); |
| - EXPECT_TRUE(params.IsValid()); |
| - VLOG(1) << params; |
| -} |
| - |
| -// Check if low-latency output is supported and log the result as output. |
| -TEST_F(AudioAndroidOutputTest, IsAudioLowLatencySupported) { |
| - AudioManagerAndroid* manager = |
| - static_cast<AudioManagerAndroid*>(audio_manager()); |
| - bool low_latency = manager->IsAudioLowLatencySupported(); |
| - low_latency ? VLOG(0) << "Low latency output is supported" |
| - : VLOG(0) << "Low latency output is *not* supported"; |
| + GetDefaultOutputStreamParametersOnAudioThread(); |
| + VLOG(1) << audio_output_parameters(); |
| } |
| // Verify input device enumeration. |
| @@ -592,7 +744,10 @@ TEST_F(AudioAndroidInputTest, GetAudioInputDeviceNames) { |
| if (!audio_manager()->HasAudioInputDevices()) |
| return; |
| AudioDeviceNames devices; |
| - audio_manager()->GetAudioInputDeviceNames(&devices); |
| + RunOnAudioThread( |
| + base::Bind(&AudioManager::GetAudioInputDeviceNames, |
| + base::Unretained(audio_manager()), |
| + &devices)); |
| CheckDeviceNames(devices); |
| } |
| @@ -601,17 +756,20 @@ TEST_F(AudioAndroidOutputTest, GetAudioOutputDeviceNames) { |
| if (!audio_manager()->HasAudioOutputDevices()) |
| return; |
| AudioDeviceNames devices; |
| - audio_manager()->GetAudioOutputDeviceNames(&devices); |
| + RunOnAudioThread( |
| + base::Bind(&AudioManager::GetAudioOutputDeviceNames, |
| + base::Unretained(audio_manager()), |
| + &devices)); |
| CheckDeviceNames(devices); |
| } |
| // Ensure that a default input stream can be created and closed. |
| TEST_P(AudioAndroidInputTest, CreateAndCloseInputStream) { |
| AudioParameters params = GetInputStreamParameters(); |
| - AudioInputStream* ais = audio_manager()->MakeAudioInputStream( |
| - params, AudioManagerBase::kDefaultDeviceId); |
| - EXPECT_TRUE(ais); |
| - ais->Close(); |
| + MakeAudioInputStreamOnAudioThread(params); |
| + RunOnAudioThread( |
| + base::Bind(&AudioInputStream::Close, |
| + base::Unretained(audio_input_stream()))); |
| } |
| // Ensure that a default output stream can be created and closed. |
| @@ -619,47 +777,39 @@ TEST_P(AudioAndroidInputTest, CreateAndCloseInputStream) { |
| // to communication mode, and calls RegisterHeadsetReceiver, the first time |
| // it is called? |
| TEST_F(AudioAndroidOutputTest, CreateAndCloseOutputStream) { |
| - AudioParameters params = GetDefaultOutputStreamParameters(); |
| - AudioOutputStream* aos = audio_manager()->MakeAudioOutputStream( |
| - params, std::string()); |
| - EXPECT_TRUE(aos); |
| - aos->Close(); |
| + GetDefaultOutputStreamParametersOnAudioThread(); |
| + MakeAudioOutputStreamOnAudioThread(audio_output_parameters()); |
| + RunOnAudioThread( |
| + base::Bind(&AudioOutputStream::Close, |
| + base::Unretained(audio_output_stream()))); |
| } |
| // Ensure that a default input stream can be opened and closed. |
| TEST_P(AudioAndroidInputTest, OpenAndCloseInputStream) { |
| AudioParameters params = GetInputStreamParameters(); |
| - AudioInputStream* ais = audio_manager()->MakeAudioInputStream( |
| - params, AudioManagerBase::kDefaultDeviceId); |
| - EXPECT_TRUE(ais); |
| - EXPECT_TRUE(ais->Open()); |
| - ais->Close(); |
| + MakeAudioInputStreamOnAudioThread(params); |
| + OpenAndCloseAudioInputStreamOnAudioThread(); |
| } |
| // Ensure that a default output stream can be opened and closed. |
| TEST_F(AudioAndroidOutputTest, OpenAndCloseOutputStream) { |
| - AudioParameters params = GetDefaultOutputStreamParameters(); |
| - AudioOutputStream* aos = audio_manager()->MakeAudioOutputStream( |
| - params, std::string()); |
| - EXPECT_TRUE(aos); |
| - EXPECT_TRUE(aos->Open()); |
| - aos->Close(); |
| + GetDefaultOutputStreamParametersOnAudioThread(); |
| + MakeAudioOutputStreamOnAudioThread(audio_output_parameters()); |
| + OpenAndCloseAudioOutputStreamOnAudioThread(); |
| } |
| // Start input streaming using default input parameters and ensure that the |
| // callback sequence is sane. |
| -// Disabled per crbug/337867 |
| TEST_P(AudioAndroidInputTest, DISABLED_StartInputStreamCallbacks) { |
| - AudioParameters params = GetInputStreamParameters(); |
| - StartInputStreamCallbacks(params); |
| + AudioParameters native_params = GetInputStreamParameters(); |
| + StartInputStreamCallbacks(native_params); |
| } |
| // Start input streaming using non default input parameters and ensure that the |
| // callback sequence is sane. The only change we make in this test is to select |
| // a 10ms buffer size instead of the default size. |
| -// TODO(henrika): possibly add support for more variations. |
| -// Disabled per crbug/337867 |
| -TEST_P(AudioAndroidInputTest, DISABLED_StartInputStreamCallbacksNonDefaultParameters) { |
| +TEST_P(AudioAndroidInputTest, |
| + DISABLED_StartInputStreamCallbacksNonDefaultParameters) { |
| AudioParameters native_params = GetInputStreamParameters(); |
| AudioParameters params(native_params.format(), |
| native_params.channel_layout(), |
| @@ -674,8 +824,8 @@ TEST_P(AudioAndroidInputTest, DISABLED_StartInputStreamCallbacksNonDefaultParame |
| // Start output streaming using default output parameters and ensure that the |
| // callback sequence is sane. |
| TEST_F(AudioAndroidOutputTest, StartOutputStreamCallbacks) { |
| - AudioParameters params = GetDefaultOutputStreamParameters(); |
| - StartOutputStreamCallbacks(params); |
| + GetDefaultOutputStreamParametersOnAudioThread(); |
| + StartOutputStreamCallbacks(audio_output_parameters()); |
| } |
| // Start output streaming using non default output parameters and ensure that |
| @@ -684,12 +834,12 @@ TEST_F(AudioAndroidOutputTest, StartOutputStreamCallbacks) { |
| // device in mono. |
| // TODO(henrika): possibly add support for more variations. |
| TEST_F(AudioAndroidOutputTest, StartOutputStreamCallbacksNonDefaultParameters) { |
| - AudioParameters native_params = GetDefaultOutputStreamParameters(); |
| - AudioParameters params(native_params.format(), |
| + GetDefaultOutputStreamParametersOnAudioThread(); |
| + AudioParameters params(audio_output_parameters().format(), |
| CHANNEL_LAYOUT_MONO, |
| - native_params.sample_rate(), |
| - native_params.bits_per_sample(), |
| - native_params.sample_rate() / 100); |
| + audio_output_parameters().sample_rate(), |
| + audio_output_parameters().bits_per_sample(), |
| + audio_output_parameters().sample_rate() / 100); |
| StartOutputStreamCallbacks(params); |
| } |
| @@ -698,13 +848,12 @@ TEST_F(AudioAndroidOutputTest, StartOutputStreamCallbacksNonDefaultParameters) { |
| // NOTE: this test requires user interaction and is not designed to run as an |
| // automatized test on bots. |
| TEST_F(AudioAndroidOutputTest, DISABLED_RunOutputStreamWithFileAsSource) { |
| - AudioParameters params = GetDefaultOutputStreamParameters(); |
| - VLOG(1) << params; |
| - AudioOutputStream* aos = audio_manager()->MakeAudioOutputStream( |
| - params, std::string()); |
| - EXPECT_TRUE(aos); |
| + GetDefaultOutputStreamParametersOnAudioThread(); |
| + VLOG(1) << audio_output_parameters(); |
| + MakeAudioOutputStreamOnAudioThread(audio_output_parameters()); |
| std::string file_name; |
| + const AudioParameters params = audio_output_parameters(); |
| if (params.sample_rate() == 48000 && params.channels() == 2) { |
| file_name = kSpeechFile_16b_s_48k; |
| } else if (params.sample_rate() == 48000 && params.channels() == 1) { |
| @@ -721,13 +870,10 @@ TEST_F(AudioAndroidOutputTest, DISABLED_RunOutputStreamWithFileAsSource) { |
| base::WaitableEvent event(false, false); |
| FileAudioSource source(&event, file_name); |
| - EXPECT_TRUE(aos->Open()); |
| - aos->SetVolume(1.0); |
| - aos->Start(&source); |
| + OpenAndStartAudioOutputStreamOnAudioThread(&source); |
| VLOG(0) << ">> Verify that the file is played out correctly..."; |
| EXPECT_TRUE(event.TimedWait(TestTimeouts::action_max_timeout())); |
| - aos->Stop(); |
| - aos->Close(); |
| + StopAndCloseAudioOutputStreamOnAudioThread(); |
| } |
| // Start input streaming and run it for ten seconds while recording to a |
| @@ -737,9 +883,7 @@ TEST_F(AudioAndroidOutputTest, DISABLED_RunOutputStreamWithFileAsSource) { |
| TEST_P(AudioAndroidInputTest, DISABLED_RunSimplexInputStreamWithFileAsSink) { |
| AudioParameters params = GetInputStreamParameters(); |
| VLOG(1) << params; |
| - AudioInputStream* ais = audio_manager()->MakeAudioInputStream( |
| - params, AudioManagerBase::kDefaultDeviceId); |
| - EXPECT_TRUE(ais); |
| + MakeAudioInputStreamOnAudioThread(params); |
| std::string file_name = base::StringPrintf("out_simplex_%d_%d_%d.pcm", |
| params.sample_rate(), |
| @@ -749,12 +893,10 @@ TEST_P(AudioAndroidInputTest, DISABLED_RunSimplexInputStreamWithFileAsSink) { |
| base::WaitableEvent event(false, false); |
| FileAudioSink sink(&event, params, file_name); |
| - EXPECT_TRUE(ais->Open()); |
| - ais->Start(&sink); |
| + OpenAndStartAudioInputStreamOnAudioThread(&sink); |
| VLOG(0) << ">> Speak into the microphone to record audio..."; |
| EXPECT_TRUE(event.TimedWait(TestTimeouts::action_max_timeout())); |
| - ais->Stop(); |
| - ais->Close(); |
| + StopAndCloseAudioInputStreamOnAudioThread(); |
| } |
| // Same test as RunSimplexInputStreamWithFileAsSink but this time output |
| @@ -763,15 +905,12 @@ TEST_P(AudioAndroidInputTest, DISABLED_RunSimplexInputStreamWithFileAsSink) { |
| // automatized test on bots. |
| TEST_P(AudioAndroidInputTest, DISABLED_RunDuplexInputStreamWithFileAsSink) { |
| AudioParameters in_params = GetInputStreamParameters(); |
| - AudioInputStream* ais = audio_manager()->MakeAudioInputStream( |
| - in_params, AudioManagerBase::kDefaultDeviceId); |
| - EXPECT_TRUE(ais); |
| + VLOG(1) << in_params; |
| + MakeAudioInputStreamOnAudioThread(in_params); |
| - AudioParameters out_params = |
| - audio_manager()->GetDefaultOutputStreamParameters(); |
| - AudioOutputStream* aos = audio_manager()->MakeAudioOutputStream( |
| - out_params, std::string()); |
| - EXPECT_TRUE(aos); |
| + GetDefaultOutputStreamParametersOnAudioThread(); |
| + VLOG(1) << audio_output_parameters(); |
| + MakeAudioOutputStreamOnAudioThread(audio_output_parameters()); |
| std::string file_name = base::StringPrintf("out_duplex_%d_%d_%d.pcm", |
| in_params.sample_rate(), |
| @@ -784,19 +923,15 @@ TEST_P(AudioAndroidInputTest, DISABLED_RunDuplexInputStreamWithFileAsSink) { |
| EXPECT_CALL(source, OnMoreData(NotNull(), _)) |
| .WillRepeatedly(Invoke(RealOnMoreData)); |
| - EXPECT_CALL(source, OnError(aos)).Times(0); |
| + EXPECT_CALL(source, OnError(audio_output_stream())).Times(0); |
| EXPECT_CALL(source, OnMoreIOData(_, _, _)).Times(0); |
| - EXPECT_TRUE(ais->Open()); |
| - EXPECT_TRUE(aos->Open()); |
| - ais->Start(&sink); |
| - aos->Start(&source); |
| + OpenAndStartAudioInputStreamOnAudioThread(&sink); |
| + OpenAndStartAudioOutputStreamOnAudioThread(&source); |
| VLOG(0) << ">> Speak into the microphone to record audio"; |
| EXPECT_TRUE(event.TimedWait(TestTimeouts::action_max_timeout())); |
| - aos->Stop(); |
| - ais->Stop(); |
| - aos->Close(); |
| - ais->Close(); |
| + StopAndCloseAudioOutputStreamOnAudioThread(); |
| + StopAndCloseAudioInputStreamOnAudioThread(); |
| } |
| // Start audio in both directions while feeding captured data into a FIFO so |
| @@ -825,12 +960,8 @@ TEST_P(AudioAndroidInputTest, |
| VLOG(1) << io_params; |
| // Create input and output streams using the common audio parameters. |
| - AudioInputStream* ais = audio_manager()->MakeAudioInputStream( |
| - io_params, AudioManagerBase::kDefaultDeviceId); |
| - EXPECT_TRUE(ais); |
| - AudioOutputStream* aos = audio_manager()->MakeAudioOutputStream( |
| - io_params, std::string()); |
| - EXPECT_TRUE(aos); |
| + MakeAudioInputStreamOnAudioThread(io_params); |
| + MakeAudioOutputStreamOnAudioThread(io_params); |
| FullDuplexAudioSinkSource full_duplex(io_params); |
| @@ -838,20 +969,16 @@ TEST_P(AudioAndroidInputTest, |
| // delay we should expect from the FIFO. If real-time delay measurements are |
| // performed, the result should be reduced by this extra delay since it is |
| // something that has been added by the test. |
| - EXPECT_TRUE(ais->Open()); |
| - EXPECT_TRUE(aos->Open()); |
| - ais->Start(&full_duplex); |
| - aos->Start(&full_duplex); |
| + OpenAndStartAudioInputStreamOnAudioThread(&full_duplex); |
| + OpenAndStartAudioOutputStreamOnAudioThread(&full_duplex); |
| VLOG(1) << "HINT: an estimate of the extra FIFO delay will be updated " |
| << "once per second during this test."; |
| VLOG(0) << ">> Speak into the mic and listen to the audio in loopback..."; |
| fflush(stdout); |
| base::PlatformThread::Sleep(base::TimeDelta::FromSeconds(20)); |
| printf("\n"); |
| - aos->Stop(); |
| - ais->Stop(); |
| - aos->Close(); |
| - ais->Close(); |
| + StopAndCloseAudioOutputStreamOnAudioThread(); |
| + StopAndCloseAudioInputStreamOnAudioThread(); |
| } |
| INSTANTIATE_TEST_CASE_P(AudioAndroidInputTest, AudioAndroidInputTest, |