Home | History | Annotate | Download | only in client
      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 
      9 namespace content {
     10 
     11 GpuMemoryBufferImplShm::GpuMemoryBufferImplShm(
     12     gfx::Size size, unsigned internalformat)
     13     : GpuMemoryBufferImpl(size, internalformat) {
     14 }
     15 
     16 GpuMemoryBufferImplShm::~GpuMemoryBufferImplShm() {
     17 }
     18 
     19 bool 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 
     27 bool 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 
     34 void 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 
     43 void GpuMemoryBufferImplShm::Unmap() {
     44   DCHECK(mapped_);
     45   shared_memory_->Unmap();
     46   mapped_ = false;
     47 }
     48 
     49 gfx::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