| OLD | NEW |
| 1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 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 <stdint.h> | 5 #include <stdint.h> |
| 6 | 6 |
| 7 #include "base/bind.h" | 7 #include "base/bind.h" |
| 8 #include "base/test/test_simple_task_runner.h" | 8 #include "base/test/test_simple_task_runner.h" |
| 9 #include "base/thread_task_runner_handle.h" | 9 #include "base/thread_task_runner_handle.h" |
| 10 #include "gpu/command_buffer/client/gles2_interface_stub.h" | 10 #include "gpu/command_buffer/client/gles2_interface_stub.h" |
| 11 #include "media/base/video_frame.h" | 11 #include "media/base/video_frame.h" |
| 12 #include "media/renderers/mock_gpu_video_accelerator_factories.h" | 12 #include "media/renderers/mock_gpu_video_accelerator_factories.h" |
| 13 #include "media/video/gpu_memory_buffer_video_frame_pool.h" | 13 #include "media/video/gpu_memory_buffer_video_frame_copier.h" |
| 14 #include "testing/gmock/include/gmock/gmock.h" | 14 #include "testing/gmock/include/gmock/gmock.h" |
| 15 | 15 |
| 16 namespace media { | 16 namespace media { |
| 17 | 17 |
| 18 namespace { | 18 namespace { |
| 19 class TestGLES2Interface : public gpu::gles2::GLES2InterfaceStub { | 19 class TestGLES2Interface : public gpu::gles2::GLES2InterfaceStub { |
| 20 public: | 20 public: |
| 21 unsigned gen_textures = 0u; | 21 unsigned gen_textures = 0u; |
| 22 void GenTextures(GLsizei n, GLuint* textures) override { | 22 void GenTextures(GLsizei n, GLuint* textures) override { |
| 23 DCHECK_EQ(1, n); | 23 DCHECK_EQ(1, n); |
| (...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 59 } | 59 } |
| 60 | 60 |
| 61 private: | 61 private: |
| 62 uint64_t next_fence_sync_ = 1u; | 62 uint64_t next_fence_sync_ = 1u; |
| 63 uint64_t flushed_fence_sync_ = 0u; | 63 uint64_t flushed_fence_sync_ = 0u; |
| 64 unsigned mailbox_ = 0u; | 64 unsigned mailbox_ = 0u; |
| 65 }; | 65 }; |
| 66 | 66 |
| 67 } // unnamed namespace | 67 } // unnamed namespace |
| 68 | 68 |
| 69 class GpuMemoryBufferVideoFramePoolTest : public ::testing::Test { | 69 class GpuMemoryBufferVideoFrameCopierTest : public ::testing::Test { |
| 70 public: | 70 public: |
| 71 GpuMemoryBufferVideoFramePoolTest() {} | 71 GpuMemoryBufferVideoFrameCopierTest() {} |
| 72 void SetUp() override { | 72 void SetUp() override { |
| 73 gles2_.reset(new TestGLES2Interface); | 73 gles2_.reset(new TestGLES2Interface); |
| 74 media_task_runner_ = make_scoped_refptr(new base::TestSimpleTaskRunner); | 74 media_task_runner_ = make_scoped_refptr(new base::TestSimpleTaskRunner); |
| 75 copy_task_runner_ = make_scoped_refptr(new base::TestSimpleTaskRunner); | 75 copy_task_runner_ = make_scoped_refptr(new base::TestSimpleTaskRunner); |
| 76 media_task_runner_handle_.reset( | 76 media_task_runner_handle_.reset( |
| 77 new base::ThreadTaskRunnerHandle(media_task_runner_)); | 77 new base::ThreadTaskRunnerHandle(media_task_runner_)); |
| 78 mock_gpu_factories_.reset( | 78 mock_gpu_factories_.reset( |
| 79 new MockGpuVideoAcceleratorFactories(gles2_.get())); | 79 new MockGpuVideoAcceleratorFactories(gles2_.get())); |
| 80 gpu_memory_buffer_pool_.reset(new GpuMemoryBufferVideoFramePool( | 80 gpu_memory_buffer_copier_.reset(new GpuMemoryBufferVideoFrameCopier( |
| 81 media_task_runner_, copy_task_runner_.get(), | 81 media_task_runner_, copy_task_runner_.get(), |
| 82 mock_gpu_factories_.get())); | 82 mock_gpu_factories_.get())); |
| 83 } | 83 } |
| 84 | 84 |
| 85 void TearDown() override { | 85 void TearDown() override { |
| 86 gpu_memory_buffer_pool_.reset(); | 86 gpu_memory_buffer_copier_.reset(); |
| 87 RunUntilIdle(); | 87 RunUntilIdle(); |
| 88 mock_gpu_factories_.reset(); | 88 mock_gpu_factories_.reset(); |
| 89 } | 89 } |
| 90 | 90 |
| 91 void RunUntilIdle() { | 91 void RunUntilIdle() { |
| 92 media_task_runner_->RunUntilIdle(); | 92 media_task_runner_->RunUntilIdle(); |
| 93 copy_task_runner_->RunUntilIdle(); | 93 copy_task_runner_->RunUntilIdle(); |
| 94 media_task_runner_->RunUntilIdle(); | 94 media_task_runner_->RunUntilIdle(); |
| 95 } | 95 } |
| 96 | 96 |
| (...skipping 19 matching lines...) Expand all Loading... |
| 116 y_data, // y_data | 116 y_data, // y_data |
| 117 u_data, // u_data | 117 u_data, // u_data |
| 118 v_data, // v_data | 118 v_data, // v_data |
| 119 base::TimeDelta()); // timestamp | 119 base::TimeDelta()); // timestamp |
| 120 EXPECT_TRUE(video_frame); | 120 EXPECT_TRUE(video_frame); |
| 121 return video_frame; | 121 return video_frame; |
| 122 } | 122 } |
| 123 | 123 |
| 124 protected: | 124 protected: |
| 125 scoped_ptr<MockGpuVideoAcceleratorFactories> mock_gpu_factories_; | 125 scoped_ptr<MockGpuVideoAcceleratorFactories> mock_gpu_factories_; |
| 126 scoped_ptr<GpuMemoryBufferVideoFramePool> gpu_memory_buffer_pool_; | 126 scoped_ptr<GpuMemoryBufferVideoFrameCopier> gpu_memory_buffer_copier_; |
| 127 scoped_refptr<base::TestSimpleTaskRunner> media_task_runner_; | 127 scoped_refptr<base::TestSimpleTaskRunner> media_task_runner_; |
| 128 scoped_refptr<base::TestSimpleTaskRunner> copy_task_runner_; | 128 scoped_refptr<base::TestSimpleTaskRunner> copy_task_runner_; |
| 129 // GpuMemoryBufferVideoFramePool uses BindToCurrentLoop(), which requires | 129 // GpuMemoryBufferVideoFramePool uses BindToCurrentLoop(), which requires |
| 130 // ThreadTaskRunnerHandle initialization. | 130 // ThreadTaskRunnerHandle initialization. |
| 131 scoped_ptr<base::ThreadTaskRunnerHandle> media_task_runner_handle_; | 131 scoped_ptr<base::ThreadTaskRunnerHandle> media_task_runner_handle_; |
| 132 scoped_ptr<TestGLES2Interface> gles2_; | 132 scoped_ptr<TestGLES2Interface> gles2_; |
| 133 }; | 133 }; |
| 134 | 134 |
| 135 void MaybeCreateHardwareFrameCallback( | 135 void MaybeCreateHardwareFrameCallback( |
| 136 scoped_refptr<VideoFrame>* video_frame_output, | 136 scoped_refptr<VideoFrame>* video_frame_output, |
| 137 const scoped_refptr<VideoFrame>& video_frame) { | 137 const scoped_refptr<VideoFrame>& video_frame) { |
| 138 *video_frame_output = video_frame; | 138 *video_frame_output = video_frame; |
| 139 } | 139 } |
| 140 | 140 |
| 141 TEST_F(GpuMemoryBufferVideoFramePoolTest, VideoFrameOutputFormatUnknown) { | 141 TEST_F(GpuMemoryBufferVideoFrameCopierTest, VideoFrameOutputFormatUnknown) { |
| 142 scoped_refptr<VideoFrame> software_frame = CreateTestYUVVideoFrame(10); | 142 scoped_refptr<VideoFrame> software_frame = CreateTestYUVVideoFrame(10); |
| 143 mock_gpu_factories_->SetVideoFrameOutputFormat(PIXEL_FORMAT_UNKNOWN); | 143 mock_gpu_factories_->SetVideoFrameOutputFormat(PIXEL_FORMAT_UNKNOWN); |
| 144 scoped_refptr<VideoFrame> frame; | 144 scoped_refptr<VideoFrame> frame; |
| 145 gpu_memory_buffer_pool_->MaybeCreateHardwareFrame( | 145 gpu_memory_buffer_copier_->MaybeCreateHardwareFrame( |
| 146 software_frame, base::Bind(MaybeCreateHardwareFrameCallback, &frame)); | 146 software_frame, base::Bind(MaybeCreateHardwareFrameCallback, &frame)); |
| 147 RunUntilIdle(); | 147 RunUntilIdle(); |
| 148 | 148 |
| 149 EXPECT_EQ(software_frame.get(), frame.get()); | 149 EXPECT_EQ(software_frame.get(), frame.get()); |
| 150 } | 150 } |
| 151 | 151 |
| 152 TEST_F(GpuMemoryBufferVideoFramePoolTest, CreateOneHardwareFrame) { | 152 TEST_F(GpuMemoryBufferVideoFrameCopierTest, CreateOneHardwareFrame) { |
| 153 scoped_refptr<VideoFrame> software_frame = CreateTestYUVVideoFrame(10); | 153 scoped_refptr<VideoFrame> software_frame = CreateTestYUVVideoFrame(10); |
| 154 scoped_refptr<VideoFrame> frame; | 154 scoped_refptr<VideoFrame> frame; |
| 155 gpu_memory_buffer_pool_->MaybeCreateHardwareFrame( | 155 gpu_memory_buffer_copier_->MaybeCreateHardwareFrame( |
| 156 software_frame, base::Bind(MaybeCreateHardwareFrameCallback, &frame)); | 156 software_frame, base::Bind(MaybeCreateHardwareFrameCallback, &frame)); |
| 157 | 157 |
| 158 RunUntilIdle(); | 158 RunUntilIdle(); |
| 159 | 159 |
| 160 EXPECT_NE(software_frame.get(), frame.get()); | 160 EXPECT_NE(software_frame.get(), frame.get()); |
| 161 EXPECT_EQ(3u, gles2_->gen_textures); | 161 EXPECT_EQ(3u, gles2_->gen_textures); |
| 162 } | 162 } |
| 163 | 163 |
| 164 TEST_F(GpuMemoryBufferVideoFramePoolTest, ReuseFirstResource) { | 164 TEST_F(GpuMemoryBufferVideoFrameCopierTest, ReuseFirstResource) { |
| 165 scoped_refptr<VideoFrame> software_frame = CreateTestYUVVideoFrame(10); | 165 scoped_refptr<VideoFrame> software_frame = CreateTestYUVVideoFrame(10); |
| 166 scoped_refptr<VideoFrame> frame; | 166 scoped_refptr<VideoFrame> frame; |
| 167 gpu_memory_buffer_pool_->MaybeCreateHardwareFrame( | 167 gpu_memory_buffer_copier_->MaybeCreateHardwareFrame( |
| 168 software_frame, base::Bind(MaybeCreateHardwareFrameCallback, &frame)); | 168 software_frame, base::Bind(MaybeCreateHardwareFrameCallback, &frame)); |
| 169 RunUntilIdle(); | 169 RunUntilIdle(); |
| 170 | 170 |
| 171 EXPECT_NE(software_frame.get(), frame.get()); | 171 EXPECT_NE(software_frame.get(), frame.get()); |
| 172 gpu::Mailbox mailbox = frame->mailbox_holder(0).mailbox; | 172 gpu::Mailbox mailbox = frame->mailbox_holder(0).mailbox; |
| 173 const gpu::SyncToken sync_token = frame->mailbox_holder(0).sync_token; | 173 const gpu::SyncToken sync_token = frame->mailbox_holder(0).sync_token; |
| 174 EXPECT_EQ(3u, gles2_->gen_textures); | 174 EXPECT_EQ(3u, gles2_->gen_textures); |
| 175 | 175 |
| 176 scoped_refptr<VideoFrame> frame2; | 176 scoped_refptr<VideoFrame> frame2; |
| 177 gpu_memory_buffer_pool_->MaybeCreateHardwareFrame( | 177 gpu_memory_buffer_copier_->MaybeCreateHardwareFrame( |
| 178 software_frame, base::Bind(MaybeCreateHardwareFrameCallback, &frame2)); | 178 software_frame, base::Bind(MaybeCreateHardwareFrameCallback, &frame2)); |
| 179 RunUntilIdle(); | 179 RunUntilIdle(); |
| 180 | 180 |
| 181 EXPECT_NE(software_frame.get(), frame2.get()); | 181 EXPECT_NE(software_frame.get(), frame2.get()); |
| 182 EXPECT_NE(mailbox, frame2->mailbox_holder(0).mailbox); | 182 EXPECT_NE(mailbox, frame2->mailbox_holder(0).mailbox); |
| 183 EXPECT_EQ(6u, gles2_->gen_textures); | 183 EXPECT_EQ(6u, gles2_->gen_textures); |
| 184 | 184 |
| 185 frame = nullptr; | 185 frame = nullptr; |
| 186 frame2 = nullptr; | 186 frame2 = nullptr; |
| 187 RunUntilIdle(); | 187 RunUntilIdle(); |
| 188 | 188 |
| 189 gpu_memory_buffer_pool_->MaybeCreateHardwareFrame( | 189 gpu_memory_buffer_copier_->MaybeCreateHardwareFrame( |
| 190 software_frame, base::Bind(MaybeCreateHardwareFrameCallback, &frame)); | 190 software_frame, base::Bind(MaybeCreateHardwareFrameCallback, &frame)); |
| 191 RunUntilIdle(); | 191 RunUntilIdle(); |
| 192 | 192 |
| 193 EXPECT_NE(software_frame.get(), frame.get()); | 193 EXPECT_NE(software_frame.get(), frame.get()); |
| 194 EXPECT_EQ(6u, gles2_->gen_textures); | 194 EXPECT_EQ(6u, gles2_->gen_textures); |
| 195 EXPECT_EQ(frame->mailbox_holder(0).mailbox, mailbox); | 195 EXPECT_EQ(frame->mailbox_holder(0).mailbox, mailbox); |
| 196 EXPECT_NE(frame->mailbox_holder(0).sync_token, sync_token); | 196 EXPECT_NE(frame->mailbox_holder(0).sync_token, sync_token); |
| 197 } | 197 } |
| 198 | 198 |
| 199 TEST_F(GpuMemoryBufferVideoFramePoolTest, DoNotReuseInUse) { | 199 TEST_F(GpuMemoryBufferVideoFrameCopierTest, DoNotReuseInUse) { |
| 200 scoped_refptr<VideoFrame> software_frame = CreateTestYUVVideoFrame(10); | 200 scoped_refptr<VideoFrame> software_frame = CreateTestYUVVideoFrame(10); |
| 201 scoped_refptr<VideoFrame> frame; | 201 scoped_refptr<VideoFrame> frame; |
| 202 scoped_refptr<VideoFrame> frame2; | 202 scoped_refptr<VideoFrame> frame2; |
| 203 | 203 |
| 204 // Allocate a frame. | 204 // Allocate a frame. |
| 205 gpu_memory_buffer_pool_->MaybeCreateHardwareFrame( | 205 gpu_memory_buffer_copier_->MaybeCreateHardwareFrame( |
| 206 software_frame, base::Bind(MaybeCreateHardwareFrameCallback, &frame)); | 206 software_frame, base::Bind(MaybeCreateHardwareFrameCallback, &frame)); |
| 207 RunUntilIdle(); | 207 RunUntilIdle(); |
| 208 EXPECT_NE(software_frame.get(), frame.get()); | 208 EXPECT_NE(software_frame.get(), frame.get()); |
| 209 gpu::Mailbox mailbox = frame->mailbox_holder(0).mailbox; | 209 gpu::Mailbox mailbox = frame->mailbox_holder(0).mailbox; |
| 210 const gpu::SyncToken sync_token = frame->mailbox_holder(0).sync_token; | 210 const gpu::SyncToken sync_token = frame->mailbox_holder(0).sync_token; |
| 211 EXPECT_EQ(3u, gles2_->gen_textures); | 211 EXPECT_EQ(3u, gles2_->gen_textures); |
| 212 | 212 |
| 213 // Allocate a second frame. | 213 // Allocate a second frame. |
| 214 gpu_memory_buffer_pool_->MaybeCreateHardwareFrame( | 214 gpu_memory_buffer_copier_->MaybeCreateHardwareFrame( |
| 215 software_frame, base::Bind(MaybeCreateHardwareFrameCallback, &frame2)); | 215 software_frame, base::Bind(MaybeCreateHardwareFrameCallback, &frame2)); |
| 216 RunUntilIdle(); | 216 RunUntilIdle(); |
| 217 EXPECT_NE(software_frame.get(), frame2.get()); | 217 EXPECT_NE(software_frame.get(), frame2.get()); |
| 218 EXPECT_NE(mailbox, frame2->mailbox_holder(0).mailbox); | 218 EXPECT_NE(mailbox, frame2->mailbox_holder(0).mailbox); |
| 219 EXPECT_EQ(6u, gles2_->gen_textures); | 219 EXPECT_EQ(6u, gles2_->gen_textures); |
| 220 | 220 |
| 221 // Allow the frames to be recycled. | 221 // Allow the frames to be recycled. |
| 222 frame = nullptr; | 222 frame = nullptr; |
| 223 frame2 = nullptr; | 223 frame2 = nullptr; |
| 224 RunUntilIdle(); | 224 RunUntilIdle(); |
| 225 | 225 |
| 226 // Set all buffers to be in use, so the next hardware frame will require | 226 // Set all buffers to be in use, so the next hardware frame will require |
| 227 // a new allocation. | 227 // a new allocation. |
| 228 mock_gpu_factories_->SetGpuMemoryBuffersInUseByMacOSWindowServer(true); | 228 mock_gpu_factories_->SetGpuMemoryBuffersInUseByMacOSWindowServer(true); |
| 229 gpu_memory_buffer_pool_->MaybeCreateHardwareFrame( | 229 gpu_memory_buffer_copier_->MaybeCreateHardwareFrame( |
| 230 software_frame, base::Bind(MaybeCreateHardwareFrameCallback, &frame)); | 230 software_frame, base::Bind(MaybeCreateHardwareFrameCallback, &frame)); |
| 231 RunUntilIdle(); | 231 RunUntilIdle(); |
| 232 EXPECT_NE(software_frame.get(), frame.get()); | 232 EXPECT_NE(software_frame.get(), frame.get()); |
| 233 EXPECT_EQ(9u, gles2_->gen_textures); | 233 EXPECT_EQ(9u, gles2_->gen_textures); |
| 234 EXPECT_NE(frame->mailbox_holder(0).mailbox, mailbox); | 234 EXPECT_NE(frame->mailbox_holder(0).mailbox, mailbox); |
| 235 EXPECT_NE(frame->mailbox_holder(0).sync_token, sync_token); | 235 EXPECT_NE(frame->mailbox_holder(0).sync_token, sync_token); |
| 236 | 236 |
| 237 // Set the buffers no longer in use, so no new allocations will be made. | 237 // Set the buffers no longer in use, so no new allocations will be made. |
| 238 mock_gpu_factories_->SetGpuMemoryBuffersInUseByMacOSWindowServer(false); | 238 mock_gpu_factories_->SetGpuMemoryBuffersInUseByMacOSWindowServer(false); |
| 239 gpu_memory_buffer_pool_->MaybeCreateHardwareFrame( | 239 gpu_memory_buffer_copier_->MaybeCreateHardwareFrame( |
| 240 software_frame, base::Bind(MaybeCreateHardwareFrameCallback, &frame2)); | 240 software_frame, base::Bind(MaybeCreateHardwareFrameCallback, &frame2)); |
| 241 RunUntilIdle(); | 241 RunUntilIdle(); |
| 242 EXPECT_NE(software_frame.get(), frame2.get()); | 242 EXPECT_NE(software_frame.get(), frame2.get()); |
| 243 EXPECT_EQ(9u, gles2_->gen_textures); | 243 EXPECT_EQ(9u, gles2_->gen_textures); |
| 244 EXPECT_NE(frame->mailbox_holder(0).mailbox, mailbox); | 244 EXPECT_NE(frame->mailbox_holder(0).mailbox, mailbox); |
| 245 EXPECT_NE(frame->mailbox_holder(0).sync_token, sync_token); | 245 EXPECT_NE(frame->mailbox_holder(0).sync_token, sync_token); |
| 246 } | 246 } |
| 247 | 247 |
| 248 TEST_F(GpuMemoryBufferVideoFramePoolTest, DropResourceWhenSizeIsDifferent) { | 248 TEST_F(GpuMemoryBufferVideoFrameCopierTest, DropResourceWhenSizeIsDifferent) { |
| 249 scoped_refptr<VideoFrame> frame; | 249 scoped_refptr<VideoFrame> frame; |
| 250 gpu_memory_buffer_pool_->MaybeCreateHardwareFrame( | 250 gpu_memory_buffer_copier_->MaybeCreateHardwareFrame( |
| 251 CreateTestYUVVideoFrame(10), | 251 CreateTestYUVVideoFrame(10), |
| 252 base::Bind(MaybeCreateHardwareFrameCallback, &frame)); | 252 base::Bind(MaybeCreateHardwareFrameCallback, &frame)); |
| 253 RunUntilIdle(); | 253 RunUntilIdle(); |
| 254 | 254 |
| 255 EXPECT_EQ(3u, gles2_->gen_textures); | 255 EXPECT_EQ(3u, gles2_->gen_textures); |
| 256 | 256 |
| 257 frame = nullptr; | 257 frame = nullptr; |
| 258 RunUntilIdle(); | 258 RunUntilIdle(); |
| 259 gpu_memory_buffer_pool_->MaybeCreateHardwareFrame( | 259 gpu_memory_buffer_copier_->MaybeCreateHardwareFrame( |
| 260 CreateTestYUVVideoFrame(4), | 260 CreateTestYUVVideoFrame(4), |
| 261 base::Bind(MaybeCreateHardwareFrameCallback, &frame)); | 261 base::Bind(MaybeCreateHardwareFrameCallback, &frame)); |
| 262 RunUntilIdle(); | 262 RunUntilIdle(); |
| 263 EXPECT_EQ(6u, gles2_->gen_textures); | 263 EXPECT_EQ(6u, gles2_->gen_textures); |
| 264 } | 264 } |
| 265 | 265 |
| 266 TEST_F(GpuMemoryBufferVideoFramePoolTest, CreateOneHardwareUYUVFrame) { | 266 TEST_F(GpuMemoryBufferVideoFrameCopierTest, CreateOneHardwareUYUVFrame) { |
| 267 scoped_refptr<VideoFrame> software_frame = CreateTestYUVVideoFrame(10); | 267 scoped_refptr<VideoFrame> software_frame = CreateTestYUVVideoFrame(10); |
| 268 scoped_refptr<VideoFrame> frame; | 268 scoped_refptr<VideoFrame> frame; |
| 269 mock_gpu_factories_->SetVideoFrameOutputFormat(PIXEL_FORMAT_UYVY); | 269 mock_gpu_factories_->SetVideoFrameOutputFormat(PIXEL_FORMAT_UYVY); |
| 270 gpu_memory_buffer_pool_->MaybeCreateHardwareFrame( | 270 gpu_memory_buffer_copier_->MaybeCreateHardwareFrame( |
| 271 software_frame, base::Bind(MaybeCreateHardwareFrameCallback, &frame)); | 271 software_frame, base::Bind(MaybeCreateHardwareFrameCallback, &frame)); |
| 272 | 272 |
| 273 RunUntilIdle(); | 273 RunUntilIdle(); |
| 274 | 274 |
| 275 EXPECT_NE(software_frame.get(), frame.get()); | 275 EXPECT_NE(software_frame.get(), frame.get()); |
| 276 EXPECT_EQ(1u, gles2_->gen_textures); | 276 EXPECT_EQ(1u, gles2_->gen_textures); |
| 277 EXPECT_TRUE(frame->metadata()->IsTrue( | 277 EXPECT_TRUE(frame->metadata()->IsTrue( |
| 278 media::VideoFrameMetadata::READ_LOCK_FENCES_ENABLED)); | 278 media::VideoFrameMetadata::READ_LOCK_FENCES_ENABLED)); |
| 279 } | 279 } |
| 280 | 280 |
| 281 TEST_F(GpuMemoryBufferVideoFramePoolTest, CreateOneHardwareNV12Frame) { | 281 TEST_F(GpuMemoryBufferVideoFrameCopierTest, CreateOneHardwareNV12Frame) { |
| 282 scoped_refptr<VideoFrame> software_frame = CreateTestYUVVideoFrame(10); | 282 scoped_refptr<VideoFrame> software_frame = CreateTestYUVVideoFrame(10); |
| 283 scoped_refptr<VideoFrame> frame; | 283 scoped_refptr<VideoFrame> frame; |
| 284 mock_gpu_factories_->SetVideoFrameOutputFormat(PIXEL_FORMAT_NV12); | 284 mock_gpu_factories_->SetVideoFrameOutputFormat(PIXEL_FORMAT_NV12); |
| 285 gpu_memory_buffer_pool_->MaybeCreateHardwareFrame( | 285 gpu_memory_buffer_copier_->MaybeCreateHardwareFrame( |
| 286 software_frame, base::Bind(MaybeCreateHardwareFrameCallback, &frame)); | 286 software_frame, base::Bind(MaybeCreateHardwareFrameCallback, &frame)); |
| 287 | 287 |
| 288 RunUntilIdle(); | 288 RunUntilIdle(); |
| 289 | 289 |
| 290 EXPECT_NE(software_frame.get(), frame.get()); | 290 EXPECT_NE(software_frame.get(), frame.get()); |
| 291 EXPECT_EQ(1u, gles2_->gen_textures); | 291 EXPECT_EQ(1u, gles2_->gen_textures); |
| 292 EXPECT_TRUE(frame->metadata()->IsTrue( | 292 EXPECT_TRUE(frame->metadata()->IsTrue( |
| 293 media::VideoFrameMetadata::READ_LOCK_FENCES_ENABLED)); | 293 media::VideoFrameMetadata::READ_LOCK_FENCES_ENABLED)); |
| 294 } | 294 } |
| 295 | 295 |
| 296 // AllocateGpuMemoryBuffer can return null (e.g: when the GPU process is down). | 296 // AllocateGpuMemoryBuffer can return null (e.g: when the GPU process is down). |
| 297 // This test checks that in that case we don't crash and still create the | 297 // This test checks that in that case we don't crash and don't copy it to |
| 298 // textures. | 298 // VideoFrame backed native texture. |
| 299 TEST_F(GpuMemoryBufferVideoFramePoolTest, AllocateGpuMemoryBufferFail) { | 299 TEST_F(GpuMemoryBufferVideoFrameCopierTest, AllocateGpuMemoryBufferFail) { |
| 300 scoped_refptr<VideoFrame> software_frame = CreateTestYUVVideoFrame(10); | 300 scoped_refptr<VideoFrame> software_frame = CreateTestYUVVideoFrame(10); |
| 301 scoped_refptr<VideoFrame> frame; | 301 scoped_refptr<VideoFrame> frame; |
| 302 mock_gpu_factories_->SetFailToAllocateGpuMemoryBufferForTesting(true); | 302 mock_gpu_factories_->SetFailToAllocateGpuMemoryBufferForTesting(true); |
| 303 gpu_memory_buffer_pool_->MaybeCreateHardwareFrame( | 303 gpu_memory_buffer_copier_->MaybeCreateHardwareFrame( |
| 304 software_frame, base::Bind(MaybeCreateHardwareFrameCallback, &frame)); | 304 software_frame, base::Bind(MaybeCreateHardwareFrameCallback, &frame)); |
| 305 | 305 |
| 306 RunUntilIdle(); | 306 RunUntilIdle(); |
| 307 | 307 |
| 308 EXPECT_NE(software_frame.get(), frame.get()); | 308 EXPECT_EQ(software_frame.get(), frame.get()); |
| 309 EXPECT_EQ(3u, gles2_->gen_textures); | 309 EXPECT_EQ(0u, gles2_->gen_textures); |
| 310 } | 310 } |
| 311 | 311 |
| 312 } // namespace media | 312 } // namespace media |
| OLD | NEW |