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_io_surface.h"
      8 #include "content/common/gpu/client/gpu_memory_buffer_impl_shared_memory.h"
      9 
     10 namespace content {
     11 
     12 // static
     13 void GpuMemoryBufferImpl::Create(const gfx::Size& size,
     14                                  unsigned internalformat,
     15                                  unsigned usage,
     16                                  int client_id,
     17                                  const CreationCallback& callback) {
     18   if (GpuMemoryBufferImplIOSurface::IsConfigurationSupported(internalformat,
     19                                                              usage)) {
     20     GpuMemoryBufferImplIOSurface::Create(
     21         size, internalformat, usage, client_id, callback);
     22     return;
     23   }
     24 
     25   if (GpuMemoryBufferImplSharedMemory::IsConfigurationSupported(
     26           size, internalformat, usage)) {
     27     GpuMemoryBufferImplSharedMemory::Create(
     28         size, internalformat, usage, callback);
     29     return;
     30   }
     31 
     32   callback.Run(scoped_ptr<GpuMemoryBufferImpl>());
     33 }
     34 
     35 // static
     36 void GpuMemoryBufferImpl::AllocateForChildProcess(
     37     const gfx::Size& size,
     38     unsigned internalformat,
     39     unsigned usage,
     40     base::ProcessHandle child_process,
     41     int child_client_id,
     42     const AllocationCallback& callback) {
     43   if (GpuMemoryBufferImplIOSurface::IsConfigurationSupported(internalformat,
     44                                                              usage)) {
     45     GpuMemoryBufferImplIOSurface::AllocateForChildProcess(
     46         size, internalformat, usage, child_client_id, callback);
     47     return;
     48   }
     49 
     50   if (GpuMemoryBufferImplSharedMemory::IsConfigurationSupported(
     51           size, internalformat, usage)) {
     52     GpuMemoryBufferImplSharedMemory::AllocateForChildProcess(
     53         size, internalformat, child_process, callback);
     54     return;
     55   }
     56 
     57   callback.Run(gfx::GpuMemoryBufferHandle());
     58 }
     59 
     60 // static
     61 void GpuMemoryBufferImpl::DeletedByChildProcess(
     62     gfx::GpuMemoryBufferType type,
     63     const gfx::GpuMemoryBufferId& id,
     64     base::ProcessHandle child_process) {
     65 }
     66 
     67 // static
     68 scoped_ptr<GpuMemoryBufferImpl> GpuMemoryBufferImpl::CreateFromHandle(
     69     const gfx::GpuMemoryBufferHandle& handle,
     70     const gfx::Size& size,
     71     unsigned internalformat,
     72     const DestructionCallback& callback) {
     73   switch (handle.type) {
     74     case gfx::SHARED_MEMORY_BUFFER:
     75       return GpuMemoryBufferImplSharedMemory::CreateFromHandle(
     76           handle, size, internalformat, callback);
     77     case gfx::IO_SURFACE_BUFFER:
     78       return GpuMemoryBufferImplIOSurface::CreateFromHandle(
     79           handle, size, internalformat, callback);
     80     default:
     81       return scoped_ptr<GpuMemoryBufferImpl>();
     82   }
     83 }
     84 
     85 }  // namespace content
     86