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

Side by Side Diff: third_party/tcmalloc/chromium/src/memory_region_map.h

Issue 7050034: Merge google-perftools r109 (the current contents of third_party/tcmalloc/vendor) (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: '' Created 9 years, 6 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 | Annotate | Revision Log
OLDNEW
1 /* Copyright (c) 2006, Google Inc. 1 /* Copyright (c) 2006, Google Inc.
2 * All rights reserved. 2 * All rights reserved.
3 * 3 *
4 * Redistribution and use in source and binary forms, with or without 4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions are 5 * modification, are permitted provided that the following conditions are
6 * met: 6 * met:
7 * 7 *
8 * * Redistributions of source code must retain the above copyright 8 * * Redistributions of source code must retain the above copyright
9 * notice, this list of conditions and the following disclaimer. 9 * notice, this list of conditions and the following disclaimer.
10 * * Redistributions in binary form must reproduce the above 10 * * Redistributions in binary form must reproduce the above
(...skipping 21 matching lines...) Expand all
32 */ 32 */
33 33
34 #ifndef BASE_MEMORY_REGION_MAP_H_ 34 #ifndef BASE_MEMORY_REGION_MAP_H_
35 #define BASE_MEMORY_REGION_MAP_H_ 35 #define BASE_MEMORY_REGION_MAP_H_
36 36
37 #include <config.h> 37 #include <config.h>
38 38
39 #ifdef HAVE_PTHREAD 39 #ifdef HAVE_PTHREAD
40 #include <pthread.h> 40 #include <pthread.h>
41 #endif 41 #endif
42 #include <stddef.h>
42 #include <set> 43 #include <set>
43 #include "base/stl_allocator.h" 44 #include "base/stl_allocator.h"
44 #include "base/spinlock.h" 45 #include "base/spinlock.h"
45 #include "base/thread_annotations.h" 46 #include "base/thread_annotations.h"
46 #include "base/low_level_alloc.h" 47 #include "base/low_level_alloc.h"
47 48
48 // TODO(maxim): add a unittest: 49 // TODO(maxim): add a unittest:
49 // execute a bunch of mmaps and compare memory map what strace logs 50 // execute a bunch of mmaps and compare memory map what strace logs
50 // execute a bunch of mmap/munmup and compare memory map with 51 // execute a bunch of mmap/munmup and compare memory map with
51 // own accounting of what those mmaps generated 52 // own accounting of what those mmaps generated
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after
91 // MemoryRegionMap::Lock()/Unlock() to manage the locks. 92 // MemoryRegionMap::Lock()/Unlock() to manage the locks.
92 // Uses Lock/Unlock inside. 93 // Uses Lock/Unlock inside.
93 static void Init(int max_stack_depth); 94 static void Init(int max_stack_depth);
94 95
95 // Try to shutdown this module undoing what Init() did. 96 // Try to shutdown this module undoing what Init() did.
96 // Returns true iff could do full shutdown (or it was not attempted). 97 // Returns true iff could do full shutdown (or it was not attempted).
97 // Full shutdown is attempted when the number of Shutdown() calls equals 98 // Full shutdown is attempted when the number of Shutdown() calls equals
98 // the number of Init() calls. 99 // the number of Init() calls.
99 static bool Shutdown(); 100 static bool Shutdown();
100 101
101 // Check that our hooks are still in place and crash if not.
102 // No need for locking.
103 static void CheckMallocHooks();
104
105 // Locks to protect our internal data structures. 102 // Locks to protect our internal data structures.
106 // These also protect use of arena_ if our Init() has been done. 103 // These also protect use of arena_ if our Init() has been done.
107 // The lock is recursive. 104 // The lock is recursive.
108 static void Lock() EXCLUSIVE_LOCK_FUNCTION(lock_); 105 static void Lock() EXCLUSIVE_LOCK_FUNCTION(lock_);
109 static void Unlock() UNLOCK_FUNCTION(lock_); 106 static void Unlock() UNLOCK_FUNCTION(lock_);
110 107
111 // Returns true when the lock is held by this thread (for use in RAW_CHECK-s). 108 // Returns true when the lock is held by this thread (for use in RAW_CHECK-s).
112 static bool LockIsHeld(); 109 static bool LockIsHeld();
113 110
114 // Locker object that acquires the MemoryRegionMap::Lock 111 // Locker object that acquires the MemoryRegionMap::Lock
(...skipping 109 matching lines...) Expand 10 before | Expand all | Expand 10 after
224 bool operator()(const Region& x, const Region& y) const { 221 bool operator()(const Region& x, const Region& y) const {
225 return x.end_addr < y.end_addr; 222 return x.end_addr < y.end_addr;
226 } 223 }
227 }; 224 };
228 225
229 // We allocate STL objects in our own arena. 226 // We allocate STL objects in our own arena.
230 struct MyAllocator { 227 struct MyAllocator {
231 static void *Allocate(size_t n) { 228 static void *Allocate(size_t n) {
232 return LowLevelAlloc::AllocWithArena(n, arena_); 229 return LowLevelAlloc::AllocWithArena(n, arena_);
233 } 230 }
234 static void Free(const void *p) { 231 static void Free(const void *p, size_t /* n */) {
235 LowLevelAlloc::Free(const_cast<void*>(p)); 232 LowLevelAlloc::Free(const_cast<void*>(p));
236 } 233 }
237 }; 234 };
238 235
239 // Set of the memory regions 236 // Set of the memory regions
240 typedef std::set<Region, RegionCmp, 237 typedef std::set<Region, RegionCmp,
241 STL_Allocator<Region, MyAllocator> > RegionSet; 238 STL_Allocator<Region, MyAllocator> > RegionSet;
242 239
243 public: // more in-depth interface ========================================== 240 public: // more in-depth interface ==========================================
244 241
245 // STL iterator with values of Region 242 // STL iterator with values of Region
246 typedef RegionSet::const_iterator RegionIterator; 243 typedef RegionSet::const_iterator RegionIterator;
247 244
248 // Return the begin/end iterators to all the regions. 245 // Return the begin/end iterators to all the regions.
249 // These need Lock/Unlock protection around their whole usage (loop). 246 // These need Lock/Unlock protection around their whole usage (loop).
250 // Even when the same thread causes modifications during such a loop 247 // Even when the same thread causes modifications during such a loop
251 // (which are permitted due to recursive locking) 248 // (which are permitted due to recursive locking)
252 // the loop iterator will still be valid as long as its region 249 // the loop iterator will still be valid as long as its region
253 // has not been deleted, but EndRegionLocked should be 250 // has not been deleted, but EndRegionLocked should be
254 // re-evaluated whenever the set of regions has changed. 251 // re-evaluated whenever the set of regions has changed.
255 static RegionIterator BeginRegionLocked(); 252 static RegionIterator BeginRegionLocked();
256 static RegionIterator EndRegionLocked(); 253 static RegionIterator EndRegionLocked();
257 254
258 // Effectively private type from our .cc ================================= 255 // Effectively private type from our .cc =================================
259 // public to let us declare global objects: 256 // public to let us declare global objects:
260 union RegionSetRep; 257 union RegionSetRep;
261 258
262 private: 259 private:
263
264 // representation =========================================================== 260 // representation ===========================================================
265 261
266 // Counter of clients of this module that have called Init(). 262 // Counter of clients of this module that have called Init().
267 static int client_count_; 263 static int client_count_;
268 264
269 // Maximal number of caller stack frames to save (>= 0). 265 // Maximal number of caller stack frames to save (>= 0).
270 static int max_stack_depth_; 266 static int max_stack_depth_;
271 267
272 // Arena used for our allocations in regions_. 268 // Arena used for our allocations in regions_.
273 static LowLevelAlloc::Arena* arena_; 269 static LowLevelAlloc::Arena* arena_;
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after
326 static void SbrkHook(const void* result, std::ptrdiff_t increment); 322 static void SbrkHook(const void* result, std::ptrdiff_t increment);
327 323
328 // Log all memory regions; Useful for debugging only. 324 // Log all memory regions; Useful for debugging only.
329 // Assumes Lock() is held 325 // Assumes Lock() is held
330 static void LogAllLocked(); 326 static void LogAllLocked();
331 327
332 DISALLOW_COPY_AND_ASSIGN(MemoryRegionMap); 328 DISALLOW_COPY_AND_ASSIGN(MemoryRegionMap);
333 }; 329 };
334 330
335 #endif // BASE_MEMORY_REGION_MAP_H_ 331 #endif // BASE_MEMORY_REGION_MAP_H_
OLDNEW
« no previous file with comments | « third_party/tcmalloc/chromium/src/memfs_malloc.cc ('k') | third_party/tcmalloc/chromium/src/memory_region_map.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698