OLD | NEW |
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "base/bind.h" | 5 #include "base/bind.h" |
6 #include "base/message_loop/message_loop.h" | 6 #include "base/message_loop/message_loop.h" |
7 #include "base/run_loop.h" | 7 #include "base/run_loop.h" |
8 #include "base/test/simple_test_tick_clock.h" | 8 #include "base/test/simple_test_tick_clock.h" |
9 #include "cc/layers/video_frame_provider.h" | 9 #include "cc/layers/video_frame_provider.h" |
10 #include "media/base/video_frame.h" | 10 #include "media/base/video_frame.h" |
(...skipping 240 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
251 | 251 |
252 EXPECT_CALL(*this, Render(_, _, _)) | 252 EXPECT_CALL(*this, Render(_, _, _)) |
253 .WillOnce(Return(not_opaque_frame)) | 253 .WillOnce(Return(not_opaque_frame)) |
254 .WillOnce(Return(not_opaque_frame)) | 254 .WillOnce(Return(not_opaque_frame)) |
255 .WillOnce(Return(opaque_frame)) | 255 .WillOnce(Return(opaque_frame)) |
256 .WillOnce(Return(opaque_frame)); | 256 .WillOnce(Return(opaque_frame)); |
257 StartVideoRendererSink(); | 257 StartVideoRendererSink(); |
258 EXPECT_FALSE(opaque()); | 258 EXPECT_FALSE(opaque()); |
259 EXPECT_EQ(1, opacity_changed_count()); | 259 EXPECT_EQ(1, opacity_changed_count()); |
260 | 260 |
261 EXPECT_FALSE( | 261 EXPECT_TRUE( |
262 compositor()->UpdateCurrentFrame(base::TimeTicks(), base::TimeTicks())); | 262 compositor()->UpdateCurrentFrame(base::TimeTicks(), base::TimeTicks())); |
263 RenderFrame(); | 263 RenderFrame(); |
264 EXPECT_FALSE(opaque()); | 264 EXPECT_FALSE(opaque()); |
265 EXPECT_EQ(1, opacity_changed_count()); | 265 EXPECT_EQ(1, opacity_changed_count()); |
266 | 266 |
267 EXPECT_TRUE( | 267 EXPECT_TRUE( |
268 compositor()->UpdateCurrentFrame(base::TimeTicks(), base::TimeTicks())); | 268 compositor()->UpdateCurrentFrame(base::TimeTicks(), base::TimeTicks())); |
269 RenderFrame(); | 269 RenderFrame(); |
270 EXPECT_TRUE(opaque()); | 270 EXPECT_TRUE(opaque()); |
271 EXPECT_EQ(2, opacity_changed_count()); | 271 EXPECT_EQ(2, opacity_changed_count()); |
272 | 272 |
273 EXPECT_FALSE( | 273 EXPECT_FALSE( |
274 compositor()->UpdateCurrentFrame(base::TimeTicks(), base::TimeTicks())); | 274 compositor()->UpdateCurrentFrame(base::TimeTicks(), base::TimeTicks())); |
275 EXPECT_TRUE(opaque()); | 275 EXPECT_TRUE(opaque()); |
276 EXPECT_EQ(2, opacity_changed_count()); | 276 EXPECT_EQ(2, opacity_changed_count()); |
277 RenderFrame(); | 277 RenderFrame(); |
278 | 278 |
279 StopVideoRendererSink(true); | 279 StopVideoRendererSink(true); |
280 } | 280 } |
281 | 281 |
282 TEST_F(VideoFrameCompositorTest, VideoRendererSinkFrameDropped) { | 282 TEST_F(VideoFrameCompositorTest, VideoRendererSinkFrameDropped) { |
283 scoped_refptr<VideoFrame> opaque_frame = CreateOpaqueFrame(); | 283 scoped_refptr<VideoFrame> opaque_frame = CreateOpaqueFrame(); |
284 | 284 |
285 EXPECT_CALL(*this, Render(_, _, _)).WillRepeatedly(Return(opaque_frame)); | 285 EXPECT_CALL(*this, Render(_, _, _)).WillRepeatedly(Return(opaque_frame)); |
286 StartVideoRendererSink(); | 286 StartVideoRendererSink(); |
287 | 287 |
288 // The first UpdateCurrentFrame() after a background render, which starting | 288 EXPECT_TRUE( |
289 // the sink does automatically, won't report a dropped frame. | |
290 EXPECT_FALSE( | |
291 compositor()->UpdateCurrentFrame(base::TimeTicks(), base::TimeTicks())); | 289 compositor()->UpdateCurrentFrame(base::TimeTicks(), base::TimeTicks())); |
292 | 290 |
293 // Another call should trigger a dropped frame callback. | 291 // Another call should trigger a dropped frame callback. |
294 EXPECT_CALL(*this, OnFrameDropped()); | 292 EXPECT_CALL(*this, OnFrameDropped()); |
295 EXPECT_FALSE( | 293 EXPECT_FALSE( |
296 compositor()->UpdateCurrentFrame(base::TimeTicks(), base::TimeTicks())); | 294 compositor()->UpdateCurrentFrame(base::TimeTicks(), base::TimeTicks())); |
297 | 295 |
298 // Ensure it always happens until the frame is rendered. | 296 // Ensure it always happens until the frame is rendered. |
299 EXPECT_CALL(*this, OnFrameDropped()); | 297 EXPECT_CALL(*this, OnFrameDropped()); |
300 EXPECT_FALSE( | 298 EXPECT_FALSE( |
(...skipping 126 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
427 | 425 |
428 // Advancing the tick clock should allow a new frame to be requested. | 426 // Advancing the tick clock should allow a new frame to be requested. |
429 tick_clock_->Advance(base::TimeDelta::FromMilliseconds(10)); | 427 tick_clock_->Advance(base::TimeDelta::FromMilliseconds(10)); |
430 ASSERT_EQ(opaque_frame_2, compositor()->GetCurrentFrameAndUpdateIfStale()); | 428 ASSERT_EQ(opaque_frame_2, compositor()->GetCurrentFrameAndUpdateIfStale()); |
431 | 429 |
432 // Background rendering should tick another render callback. | 430 // Background rendering should tick another render callback. |
433 StopVideoRendererSink(false); | 431 StopVideoRendererSink(false); |
434 } | 432 } |
435 | 433 |
436 } // namespace media | 434 } // namespace media |
OLD | NEW |