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.h"
      6 
      7 #include "content/common/gpu/client/gpu_memory_buffer_impl_shm.h"
      8 
      9 namespace content {
     10 
     11 // static
     12 scoped_ptr<GpuMemoryBufferImpl> GpuMemoryBufferImpl::Create(
     13     const gfx::Size& size,
     14     unsigned internalformat,
     15     unsigned usage) {
     16   if (GpuMemoryBufferImplShm::IsConfigurationSupported(
     17           size, internalformat, usage)) {
     18     scoped_ptr<GpuMemoryBufferImplShm> buffer(
     19         new GpuMemoryBufferImplShm(size, internalformat));
     20     if (!buffer->Initialize())
     21       return scoped_ptr<GpuMemoryBufferImpl>();
     22 
     23     return buffer.PassAs<GpuMemoryBufferImpl>();
     24   }
     25 
     26   return scoped_ptr<GpuMemoryBufferImpl>();
     27 }
     28 
     29 // static
     30 void GpuMemoryBufferImpl::AllocateForChildProcess(
     31     const gfx::Size& size,
     32     unsigned internalformat,
     33     unsigned usage,
     34     base::ProcessHandle child_process,
     35     const AllocationCallback& callback) {
     36   if (GpuMemoryBufferImplShm::IsConfigurationSupported(
     37           size, internalformat, usage)) {
     38     GpuMemoryBufferImplShm::AllocateSharedMemoryForChildProcess(
     39         size, internalformat, child_process, callback);
     40     return;
     41   }
     42 
     43   callback.Run(gfx::GpuMemoryBufferHandle());
     44 }
     45 
     46 // static
     47 scoped_ptr<GpuMemoryBufferImpl> GpuMemoryBufferImpl::CreateFromHandle(
     48     gfx::GpuMemoryBufferHandle handle,
     49     const gfx::Size& size,
     50     unsigned internalformat) {
     51   switch (handle.type) {
     52     case gfx::SHARED_MEMORY_BUFFER: {
     53       scoped_ptr<GpuMemoryBufferImplShm> buffer(
     54           new GpuMemoryBufferImplShm(size, internalformat));
     55       if (!buffer->InitializeFromHandle(handle))
     56         return scoped_ptr<GpuMemoryBufferImpl>();
     57 
     58       return buffer.PassAs<GpuMemoryBufferImpl>();
     59     }
     60     default:
     61       return scoped_ptr<GpuMemoryBufferImpl>();
     62   }
     63 }
     64 
     65 }  // namespace content
     66