gpu_memory_buffer_impl.h revision 5f1c94371a64b3196d4be9466099bb892df9b88e
11e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)// Copyright 2013 The Chromium Authors. All rights reserved. 21e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 31e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)// found in the LICENSE file. 41e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 51e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#ifndef CONTENT_COMMON_GPU_CLIENT_GPU_MEMORY_BUFFER_IMPL_H_ 61e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#define CONTENT_COMMON_GPU_CLIENT_GPU_MEMORY_BUFFER_IMPL_H_ 71e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 8cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "base/callback.h" 91e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#include "base/memory/scoped_ptr.h" 101e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#include "ui/gfx/gpu_memory_buffer.h" 111e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#include "ui/gfx/size.h" 121e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 131e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)namespace content { 141e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 15a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)// Provides common implementation of a GPU memory buffer. 161e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)class GpuMemoryBufferImpl : public gfx::GpuMemoryBuffer { 171e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) public: 18cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) typedef base::Callback<void(const gfx::GpuMemoryBufferHandle& handle)> 19cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) AllocationCallback; 20cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 21010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) virtual ~GpuMemoryBufferImpl(); 22010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 23010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) // Creates a GPU memory buffer instance with |size| and |internalformat| for 24010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) // |usage|. 25010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) static scoped_ptr<GpuMemoryBufferImpl> Create(const gfx::Size& size, 26010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) unsigned internalformat, 27010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) unsigned usage); 28010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 29010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) // Allocates a GPU memory buffer with |size| and |internalformat| for |usage| 30010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) // by |child_process|. The |handle| returned can be used by the 31010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) // |child_process| to create an instance of this class. 32010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) static void AllocateForChildProcess(const gfx::Size& size, 33010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) unsigned internalformat, 34010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) unsigned usage, 35010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) base::ProcessHandle child_process, 36cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) const AllocationCallback& callback); 37010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 385f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) // Notify that GPU memory buffer has been deleted by |child_process|. 395f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) static void DeletedByChildProcess(gfx::GpuMemoryBufferType type, 405f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) const gfx::GpuMemoryBufferId& id, 415f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) base::ProcessHandle child_process); 425f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 43010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) // Creates an instance from the given |handle|. |size| and |internalformat| 44010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) // should match what was used to allocate the |handle|. 45010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) static scoped_ptr<GpuMemoryBufferImpl> CreateFromHandle( 465f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) const gfx::GpuMemoryBufferHandle& handle, 47010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) const gfx::Size& size, 48a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) unsigned internalformat); 49a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 50010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) // Returns true if |internalformat| is a format recognized by this base class. 51a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) static bool IsFormatValid(unsigned internalformat); 52010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 53010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) // Returns true if |usage| is recognized by this base class. 54010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) static bool IsUsageValid(unsigned usage); 55010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 56010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) // Returns the number of bytes per pixel that must be used by an 57010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) // implementation when using |internalformat|. 58a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) static size_t BytesPerPixel(unsigned internalformat); 59a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 601e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) // Overridden from gfx::GpuMemoryBuffer: 611e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) virtual bool IsMapped() const OVERRIDE; 621e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 63a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) protected: 64010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) GpuMemoryBufferImpl(const gfx::Size& size, unsigned internalformat); 651e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 661e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) const gfx::Size size_; 67010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) const unsigned internalformat_; 681e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) bool mapped_; 691e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 701e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(GpuMemoryBufferImpl); 711e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)}; 721e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 731e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)} // namespace content 741e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 751e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#endif // CONTENT_COMMON_GPU_CLIENT_GPU_MEMORY_BUFFER_IMPL_H_ 76