Index: media/filters/video_renderer_base_unittest.cc |
diff --git a/media/filters/video_renderer_base_unittest.cc b/media/filters/video_renderer_base_unittest.cc |
index b1498490df16d0d2cadd1e743631c1c25f5d6969..1049735cd0385f6569220f619181023c5d711919 100644 |
--- a/media/filters/video_renderer_base_unittest.cc |
+++ b/media/filters/video_renderer_base_unittest.cc |
@@ -63,8 +63,6 @@ class VideoRendererBaseTest : public ::testing::Test { |
.Times(AnyNumber()); |
EXPECT_CALL(*this, OnTimeUpdate(_)) |
.Times(AnyNumber()); |
- EXPECT_CALL(*this, OnPaint()) |
- .Times(AnyNumber()); |
EXPECT_CALL(*this, OnSetOpaque(_)) |
.Times(AnyNumber()); |
} |
@@ -72,7 +70,6 @@ class VideoRendererBaseTest : public ::testing::Test { |
virtual ~VideoRendererBaseTest() {} |
// Callbacks passed into VideoRendererBase(). |
- MOCK_CONST_METHOD0(OnPaint, void()); |
MOCK_CONST_METHOD1(OnSetOpaque, void(bool)); |
// Callbacks passed into Initialize(). |
@@ -228,11 +225,14 @@ class VideoRendererBaseTest : public ::testing::Test { |
} |
} |
+ void ResetCurrentFrame() { |
+ base::AutoLock l(lock_); |
+ current_frame_ = NULL; |
+ } |
+ |
scoped_refptr<VideoFrame> GetCurrentFrame() { |
- scoped_refptr<VideoFrame> frame; |
- renderer_->GetCurrentFrame(&frame); |
- renderer_->PutCurrentFrame(frame); |
- return frame; |
+ base::AutoLock l(lock_); |
+ return current_frame_; |
} |
int GetCurrentTimestampInMs() { |
@@ -305,6 +305,11 @@ class VideoRendererBaseTest : public ::testing::Test { |
return duration_; |
} |
+ void OnPaint(const scoped_refptr<VideoFrame>& frame) { |
+ base::AutoLock l(lock_); |
+ current_frame_ = frame; |
+ } |
+ |
void FrameRequested(const VideoDecoder::ReadCB& read_cb) { |
DCHECK_EQ(&message_loop_, MessageLoop::current()); |
CHECK(read_cb_.is_null()); |
@@ -335,9 +340,10 @@ class VideoRendererBaseTest : public ::testing::Test { |
VideoDecoderConfig video_config_; |
- // Used to protect |time_|. |
+ // Used to protect |time_| and |current_frame_|. |
base::Lock lock_; |
base::TimeDelta time_; |
+ scoped_refptr<VideoFrame> current_frame_; |
// Used for satisfying reads. |
VideoDecoder::ReadCB read_cb_; |
@@ -488,8 +494,12 @@ TEST_F(VideoRendererBaseTest, GetCurrentFrame_Flushed) { |
Initialize(); |
Play(); |
Pause(); |
+ |
+ // Frame shouldn't be updated. |
+ ResetCurrentFrame(); |
Flush(); |
EXPECT_FALSE(GetCurrentFrame()); |
+ |
Shutdown(); |
} |
@@ -501,6 +511,9 @@ TEST_F(VideoRendererBaseTest, GetCurrentFrame_EndOfStream) { |
// Preroll only end of stream frames. |
QueueEndOfStream(); |
+ |
+ // Frame shouldn't be updated. |
+ ResetCurrentFrame(); |
Preroll(0, PIPELINE_OK); |
EXPECT_FALSE(GetCurrentFrame()); |
@@ -513,6 +526,9 @@ TEST_F(VideoRendererBaseTest, GetCurrentFrame_EndOfStream) { |
TEST_F(VideoRendererBaseTest, GetCurrentFrame_Shutdown) { |
Initialize(); |
+ |
+ // Frame shouldn't be updated. |
+ ResetCurrentFrame(); |
Shutdown(); |
EXPECT_FALSE(GetCurrentFrame()); |
} |
@@ -520,31 +536,11 @@ TEST_F(VideoRendererBaseTest, GetCurrentFrame_Shutdown) { |
// Stop() is called immediately during an error. |
TEST_F(VideoRendererBaseTest, GetCurrentFrame_Error) { |
Initialize(); |
- Stop(); |
- EXPECT_FALSE(GetCurrentFrame()); |
-} |
- |
-// Verify that shutdown can only proceed after we return the current frame. |
-TEST_F(VideoRendererBaseTest, Shutdown_DuringPaint) { |
- Initialize(); |
- Play(); |
- |
- // Grab the frame. |
- scoped_refptr<VideoFrame> frame; |
- renderer_->GetCurrentFrame(&frame); |
- EXPECT_TRUE(frame); |
- |
- Pause(); |
- |
- // Start flushing -- it won't complete until we return the frame. |
- WaitableMessageLoopEvent event; |
- renderer_->Flush(event.GetClosure()); |
- |
- // Return the frame and wait. |
- renderer_->PutCurrentFrame(frame); |
- event.RunAndWait(); |
+ // Frame shouldn't be updated. |
+ ResetCurrentFrame(); |
Stop(); |
+ EXPECT_FALSE(GetCurrentFrame()); |
} |
// Verify that a late decoder response doesn't break invariants in the renderer. |