Updating trunk VERSION from 2139.0 to 2140.0
[chromium-blink-merge.git] / content / common / gpu / gpu_memory_buffer_factory_ozone.cc
blobca119e8999301b6d43342780c5277fd54e27be9a
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.
5 #include "content/common/gpu/gpu_memory_buffer_factory.h"
7 #include "base/logging.h"
8 #include "ui/gl/gl_image.h"
9 #include "ui/gl/gl_image_shared_memory.h"
10 #include "ui/ozone/gpu/gpu_memory_buffer_factory_ozone_native_buffer.h"
12 namespace content {
13 namespace {
15 class GpuMemoryBufferFactoryImpl : public GpuMemoryBufferFactory {
16 public:
17 // Overridden from GpuMemoryBufferFactory:
18 virtual gfx::GpuMemoryBufferHandle CreateGpuMemoryBuffer(
19 const gfx::GpuMemoryBufferHandle& handle,
20 const gfx::Size& size,
21 unsigned internalformat,
22 unsigned usage) OVERRIDE {
23 switch (handle.type) {
24 case gfx::OZONE_NATIVE_BUFFER:
25 return ozone_buffer_factory.CreateGpuMemoryBuffer(
26 handle.global_id, size, internalformat, usage)
27 ? handle
28 : gfx::GpuMemoryBufferHandle();
29 default:
30 NOTREACHED();
31 return gfx::GpuMemoryBufferHandle();
34 virtual void DestroyGpuMemoryBuffer(
35 const gfx::GpuMemoryBufferHandle& handle) OVERRIDE {
36 switch (handle.type) {
37 case gfx::OZONE_NATIVE_BUFFER:
38 ozone_buffer_factory.DestroyGpuMemoryBuffer(handle.global_id);
39 break;
40 default:
41 NOTREACHED();
42 break;
45 virtual scoped_refptr<gfx::GLImage> CreateImageForGpuMemoryBuffer(
46 const gfx::GpuMemoryBufferHandle& handle,
47 const gfx::Size& size,
48 unsigned internalformat,
49 int client_id) OVERRIDE {
50 switch (handle.type) {
51 case gfx::SHARED_MEMORY_BUFFER: {
52 scoped_refptr<gfx::GLImageSharedMemory> image(
53 new gfx::GLImageSharedMemory(size, internalformat));
54 if (!image->Initialize(handle))
55 return NULL;
57 return image;
59 case gfx::OZONE_NATIVE_BUFFER:
60 // Verify that client is the owner of the buffer we're about to use.
61 if (handle.global_id.secondary_id != client_id)
62 return scoped_refptr<gfx::GLImage>();
64 return ozone_buffer_factory.CreateImageForGpuMemoryBuffer(
65 handle.global_id, size, internalformat);
66 default:
67 NOTREACHED();
68 return scoped_refptr<gfx::GLImage>();
72 private:
73 ui::GpuMemoryBufferFactoryOzoneNativeBuffer ozone_buffer_factory;
76 } // namespace
78 // static
79 scoped_ptr<GpuMemoryBufferFactory> GpuMemoryBufferFactory::Create() {
80 return make_scoped_ptr<GpuMemoryBufferFactory>(
81 new GpuMemoryBufferFactoryImpl);
84 } // namespace content