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 688a940bfbc11d0dc13390ac0bde8ec295f688d3..8fdc7d00b7fa1c702f25afbc7b6c5d4d77cbe9d9 100644 |
--- a/media/audio/android/audio_android_unittest.cc |
+++ b/media/audio/android/audio_android_unittest.cc |
@@ -508,9 +508,13 @@ std::vector<bool> RunAudioRecordInputPathTests() { |
class AudioAndroidInputTest : public AudioAndroidOutputTest, |
public testing::WithParamInterface<bool> { |
public: |
- AudioAndroidInputTest() {} |
+ AudioAndroidInputTest() |
+ : event_(false, false), |
+ audio_input_stream_(NULL) {} |
protected: |
+ AudioInputStream* audio_input_stream() { return audio_input_stream_; } |
+ |
AudioParameters GetInputStreamParameters() { |
AudioParameters input_params = audio_manager()->GetInputStreamParameters( |
AudioManagerBase::kDefaultDeviceId); |
@@ -567,8 +571,26 @@ class AudioAndroidInputTest : public AudioAndroidOutputTest, |
1.30 * expected_time_between_callbacks_ms); |
} |
+ void CreateAndCloseAISOnAudioThread(const AudioParameters& params) { |
+ if (!audio_manager()->GetTaskRunner()->BelongsToCurrentThread()) { |
+ audio_manager()->GetTaskRunner()->PostTask( |
+ FROM_HERE, |
+ base::Bind(&AudioAndroidInputTest::CreateAndCloseAISOnAudioThread, |
+ base::Unretained(this), |
+ params)); |
+ event_.Wait(); |
+ } else { |
+ audio_input_stream_ = audio_manager()->MakeAudioInputStream( |
+ params, AudioManagerBase::kDefaultDeviceId); |
+ EXPECT_TRUE(audio_input_stream_); |
+ audio_input_stream_->Close(); |
+ event_.Signal(); |
+ } |
+ } |
private: |
+ base::WaitableEvent event_; |
tommi (sloooow) - chröme
2014/01/30 15:26:04
This pattern is racy and could throw TSAN off.
Cre
henrika (OOO until Aug 14)
2014/01/30 17:20:23
Uploaded new and improved version after offline di
|
+ AudioInputStream* audio_input_stream_; |
DISALLOW_COPY_AND_ASSIGN(AudioAndroidInputTest); |
}; |
@@ -619,10 +641,7 @@ TEST_F(AudioAndroidOutputTest, GetAudioOutputDeviceNames) { |
// 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(); |
+ CreateAndCloseAISOnAudioThread(params); |
} |
// Ensure that a default output stream can be created and closed. |