| OLD | NEW |
| 1 /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ | 1 /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ |
| 2 /* ***** BEGIN LICENSE BLOCK ***** | 2 /* ***** BEGIN LICENSE BLOCK ***** |
| 3 * Version: MPL 1.1/GPL 2.0/LGPL 2.1 | 3 * Version: MPL 1.1/GPL 2.0/LGPL 2.1 |
| 4 * | 4 * |
| 5 * The contents of this file are subject to the Mozilla Public License Version | 5 * The contents of this file are subject to the Mozilla Public License Version |
| 6 * 1.1 (the "License"); you may not use this file except in compliance with | 6 * 1.1 (the "License"); you may not use this file except in compliance with |
| 7 * the License. You may obtain a copy of the License at | 7 * the License. You may obtain a copy of the License at |
| 8 * http://www.mozilla.org/MPL/ | 8 * http://www.mozilla.org/MPL/ |
| 9 * | 9 * |
| 10 * Software distributed under the License is distributed on an "AS IS" basis, | 10 * Software distributed under the License is distributed on an "AS IS" basis, |
| (...skipping 238 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 249 PLArenaPool *pool, void *p, PRUint32 size, PRUint32 incr) | 249 PLArenaPool *pool, void *p, PRUint32 size, PRUint32 incr) |
| 250 { | 250 { |
| 251 void *newp; | 251 void *newp; |
| 252 | 252 |
| 253 PL_ARENA_ALLOCATE(newp, pool, size + incr); | 253 PL_ARENA_ALLOCATE(newp, pool, size + incr); |
| 254 if (newp) | 254 if (newp) |
| 255 memcpy(newp, p, size); | 255 memcpy(newp, p, size); |
| 256 return newp; | 256 return newp; |
| 257 } | 257 } |
| 258 | 258 |
| 259 static void ClearArenaList(PLArena *a, PRInt32 pattern) |
| 260 { |
| 261 |
| 262 for (; a; a = a->next) { |
| 263 PR_ASSERT(a->base <= a->avail && a->avail <= a->limit); |
| 264 a->avail = a->base; |
| 265 PL_CLEAR_UNUSED_PATTERN(a, pattern); |
| 266 } |
| 267 } |
| 268 |
| 269 PR_IMPLEMENT(void) PL_ClearArenaPool(PLArenaPool *pool, PRInt32 pattern) |
| 270 { |
| 271 ClearArenaList(pool->first.next, pattern); |
| 272 } |
| 273 |
| 259 /* | 274 /* |
| 260 * Free tail arenas linked after head, which may not be the true list head. | 275 * Free tail arenas linked after head, which may not be the true list head. |
| 261 * Reset pool->current to point to head in case it pointed at a tail arena. | 276 * Reset pool->current to point to head in case it pointed at a tail arena. |
| 262 */ | 277 */ |
| 263 static void FreeArenaList(PLArenaPool *pool, PLArena *head, PRBool reallyFree) | 278 static void FreeArenaList(PLArenaPool *pool, PLArena *head, PRBool reallyFree) |
| 264 { | 279 { |
| 265 PLArena **ap, *a; | 280 PLArena **ap, *a; |
| 266 | 281 |
| 267 ap = &head->next; | 282 ap = &head->next; |
| 268 a = *ap; | 283 a = *ap; |
| 269 if (!a) | 284 if (!a) |
| 270 return; | 285 return; |
| 271 | 286 |
| 272 #ifdef DEBUG | 287 #ifdef DEBUG |
| 273 do { | 288 ClearArenaList(a, PL_FREE_PATTERN); |
| 274 PR_ASSERT(a->base <= a->avail && a->avail <= a->limit); | |
| 275 a->avail = a->base; | |
| 276 PL_CLEAR_UNUSED(a); | |
| 277 } while ((a = a->next) != 0); | |
| 278 a = *ap; | |
| 279 #endif | 289 #endif |
| 280 | 290 |
| 281 if (reallyFree) { | 291 if (reallyFree) { |
| 282 do { | 292 do { |
| 283 *ap = a->next; | 293 *ap = a->next; |
| 284 PL_CLEAR_ARENA(a); | 294 PL_CLEAR_ARENA(a); |
| 285 PL_COUNT_ARENA(pool,--); | 295 PL_COUNT_ARENA(pool,--); |
| 286 PR_DELETE(a); | 296 PR_DELETE(a); |
| 287 } while ((a = *ap) != 0); | 297 } while ((a = *ap) != 0); |
| 288 } else { | 298 } else { |
| (...skipping 135 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 424 fprintf(fp, " number of in-place growths: %u\n", stats->ninplace); | 434 fprintf(fp, " number of in-place growths: %u\n", stats->ninplace); |
| 425 fprintf(fp, "number of released allocations: %u\n", stats->nreleases); | 435 fprintf(fp, "number of released allocations: %u\n", stats->nreleases); |
| 426 fprintf(fp, " number of fast releases: %u\n", stats->nfastrels); | 436 fprintf(fp, " number of fast releases: %u\n", stats->nfastrels); |
| 427 fprintf(fp, " total bytes allocated: %u\n", stats->nbytes); | 437 fprintf(fp, " total bytes allocated: %u\n", stats->nbytes); |
| 428 fprintf(fp, " mean allocation size: %g\n", mean); | 438 fprintf(fp, " mean allocation size: %g\n", mean); |
| 429 fprintf(fp, " standard deviation: %g\n", sqrt(variance)); | 439 fprintf(fp, " standard deviation: %g\n", sqrt(variance)); |
| 430 fprintf(fp, " maximum allocation size: %u\n", stats->maxalloc); | 440 fprintf(fp, " maximum allocation size: %u\n", stats->maxalloc); |
| 431 } | 441 } |
| 432 } | 442 } |
| 433 #endif /* PL_ARENAMETER */ | 443 #endif /* PL_ARENAMETER */ |
| OLD | NEW |