| Index: media/renderers/video_renderer_impl_unittest.cc
|
| diff --git a/media/renderers/video_renderer_impl_unittest.cc b/media/renderers/video_renderer_impl_unittest.cc
|
| index d9cad51ea65b0f64c584220226bd2b98d4ee62d0..0aa2d2baf56c8ec73ce7ce91cceeb26db8d9561f 100644
|
| --- a/media/renderers/video_renderer_impl_unittest.cc
|
| +++ b/media/renderers/video_renderer_impl_unittest.cc
|
| @@ -14,6 +14,7 @@
|
| #include "base/strings/string_split.h"
|
| #include "base/strings/stringprintf.h"
|
| #include "base/synchronization/lock.h"
|
| +#include "base/test/simple_test_tick_clock.h"
|
| #include "media/base/data_buffer.h"
|
| #include "media/base/gmock_callback_support.h"
|
| #include "media/base/limits.h"
|
| @@ -45,7 +46,8 @@ MATCHER_P(HasTimestamp, ms, "") {
|
| class VideoRendererImplTest : public ::testing::Test {
|
| public:
|
| VideoRendererImplTest()
|
| - : decoder_(new MockVideoDecoder()),
|
| + : tick_clock_(new base::SimpleTestTickClock()),
|
| + decoder_(new MockVideoDecoder()),
|
| demuxer_stream_(DemuxerStream::VIDEO) {
|
| ScopedVector<VideoDecoder> decoders;
|
| decoders.push_back(decoder_);
|
| @@ -53,6 +55,10 @@ class VideoRendererImplTest : public ::testing::Test {
|
| renderer_.reset(new VideoRendererImpl(message_loop_.message_loop_proxy(),
|
| decoders.Pass(), true,
|
| new MediaLog()));
|
| + renderer_->SetTickClockForTesting(scoped_ptr<base::TickClock>(tick_clock_));
|
| +
|
| + // Start wallclock time at a non-zero value.
|
| + AdvanceWallclockTimeInMs(12345);
|
|
|
| demuxer_stream_.set_video_decoder_config(TestVideoConfig::Normal());
|
|
|
| @@ -103,7 +109,8 @@ class VideoRendererImplTest : public ::testing::Test {
|
| base::Unretained(&mock_cb_)),
|
| base::Bind(&StrictMock<MockCB>::Display, base::Unretained(&mock_cb_)),
|
| ended_event_.GetClosure(), error_event_.GetPipelineStatusCB(),
|
| - base::Bind(&VideoRendererImplTest::GetTime, base::Unretained(this)),
|
| + base::Bind(&VideoRendererImplTest::GetWallclockTimeForMediaTime,
|
| + base::Unretained(this)),
|
| base::Bind(&VideoRendererImplTest::OnWaitingForDecryptionKey,
|
| base::Unretained(this)));
|
| }
|
| @@ -237,6 +244,12 @@ class VideoRendererImplTest : public ::testing::Test {
|
| base::Bind(base::ResetAndReturn(&decode_cb_), VideoDecoder::kOk));
|
| }
|
|
|
| + void AdvanceWallclockTimeInMs(int time_ms) {
|
| + DCHECK_EQ(&message_loop_, base::MessageLoop::current());
|
| + base::AutoLock l(lock_);
|
| + tick_clock_->Advance(base::TimeDelta::FromMilliseconds(time_ms));
|
| + }
|
| +
|
| void AdvanceTimeInMs(int time_ms) {
|
| DCHECK_EQ(&message_loop_, base::MessageLoop::current());
|
| base::AutoLock l(lock_);
|
| @@ -246,6 +259,7 @@ class VideoRendererImplTest : public ::testing::Test {
|
| protected:
|
| // Fixture members.
|
| scoped_ptr<VideoRendererImpl> renderer_;
|
| + base::SimpleTestTickClock* tick_clock_; // Owned by |renderer_|.
|
| MockVideoDecoder* decoder_; // Owned by |renderer_|.
|
| NiceMock<MockDemuxerStream> demuxer_stream_;
|
|
|
| @@ -258,9 +272,9 @@ class VideoRendererImplTest : public ::testing::Test {
|
| StrictMock<MockCB> mock_cb_;
|
|
|
| private:
|
| - base::TimeDelta GetTime() {
|
| + base::TimeTicks GetWallclockTimeForMediaTime(base::TimeDelta time) {
|
| base::AutoLock l(lock_);
|
| - return time_;
|
| + return tick_clock_->NowTicks() + (time - time_);
|
| }
|
|
|
| void DecodeRequested(const scoped_refptr<DecoderBuffer>& buffer,
|
| @@ -480,13 +494,12 @@ TEST_F(VideoRendererImplTest, Underflow) {
|
| // having nothing.
|
| AdvanceTimeInMs(100);
|
|
|
| - // Advance time more. Now we should signal having nothing.
|
| + // Now that all frames are dropped, we should signal having nothing.
|
| {
|
| SCOPED_TRACE("Waiting for BUFFERING_HAVE_NOTHING");
|
| WaitableMessageLoopEvent event;
|
| EXPECT_CALL(mock_cb_, BufferingStateChange(BUFFERING_HAVE_NOTHING))
|
| .WillOnce(RunClosure(event.GetClosure()));
|
| - AdvanceTimeInMs(3000); // Must match kTimeToDeclareHaveNothing.
|
| event.RunAndWait();
|
| }
|
|
|
|
|