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

Unified Diff: media/audio/audio_output_proxy_unittest.cc

Issue 10909151: Automatically fall back to non-low latency on open() failure. (Closed) Base URL: http://git.chromium.org/chromium/src.git@resampler2
Patch Set: Rebase. Created 8 years, 3 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
« no previous file with comments | « no previous file | media/audio/audio_output_resampler.h » ('j') | media/audio/audio_output_resampler.cc » ('J')
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: media/audio/audio_output_proxy_unittest.cc
diff --git a/media/audio/audio_output_proxy_unittest.cc b/media/audio/audio_output_proxy_unittest.cc
index 82bb3737f1b791eda504c39a356dafcd746eaaf1..bcd71a3da62c8460f393900357f43761b63ab00c 100644
--- a/media/audio/audio_output_proxy_unittest.cc
+++ b/media/audio/audio_output_proxy_unittest.cc
@@ -484,12 +484,17 @@ class AudioOutputResamplerTest : public AudioOutputProxyTest {
}
virtual void InitDispatcher(base::TimeDelta close_delay) {
+ InitDispatcher(close_delay, AudioParameters::AUDIO_PCM_LINEAR);
+ }
+
+ virtual void InitDispatcher(base::TimeDelta close_delay,
+ AudioParameters::Format output_format) {
AudioOutputProxyTest::InitDispatcher(close_delay);
// Attempt shutdown of audio thread in case InitDispatcher() was called
// previously.
ShutdownAudioThread();
- resampler_params_ = AudioParameters(AudioParameters::AUDIO_PCM_LINEAR,
- CHANNEL_LAYOUT_STEREO, 48000, 16, 128);
+ resampler_params_ = AudioParameters(
+ output_format, CHANNEL_LAYOUT_STEREO, 48000, 16, 128);
resampler_ = new AudioOutputResampler(
&manager(), params_, resampler_params_, close_delay);
StartAudioThread();
@@ -786,4 +791,69 @@ TEST_F(AudioOutputResamplerTest, StartFailed) {
StartFailed(resampler_);
}
+// Simulate AudioOutputStream::Create() failure with a low latency stream and
+// ensure AudioOutputResampler falls back to the high latency path.
+TEST_F(AudioOutputResamplerTest, LowLatencyCreateFailedFallback) {
+ InitDispatcher(base::TimeDelta::FromSeconds(kTestCloseDelayMs),
+ AudioParameters::AUDIO_PCM_LOW_LATENCY);
+
+ MockAudioOutputStream stream;
+ EXPECT_CALL(manager(), MakeAudioOutputStream(_))
+ .Times(2)
+ .WillOnce(Return(static_cast<AudioOutputStream*>(NULL)))
+ .WillRepeatedly(Return(&stream));
+ EXPECT_CALL(stream, Open())
+ .WillOnce(Return(true));
+ EXPECT_CALL(stream, Close())
+ .Times(1);
+
+ AudioOutputProxy* proxy = new AudioOutputProxy(resampler_);
+ EXPECT_TRUE(proxy->Open());
+ proxy->Close();
+ WaitForCloseTimer(kTestCloseDelayMs);
+}
+
+// Simulate AudioOutputStream::Open() failure with a low latency stream and
+// ensure AudioOutputResampler falls back to the high latency path.
+TEST_F(AudioOutputResamplerTest, LowLatencyOpenFailedFallback) {
+ InitDispatcher(base::TimeDelta::FromSeconds(kTestCloseDelayMs),
+ AudioParameters::AUDIO_PCM_LOW_LATENCY);
+
+ MockAudioOutputStream failed_stream;
+ MockAudioOutputStream okay_stream;
+ EXPECT_CALL(manager(), MakeAudioOutputStream(_))
+ .Times(2)
+ .WillOnce(Return(&failed_stream))
+ .WillRepeatedly(Return(&okay_stream));
+ EXPECT_CALL(failed_stream, Open())
+ .WillOnce(Return(false));
+ EXPECT_CALL(failed_stream, Close())
+ .Times(1);
+ EXPECT_CALL(okay_stream, Open())
+ .WillOnce(Return(true));
+ EXPECT_CALL(okay_stream, Close())
+ .Times(1);
+
+ AudioOutputProxy* proxy = new AudioOutputProxy(resampler_);
+ EXPECT_TRUE(proxy->Open());
+ proxy->Close();
+ WaitForCloseTimer(kTestCloseDelayMs);
+}
+
+// Simulate failures to open both the low latency and the fallback high latency
+// stream and ensure AudioOutputResampler terminates normally.
+TEST_F(AudioOutputResamplerTest, LowLatencyFallbackFailed) {
+ InitDispatcher(base::TimeDelta::FromSeconds(kTestCloseDelayMs),
+ AudioParameters::AUDIO_PCM_LOW_LATENCY);
+
+ EXPECT_CALL(manager(), MakeAudioOutputStream(_))
+ .Times(2)
+ .WillRepeatedly(Return(static_cast<AudioOutputStream*>(NULL)));
+
+ AudioOutputProxy* proxy = new AudioOutputProxy(resampler_);
+ EXPECT_FALSE(proxy->Open());
+ proxy->Close();
+ WaitForCloseTimer(kTestCloseDelayMs);
+}
+
} // namespace media
« no previous file with comments | « no previous file | media/audio/audio_output_resampler.h » ('j') | media/audio/audio_output_resampler.cc » ('J')

Powered by Google App Engine
This is Rietveld 408576698