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

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. Comments. 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..c877fe166b2332815674bacac1848bc5e4f35fc7 100644
--- a/media/audio/audio_output_proxy_unittest.cc
+++ b/media/audio/audio_output_proxy_unittest.cc
@@ -484,12 +484,18 @@ class AudioOutputResamplerTest : public AudioOutputProxyTest {
}
virtual void InitDispatcher(base::TimeDelta close_delay) {
+ InitDispatcher(close_delay, false);
+ }
+
+ virtual void InitDispatcher(base::TimeDelta close_delay, bool low_latency) {
scherkus (not reviewing) 2012/09/12 13:45:15 can you replace the bool with the enum itself? in
DaleCurtis 2012/09/12 14:16:51 Done.
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(
+ (low_latency ? AudioParameters::AUDIO_PCM_LOW_LATENCY :
+ AudioParameters::AUDIO_PCM_LINEAR),
+ CHANNEL_LAYOUT_STEREO, 48000, 16, 128);
resampler_ = new AudioOutputResampler(
&manager(), params_, resampler_params_, close_delay);
StartAudioThread();
@@ -786,4 +792,66 @@ 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), true);
+
+ 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), true);
+
+ 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), true);
+
+ 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