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 #ifndef CONTENT_COMMON_GPU_CLIENT_GPU_MEMORY_BUFFER_IMPL_H_ 6 #define CONTENT_COMMON_GPU_CLIENT_GPU_MEMORY_BUFFER_IMPL_H_ 7 8 #include "base/callback.h" 9 #include "base/memory/scoped_ptr.h" 10 #include "ui/gfx/gpu_memory_buffer.h" 11 #include "ui/gfx/size.h" 12 13 namespace content { 14 15 // Provides common implementation of a GPU memory buffer. 16 class GpuMemoryBufferImpl : public gfx::GpuMemoryBuffer { 17 public: 18 typedef base::Callback<void(scoped_ptr<GpuMemoryBufferImpl> buffer)> 19 CreationCallback; 20 typedef base::Callback<void(const gfx::GpuMemoryBufferHandle& handle)> 21 AllocationCallback; 22 typedef base::Closure DestructionCallback; 23 24 virtual ~GpuMemoryBufferImpl(); 25 26 // Creates a GPU memory buffer instance with |size| and |internalformat| for 27 // |usage| by the current process and |client_id|. 28 static void Create(const gfx::Size& size, 29 unsigned internalformat, 30 unsigned usage, 31 int client_id, 32 const CreationCallback& callback); 33 34 // Allocates a GPU memory buffer with |size| and |internalformat| for |usage| 35 // by |child_process| and |child_client_id|. The |handle| returned can be 36 // used by the |child_process| to create an instance of this class. 37 static void AllocateForChildProcess(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 44 // Notify that GPU memory buffer has been deleted by |child_process|. 45 static void DeletedByChildProcess(gfx::GpuMemoryBufferType type, 46 const gfx::GpuMemoryBufferId& id, 47 base::ProcessHandle child_process); 48 49 // Creates an instance from the given |handle|. |size| and |internalformat| 50 // should match what was used to allocate the |handle|. |callback| is 51 // called when instance is deleted, which is not necessarily on the same 52 // thread as this function was called on and instance was created on. 53 static scoped_ptr<GpuMemoryBufferImpl> CreateFromHandle( 54 const gfx::GpuMemoryBufferHandle& handle, 55 const gfx::Size& size, 56 unsigned internalformat, 57 const DestructionCallback& callback); 58 59 // Returns true if |internalformat| is a format recognized by this base class. 60 static bool IsFormatValid(unsigned internalformat); 61 62 // Returns true if |usage| is recognized by this base class. 63 static bool IsUsageValid(unsigned usage); 64 65 // Returns the number of bytes per pixel that must be used by an 66 // implementation when using |internalformat|. 67 static size_t BytesPerPixel(unsigned internalformat); 68 69 // Overridden from gfx::GpuMemoryBuffer: 70 virtual bool IsMapped() const OVERRIDE; 71 72 protected: 73 GpuMemoryBufferImpl(const gfx::Size& size, 74 unsigned internalformat, 75 const DestructionCallback& callback); 76 77 const gfx::Size size_; 78 const unsigned internalformat_; 79 const DestructionCallback callback_; 80 bool mapped_; 81 82 DISALLOW_COPY_AND_ASSIGN(GpuMemoryBufferImpl); 83 }; 84 85 } // namespace content 86 87 #endif // CONTENT_COMMON_GPU_CLIENT_GPU_MEMORY_BUFFER_IMPL_H_ 88