gpu_memory_buffer_factory_ozone.cc revision 03b57e008b61dfcb1fbad3aea950ae0e001748b0
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/gpu_memory_buffer_factory.h" 6 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" 11 12namespace content { 13namespace { 14 15class 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(); 32 } 33 } 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; 43 } 44 } 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; 56 57 return image; 58 } 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>(); 63 64 return ozone_buffer_factory.CreateImageForGpuMemoryBuffer( 65 handle.global_id, size, internalformat); 66 default: 67 NOTREACHED(); 68 return scoped_refptr<gfx::GLImage>(); 69 } 70 } 71 72 private: 73 ui::GpuMemoryBufferFactoryOzoneNativeBuffer ozone_buffer_factory; 74}; 75 76} // namespace 77 78// static 79scoped_ptr<GpuMemoryBufferFactory> GpuMemoryBufferFactory::Create() { 80 return make_scoped_ptr<GpuMemoryBufferFactory>( 81 new GpuMemoryBufferFactoryImpl); 82} 83 84} // namespace content 85