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

Unified Diff: media/filters/audio_renderer_base_unittest.cc

Issue 164447: Merge 22654 - Renderer busy looping after video (with sound) or audio ends... (Closed) Base URL: svn://chrome-svn/chrome/branches/195/src/
Patch Set: Created 11 years, 4 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 | « media/filters/audio_renderer_base.cc ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: media/filters/audio_renderer_base_unittest.cc
===================================================================
--- media/filters/audio_renderer_base_unittest.cc (revision 23263)
+++ media/filters/audio_renderer_base_unittest.cc (working copy)
@@ -8,6 +8,7 @@
#include "media/base/mock_filters.h"
#include "media/filters/audio_renderer_base.h"
#include "testing/gtest/include/gtest/gtest.h"
+#include "testing/gtest/include/gtest/gtest_prod.h"
using ::testing::_;
using ::testing::InSequence;
@@ -36,6 +37,8 @@
MOCK_METHOD1(CheckPoint, void(int id));
private:
+ FRIEND_TEST(AudioRendererBaseTest, OneCompleteReadCycle);
+
DISALLOW_COPY_AND_ASSIGN(MockAudioRendererBase);
};
@@ -141,4 +144,72 @@
}
}
+TEST_F(AudioRendererBaseTest, OneCompleteReadCycle) {
+ InSequence s;
+
+ // Then our subclass will be asked to initialize.
+ EXPECT_CALL(*renderer_, OnInitialize(_))
+ .WillOnce(Return(true));
+
+ // After finishing initialization, we expect our callback to be executed.
+ EXPECT_CALL(callback_, OnFilterCallback());
+ EXPECT_CALL(callback_, OnCallbackDestroyed());
+
+ // Verify the following expectations haven't run until we complete the reads.
+ EXPECT_CALL(*renderer_, CheckPoint(0));
+
+ MockFilterCallback seek_callback;
+ EXPECT_CALL(seek_callback, OnFilterCallback());
+ EXPECT_CALL(seek_callback, OnCallbackDestroyed());
+
+ // Initialize, we shouldn't have any reads.
+ renderer_->Initialize(decoder_, callback_.NewCallback());
+ EXPECT_EQ(0u, read_queue_.size());
+
+ // Now seek to trigger prerolling.
+ renderer_->Seek(base::TimeDelta(), seek_callback.NewCallback());
+ EXPECT_EQ(kMaxQueueSize, read_queue_.size());
+
+ // 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.
+ const size_t kDataSize = 1024;
+ while (!read_queue_.empty()) {
+ scoped_refptr<DataBuffer> buffer = new DataBuffer(kDataSize);
+ buffer->SetDataSize(kDataSize);
+ read_queue_.front()->Run(buffer);
+ delete read_queue_.front();
+ read_queue_.pop_front();
+ }
+
+ MockFilterCallback play_callback;
+ EXPECT_CALL(play_callback, OnFilterCallback());
+ EXPECT_CALL(play_callback, OnCallbackDestroyed());
+
+ // Then set the renderer to play state.
+ renderer_->Play(play_callback.NewCallback());
+ renderer_->SetPlaybackRate(1.0f);
+ EXPECT_EQ(1.0f, renderer_->GetPlaybackRate());
+
+ // Then flush the data in the renderer by reading from it.
+ uint8 buffer[kDataSize];
+ for (size_t i = 0; i < kMaxQueueSize; ++i) {
+ EXPECT_EQ(kDataSize,
+ renderer_->FillBuffer(buffer, kDataSize, base::TimeDelta()));
+ }
+
+ // Make sure the read request queue is full.
+ EXPECT_EQ(kMaxQueueSize, read_queue_.size());
+
+ // Fulfill the read with an end-of-stream packet.
+ read_queue_.front()->Run(new DataBuffer(0));
+ delete read_queue_.front();
+ read_queue_.pop_front();
+
+ // We should have one less read request in the queue.
+ EXPECT_EQ(kMaxQueueSize - 1, read_queue_.size());
+}
+
} // namespace media
Property changes on: media\filters\audio_renderer_base_unittest.cc
___________________________________________________________________
Modified: svn:mergeinfo
Merged /trunk/src/media/filters/audio_renderer_base_unittest.cc:r22654
« no previous file with comments | « media/filters/audio_renderer_base.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698