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 7cfd6e986c3c6f1ca54986f4388536e8c002b923..3f16e079464b53867fea0700bd205da23bf5ec02 100644 |
--- a/media/video/gpu_memory_buffer_video_frame_pool_unittest.cc |
+++ b/media/video/gpu_memory_buffer_video_frame_pool_unittest.cc |
@@ -2,8 +2,8 @@ |
// Use of this source code is governed by a BSD-style license that can be |
// found in the LICENSE file. |
-#include "base/message_loop/message_loop.h" |
-#include "base/run_loop.h" |
+#include "base/bind.h" |
+#include "base/test/test_simple_task_runner.h" |
#include "gpu/command_buffer/client/gles2_interface_stub.h" |
#include "media/base/video_frame.h" |
#include "media/renderers/mock_gpu_video_accelerator_factories.h" |
@@ -37,9 +37,19 @@ class TestGLES2Interface : public gpu::gles2::GLES2InterfaceStub { |
class GpuMemoryBufferVideoFramePoolTest : public ::testing::Test { |
public: |
GpuMemoryBufferVideoFramePoolTest() {} |
- void SetUp() override { gles2_.reset(new TestGLES2Interface); } |
+ void SetUp() override { |
+ gles2_.reset(new TestGLES2Interface); |
+ media_task_runner_ = make_scoped_refptr(new base::TestSimpleTaskRunner); |
+ copy_task_runner_ = make_scoped_refptr(new base::TestSimpleTaskRunner); |
+ } |
+ |
+ void TearDown() override { RunUntilIdle(); } |
- void TearDown() override { base::RunLoop().RunUntilIdle(); } |
+ void RunUntilIdle() { |
+ media_task_runner_->RunUntilIdle(); |
+ copy_task_runner_->RunUntilIdle(); |
+ media_task_runner_->RunUntilIdle(); |
+ } |
static scoped_refptr<media::VideoFrame> CreateTestYUVVideoFrame( |
int dimension) { |
@@ -66,18 +76,27 @@ class GpuMemoryBufferVideoFramePoolTest : public ::testing::Test { |
} |
protected: |
- base::MessageLoop media_message_loop_; |
+ scoped_refptr<base::TestSimpleTaskRunner> media_task_runner_; |
+ scoped_refptr<base::TestSimpleTaskRunner> copy_task_runner_; |
scoped_ptr<TestGLES2Interface> gles2_; |
}; |
+void MaybeCreateHardwareFrameCallback( |
+ scoped_refptr<VideoFrame>* video_frame_output, |
+ const scoped_refptr<VideoFrame>& video_frame) { |
+ *video_frame_output = video_frame; |
+} |
+ |
TEST_F(GpuMemoryBufferVideoFramePoolTest, NoGpuFactoryNoHardwareVideoFrame) { |
scoped_refptr<VideoFrame> frame = CreateTestYUVVideoFrame(10); |
scoped_ptr<GpuMemoryBufferVideoFramePool> gpu_memory_buffer_pool_ = |
make_scoped_ptr(new GpuMemoryBufferVideoFramePool( |
- media_message_loop_.task_runner(), nullptr)); |
+ media_task_runner_, copy_task_runner_.get(), nullptr)); |
- scoped_refptr<VideoFrame> frame2 = |
- gpu_memory_buffer_pool_->MaybeCreateHardwareFrame(frame); |
+ scoped_refptr<VideoFrame> frame2; |
+ gpu_memory_buffer_pool_->MaybeCreateHardwareFrame( |
+ frame, base::Bind(MaybeCreateHardwareFrameCallback, &frame2)); |
+ RunUntilIdle(); |
EXPECT_EQ(frame.get(), frame2.get()); |
} |
@@ -87,12 +106,15 @@ TEST_F(GpuMemoryBufferVideoFramePoolTest, NoTextureRGNoHardwareVideoFrame) { |
new MockGpuVideoAcceleratorFactories); |
scoped_ptr<GpuMemoryBufferVideoFramePool> gpu_memory_buffer_pool_ = |
make_scoped_ptr(new GpuMemoryBufferVideoFramePool( |
- media_message_loop_.task_runner(), mock_gpu_factories)); |
+ media_task_runner_, copy_task_runner_.get(), mock_gpu_factories)); |
EXPECT_CALL(*mock_gpu_factories.get(), IsTextureRGSupported()) |
.WillRepeatedly(testing::Return(false)); |
- scoped_refptr<VideoFrame> frame2 = |
- gpu_memory_buffer_pool_->MaybeCreateHardwareFrame(frame); |
+ scoped_refptr<VideoFrame> frame2; |
+ gpu_memory_buffer_pool_->MaybeCreateHardwareFrame( |
+ frame, base::Bind(MaybeCreateHardwareFrameCallback, &frame2)); |
+ RunUntilIdle(); |
+ |
EXPECT_EQ(frame.get(), frame2.get()); |
} |
@@ -102,15 +124,19 @@ TEST_F(GpuMemoryBufferVideoFramePoolTest, CreateOneHardwareFrame) { |
new MockGpuVideoAcceleratorFactories); |
scoped_ptr<GpuMemoryBufferVideoFramePool> gpu_memory_buffer_pool_ = |
make_scoped_ptr(new GpuMemoryBufferVideoFramePool( |
- media_message_loop_.task_runner(), mock_gpu_factories)); |
+ media_task_runner_, copy_task_runner_.get(), mock_gpu_factories)); |
EXPECT_CALL(*mock_gpu_factories.get(), GetGLES2Interface()) |
.WillRepeatedly(testing::Return(gles2_.get())); |
EXPECT_CALL(*mock_gpu_factories.get(), IsTextureRGSupported()) |
.WillRepeatedly(testing::Return(true)); |
- scoped_refptr<VideoFrame> frame = |
- gpu_memory_buffer_pool_->MaybeCreateHardwareFrame(software_frame); |
+ 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); |
} |
@@ -121,30 +147,40 @@ TEST_F(GpuMemoryBufferVideoFramePoolTest, ReuseFirstResource) { |
new MockGpuVideoAcceleratorFactories); |
scoped_ptr<GpuMemoryBufferVideoFramePool> gpu_memory_buffer_pool_ = |
make_scoped_ptr(new GpuMemoryBufferVideoFramePool( |
- media_message_loop_.task_runner(), mock_gpu_factories)); |
+ media_task_runner_, copy_task_runner_.get(), mock_gpu_factories)); |
EXPECT_CALL(*mock_gpu_factories.get(), GetGLES2Interface()) |
.WillRepeatedly(testing::Return(gles2_.get())); |
EXPECT_CALL(*mock_gpu_factories.get(), IsTextureRGSupported()) |
.WillRepeatedly(testing::Return(true)); |
- scoped_refptr<VideoFrame> frame = |
- gpu_memory_buffer_pool_->MaybeCreateHardwareFrame(software_frame); |
+ scoped_refptr<VideoFrame> frame; |
+ gpu_memory_buffer_pool_->MaybeCreateHardwareFrame( |
+ software_frame, base::Bind(MaybeCreateHardwareFrameCallback, &frame)); |
+ RunUntilIdle(); |
+ |
EXPECT_NE(software_frame.get(), frame.get()); |
gpu::Mailbox mailbox = frame->mailbox_holder(0).mailbox; |
unsigned sync_point = frame->mailbox_holder(0).sync_point; |
EXPECT_EQ(3u, gles2_->gen_textures); |
- scoped_refptr<VideoFrame> frame2 = |
- gpu_memory_buffer_pool_->MaybeCreateHardwareFrame(software_frame); |
+ scoped_refptr<VideoFrame> frame2; |
+ gpu_memory_buffer_pool_->MaybeCreateHardwareFrame( |
+ software_frame, base::Bind(MaybeCreateHardwareFrameCallback, &frame2)); |
+ RunUntilIdle(); |
+ |
EXPECT_NE(software_frame.get(), frame2.get()); |
EXPECT_NE(mailbox, frame2->mailbox_holder(0).mailbox); |
EXPECT_EQ(6u, gles2_->gen_textures); |
frame = nullptr; |
frame2 = nullptr; |
- base::RunLoop().RunUntilIdle(); // Run posted closures. |
- frame = gpu_memory_buffer_pool_->MaybeCreateHardwareFrame(software_frame); |
+ RunUntilIdle(); |
+ |
+ 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(frame->mailbox_holder(0).mailbox, mailbox); |
@@ -156,22 +192,27 @@ TEST_F(GpuMemoryBufferVideoFramePoolTest, DropResourceWhenSizeIsDifferent) { |
new MockGpuVideoAcceleratorFactories); |
scoped_ptr<GpuMemoryBufferVideoFramePool> gpu_memory_buffer_pool_ = |
make_scoped_ptr(new GpuMemoryBufferVideoFramePool( |
- media_message_loop_.task_runner(), mock_gpu_factories)); |
+ media_task_runner_, copy_task_runner_.get(), mock_gpu_factories)); |
EXPECT_CALL(*mock_gpu_factories.get(), GetGLES2Interface()) |
.WillRepeatedly(testing::Return(gles2_.get())); |
EXPECT_CALL(*mock_gpu_factories.get(), IsTextureRGSupported()) |
.WillRepeatedly(testing::Return(true)); |
- scoped_refptr<VideoFrame> frame = |
- gpu_memory_buffer_pool_->MaybeCreateHardwareFrame( |
- CreateTestYUVVideoFrame(10)); |
+ scoped_refptr<VideoFrame> frame; |
+ gpu_memory_buffer_pool_->MaybeCreateHardwareFrame( |
+ CreateTestYUVVideoFrame(10), |
+ base::Bind(MaybeCreateHardwareFrameCallback, &frame)); |
+ RunUntilIdle(); |
+ |
EXPECT_EQ(3u, gles2_->gen_textures); |
frame = nullptr; |
- base::RunLoop().RunUntilIdle(); // Run posted closures. |
- frame = gpu_memory_buffer_pool_->MaybeCreateHardwareFrame( |
- CreateTestYUVVideoFrame(4)); |
+ RunUntilIdle(); |
+ gpu_memory_buffer_pool_->MaybeCreateHardwareFrame( |
+ CreateTestYUVVideoFrame(4), |
+ base::Bind(MaybeCreateHardwareFrameCallback, &frame)); |
+ RunUntilIdle(); |
EXPECT_EQ(6u, gles2_->gen_textures); |
} |