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..fed0730f2074dcfd1bfd5c84359848c0f32e607f 100644 |
--- a/media/video/gpu_memory_buffer_video_frame_pool_unittest.cc |
+++ b/media/video/gpu_memory_buffer_video_frame_pool_unittest.cc |
@@ -253,4 +253,29 @@ 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. |
+TEST_F(GpuMemoryBufferVideoFramePoolTest, AllocateGpuMemoryBufferBFail) { |
+ 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); |
+} |
+ |
} // namespace media |