Index: gpu/command_buffer/common/buffer.h |
diff --git a/gpu/command_buffer/common/buffer.h b/gpu/command_buffer/common/buffer.h |
index e9a15580fd66c3e8e0c4ecd846381c58a9909797..5a310351b4b064047a099fe6cfa47883f5081f2b 100644 |
--- a/gpu/command_buffer/common/buffer.h |
+++ b/gpu/command_buffer/common/buffer.h |
@@ -17,12 +17,34 @@ namespace base { |
namespace gpu { |
+class GPU_EXPORT BufferBacking { |
+ public: |
+ virtual ~BufferBacking() {} |
+ virtual void* GetMemory() const = 0; |
+ virtual size_t GetSize() const = 0; |
+}; |
+ |
+class GPU_EXPORT SharedMemoryBufferBacking : public BufferBacking { |
+ public: |
+ SharedMemoryBufferBacking(scoped_ptr<base::SharedMemory> shared_memory, |
+ size_t size); |
+ virtual ~SharedMemoryBufferBacking(); |
+ virtual void* GetMemory() const OVERRIDE; |
+ virtual size_t GetSize() const OVERRIDE; |
+ base::SharedMemory* shared_memory() { return shared_memory_.get(); } |
+ |
+ private: |
+ scoped_ptr<base::SharedMemory> shared_memory_; |
+ size_t size_; |
+ DISALLOW_COPY_AND_ASSIGN(SharedMemoryBufferBacking); |
+}; |
+ |
// Buffer owns a piece of shared-memory of a certain size. |
class GPU_EXPORT Buffer : public base::RefCountedThreadSafe<Buffer> { |
public: |
- Buffer(scoped_ptr<base::SharedMemory> shared_memory, size_t size); |
+ explicit Buffer(scoped_ptr<BufferBacking> backing); |
- base::SharedMemory* shared_memory() const { return shared_memory_.get(); } |
+ BufferBacking* backing() const { return backing_.get(); } |
void* memory() const { return memory_; } |
size_t size() const { return size_; } |
@@ -33,13 +55,26 @@ class GPU_EXPORT Buffer : public base::RefCountedThreadSafe<Buffer> { |
friend class base::RefCountedThreadSafe<Buffer>; |
~Buffer(); |
- scoped_ptr<base::SharedMemory> shared_memory_; |
+ scoped_ptr<BufferBacking> backing_; |
void* memory_; |
size_t size_; |
DISALLOW_COPY_AND_ASSIGN(Buffer); |
}; |
+static inline scoped_ptr<BufferBacking> MakeBackingFromSharedMemory( |
+ scoped_ptr<base::SharedMemory> shared_memory, |
+ size_t size) { |
+ return scoped_ptr<BufferBacking>( |
+ new SharedMemoryBufferBacking(shared_memory.Pass(), size)); |
+} |
+ |
+static inline scoped_refptr<Buffer> MakeBufferFromSharedMemory( |
+ scoped_ptr<base::SharedMemory> shared_memory, |
+ size_t size) { |
+ return new Buffer(MakeBackingFromSharedMemory(shared_memory.Pass(), size)); |
+} |
+ |
} // namespace gpu |
#endif // GPU_COMMAND_BUFFER_COMMON_BUFFER_H_ |