Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(103)

Side by Side Diff: content/browser/renderer_host/media/video_capture_buffer_pool_unittest.cc

Issue 1267883002: Pass GpuMemoryBuffer backed VideoFrame from browser to renderer processes (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@gmbtracker-multiple
Patch Set: Rebase Created 5 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2013 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 // Unit test for VideoCaptureBufferPool. 5 // Unit test for VideoCaptureBufferPool.
6 6
7 #include "content/browser/renderer_host/media/video_capture_buffer_pool.h" 7 #include "content/browser/renderer_host/media/video_capture_buffer_pool.h"
8 8
9 #include "base/bind.h" 9 #include "base/bind.h"
10 #include "base/memory/ref_counted.h" 10 #include "base/memory/ref_counted.h"
(...skipping 106 matching lines...) Expand 10 before | Expand all | Expand 10 after
117 117
118 // This is a generic Buffer tracker 118 // This is a generic Buffer tracker
119 class Buffer { 119 class Buffer {
120 public: 120 public:
121 Buffer(const scoped_refptr<VideoCaptureBufferPool> pool, 121 Buffer(const scoped_refptr<VideoCaptureBufferPool> pool,
122 scoped_ptr<VideoCaptureBufferPool::BufferHandle> buffer_handle, 122 scoped_ptr<VideoCaptureBufferPool::BufferHandle> buffer_handle,
123 int id) 123 int id)
124 : id_(id), pool_(pool), buffer_handle_(buffer_handle.Pass()) {} 124 : id_(id), pool_(pool), buffer_handle_(buffer_handle.Pass()) {}
125 ~Buffer() { pool_->RelinquishProducerReservation(id()); } 125 ~Buffer() { pool_->RelinquishProducerReservation(id()); }
126 int id() const { return id_; } 126 int id() const { return id_; }
127 size_t size() { return buffer_handle_->size(); } 127 size_t mapped_size() { return buffer_handle_->mapped_size(); }
128 void* data() { return buffer_handle_->data(0); } 128 void* data() { return buffer_handle_->data(0); }
129 129
130 private: 130 private:
131 const int id_; 131 const int id_;
132 const scoped_refptr<VideoCaptureBufferPool> pool_; 132 const scoped_refptr<VideoCaptureBufferPool> pool_;
133 const scoped_ptr<VideoCaptureBufferPool::BufferHandle> buffer_handle_; 133 const scoped_ptr<VideoCaptureBufferPool::BufferHandle> buffer_handle_;
134 }; 134 };
135 135
136 VideoCaptureBufferPoolTest() 136 VideoCaptureBufferPoolTest()
137 : expected_dropped_id_(0), 137 : expected_dropped_id_(0),
(...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after
210 ASSERT_EQ(1.0 / kTestBufferPoolSize, pool_->GetBufferPoolUtilization()); 210 ASSERT_EQ(1.0 / kTestBufferPoolSize, pool_->GetBufferPoolUtilization());
211 scoped_ptr<Buffer> buffer2 = ReserveBuffer(size_lo, GetParam()); 211 scoped_ptr<Buffer> buffer2 = ReserveBuffer(size_lo, GetParam());
212 ASSERT_NE(nullptr, buffer2.get()); 212 ASSERT_NE(nullptr, buffer2.get());
213 ASSERT_EQ(2.0 / kTestBufferPoolSize, pool_->GetBufferPoolUtilization()); 213 ASSERT_EQ(2.0 / kTestBufferPoolSize, pool_->GetBufferPoolUtilization());
214 scoped_ptr<Buffer> buffer3 = ReserveBuffer(size_lo, GetParam()); 214 scoped_ptr<Buffer> buffer3 = ReserveBuffer(size_lo, GetParam());
215 ASSERT_NE(nullptr, buffer3.get()); 215 ASSERT_NE(nullptr, buffer3.get());
216 ASSERT_EQ(3.0 / kTestBufferPoolSize, pool_->GetBufferPoolUtilization()); 216 ASSERT_EQ(3.0 / kTestBufferPoolSize, pool_->GetBufferPoolUtilization());
217 217
218 // GMB backed frames have their platform and format specific allocations. 218 // GMB backed frames have their platform and format specific allocations.
219 if (GetParam().pixel_storage != media::PIXEL_STORAGE_GPUMEMORYBUFFER) { 219 if (GetParam().pixel_storage != media::PIXEL_STORAGE_GPUMEMORYBUFFER) {
220 ASSERT_LE(format_lo.ImageAllocationSize(), buffer1->size()); 220 ASSERT_LE(format_lo.ImageAllocationSize(), buffer1->mapped_size());
221 ASSERT_LE(format_lo.ImageAllocationSize(), buffer2->size()); 221 ASSERT_LE(format_lo.ImageAllocationSize(), buffer2->mapped_size());
222 ASSERT_LE(format_lo.ImageAllocationSize(), buffer3->size()); 222 ASSERT_LE(format_lo.ImageAllocationSize(), buffer3->mapped_size());
223 } 223 }
224 224
225 // Texture backed Frames cannot be manipulated via mapping. 225 // Texture backed Frames cannot be manipulated via mapping.
226 if (GetParam().pixel_storage != media::PIXEL_STORAGE_TEXTURE) { 226 if (GetParam().pixel_storage != media::PIXEL_STORAGE_TEXTURE) {
227 ASSERT_NE(nullptr, buffer1->data()); 227 ASSERT_NE(nullptr, buffer1->data());
228 ASSERT_NE(nullptr, buffer2->data()); 228 ASSERT_NE(nullptr, buffer2->data());
229 ASSERT_NE(nullptr, buffer3->data()); 229 ASSERT_NE(nullptr, buffer3->data());
230 } 230 }
231 // Touch the memory. 231 // Touch the memory.
232 if (buffer1->data() != nullptr) 232 if (buffer1->data() != nullptr)
233 memset(buffer1->data(), 0x11, buffer1->size()); 233 memset(buffer1->data(), 0x11, buffer1->mapped_size());
234 if (buffer2->data() != nullptr) 234 if (buffer2->data() != nullptr)
235 memset(buffer2->data(), 0x44, buffer2->size()); 235 memset(buffer2->data(), 0x44, buffer2->mapped_size());
236 if (buffer3->data() != nullptr) 236 if (buffer3->data() != nullptr)
237 memset(buffer3->data(), 0x77, buffer3->size()); 237 memset(buffer3->data(), 0x77, buffer3->mapped_size());
238 238
239 // Fourth buffer should fail. Buffer pool utilization should be at 100%. 239 // Fourth buffer should fail. Buffer pool utilization should be at 100%.
240 ASSERT_FALSE(ReserveBuffer(size_lo, GetParam())) << "Pool should be empty"; 240 ASSERT_FALSE(ReserveBuffer(size_lo, GetParam())) << "Pool should be empty";
241 ASSERT_EQ(1.0, pool_->GetBufferPoolUtilization()); 241 ASSERT_EQ(1.0, pool_->GetBufferPoolUtilization());
242 242
243 // Release 1st buffer and retry; this should succeed. 243 // Release 1st buffer and retry; this should succeed.
244 buffer1.reset(); 244 buffer1.reset();
245 ASSERT_EQ(2.0 / kTestBufferPoolSize, pool_->GetBufferPoolUtilization()); 245 ASSERT_EQ(2.0 / kTestBufferPoolSize, pool_->GetBufferPoolUtilization());
246 scoped_ptr<Buffer> buffer4 = ReserveBuffer(size_lo, GetParam()); 246 scoped_ptr<Buffer> buffer4 = ReserveBuffer(size_lo, GetParam());
247 ASSERT_NE(nullptr, buffer4.get()); 247 ASSERT_NE(nullptr, buffer4.get());
(...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after
319 ASSERT_EQ(1.0, pool_->GetBufferPoolUtilization()); 319 ASSERT_EQ(1.0, pool_->GetBufferPoolUtilization());
320 320
321 // Now try reallocation with different resolutions. We expect reallocation 321 // Now try reallocation with different resolutions. We expect reallocation
322 // to occur only when the old buffer is too small. 322 // to occur only when the old buffer is too small.
323 buffer2.reset(); 323 buffer2.reset();
324 ExpectDroppedId(buffer_id2); 324 ExpectDroppedId(buffer_id2);
325 ASSERT_EQ(2.0 / kTestBufferPoolSize, pool_->GetBufferPoolUtilization()); 325 ASSERT_EQ(2.0 / kTestBufferPoolSize, pool_->GetBufferPoolUtilization());
326 buffer2 = ReserveBuffer(size_hi, GetParam()); 326 buffer2 = ReserveBuffer(size_hi, GetParam());
327 ASSERT_NE(nullptr, buffer2.get()); 327 ASSERT_NE(nullptr, buffer2.get());
328 if (GetParam().pixel_storage != media::PIXEL_STORAGE_GPUMEMORYBUFFER) 328 if (GetParam().pixel_storage != media::PIXEL_STORAGE_GPUMEMORYBUFFER)
329 ASSERT_LE(format_hi.ImageAllocationSize(), buffer2->size()); 329 ASSERT_LE(format_hi.ImageAllocationSize(), buffer2->mapped_size());
330 ASSERT_EQ(3, buffer2->id()); 330 ASSERT_EQ(3, buffer2->id());
331 ASSERT_EQ(3.0 / kTestBufferPoolSize, pool_->GetBufferPoolUtilization()); 331 ASSERT_EQ(3.0 / kTestBufferPoolSize, pool_->GetBufferPoolUtilization());
332 void* const memory_pointer_hi = buffer2->data(); 332 void* const memory_pointer_hi = buffer2->data();
333 buffer2.reset(); // Frees it. 333 buffer2.reset(); // Frees it.
334 ExpectDroppedId(VideoCaptureBufferPool::kInvalidId); 334 ExpectDroppedId(VideoCaptureBufferPool::kInvalidId);
335 ASSERT_EQ(2.0 / kTestBufferPoolSize, pool_->GetBufferPoolUtilization()); 335 ASSERT_EQ(2.0 / kTestBufferPoolSize, pool_->GetBufferPoolUtilization());
336 buffer2 = ReserveBuffer(size_lo, GetParam()); 336 buffer2 = ReserveBuffer(size_lo, GetParam());
337 void* const memory_pointer_lo = buffer2->data(); 337 void* const memory_pointer_lo = buffer2->data();
338 ASSERT_EQ(memory_pointer_hi, memory_pointer_lo) 338 ASSERT_EQ(memory_pointer_hi, memory_pointer_lo)
339 << "Decrease in resolution should not reallocate buffer"; 339 << "Decrease in resolution should not reallocate buffer";
340 ASSERT_NE(nullptr, buffer2.get()); 340 ASSERT_NE(nullptr, buffer2.get());
341 ASSERT_EQ(3, buffer2->id()); 341 ASSERT_EQ(3, buffer2->id());
342 if (GetParam().pixel_storage != media::PIXEL_STORAGE_GPUMEMORYBUFFER) 342 if (GetParam().pixel_storage != media::PIXEL_STORAGE_GPUMEMORYBUFFER)
343 ASSERT_LE(format_lo.ImageAllocationSize(), buffer2->size()); 343 ASSERT_LE(format_lo.ImageAllocationSize(), buffer2->mapped_size());
344 ASSERT_EQ(3.0 / kTestBufferPoolSize, pool_->GetBufferPoolUtilization()); 344 ASSERT_EQ(3.0 / kTestBufferPoolSize, pool_->GetBufferPoolUtilization());
345 ASSERT_FALSE(ReserveBuffer(size_lo, GetParam())) << "Pool should be empty"; 345 ASSERT_FALSE(ReserveBuffer(size_lo, GetParam())) << "Pool should be empty";
346 ASSERT_EQ(1.0, pool_->GetBufferPoolUtilization()); 346 ASSERT_EQ(1.0, pool_->GetBufferPoolUtilization());
347 347
348 // Tear down the pool_, writing into the buffers. The buffer should preserve 348 // Tear down the pool_, writing into the buffers. The buffer should preserve
349 // the lifetime of the underlying memory. 349 // the lifetime of the underlying memory.
350 buffer3.reset(); 350 buffer3.reset();
351 ASSERT_EQ(2.0 / kTestBufferPoolSize, pool_->GetBufferPoolUtilization()); 351 ASSERT_EQ(2.0 / kTestBufferPoolSize, pool_->GetBufferPoolUtilization());
352 pool_ = NULL; 352 pool_ = NULL;
353 353
354 // Touch the memory. 354 // Touch the memory.
355 if (buffer2->data() != nullptr) 355 if (buffer2->data() != nullptr)
356 memset(buffer2->data(), 0x22, buffer2->size()); 356 memset(buffer2->data(), 0x22, buffer2->mapped_size());
357 if (buffer4->data() != nullptr) 357 if (buffer4->data() != nullptr)
358 memset(buffer4->data(), 0x55, buffer4->size()); 358 memset(buffer4->data(), 0x55, buffer4->mapped_size());
359 buffer2.reset(); 359 buffer2.reset();
360 360
361 if (buffer4->data() != nullptr) 361 if (buffer4->data() != nullptr)
362 memset(buffer4->data(), 0x77, buffer4->size()); 362 memset(buffer4->data(), 0x77, buffer4->mapped_size());
363 buffer4.reset(); 363 buffer4.reset();
364 } 364 }
365 365
366 INSTANTIATE_TEST_CASE_P(, 366 INSTANTIATE_TEST_CASE_P(,
367 VideoCaptureBufferPoolTest, 367 VideoCaptureBufferPoolTest,
368 testing::ValuesIn(kCapturePixelFormatAndStorages)); 368 testing::ValuesIn(kCapturePixelFormatAndStorages));
369 369
370 } // namespace content 370 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698