OLD | NEW |
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 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 #include "content/common/discardable_shared_memory_heap.h" | 5 #include "content/common/discardable_shared_memory_heap.h" |
6 | 6 |
7 #include "base/memory/discardable_shared_memory.h" | 7 #include "base/memory/discardable_shared_memory.h" |
8 | 8 |
9 namespace content { | 9 namespace content { |
10 namespace { | 10 namespace { |
(...skipping 124 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
135 if ((span->length_ == best->length_) && (span->start_ > best->start_)) | 135 if ((span->length_ == best->length_) && (span->start_ > best->start_)) |
136 continue; | 136 continue; |
137 } | 137 } |
138 | 138 |
139 best = span; | 139 best = span; |
140 } | 140 } |
141 | 141 |
142 return best ? Carve(best, blocks) : nullptr; | 142 return best ? Carve(best, blocks) : nullptr; |
143 } | 143 } |
144 | 144 |
145 void DiscardableSharedMemoryHeap::ReleaseFreeMemory() { | 145 size_t DiscardableSharedMemoryHeap::ReleaseFreeMemory() { |
| 146 size_t bytes_released = 0; |
146 size_t i = 0; | 147 size_t i = 0; |
147 | 148 |
148 // Release memory for all non-resident segments. | 149 // Release memory for all non-resident segments. |
149 while (i < shared_memory_segments_.size()) { | 150 while (i < shared_memory_segments_.size()) { |
150 base::DiscardableSharedMemory* shared_memory = shared_memory_segments_[i]; | 151 base::DiscardableSharedMemory* shared_memory = shared_memory_segments_[i]; |
151 | 152 |
152 // Skip segment if still resident. | 153 // Skip segment if still resident. |
153 if (shared_memory->IsMemoryResident()) { | 154 if (shared_memory->IsMemoryResident()) { |
154 ++i; | 155 ++i; |
155 continue; | 156 continue; |
156 } | 157 } |
157 | 158 |
| 159 bytes_released += shared_memory->mapped_size(); |
| 160 |
158 // Release the memory and unregistering all associated spans. | 161 // Release the memory and unregistering all associated spans. |
159 ReleaseMemory(shared_memory); | 162 ReleaseMemory(shared_memory); |
160 | 163 |
161 std::swap(shared_memory_segments_[i], shared_memory_segments_.back()); | 164 std::swap(shared_memory_segments_[i], shared_memory_segments_.back()); |
162 shared_memory_segments_.pop_back(); | 165 shared_memory_segments_.pop_back(); |
163 } | 166 } |
| 167 |
| 168 return bytes_released; |
164 } | 169 } |
165 | 170 |
166 scoped_ptr<DiscardableSharedMemoryHeap::Span> | 171 scoped_ptr<DiscardableSharedMemoryHeap::Span> |
167 DiscardableSharedMemoryHeap::RemoveFromFreeList(Span* span) { | 172 DiscardableSharedMemoryHeap::RemoveFromFreeList(Span* span) { |
168 span->RemoveFromList(); | 173 span->RemoveFromList(); |
169 return make_scoped_ptr(span); | 174 return make_scoped_ptr(span); |
170 } | 175 } |
171 | 176 |
172 scoped_ptr<DiscardableSharedMemoryHeap::Span> | 177 scoped_ptr<DiscardableSharedMemoryHeap::Span> |
173 DiscardableSharedMemoryHeap::Carve(Span* span, size_t blocks) { | 178 DiscardableSharedMemoryHeap::Carve(Span* span, size_t blocks) { |
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
223 | 228 |
224 offset += span->length_; | 229 offset += span->length_; |
225 | 230 |
226 // If |span| is in the free list, remove it. | 231 // If |span| is in the free list, remove it. |
227 if (IsInFreeList(span)) | 232 if (IsInFreeList(span)) |
228 RemoveFromFreeList(span); | 233 RemoveFromFreeList(span); |
229 } | 234 } |
230 } | 235 } |
231 | 236 |
232 } // namespace content | 237 } // namespace content |
OLD | NEW |