Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(579)

Side by Side Diff: content/child/child_discardable_shared_memory_manager.cc

Issue 1386333003: Revert of [tracing] Display the locked size of discardable memory segment. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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/child/child_discardable_shared_memory_manager.h" 5 #include "content/child/child_discardable_shared_memory_manager.h"
6 6
7 #include "base/atomic_sequence_num.h" 7 #include "base/atomic_sequence_num.h"
8 #include "base/bind.h" 8 #include "base/bind.h"
9 #include "base/debug/crash_logging.h" 9 #include "base/debug/crash_logging.h"
10 #include "base/memory/discardable_memory.h" 10 #include "base/memory/discardable_memory.h"
(...skipping 131 matching lines...) Expand 10 before | Expand all | Expand 10 after
142 reinterpret_cast<size_t>(free_span->shared_memory()->memory()), 142 reinterpret_cast<size_t>(free_span->shared_memory()->memory()),
143 free_span->length() * base::GetPageSize()) == 143 free_span->length() * base::GetPageSize()) ==
144 base::DiscardableSharedMemory::FAILED) { 144 base::DiscardableSharedMemory::FAILED) {
145 DCHECK(!free_span->shared_memory()->IsMemoryResident()); 145 DCHECK(!free_span->shared_memory()->IsMemoryResident());
146 // We have to release purged memory before |free_span| can be destroyed. 146 // We have to release purged memory before |free_span| can be destroyed.
147 heap_.ReleasePurgedMemory(); 147 heap_.ReleasePurgedMemory();
148 DCHECK(!free_span->shared_memory()); 148 DCHECK(!free_span->shared_memory());
149 continue; 149 continue;
150 } 150 }
151 151
152 free_span->set_is_locked(true);
153
154 // Memory usage is guaranteed to have changed after having removed 152 // Memory usage is guaranteed to have changed after having removed
155 // at least one span from the free lists. 153 // at least one span from the free lists.
156 MemoryUsageChanged(heap_.GetSize(), heap_.GetSizeOfFreeLists()); 154 MemoryUsageChanged(heap_.GetSize(), heap_.GetSizeOfFreeLists());
157 155
158 return make_scoped_ptr(new DiscardableMemoryImpl(this, free_span.Pass())); 156 return make_scoped_ptr(new DiscardableMemoryImpl(this, free_span.Pass()));
159 } 157 }
160 158
161 // Release purged memory to free up the address space before we attempt to 159 // Release purged memory to free up the address space before we attempt to
162 // allocate more memory. 160 // allocate more memory.
163 heap_.ReleasePurgedMemory(); 161 heap_.ReleasePurgedMemory();
(...skipping 10 matching lines...) Expand all
174 g_next_discardable_shared_memory_id.GetNext(); 172 g_next_discardable_shared_memory_id.GetNext();
175 173
176 // Ask parent process to allocate a new discardable shared memory segment. 174 // Ask parent process to allocate a new discardable shared memory segment.
177 scoped_ptr<base::DiscardableSharedMemory> shared_memory( 175 scoped_ptr<base::DiscardableSharedMemory> shared_memory(
178 AllocateLockedDiscardableSharedMemory(allocation_size_in_bytes, new_id)); 176 AllocateLockedDiscardableSharedMemory(allocation_size_in_bytes, new_id));
179 177
180 // Create span for allocated memory. 178 // Create span for allocated memory.
181 scoped_ptr<DiscardableSharedMemoryHeap::Span> new_span(heap_.Grow( 179 scoped_ptr<DiscardableSharedMemoryHeap::Span> new_span(heap_.Grow(
182 shared_memory.Pass(), allocation_size_in_bytes, new_id, 180 shared_memory.Pass(), allocation_size_in_bytes, new_id,
183 base::Bind(&SendDeletedDiscardableSharedMemoryMessage, sender_, new_id))); 181 base::Bind(&SendDeletedDiscardableSharedMemoryMessage, sender_, new_id)));
184 new_span->set_is_locked(true);
185 182
186 // Unlock and insert any left over memory into free lists. 183 // Unlock and insert any left over memory into free lists.
187 if (pages < pages_to_allocate) { 184 if (pages < pages_to_allocate) {
188 scoped_ptr<DiscardableSharedMemoryHeap::Span> leftover = 185 scoped_ptr<DiscardableSharedMemoryHeap::Span> leftover =
189 heap_.Split(new_span.get(), pages); 186 heap_.Split(new_span.get(), pages);
190 leftover->shared_memory()->Unlock( 187 leftover->shared_memory()->Unlock(
191 leftover->start() * base::GetPageSize() - 188 leftover->start() * base::GetPageSize() -
192 reinterpret_cast<size_t>(leftover->shared_memory()->memory()), 189 reinterpret_cast<size_t>(leftover->shared_memory()->memory()),
193 leftover->length() * base::GetPageSize()); 190 leftover->length() * base::GetPageSize());
194 leftover->set_is_locked(false);
195 heap_.MergeIntoFreeLists(leftover.Pass()); 191 heap_.MergeIntoFreeLists(leftover.Pass());
196 } 192 }
197 193
198 MemoryUsageChanged(heap_.GetSize(), heap_.GetSizeOfFreeLists()); 194 MemoryUsageChanged(heap_.GetSize(), heap_.GetSizeOfFreeLists());
199 195
200 return make_scoped_ptr(new DiscardableMemoryImpl(this, new_span.Pass())); 196 return make_scoped_ptr(new DiscardableMemoryImpl(this, new_span.Pass()));
201 } 197 }
202 198
203 bool ChildDiscardableSharedMemoryManager::OnMemoryDump( 199 bool ChildDiscardableSharedMemoryManager::OnMemoryDump(
204 const base::trace_event::MemoryDumpArgs& args, 200 const base::trace_event::MemoryDumpArgs& args,
(...skipping 21 matching lines...) Expand all
226 222
227 if (!span->shared_memory()) 223 if (!span->shared_memory())
228 return false; 224 return false;
229 225
230 size_t offset = span->start() * base::GetPageSize() - 226 size_t offset = span->start() * base::GetPageSize() -
231 reinterpret_cast<size_t>(span->shared_memory()->memory()); 227 reinterpret_cast<size_t>(span->shared_memory()->memory());
232 size_t length = span->length() * base::GetPageSize(); 228 size_t length = span->length() * base::GetPageSize();
233 229
234 switch (span->shared_memory()->Lock(offset, length)) { 230 switch (span->shared_memory()->Lock(offset, length)) {
235 case base::DiscardableSharedMemory::SUCCESS: 231 case base::DiscardableSharedMemory::SUCCESS:
236 span->set_is_locked(true);
237 return true; 232 return true;
238 case base::DiscardableSharedMemory::PURGED: 233 case base::DiscardableSharedMemory::PURGED:
239 span->shared_memory()->Unlock(offset, length); 234 span->shared_memory()->Unlock(offset, length);
240 span->set_is_locked(false);
241 return false; 235 return false;
242 case base::DiscardableSharedMemory::FAILED: 236 case base::DiscardableSharedMemory::FAILED:
243 return false; 237 return false;
244 } 238 }
245 239
246 NOTREACHED(); 240 NOTREACHED();
247 return false; 241 return false;
248 } 242 }
249 243
250 void ChildDiscardableSharedMemoryManager::UnlockSpan( 244 void ChildDiscardableSharedMemoryManager::UnlockSpan(
251 DiscardableSharedMemoryHeap::Span* span) { 245 DiscardableSharedMemoryHeap::Span* span) {
252 base::AutoLock lock(lock_); 246 base::AutoLock lock(lock_);
253 247
254 DCHECK(span->shared_memory()); 248 DCHECK(span->shared_memory());
255 size_t offset = span->start() * base::GetPageSize() - 249 size_t offset = span->start() * base::GetPageSize() -
256 reinterpret_cast<size_t>(span->shared_memory()->memory()); 250 reinterpret_cast<size_t>(span->shared_memory()->memory());
257 size_t length = span->length() * base::GetPageSize(); 251 size_t length = span->length() * base::GetPageSize();
258 252
259 span->set_is_locked(false);
260 return span->shared_memory()->Unlock(offset, length); 253 return span->shared_memory()->Unlock(offset, length);
261 } 254 }
262 255
263 void ChildDiscardableSharedMemoryManager::ReleaseSpan( 256 void ChildDiscardableSharedMemoryManager::ReleaseSpan(
264 scoped_ptr<DiscardableSharedMemoryHeap::Span> span) { 257 scoped_ptr<DiscardableSharedMemoryHeap::Span> span) {
265 base::AutoLock lock(lock_); 258 base::AutoLock lock(lock_);
266 259
267 // Delete span instead of merging it into free lists if memory is gone. 260 // Delete span instead of merging it into free lists if memory is gone.
268 if (!span->shared_memory()) 261 if (!span->shared_memory())
269 return; 262 return;
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
310 "discardable-memory-allocated"; 303 "discardable-memory-allocated";
311 base::debug::SetCrashKeyValue(kDiscardableMemoryAllocatedKey, 304 base::debug::SetCrashKeyValue(kDiscardableMemoryAllocatedKey,
312 base::Uint64ToString(new_bytes_total)); 305 base::Uint64ToString(new_bytes_total));
313 306
314 static const char kDiscardableMemoryFreeKey[] = "discardable-memory-free"; 307 static const char kDiscardableMemoryFreeKey[] = "discardable-memory-free";
315 base::debug::SetCrashKeyValue(kDiscardableMemoryFreeKey, 308 base::debug::SetCrashKeyValue(kDiscardableMemoryFreeKey,
316 base::Uint64ToString(new_bytes_free)); 309 base::Uint64ToString(new_bytes_free));
317 } 310 }
318 311
319 } // namespace content 312 } // namespace content
OLDNEW
« no previous file with comments | « base/memory/discardable_shared_memory_unittest.cc ('k') | content/common/discardable_shared_memory_heap.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698