| OLD | NEW |
| 1 // Copyright (c) 2014 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2014 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #ifndef GPU_COMMAND_BUFFER_COMMON_BUFFER_H_ | 5 #ifndef GPU_COMMAND_BUFFER_COMMON_BUFFER_H_ |
| 6 #define GPU_COMMAND_BUFFER_COMMON_BUFFER_H_ | 6 #define GPU_COMMAND_BUFFER_COMMON_BUFFER_H_ |
| 7 | 7 |
| 8 #include <stddef.h> | 8 #include <stddef.h> |
| 9 #include <stdint.h> | 9 #include <stdint.h> |
| 10 | 10 |
| 11 #include <memory> |
| 12 |
| 11 #include "base/macros.h" | 13 #include "base/macros.h" |
| 12 #include "base/memory/ref_counted.h" | 14 #include "base/memory/ref_counted.h" |
| 13 #include "base/memory/scoped_ptr.h" | |
| 14 #include "base/memory/shared_memory.h" | 15 #include "base/memory/shared_memory.h" |
| 15 #include "base/trace_event/memory_allocator_dump.h" | 16 #include "base/trace_event/memory_allocator_dump.h" |
| 16 #include "gpu/gpu_export.h" | 17 #include "gpu/gpu_export.h" |
| 17 | 18 |
| 18 namespace base { | 19 namespace base { |
| 19 class SharedMemory; | 20 class SharedMemory; |
| 20 } | 21 } |
| 21 | 22 |
| 22 namespace gpu { | 23 namespace gpu { |
| 23 | 24 |
| 24 class GPU_EXPORT BufferBacking { | 25 class GPU_EXPORT BufferBacking { |
| 25 public: | 26 public: |
| 26 virtual ~BufferBacking() {} | 27 virtual ~BufferBacking() {} |
| 27 virtual void* GetMemory() const = 0; | 28 virtual void* GetMemory() const = 0; |
| 28 virtual size_t GetSize() const = 0; | 29 virtual size_t GetSize() const = 0; |
| 29 }; | 30 }; |
| 30 | 31 |
| 31 class GPU_EXPORT SharedMemoryBufferBacking : public BufferBacking { | 32 class GPU_EXPORT SharedMemoryBufferBacking : public BufferBacking { |
| 32 public: | 33 public: |
| 33 SharedMemoryBufferBacking(scoped_ptr<base::SharedMemory> shared_memory, | 34 SharedMemoryBufferBacking(std::unique_ptr<base::SharedMemory> shared_memory, |
| 34 size_t size); | 35 size_t size); |
| 35 ~SharedMemoryBufferBacking() override; | 36 ~SharedMemoryBufferBacking() override; |
| 36 void* GetMemory() const override; | 37 void* GetMemory() const override; |
| 37 size_t GetSize() const override; | 38 size_t GetSize() const override; |
| 38 base::SharedMemory* shared_memory() { return shared_memory_.get(); } | 39 base::SharedMemory* shared_memory() { return shared_memory_.get(); } |
| 39 | 40 |
| 40 private: | 41 private: |
| 41 scoped_ptr<base::SharedMemory> shared_memory_; | 42 std::unique_ptr<base::SharedMemory> shared_memory_; |
| 42 size_t size_; | 43 size_t size_; |
| 43 DISALLOW_COPY_AND_ASSIGN(SharedMemoryBufferBacking); | 44 DISALLOW_COPY_AND_ASSIGN(SharedMemoryBufferBacking); |
| 44 }; | 45 }; |
| 45 | 46 |
| 46 // Buffer owns a piece of shared-memory of a certain size. | 47 // Buffer owns a piece of shared-memory of a certain size. |
| 47 class GPU_EXPORT Buffer : public base::RefCountedThreadSafe<Buffer> { | 48 class GPU_EXPORT Buffer : public base::RefCountedThreadSafe<Buffer> { |
| 48 public: | 49 public: |
| 49 explicit Buffer(scoped_ptr<BufferBacking> backing); | 50 explicit Buffer(std::unique_ptr<BufferBacking> backing); |
| 50 | 51 |
| 51 BufferBacking* backing() const { return backing_.get(); } | 52 BufferBacking* backing() const { return backing_.get(); } |
| 52 void* memory() const { return memory_; } | 53 void* memory() const { return memory_; } |
| 53 size_t size() const { return size_; } | 54 size_t size() const { return size_; } |
| 54 | 55 |
| 55 // Returns NULL if the address overflows the memory. | 56 // Returns NULL if the address overflows the memory. |
| 56 void* GetDataAddress(uint32_t data_offset, uint32_t data_size) const; | 57 void* GetDataAddress(uint32_t data_offset, uint32_t data_size) const; |
| 57 | 58 |
| 58 private: | 59 private: |
| 59 friend class base::RefCountedThreadSafe<Buffer>; | 60 friend class base::RefCountedThreadSafe<Buffer>; |
| 60 ~Buffer(); | 61 ~Buffer(); |
| 61 | 62 |
| 62 scoped_ptr<BufferBacking> backing_; | 63 std::unique_ptr<BufferBacking> backing_; |
| 63 void* memory_; | 64 void* memory_; |
| 64 size_t size_; | 65 size_t size_; |
| 65 | 66 |
| 66 DISALLOW_COPY_AND_ASSIGN(Buffer); | 67 DISALLOW_COPY_AND_ASSIGN(Buffer); |
| 67 }; | 68 }; |
| 68 | 69 |
| 69 static inline scoped_ptr<BufferBacking> MakeBackingFromSharedMemory( | 70 static inline std::unique_ptr<BufferBacking> MakeBackingFromSharedMemory( |
| 70 scoped_ptr<base::SharedMemory> shared_memory, | 71 std::unique_ptr<base::SharedMemory> shared_memory, |
| 71 size_t size) { | 72 size_t size) { |
| 72 return scoped_ptr<BufferBacking>( | 73 return std::unique_ptr<BufferBacking>( |
| 73 new SharedMemoryBufferBacking(std::move(shared_memory), size)); | 74 new SharedMemoryBufferBacking(std::move(shared_memory), size)); |
| 74 } | 75 } |
| 75 | 76 |
| 76 static inline scoped_refptr<Buffer> MakeBufferFromSharedMemory( | 77 static inline scoped_refptr<Buffer> MakeBufferFromSharedMemory( |
| 77 scoped_ptr<base::SharedMemory> shared_memory, | 78 std::unique_ptr<base::SharedMemory> shared_memory, |
| 78 size_t size) { | 79 size_t size) { |
| 79 return new Buffer( | 80 return new Buffer( |
| 80 MakeBackingFromSharedMemory(std::move(shared_memory), size)); | 81 MakeBackingFromSharedMemory(std::move(shared_memory), size)); |
| 81 } | 82 } |
| 82 | 83 |
| 83 // Generates GUID which can be used to trace buffer using an Id. | 84 // Generates GUID which can be used to trace buffer using an Id. |
| 84 GPU_EXPORT base::trace_event::MemoryAllocatorDumpGuid GetBufferGUIDForTracing( | 85 GPU_EXPORT base::trace_event::MemoryAllocatorDumpGuid GetBufferGUIDForTracing( |
| 85 uint64_t tracing_process_id, | 86 uint64_t tracing_process_id, |
| 86 int32_t buffer_id); | 87 int32_t buffer_id); |
| 87 | 88 |
| 88 } // namespace gpu | 89 } // namespace gpu |
| 89 | 90 |
| 90 #endif // GPU_COMMAND_BUFFER_COMMON_BUFFER_H_ | 91 #endif // GPU_COMMAND_BUFFER_COMMON_BUFFER_H_ |
| OLD | NEW |