| Index: media/video/gpu_memory_buffer_video_frame_pool_unittest.cc
|
| diff --git a/media/video/gpu_memory_buffer_video_frame_pool_unittest.cc b/media/video/gpu_memory_buffer_video_frame_pool_unittest.cc
|
| index 6d891b2487440832c6033556489f8c812eeef785..707624d490798e42e01c597bf009128ee7b70696 100644
|
| --- a/media/video/gpu_memory_buffer_video_frame_pool_unittest.cc
|
| +++ b/media/video/gpu_memory_buffer_video_frame_pool_unittest.cc
|
| @@ -16,11 +16,19 @@ namespace {
|
| class TestGLES2Interface : public gpu::gles2::GLES2InterfaceStub {
|
| public:
|
| unsigned gen_textures = 0u;
|
| + unsigned gen_images = 0u;
|
| void GenTextures(GLsizei n, GLuint* textures) override {
|
| DCHECK_EQ(1, n);
|
| *textures = ++gen_textures;
|
| }
|
|
|
| + GLuint CreateImageCHROMIUM(ClientBuffer buffer,
|
| + GLsizei width,
|
| + GLsizei height,
|
| + GLenum inetrnalformat) override {
|
| + return ++gen_images;
|
| + }
|
| +
|
| GLuint InsertSyncPointCHROMIUM() override { return ++sync_point; }
|
|
|
| void GenMailboxCHROMIUM(GLbyte* mailbox) override {
|
| @@ -253,4 +261,41 @@ TEST_F(GpuMemoryBufferVideoFramePoolTest, CreateOneHardwareNV12Frame) {
|
| EXPECT_EQ(1u, gles2_->gen_textures);
|
| }
|
|
|
| +// AllocateGpuMemoryBuffer can return null (e.g: when the GPU process is down).
|
| +// This test checks that in that case we don't crash and still create the
|
| +// textures.
|
| +// If we try to create another VideoFrame after the GPU process became active
|
| +// again we should discard the previous created resources and create new ones.
|
| +TEST_F(GpuMemoryBufferVideoFramePoolTest, AllocateGMBFail) {
|
| + scoped_refptr<VideoFrame> software_frame = CreateTestYUVVideoFrame(10);
|
| + scoped_refptr<MockGpuVideoAcceleratorFactories> mock_gpu_factories(
|
| + new MockGpuVideoAcceleratorFactories);
|
| + mock_gpu_factories->SetFailToAllocateGpuMemoryBuffer(true);
|
| + scoped_ptr<GpuMemoryBufferVideoFramePool> gpu_memory_buffer_pool_ =
|
| + make_scoped_ptr(new GpuMemoryBufferVideoFramePool(
|
| + media_task_runner_, copy_task_runner_.get(), mock_gpu_factories));
|
| +
|
| + EXPECT_CALL(*mock_gpu_factories.get(), GetGLES2Interface())
|
| + .WillRepeatedly(testing::Return(gles2_.get()));
|
| +
|
| + scoped_refptr<VideoFrame> frame;
|
| + gpu_memory_buffer_pool_->MaybeCreateHardwareFrame(
|
| + software_frame, base::Bind(MaybeCreateHardwareFrameCallback, &frame));
|
| +
|
| + RunUntilIdle();
|
| +
|
| + EXPECT_NE(software_frame.get(), frame.get());
|
| + EXPECT_EQ(3u, gles2_->gen_textures);
|
| + EXPECT_EQ(0u, gles2_->gen_images);
|
| +
|
| + mock_gpu_factories->SetFailToAllocateGpuMemoryBuffer(false);
|
| + gpu_memory_buffer_pool_->MaybeCreateHardwareFrame(
|
| + software_frame, base::Bind(MaybeCreateHardwareFrameCallback, &frame));
|
| +
|
| + RunUntilIdle();
|
| + EXPECT_NE(software_frame.get(), frame.get());
|
| + EXPECT_EQ(6u, gles2_->gen_textures);
|
| + EXPECT_EQ(3u, gles2_->gen_images);
|
| +}
|
| +
|
| } // namespace media
|
|
|