| Index: media/filters/audio_renderer_base_unittest.cc
|
| diff --git a/media/filters/audio_renderer_base_unittest.cc b/media/filters/audio_renderer_base_unittest.cc
|
| index 62889d0a8b132fd2a438351494d2aab46bba256d..064f7a635e3fde5d602ca97def939e18696185c0 100644
|
| --- a/media/filters/audio_renderer_base_unittest.cc
|
| +++ b/media/filters/audio_renderer_base_unittest.cc
|
| @@ -49,11 +49,12 @@ class AudioRendererBaseTest : public ::testing::Test {
|
| // Give the decoder some non-garbage media properties.
|
| AudioRendererBaseTest()
|
| : renderer_(new MockAudioRendererBase()),
|
| - decoder_(new MockAudioDecoder()) {
|
| + decoder_(new MockAudioDecoder()),
|
| + pending_reads_(0) {
|
| renderer_->set_host(&host_);
|
|
|
| // Queue all reads from the decoder.
|
| - EXPECT_CALL(*decoder_, Read(NotNull()))
|
| + EXPECT_CALL(*decoder_, FillThisBuffer(_))
|
| .WillRepeatedly(Invoke(this, &AudioRendererBaseTest::EnqueueCallback));
|
|
|
| // Sets the essential media format keys for this decoder.
|
| @@ -67,8 +68,6 @@ class AudioRendererBaseTest : public ::testing::Test {
|
| }
|
|
|
| virtual ~AudioRendererBaseTest() {
|
| - STLDeleteElements(&read_queue_);
|
| -
|
| // Expect a call into the subclass.
|
| EXPECT_CALL(*renderer_, OnStop());
|
| renderer_->Stop();
|
| @@ -84,12 +83,12 @@ class AudioRendererBaseTest : public ::testing::Test {
|
| StrictMock<MockFilterCallback> callback_;
|
| MediaFormat decoder_media_format_;
|
|
|
| - // Receives asynchronous read requests sent to |decoder_|.
|
| - std::deque<Callback1<Buffer*>::Type*> read_queue_;
|
| + // Number of asynchronous read requests sent to |decoder_|.
|
| + size_t pending_reads_;
|
|
|
| private:
|
| - void EnqueueCallback(Callback1<Buffer*>::Type* callback) {
|
| - read_queue_.push_back(callback);
|
| + void EnqueueCallback(scoped_refptr<Buffer> buffer) {
|
| + ++pending_reads_;
|
| }
|
|
|
| DISALLOW_COPY_AND_ASSIGN(AudioRendererBaseTest);
|
| @@ -113,7 +112,7 @@ TEST_F(AudioRendererBaseTest, Initialize_Failed) {
|
|
|
| // Initialize, we expect to have no reads.
|
| renderer_->Initialize(decoder_, callback_.NewCallback());
|
| - EXPECT_EQ(0u, read_queue_.size());
|
| + EXPECT_EQ(0u, pending_reads_);
|
| }
|
|
|
| TEST_F(AudioRendererBaseTest, Initialize_Successful) {
|
| @@ -136,23 +135,22 @@ TEST_F(AudioRendererBaseTest, Initialize_Successful) {
|
|
|
| // Initialize, we shouldn't have any reads.
|
| renderer_->Initialize(decoder_, callback_.NewCallback());
|
| - EXPECT_EQ(0u, read_queue_.size());
|
| + EXPECT_EQ(0u, pending_reads_);
|
|
|
| // Now seek to trigger prerolling.
|
| renderer_->Seek(base::TimeDelta(), seek_callback.NewCallback());
|
| - EXPECT_EQ(kMaxQueueSize, read_queue_.size());
|
| + EXPECT_EQ(kMaxQueueSize, pending_reads_);
|
|
|
| // Verify our seek callback hasn't been executed yet.
|
| renderer_->CheckPoint(0);
|
|
|
| // Now satisfy the read requests. Our callback should be executed after
|
| // exiting this loop.
|
| - while (!read_queue_.empty()) {
|
| + while (pending_reads_) {
|
| scoped_refptr<DataBuffer> buffer = new DataBuffer(1024);
|
| buffer->SetDataSize(1024);
|
| - read_queue_.front()->Run(buffer);
|
| - delete read_queue_.front();
|
| - read_queue_.pop_front();
|
| + --pending_reads_;
|
| + decoder_->fill_buffer_done_callback()->Run(buffer);
|
| }
|
| }
|
|
|
| @@ -176,11 +174,11 @@ TEST_F(AudioRendererBaseTest, OneCompleteReadCycle) {
|
|
|
| // Initialize, we shouldn't have any reads.
|
| renderer_->Initialize(decoder_, callback_.NewCallback());
|
| - EXPECT_EQ(0u, read_queue_.size());
|
| + EXPECT_EQ(0u, pending_reads_);
|
|
|
| // Now seek to trigger prerolling.
|
| renderer_->Seek(base::TimeDelta(), seek_callback.NewCallback());
|
| - EXPECT_EQ(kMaxQueueSize, read_queue_.size());
|
| + EXPECT_EQ(kMaxQueueSize, pending_reads_);
|
|
|
| // Verify our seek callback hasn't been executed yet.
|
| renderer_->CheckPoint(0);
|
| @@ -189,12 +187,11 @@ TEST_F(AudioRendererBaseTest, OneCompleteReadCycle) {
|
| // exiting this loop.
|
| const uint32 kDataSize = 1024;
|
| uint32 bytes_buffered = 0;
|
| - while (!read_queue_.empty()) {
|
| + while (pending_reads_) {
|
| scoped_refptr<DataBuffer> buffer = new DataBuffer(kDataSize);
|
| buffer->SetDataSize(kDataSize);
|
| - read_queue_.front()->Run(buffer);
|
| - delete read_queue_.front();
|
| - read_queue_.pop_front();
|
| + decoder_->fill_buffer_done_callback()->Run(buffer);
|
| + --pending_reads_;
|
| bytes_buffered += kDataSize;
|
| }
|
|
|
| @@ -216,19 +213,18 @@ TEST_F(AudioRendererBaseTest, OneCompleteReadCycle) {
|
| }
|
|
|
| // Make sure the read request queue is full.
|
| - EXPECT_EQ(kMaxQueueSize, read_queue_.size());
|
| + EXPECT_EQ(kMaxQueueSize, pending_reads_);
|
|
|
| // Fulfill the read with an end-of-stream packet.
|
| scoped_refptr<DataBuffer> last_buffer = new DataBuffer(0);
|
| - read_queue_.front()->Run(last_buffer);
|
| - delete read_queue_.front();
|
| - read_queue_.pop_front();
|
| + decoder_->fill_buffer_done_callback()->Run(last_buffer);
|
| + --pending_reads_;
|
|
|
| // We shouldn't report ended until all data has been flushed out.
|
| EXPECT_FALSE(renderer_->HasEnded());
|
|
|
| // We should have one less read request in the queue.
|
| - EXPECT_EQ(kMaxQueueSize - 1, read_queue_.size());
|
| + EXPECT_EQ(kMaxQueueSize - 1, pending_reads_);
|
|
|
| // Flush the entire internal buffer and verify NotifyEnded() isn't called
|
| // right away.
|
|
|