Home | History | Annotate | Download | only in client
      1 // Copyright 2014 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_ozone_native_buffer.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 (GpuMemoryBufferImplOzoneNativeBuffer::IsConfigurationSupported(
     19           internalformat, usage)) {
     20     GpuMemoryBufferImplOzoneNativeBuffer::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 (GpuMemoryBufferImplOzoneNativeBuffer::IsConfigurationSupported(
     44           internalformat, usage)) {
     45     GpuMemoryBufferImplOzoneNativeBuffer::AllocateForChildProcess(
     46         size, internalformat, usage, child_client_id, callback);
     47     return;
     48   }
     49   if (GpuMemoryBufferImplSharedMemory::IsConfigurationSupported(
     50           size, internalformat, usage)) {
     51     GpuMemoryBufferImplSharedMemory::AllocateForChildProcess(
     52         size, internalformat, child_process, callback);
     53     return;
     54   }
     55 
     56   callback.Run(gfx::GpuMemoryBufferHandle());
     57 }
     58 
     59 // static
     60 void GpuMemoryBufferImpl::DeletedByChildProcess(
     61     gfx::GpuMemoryBufferType type,
     62     const gfx::GpuMemoryBufferId& id,
     63     base::ProcessHandle child_process) {
     64 }
     65 
     66 // static
     67 scoped_ptr<GpuMemoryBufferImpl> GpuMemoryBufferImpl::CreateFromHandle(
     68     const gfx::GpuMemoryBufferHandle& handle,
     69     const gfx::Size& size,
     70     unsigned internalformat,
     71     const DestructionCallback& callback) {
     72   switch (handle.type) {
     73     case gfx::SHARED_MEMORY_BUFFER:
     74       return GpuMemoryBufferImplSharedMemory::CreateFromHandle(
     75           handle, size, internalformat, callback);
     76     case gfx::OZONE_NATIVE_BUFFER:
     77       return GpuMemoryBufferImplOzoneNativeBuffer::CreateFromHandle(
     78           handle, size, internalformat, callback);
     79     default:
     80       return scoped_ptr<GpuMemoryBufferImpl>();
     81   }
     82 }
     83 
     84 }  // namespace content
     85