diff options
author | reveman <reveman@chromium.org> | 2015-10-26 22:39:43 -0700 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2015-10-27 05:40:41 +0000 |
commit | a8391ce197da44437521b0f4968f1c547dd13451 (patch) | |
tree | 1506fc0117c75ce4161fc2369e6bf10708e47c6b /cc | |
parent | 4ed661ed773385753764b97c68260c3b1627150c (diff) | |
download | chromium_src-a8391ce197da44437521b0f4968f1c547dd13451.zip chromium_src-a8391ce197da44437521b0f4968f1c547dd13451.tar.gz chromium_src-a8391ce197da44437521b0f4968f1c547dd13451.tar.bz2 |
content: Allow gfx::SHARED_MEMORY_BUFFER buffers to be imported.
This allows shared memory backed GpuMemoryBuffers to be imported.
Also makes sure we fail early if the native type doesn't match
the requested type.
BUG=538325
CQ_INCLUDE_TRYBOTS=tryserver.blink:linux_blink_rel
Review URL: https://codereview.chromium.org/1412083006
Cr-Commit-Position: refs/heads/master@{#356242}
Diffstat (limited to 'cc')
-rw-r--r-- | cc/test/test_gpu_memory_buffer_manager.cc | 23 |
1 files changed, 16 insertions, 7 deletions
diff --git a/cc/test/test_gpu_memory_buffer_manager.cc b/cc/test/test_gpu_memory_buffer_manager.cc index a37ff93..352a75c 100644 --- a/cc/test/test_gpu_memory_buffer_manager.cc +++ b/cc/test/test_gpu_memory_buffer_manager.cc @@ -16,16 +16,19 @@ class GpuMemoryBufferImpl : public gfx::GpuMemoryBuffer { public: GpuMemoryBufferImpl(const gfx::Size& size, gfx::BufferFormat format, - scoped_ptr<base::SharedMemory> shared_memory) + scoped_ptr<base::SharedMemory> shared_memory, + size_t offset) : size_(size), format_(format), shared_memory_(shared_memory.Pass()), + offset_(offset), mapped_(false) {} // Overridden from gfx::GpuMemoryBuffer: bool Map() override { DCHECK(!mapped_); - if (!shared_memory_->Map(gfx::BufferSizeForBufferFormat(size_, format_))) + if (!shared_memory_->Map(offset_ + + gfx::BufferSizeForBufferFormat(size_, format_))) return false; mapped_ = true; return true; @@ -33,7 +36,7 @@ class GpuMemoryBufferImpl : public gfx::GpuMemoryBuffer { void* memory(size_t plane) override { DCHECK(mapped_); DCHECK_LT(plane, gfx::NumberOfPlanesForBufferFormat(format_)); - return reinterpret_cast<uint8_t*>(shared_memory_->memory()) + + return reinterpret_cast<uint8_t*>(shared_memory_->memory()) + offset_ + gfx::BufferOffsetForBufferFormat(size_, format_, plane); } void Unmap() override { @@ -56,7 +59,7 @@ class GpuMemoryBufferImpl : public gfx::GpuMemoryBuffer { gfx::GpuMemoryBufferHandle handle; handle.type = gfx::SHARED_MEMORY_BUFFER; handle.handle = shared_memory_->handle(); - handle.offset = 0; + handle.offset = base::checked_cast<uint32_t>(offset_); return handle; } ClientBuffer AsClientBuffer() override { @@ -67,6 +70,7 @@ class GpuMemoryBufferImpl : public gfx::GpuMemoryBuffer { const gfx::Size size_; gfx::BufferFormat format_; scoped_ptr<base::SharedMemory> shared_memory_; + size_t offset_; bool mapped_; }; @@ -87,7 +91,7 @@ TestGpuMemoryBufferManager::AllocateGpuMemoryBuffer(const gfx::Size& size, if (!shared_memory->CreateAnonymous(buffer_size)) return nullptr; return make_scoped_ptr<gfx::GpuMemoryBuffer>( - new GpuMemoryBufferImpl(size, format, shared_memory.Pass())); + new GpuMemoryBufferImpl(size, format, shared_memory.Pass(), 0)); } scoped_ptr<gfx::GpuMemoryBuffer> @@ -95,8 +99,13 @@ TestGpuMemoryBufferManager::CreateGpuMemoryBufferFromHandle( const gfx::GpuMemoryBufferHandle& handle, const gfx::Size& size, gfx::BufferFormat format) { - NOTREACHED(); - return nullptr; + if (handle.type != gfx::SHARED_MEMORY_BUFFER) + return nullptr; + + return make_scoped_ptr<gfx::GpuMemoryBuffer>(new GpuMemoryBufferImpl( + size, format, + make_scoped_ptr(new base::SharedMemory(handle.handle, false)), + handle.offset)); } gfx::GpuMemoryBuffer* |