summaryrefslogtreecommitdiffstats
path: root/media/audio/linux/alsa_output_unittest.cc
diff options
context:
space:
mode:
authorenal@chromium.org <enal@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-05-26 04:38:27 +0000
committerenal@chromium.org <enal@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-05-26 04:38:27 +0000
commitb60b28ab42544ed277ceebe1cb3f299a44b4c4cb (patch)
tree9dc8cecead537916da6b1f20a8d250fae88963de /media/audio/linux/alsa_output_unittest.cc
parenta5d3dad7b804f843c74bd0bb661b1311192b760e (diff)
downloadchromium_src-b60b28ab42544ed277ceebe1cb3f299a44b4c4cb.zip
chromium_src-b60b28ab42544ed277ceebe1cb3f299a44b4c4cb.tar.gz
chromium_src-b60b28ab42544ed277ceebe1cb3f299a44b4c4cb.tar.bz2
Better handle error condition in ALSA output.
Linux-only change. We were not stopped scheduled WritePacket() when stopping the stream. In normal situation that is Ok, WritePacket() would immediately return is state is "stopped", and we would delete scheduled task when deleting the stream, but problem can happen if some call leaves the stream in the error state -- WritePacket() was checking only for "stopped" state. Fix is simple -- WritePacket() should bail out if state is anything but "playing". BUG=47927 TEST=On Linux we should not see crash 'crashed_thread_function_name.contains:"AudioRendererBase::GetPlaybackRate()"' Review URL: https://chromiumcodereview.appspot.com/10421019 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@139183 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'media/audio/linux/alsa_output_unittest.cc')
-rw-r--r--media/audio/linux/alsa_output_unittest.cc9
1 files changed, 8 insertions, 1 deletions
diff --git a/media/audio/linux/alsa_output_unittest.cc b/media/audio/linux/alsa_output_unittest.cc
index 5f9b4e7..5d38859 100644
--- a/media/audio/linux/alsa_output_unittest.cc
+++ b/media/audio/linux/alsa_output_unittest.cc
@@ -473,6 +473,8 @@ TEST_F(AlsaPcmOutputStreamTest, StartStop) {
TEST_F(AlsaPcmOutputStreamTest, WritePacket_FinishedPacket) {
AlsaPcmOutputStream* test_stream = CreateStream(kTestChannelLayout);
InitBuffer(test_stream);
+ test_stream->TransitionTo(AlsaPcmOutputStream::kIsOpened);
+ test_stream->TransitionTo(AlsaPcmOutputStream::kIsPlaying);
// Nothing should happen. Don't set any expectations and Our strict mocks
// should verify most of this.
@@ -486,6 +488,8 @@ TEST_F(AlsaPcmOutputStreamTest, WritePacket_FinishedPacket) {
TEST_F(AlsaPcmOutputStreamTest, WritePacket_NormalPacket) {
AlsaPcmOutputStream* test_stream = CreateStream(kTestChannelLayout);
InitBuffer(test_stream);
+ test_stream->TransitionTo(AlsaPcmOutputStream::kIsOpened);
+ test_stream->TransitionTo(AlsaPcmOutputStream::kIsPlaying);
// Write a little less than half the data.
int written = packet_->GetDataSize() / kTestBytesPerFrame / 2 - 1;
@@ -510,6 +514,8 @@ TEST_F(AlsaPcmOutputStreamTest, WritePacket_NormalPacket) {
TEST_F(AlsaPcmOutputStreamTest, WritePacket_WriteFails) {
AlsaPcmOutputStream* test_stream = CreateStream(kTestChannelLayout);
InitBuffer(test_stream);
+ test_stream->TransitionTo(AlsaPcmOutputStream::kIsOpened);
+ test_stream->TransitionTo(AlsaPcmOutputStream::kIsPlaying);
// Fail due to a recoverable error and see that PcmRecover code path
// continues normally.
@@ -540,6 +546,8 @@ TEST_F(AlsaPcmOutputStreamTest, WritePacket_WriteFails) {
TEST_F(AlsaPcmOutputStreamTest, WritePacket_StopStream) {
AlsaPcmOutputStream* test_stream = CreateStream(kTestChannelLayout);
InitBuffer(test_stream);
+ test_stream->TransitionTo(AlsaPcmOutputStream::kIsOpened);
+ test_stream->TransitionTo(AlsaPcmOutputStream::kIsPlaying);
// No expectations set on the strict mock because nothing should be called.
test_stream->stop_stream_ = true;
@@ -790,7 +798,6 @@ TEST_F(AlsaPcmOutputStreamTest, ScheduleNextWrite) {
AlsaPcmOutputStream* test_stream = CreateStream(kTestChannelLayout);
test_stream->TransitionTo(AlsaPcmOutputStream::kIsOpened);
test_stream->TransitionTo(AlsaPcmOutputStream::kIsPlaying);
-DLOG(WARNING) << test_stream->state();
InitBuffer(test_stream);
DLOG(WARNING) << test_stream->state();
EXPECT_CALL(mock_alsa_wrapper_, PcmAvailUpdate(_))