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/tests/low_level_alloc_unittest.cc

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 128 matching lines...) Expand 10 before | Expand all | Expand 10 after
139 allocated.erase(it); 139 allocated.erase(it);
140 } 140 }
141 if (use_new_arena) { 141 if (use_new_arena) {
142 CHECK(LowLevelAlloc::DeleteArena(arena)); 142 CHECK(LowLevelAlloc::DeleteArena(arena));
143 } 143 }
144 } 144 }
145 145
146 // used for counting allocates and frees 146 // used for counting allocates and frees
147 static int32 allocates; 147 static int32 allocates;
148 static int32 frees; 148 static int32 frees;
149 static MallocHook::NewHook old_alloc_hook;
150 static MallocHook::DeleteHook old_free_hook;
151 149
152 // called on each alloc if kCallMallocHook specified 150 // called on each alloc if kCallMallocHook specified
153 static void AllocHook(const void *p, size_t size) { 151 static void AllocHook(const void *p, size_t size) {
154 if (using_low_level_alloc) { 152 if (using_low_level_alloc) {
155 allocates++; 153 allocates++;
156 } 154 }
157 if (old_alloc_hook != 0) {
158 (*old_alloc_hook)(p, size);
159 }
160 } 155 }
161 156
162 // called on each free if kCallMallocHook specified 157 // called on each free if kCallMallocHook specified
163 static void FreeHook(const void *p) { 158 static void FreeHook(const void *p) {
164 if (using_low_level_alloc) { 159 if (using_low_level_alloc) {
165 frees++; 160 frees++;
166 } 161 }
167 if (old_free_hook != 0) {
168 (*old_free_hook)(p);
169 }
170 } 162 }
171 163
172 int main(int argc, char *argv[]) { 164 int main(int argc, char *argv[]) {
173 // This is needed by maybe_threads_unittest.sh, which parses argv[0] 165 // This is needed by maybe_threads_unittest.sh, which parses argv[0]
174 // to figure out what directory low_level_alloc_unittest is in. 166 // to figure out what directory low_level_alloc_unittest is in.
175 if (argc != 1) { 167 if (argc != 1) {
176 fprintf(stderr, "USAGE: %s\n", argv[0]); 168 fprintf(stderr, "USAGE: %s\n", argv[0]);
177 return 1; 169 return 1;
178 } 170 }
179 171
180 old_alloc_hook = MallocHook::SetNewHook(AllocHook); 172 CHECK(MallocHook::AddNewHook(&AllocHook));
181 old_free_hook = MallocHook::SetDeleteHook(FreeHook); 173 CHECK(MallocHook::AddDeleteHook(&FreeHook));
182 CHECK_EQ(allocates, 0); 174 CHECK_EQ(allocates, 0);
183 CHECK_EQ(frees, 0); 175 CHECK_EQ(frees, 0);
184 Test(false, false, 50000); 176 Test(false, false, 50000);
185 CHECK_NE(allocates, 0); // default arena calls hooks 177 CHECK_NE(allocates, 0); // default arena calls hooks
186 CHECK_NE(frees, 0); 178 CHECK_NE(frees, 0);
187 for (int i = 0; i != 16; i++) { 179 for (int i = 0; i != 16; i++) {
188 bool call_hooks = ((i & 1) == 1); 180 bool call_hooks = ((i & 1) == 1);
189 allocates = 0; 181 allocates = 0;
190 frees = 0; 182 frees = 0;
191 Test(true, call_hooks, 15000); 183 Test(true, call_hooks, 15000);
192 if (call_hooks) { 184 if (call_hooks) {
193 CHECK_GT(allocates, 5000); // arena calls hooks 185 CHECK_GT(allocates, 5000); // arena calls hooks
194 CHECK_GT(frees, 5000); 186 CHECK_GT(frees, 5000);
195 } else { 187 } else {
196 CHECK_EQ(allocates, 0); // arena doesn't call hooks 188 CHECK_EQ(allocates, 0); // arena doesn't call hooks
197 CHECK_EQ(frees, 0); 189 CHECK_EQ(frees, 0);
198 } 190 }
199 } 191 }
200 printf("\nPASS\n"); 192 printf("\nPASS\n");
201 CHECK_EQ(MallocHook::SetNewHook(old_alloc_hook), AllocHook); 193 CHECK(MallocHook::RemoveNewHook(&AllocHook));
202 CHECK_EQ(MallocHook::SetDeleteHook(old_free_hook), FreeHook); 194 CHECK(MallocHook::RemoveDeleteHook(&FreeHook));
203 return 0; 195 return 0;
204 } 196 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698