1// Copyright 2013 The Chromium Authors. All rights reserved. 2// Use of this source code is governed by a BSD-style license that can be 3// found in the LICENSE file. 4 5#include "content/common/gpu/client/gpu_memory_buffer_impl_shm.h" 6 7#include "base/logging.h" 8 9namespace content { 10 11GpuMemoryBufferImplShm::GpuMemoryBufferImplShm( 12 gfx::Size size, unsigned internalformat) 13 : GpuMemoryBufferImpl(size, internalformat) { 14} 15 16GpuMemoryBufferImplShm::~GpuMemoryBufferImplShm() { 17} 18 19bool GpuMemoryBufferImplShm::Initialize(gfx::GpuMemoryBufferHandle handle) { 20 if (!base::SharedMemory::IsHandleValid(handle.handle)) 21 return false; 22 shared_memory_.reset(new base::SharedMemory(handle.handle, false)); 23 DCHECK(!shared_memory_->memory()); 24 return true; 25} 26 27bool GpuMemoryBufferImplShm::InitializeFromSharedMemory( 28 scoped_ptr<base::SharedMemory> shared_memory) { 29 shared_memory_ = shared_memory.Pass(); 30 DCHECK(!shared_memory_->memory()); 31 return true; 32} 33 34void GpuMemoryBufferImplShm::Map(AccessMode mode, void** vaddr) { 35 DCHECK(!mapped_); 36 *vaddr = NULL; 37 if (!shared_memory_->Map(size_.GetArea() * BytesPerPixel(internalformat_))) 38 return; 39 *vaddr = shared_memory_->memory(); 40 mapped_ = true; 41} 42 43void GpuMemoryBufferImplShm::Unmap() { 44 DCHECK(mapped_); 45 shared_memory_->Unmap(); 46 mapped_ = false; 47} 48 49gfx::GpuMemoryBufferHandle GpuMemoryBufferImplShm::GetHandle() const { 50 gfx::GpuMemoryBufferHandle handle; 51 handle.type = gfx::SHARED_MEMORY_BUFFER; 52 handle.handle = shared_memory_->handle(); 53 return handle; 54} 55 56} // namespace content 57