Index: media/filters/audio_renderer_impl_unittest.cc |
diff --git a/media/filters/audio_renderer_impl_unittest.cc b/media/filters/audio_renderer_impl_unittest.cc |
index fe901f099465cc591d457303f3dac321e6ca7e73..dff17330c98b1b6111e5ea08522ed68e084cdd2d 100644 |
--- a/media/filters/audio_renderer_impl_unittest.cc |
+++ b/media/filters/audio_renderer_impl_unittest.cc |
@@ -5,6 +5,7 @@ |
#include "base/bind.h" |
#include "base/callback_helpers.h" |
#include "base/gtest_prod_util.h" |
+#include "base/message_loop.h" |
#include "base/stl_util.h" |
#include "media/base/data_buffer.h" |
#include "media/base/mock_audio_renderer_sink.h" |
@@ -58,6 +59,7 @@ class AudioRendererImplTest : public ::testing::Test { |
} |
virtual ~AudioRendererImplTest() { |
+ message_loop_.RunUntilIdle(); |
renderer_->Stop(NewExpectedClosure()); |
} |
@@ -101,6 +103,7 @@ class AudioRendererImplTest : public ::testing::Test { |
.WillOnce(RunPipelineStatusCB1(PIPELINE_OK)); |
InitializeWithStatus(PIPELINE_OK); |
+ message_loop_.RunUntilIdle(); |
} |
void InitializeWithStatus(PipelineStatus expected) { |
@@ -127,6 +130,7 @@ class AudioRendererImplTest : public ::testing::Test { |
EXPECT_CALL(*decoder_, Read(_)); |
renderer_->Preroll(base::TimeDelta(), NewPrerollCB()); |
EXPECT_CALL(*this, OnPrerollComplete(PIPELINE_OK)); |
+ message_loop_.RunUntilIdle(); |
DeliverRemainingAudio(); |
} |
@@ -193,7 +197,7 @@ class AudioRendererImplTest : public ::testing::Test { |
ChannelLayoutToChannelCount(decoder_->channel_layout()); |
uint32 requested_frames = size / bytes_per_frame; |
uint32 frames_read = renderer_->FillBuffer( |
- buffer.get(), requested_frames, base::TimeDelta()); |
+ buffer.get(), requested_frames, 0); |
if (frames_read > 0 && muted) { |
*muted = (buffer[0] == kMutedAudio); |
@@ -229,6 +233,7 @@ class AudioRendererImplTest : public ::testing::Test { |
AudioRendererImpl::AudioDecoderList decoders_; |
AudioDecoder::ReadCB read_cb_; |
base::TimeDelta next_timestamp_; |
+ MessageLoop message_loop_; |
private: |
void SaveReadCallback(const AudioDecoder::ReadCB& callback) { |
@@ -301,8 +306,20 @@ TEST_F(AudioRendererImplTest, EndOfStream) { |
Play(); |
// Drain internal buffer, we should have a pending read. |
+ int audio_bytes_filled = bytes_buffered(); |
EXPECT_CALL(*decoder_, Read(_)); |
- EXPECT_TRUE(ConsumeBufferedData(bytes_buffered(), NULL)); |
+ EXPECT_TRUE(ConsumeBufferedData(audio_bytes_filled, NULL)); |
+ |
+ // Check and clear |earliest_end_time_| so the ended event fires on the next |
+ // ConsumeBufferedData() call. |
+ base::TimeDelta audio_play_time = base::TimeDelta::FromMicroseconds( |
+ audio_bytes_filled * base::Time::kMicrosecondsPerSecond / |
+ static_cast<float>(renderer_->audio_parameters_.GetBytesPerSecond())); |
+ base::TimeDelta time_until_ended = |
+ renderer_->earliest_end_time_ - base::Time::Now(); |
+ EXPECT_TRUE(time_until_ended > base::TimeDelta()); |
+ EXPECT_TRUE(time_until_ended <= audio_play_time); |
+ renderer_->earliest_end_time_ = base::Time(); |
// Fulfill the read with an end-of-stream packet, we shouldn't report ended |
// nor have a read until we drain the internal buffer. |
@@ -390,6 +407,10 @@ TEST_F(AudioRendererImplTest, Underflow_EndOfStream) { |
DeliverEndOfStream(); |
EXPECT_CALL(*this, OnEnded()); |
+ // Clear |earliest_end_time_| so ended fires on the next ConsumeBufferedData() |
+ // call. |
+ renderer_->earliest_end_time_ = base::Time(); |
+ |
EXPECT_FALSE(ConsumeBufferedData(kDataSize, &muted)); |
EXPECT_FALSE(muted); |
} |