Index: media/filters/video_renderer_algorithm_unittest.cc |
diff --git a/media/filters/video_renderer_algorithm_unittest.cc b/media/filters/video_renderer_algorithm_unittest.cc |
index 3fb658a5569a5d4f2cdeebfa1676b42f7b0f38a5..4ea7d53ee25bc23413e88d146c4445d987746485 100644 |
--- a/media/filters/video_renderer_algorithm_unittest.cc |
+++ b/media/filters/video_renderer_algorithm_unittest.cc |
@@ -1124,4 +1124,38 @@ TEST_F(VideoRendererAlgorithmTest, UglyTimestampsHaveCadence) { |
} |
} |
+TEST_F(VideoRendererAlgorithmTest, EnqueueFrames) { |
+ TickGenerator tg(base::TimeTicks(), 50); |
+ time_source_.StartTicking(); |
+ |
+ EXPECT_EQ(0u, frames_queued()); |
+ scoped_refptr<VideoFrame> frame_1 = CreateFrame(tg.interval(0)); |
+ algorithm_.EnqueueFrame(frame_1); |
+ EXPECT_EQ(1u, frames_queued()); |
+ |
+ // Enqueuing a frame with the same timestamp should not increase the queue and |
+ // just replace the existing frame if we haven't rendered it. |
+ scoped_refptr<VideoFrame> frame_2 = CreateFrame(tg.interval(0)); |
+ algorithm_.EnqueueFrame(frame_2); |
+ EXPECT_EQ(1u, frames_queued()); |
+ |
+ size_t frames_dropped = 0; |
+ scoped_refptr<VideoFrame> rendered_frame = |
+ RenderAndStep(&tg, &frames_dropped); |
+ EXPECT_EQ(1u, frames_queued()); |
+ EXPECT_EQ(frame_2, rendered_frame); |
+ |
+ // The replaced frame should count as dropped. |
+ EXPECT_EQ(1u, frames_dropped); |
+ |
+ // Trying to replace frame_2 with frame_1 should do nothing. |
+ algorithm_.EnqueueFrame(frame_1); |
+ EXPECT_EQ(1u, frames_queued()); |
+ |
+ rendered_frame = RenderAndStep(&tg, &frames_dropped); |
+ EXPECT_EQ(1u, frames_queued()); |
+ EXPECT_EQ(frame_2, rendered_frame); |
+ EXPECT_EQ(1u, frames_dropped); |
+} |
+ |
} // namespace media |