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 |