OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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_CLIENT_MAPPED_MEMORY_H_ | 5 #ifndef GPU_COMMAND_BUFFER_CLIENT_MAPPED_MEMORY_H_ |
6 #define GPU_COMMAND_BUFFER_CLIENT_MAPPED_MEMORY_H_ | 6 #define GPU_COMMAND_BUFFER_CLIENT_MAPPED_MEMORY_H_ |
7 | 7 |
| 8 #include <stdint.h> |
| 9 |
8 #include "base/bind.h" | 10 #include "base/bind.h" |
| 11 #include "base/macros.h" |
9 #include "base/memory/scoped_vector.h" | 12 #include "base/memory/scoped_vector.h" |
10 #include "gpu/command_buffer/client/fenced_allocator.h" | 13 #include "gpu/command_buffer/client/fenced_allocator.h" |
11 #include "gpu/command_buffer/common/buffer.h" | 14 #include "gpu/command_buffer/common/buffer.h" |
12 #include "gpu/command_buffer/common/types.h" | |
13 #include "gpu/gpu_export.h" | 15 #include "gpu/gpu_export.h" |
14 | 16 |
15 namespace gpu { | 17 namespace gpu { |
16 | 18 |
17 class CommandBufferHelper; | 19 class CommandBufferHelper; |
18 | 20 |
19 // Manages a shared memory segment. | 21 // Manages a shared memory segment. |
20 class GPU_EXPORT MemoryChunk { | 22 class GPU_EXPORT MemoryChunk { |
21 public: | 23 public: |
22 MemoryChunk(int32 shm_id, | 24 MemoryChunk(int32_t shm_id, |
23 scoped_refptr<gpu::Buffer> shm, | 25 scoped_refptr<gpu::Buffer> shm, |
24 CommandBufferHelper* helper, | 26 CommandBufferHelper* helper, |
25 const base::Closure& poll_callback); | 27 const base::Closure& poll_callback); |
26 ~MemoryChunk(); | 28 ~MemoryChunk(); |
27 | 29 |
28 // Gets the size of the largest free block that is available without waiting. | 30 // Gets the size of the largest free block that is available without waiting. |
29 unsigned int GetLargestFreeSizeWithoutWaiting() { | 31 unsigned int GetLargestFreeSizeWithoutWaiting() { |
30 return allocator_.GetLargestFreeSize(); | 32 return allocator_.GetLargestFreeSize(); |
31 } | 33 } |
32 | 34 |
33 // Gets the size of the largest free block that can be allocated if the | 35 // Gets the size of the largest free block that can be allocated if the |
34 // caller can wait. | 36 // caller can wait. |
35 unsigned int GetLargestFreeSizeWithWaiting() { | 37 unsigned int GetLargestFreeSizeWithWaiting() { |
36 return allocator_.GetLargestFreeOrPendingSize(); | 38 return allocator_.GetLargestFreeOrPendingSize(); |
37 } | 39 } |
38 | 40 |
39 // Gets the size of the chunk. | 41 // Gets the size of the chunk. |
40 unsigned int GetSize() const { | 42 unsigned int GetSize() const { |
41 return static_cast<unsigned int>(shm_->size()); | 43 return static_cast<unsigned int>(shm_->size()); |
42 } | 44 } |
43 | 45 |
44 // The shared memory id for this chunk. | 46 // The shared memory id for this chunk. |
45 int32 shm_id() const { | 47 int32_t shm_id() const { |
46 return shm_id_; | 48 return shm_id_; |
47 } | 49 } |
48 | 50 |
49 // Allocates a block of memory. If the buffer is out of directly available | 51 // Allocates a block of memory. If the buffer is out of directly available |
50 // memory, this function may wait until memory that was freed "pending a | 52 // memory, this function may wait until memory that was freed "pending a |
51 // token" can be re-used. | 53 // token" can be re-used. |
52 // | 54 // |
53 // Parameters: | 55 // Parameters: |
54 // size: the size of the memory block to allocate. | 56 // size: the size of the memory block to allocate. |
55 // | 57 // |
(...skipping 30 matching lines...) Expand all Loading... |
86 | 88 |
87 // Frees any blocks whose tokens have passed. | 89 // Frees any blocks whose tokens have passed. |
88 void FreeUnused() { | 90 void FreeUnused() { |
89 allocator_.FreeUnused(); | 91 allocator_.FreeUnused(); |
90 } | 92 } |
91 | 93 |
92 // Returns true if pointer is in the range of this block. | 94 // Returns true if pointer is in the range of this block. |
93 bool IsInChunk(void* pointer) const { | 95 bool IsInChunk(void* pointer) const { |
94 return pointer >= shm_->memory() && | 96 return pointer >= shm_->memory() && |
95 pointer < | 97 pointer < |
96 reinterpret_cast<const int8*>(shm_->memory()) + shm_->size(); | 98 reinterpret_cast<const int8_t*>(shm_->memory()) + shm_->size(); |
97 } | 99 } |
98 | 100 |
99 // Returns true of any memory in this chunk is in use. | 101 // Returns true of any memory in this chunk is in use. |
100 bool InUse() { | 102 bool InUse() { |
101 return allocator_.InUse(); | 103 return allocator_.InUse(); |
102 } | 104 } |
103 | 105 |
104 size_t bytes_in_use() const { | 106 size_t bytes_in_use() const { |
105 return allocator_.bytes_in_use(); | 107 return allocator_.bytes_in_use(); |
106 } | 108 } |
107 | 109 |
108 private: | 110 private: |
109 int32 shm_id_; | 111 int32_t shm_id_; |
110 scoped_refptr<gpu::Buffer> shm_; | 112 scoped_refptr<gpu::Buffer> shm_; |
111 FencedAllocatorWrapper allocator_; | 113 FencedAllocatorWrapper allocator_; |
112 | 114 |
113 DISALLOW_COPY_AND_ASSIGN(MemoryChunk); | 115 DISALLOW_COPY_AND_ASSIGN(MemoryChunk); |
114 }; | 116 }; |
115 | 117 |
116 // Manages MemoryChunks. | 118 // Manages MemoryChunks. |
117 class GPU_EXPORT MappedMemoryManager { | 119 class GPU_EXPORT MappedMemoryManager { |
118 public: | 120 public: |
119 enum MemoryLimit { | 121 enum MemoryLimit { |
(...skipping 17 matching lines...) Expand all Loading... |
137 } | 139 } |
138 | 140 |
139 // Allocates a block of memory | 141 // Allocates a block of memory |
140 // Parameters: | 142 // Parameters: |
141 // size: size of memory to allocate. | 143 // size: size of memory to allocate. |
142 // shm_id: pointer to variable to receive the shared memory id. | 144 // shm_id: pointer to variable to receive the shared memory id. |
143 // shm_offset: pointer to variable to receive the shared memory offset. | 145 // shm_offset: pointer to variable to receive the shared memory offset. |
144 // Returns: | 146 // Returns: |
145 // pointer to allocated block of memory. NULL if failure. | 147 // pointer to allocated block of memory. NULL if failure. |
146 void* Alloc( | 148 void* Alloc( |
147 unsigned int size, int32* shm_id, unsigned int* shm_offset); | 149 unsigned int size, int32_t* shm_id, unsigned int* shm_offset); |
148 | 150 |
149 // Frees a block of memory. | 151 // Frees a block of memory. |
150 // | 152 // |
151 // Parameters: | 153 // Parameters: |
152 // pointer: the pointer to the memory block to free. | 154 // pointer: the pointer to the memory block to free. |
153 void Free(void* pointer); | 155 void Free(void* pointer); |
154 | 156 |
155 // Frees a block of memory, pending the passage of a token. That memory won't | 157 // Frees a block of memory, pending the passage of a token. That memory won't |
156 // be re-allocated until the token has passed through the command stream. | 158 // be re-allocated until the token has passed through the command stream. |
157 // | 159 // |
158 // Parameters: | 160 // Parameters: |
159 // pointer: the pointer to the memory block to free. | 161 // pointer: the pointer to the memory block to free. |
160 // token: the token value to wait for before re-using the memory. | 162 // token: the token value to wait for before re-using the memory. |
161 void FreePendingToken(void* pointer, int32 token); | 163 void FreePendingToken(void* pointer, int32_t token); |
162 | 164 |
163 // Free Any Shared memory that is not in use. | 165 // Free Any Shared memory that is not in use. |
164 void FreeUnused(); | 166 void FreeUnused(); |
165 | 167 |
166 // Used for testing | 168 // Used for testing |
167 size_t num_chunks() const { | 169 size_t num_chunks() const { |
168 return chunks_.size(); | 170 return chunks_.size(); |
169 } | 171 } |
170 | 172 |
171 size_t bytes_in_use() const { | 173 size_t bytes_in_use() const { |
(...skipping 21 matching lines...) Expand all Loading... |
193 size_t allocated_memory_; | 195 size_t allocated_memory_; |
194 size_t max_free_bytes_; | 196 size_t max_free_bytes_; |
195 | 197 |
196 DISALLOW_COPY_AND_ASSIGN(MappedMemoryManager); | 198 DISALLOW_COPY_AND_ASSIGN(MappedMemoryManager); |
197 }; | 199 }; |
198 | 200 |
199 } // namespace gpu | 201 } // namespace gpu |
200 | 202 |
201 #endif // GPU_COMMAND_BUFFER_CLIENT_MAPPED_MEMORY_H_ | 203 #endif // GPU_COMMAND_BUFFER_CLIENT_MAPPED_MEMORY_H_ |
202 | 204 |
OLD | NEW |