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