| 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);
|
| }
|
|
|
|
|