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