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

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

Issue 9323026: [NOT TO COMMIT!] r109: Diff of the current tcmalloc from the original google-perftools r109. (Closed) Base URL: http://git.chromium.org/git/chromium.git@trunk
Patch Set: Created 8 years, 10 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) 2008, Google Inc. 1 // Copyright (c) 2008, 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 13 matching lines...) Expand all
24 // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 24 // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
25 // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 25 // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
26 // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 26 // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
27 // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 27 // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
28 // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 28 // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
29 29
30 // --- 30 // ---
31 // Author: Sanjay Ghemawat <opensource@google.com> 31 // Author: Sanjay Ghemawat <opensource@google.com>
32 // 32 //
33 // Common definitions for tcmalloc code. 33 // Common definitions for tcmalloc code.
34
35 #ifndef TCMALLOC_COMMON_H_ 34 #ifndef TCMALLOC_COMMON_H_
36 #define TCMALLOC_COMMON_H_ 35 #define TCMALLOC_COMMON_H_
37 36
38 #include "config.h" 37 #include "config.h"
39 #include <stddef.h> // for size_t 38 #include <stddef.h> // for size_t
40 #ifdef HAVE_STDINT_H 39 #ifdef HAVE_STDINT_H
41 #include <stdint.h> // for uintptr_t, uint64_t 40 #include <stdint.h> // for uintptr_t, uint64_t
42 #endif 41 #endif
42 #include "free_list.h" // for SIZE_CLASS macros
43 #include "internal_logging.h" // for ASSERT, etc 43 #include "internal_logging.h" // for ASSERT, etc
44 44
45 // Type that can hold a page number 45 // Type that can hold a page number
46 typedef uintptr_t PageID; 46 typedef uintptr_t PageID;
47 47
48 // Type that can hold the length of a run of pages 48 // Type that can hold the length of a run of pages
49 typedef uintptr_t Length; 49 typedef uintptr_t Length;
50 50
51 //------------------------------------------------------------------- 51 //-------------------------------------------------------------------
52 // Configuration 52 // Configuration
53 //------------------------------------------------------------------- 53 //-------------------------------------------------------------------
54 54
55 // Using large pages speeds up the execution at a cost of larger memory use. 55 // Using large pages speeds up the execution at a cost of larger memory use.
56 // Deallocation may speed up by a factor as the page map gets 8x smaller, so 56 // Deallocation may speed up by a factor as the page map gets 8x smaller, so
57 // lookups in the page map result in fewer L2 cache misses, which translates to 57 // lookups in the page map result in fewer L2 cache misses, which translates to
58 // speedup for application/platform combinations with high L2 cache pressure. 58 // speedup for application/platform combinations with high L2 cache pressure.
59 // As the number of size classes increases with large pages, we increase 59 // As the number of size classes increases with large pages, we increase
60 // the thread cache allowance to avoid passing more free ranges to and from 60 // the thread cache allowance to avoid passing more free ranges to and from
61 // central lists. Also, larger pages are less likely to get freed. 61 // central lists. Also, larger pages are less likely to get freed.
62 // These two factors cause a bounded increase in memory use. 62 // These two factors cause a bounded increase in memory use.
63 63
64 static const size_t kAlignment = 8;
65
66 // Constants dependant on tcmalloc configuration and archetecture.
67 // We need to guarantee the smallest class size is big enough to hold the
68 // pointers that form the free list.
69 static const size_t kNumFreeListPointers =
70 (tcmalloc::kSupportsDoublyLinkedList ? 2 : 1);
71 static const size_t kLinkSize = kNumFreeListPointers * sizeof(void *);
72 static const size_t kMinClassSize =
73 (kLinkSize > kAlignment ? kLinkSize : kAlignment);
74 static const size_t kSkippedClasses = (kAlignment < kMinClassSize ? 1 : 0);
75
64 #if defined(TCMALLOC_LARGE_PAGES) 76 #if defined(TCMALLOC_LARGE_PAGES)
65 static const size_t kPageShift = 15; 77 static const size_t kPageShift = 15;
66 static const size_t kNumClasses = 95; 78 static const size_t kNumClasses = 95 - kSkippedClasses;
67 static const size_t kMaxThreadCacheSize = 4 << 20; 79 static const size_t kMaxThreadCacheSize = 4 << 20;
68 #else 80 #else
69 static const size_t kPageShift = 12; 81 static const size_t kPageShift = 12;
70 static const size_t kNumClasses = 61; 82 static const size_t kNumClasses = 61 - kSkippedClasses;
71 static const size_t kMaxThreadCacheSize = 2 << 20; 83 static const size_t kMaxThreadCacheSize = 2 << 20;
72 #endif 84 #endif
73 85
74 static const size_t kPageSize = 1 << kPageShift; 86 static const size_t kPageSize = 1 << kPageShift;
75 static const size_t kMaxSize = 8u * kPageSize; 87 static const size_t kMaxSize = 8u * kPageSize;
76 static const size_t kAlignment = 8;
77 static const size_t kLargeSizeClass = 0;
78 // For all span-lengths < kMaxPages we keep an exact-size list. 88 // For all span-lengths < kMaxPages we keep an exact-size list.
79 static const size_t kMaxPages = 1 << (20 - kPageShift); 89 static const size_t kMaxPages = 1 << (20 - kPageShift);
80 90
81 // Default bound on the total amount of thread caches. 91 // Default bound on the total amount of thread caches.
82 #ifdef TCMALLOC_SMALL_BUT_SLOW 92 #ifdef TCMALLOC_SMALL_BUT_SLOW
83 // Make the overall thread cache no bigger than that of a single thread 93 // Make the overall thread cache no bigger than that of a single thread
84 // for the small memory footprint case. 94 // for the small memory footprint case.
85 static const size_t kDefaultOverallThreadCacheSize = kMaxThreadCacheSize; 95 static const size_t kDefaultOverallThreadCacheSize = kMaxThreadCacheSize;
86 #else 96 #else
87 static const size_t kDefaultOverallThreadCacheSize = 8u * kMaxThreadCacheSize; 97 static const size_t kDefaultOverallThreadCacheSize = 8u * kMaxThreadCacheSize;
(...skipping 141 matching lines...) Expand 10 before | Expand all | Expand 10 after
229 239
230 // Allocates "bytes" worth of memory and returns it. Increments 240 // Allocates "bytes" worth of memory and returns it. Increments
231 // metadata_system_bytes appropriately. May return NULL if allocation 241 // metadata_system_bytes appropriately. May return NULL if allocation
232 // fails. Requires pageheap_lock is held. 242 // fails. Requires pageheap_lock is held.
233 void* MetaDataAlloc(size_t bytes); 243 void* MetaDataAlloc(size_t bytes);
234 244
235 // Returns the total number of bytes allocated from the system. 245 // Returns the total number of bytes allocated from the system.
236 // Requires pageheap_lock is held. 246 // Requires pageheap_lock is held.
237 uint64_t metadata_system_bytes(); 247 uint64_t metadata_system_bytes();
238 248
249 // Adjust metadata_system_bytes to indicate that bytes are actually committed.
250 // Requires pageheap_lock is held.
251 void increment_metadata_system_bytes(size_t bytes);
252
239 // size/depth are made the same size as a pointer so that some generic 253 // size/depth are made the same size as a pointer so that some generic
240 // code below can conveniently cast them back and forth to void*. 254 // code below can conveniently cast them back and forth to void*.
241 static const int kMaxStackDepth = 31; 255 static const int kMaxStackDepth = 31;
242 struct StackTrace { 256 struct StackTrace {
243 uintptr_t size; // Size of object 257 uintptr_t size; // Size of object
244 uintptr_t depth; // Number of PC values stored in array below 258 uintptr_t depth; // Number of PC values stored in array below
245 void* stack[kMaxStackDepth]; 259 void* stack[kMaxStackDepth];
246 }; 260 };
247 261
248 } // namespace tcmalloc 262 } // namespace tcmalloc
249 263
250 #endif // TCMALLOC_COMMON_H_ 264 #endif // TCMALLOC_COMMON_H_
OLDNEW
« no previous file with comments | « third_party/tcmalloc/chromium/src/central_freelist.cc ('k') | third_party/tcmalloc/chromium/src/common.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698