Small optimization in pool (removed used_size)

git-svn-id: https://svn.pjsip.org/repos/pjproject/trunk@69 74dad513-b988-da41-8d7b-12977e46ad98
This commit is contained in:
Benny Prijono 2005-11-21 16:58:03 +00:00
parent d0d44f51be
commit d493480140
4 changed files with 24 additions and 32 deletions

View File

@ -151,9 +151,6 @@ struct pj_pool_t
/** Current capacity allocated by the pool. */
pj_size_t capacity;
/** Number of memory used/allocated. */
pj_size_t used_size;
/** Size of memory block to be allocated when the pool runs out of memory */
pj_size_t increment_size;

View File

@ -29,24 +29,27 @@ PJ_IDEF(pj_size_t) pj_pool_get_capacity( pj_pool_t *pool )
PJ_IDEF(pj_size_t) pj_pool_get_used_size( pj_pool_t *pool )
{
return pool->used_size;
pj_pool_block *b = pool->block_list.next;
pj_size_t used_size = sizeof(pj_pool_t);
while (b != &pool->block_list) {
used_size += (b->cur - b->buf) + sizeof(pj_pool_block);
b = b->next;
}
return used_size;
}
PJ_IDEF(void*) pj_pool_alloc_from_block( pj_pool_t *pool,
pj_pool_block *block, pj_size_t size )
PJ_IDEF(void*) pj_pool_alloc_from_block( pj_pool_block *block, pj_size_t size )
{
/* The operation below is valid for size==0.
* When size==0, the function will return the pointer to the pool
* memory address, but no memory will be allocated.
*/
if (size & (PJ_POOL_ALIGNMENT-1)) {
size &= ~(PJ_POOL_ALIGNMENT-1);
size += PJ_POOL_ALIGNMENT;
size = (size + PJ_POOL_ALIGNMENT) & ~(PJ_POOL_ALIGNMENT-1);
}
if ((unsigned)(block->end - block->cur) >= size) {
void *ptr = block->cur;
block->cur += size;
pool->used_size += size;
return ptr;
}
return NULL;
@ -54,8 +57,7 @@ PJ_IDEF(void*) pj_pool_alloc_from_block( pj_pool_t *pool,
PJ_IDEF(void*) pj_pool_alloc( pj_pool_t *pool, pj_size_t size)
{
pj_pool_block *block = pool->block_list.next;
void *ptr = pj_pool_alloc_from_block(pool, block, size);
void *ptr = pj_pool_alloc_from_block(pool->block_list.next, size);
if (!ptr)
ptr = pj_pool_allocate_find(pool, size);
return ptr;

View File

@ -45,7 +45,7 @@ static pj_pool_block *pj_pool_create_block( pj_pool_t *pool, pj_size_t size)
pj_assert(size >= sizeof(pj_pool_block));
LOG((pool->obj_name, "create_block(sz=%u), cur.cap=%u, cur.used=%u",
size, pool->capacity, pool->used_size));
size, pool->capacity, pj_pool_get_used_size(pool)));
/* Request memory from allocator. */
block = (pj_pool_block*)
@ -57,7 +57,6 @@ static pj_pool_block *pj_pool_create_block( pj_pool_t *pool, pj_size_t size)
/* Add capacity. */
pool->capacity += size;
pool->used_size += sizeof(pj_pool_block);
/* Set block attribytes. */
block->cur = block->buf = ((unsigned char*)block) + sizeof(pj_pool_block);
@ -86,7 +85,7 @@ PJ_DEF(void*) pj_pool_allocate_find(pj_pool_t *pool, unsigned size)
PJ_CHECK_STACK();
while (block != &pool->block_list) {
p = pj_pool_alloc_from_block(pool, block, size);
p = pj_pool_alloc_from_block(block, size);
if (p != NULL)
return p;
block = block->next;
@ -97,7 +96,7 @@ PJ_DEF(void*) pj_pool_allocate_find(pj_pool_t *pool, unsigned size)
if (pool->increment_size == 0) {
LOG((pool->obj_name, "Can't expand pool to allocate %u bytes "
"(used=%u, cap=%u)",
size, pool->used_size, pool->capacity));
size, pj_pool_get_used_size(pool), pool->capacity));
(*pool->callback)(pool, size);
return NULL;
}
@ -118,13 +117,13 @@ PJ_DEF(void*) pj_pool_allocate_find(pj_pool_t *pool, unsigned size)
LOG((pool->obj_name,
"%u bytes requested, resizing pool by %u bytes (used=%u, cap=%u)",
size, block_size, pool->used_size, pool->capacity));
size, block_size, pj_pool_get_used_size(pool), pool->capacity));
block = pj_pool_create_block(pool, block_size);
if (!block)
return NULL;
p = pj_pool_alloc_from_block(pool, block, size);
p = pj_pool_alloc_from_block(block, size);
pj_assert(p != NULL);
#if PJ_DEBUG
if (p == NULL) {
@ -142,18 +141,10 @@ PJ_DEF(void) pj_pool_init_int( pj_pool_t *pool,
pj_size_t increment_size,
pj_pool_callback *callback)
{
pj_pool_block *block;
PJ_CHECK_STACK();
pool->increment_size = increment_size;
pool->callback = callback;
pool->used_size = sizeof(*pool);
block = pool->block_list.next;
while (block != &pool->block_list) {
pool->used_size += sizeof(pj_pool_block);
block = block->next;
}
if (name) {
if (strchr(name, '%') != NULL) {
@ -237,7 +228,6 @@ static void reset_pool(pj_pool_t *pool)
block = pool->block_list.next;
block->cur = block->buf;
pool->capacity = block->end - (unsigned char*)pool;
pool->used_size = 0;
}
/*
@ -246,7 +236,8 @@ static void reset_pool(pj_pool_t *pool)
PJ_DEF(void) pj_pool_reset(pj_pool_t *pool)
{
LOG((pool->obj_name, "reset(): cap=%d, used=%d(%d%%)",
pool->capacity, pool->used_size, pool->used_size*100/pool->capacity));
pool->capacity, pj_pool_get_used_size(pool),
pj_pool_get_used_size(pool)*100/pool->capacity));
reset_pool(pool);
}
@ -259,7 +250,8 @@ PJ_DEF(void) pj_pool_destroy_int(pj_pool_t *pool)
pj_size_t initial_size;
LOG((pool->obj_name, "destroy(): cap=%d, used=%d(%d%%), block0=%p-%p",
pool->capacity, pool->used_size, pool->used_size*100/pool->capacity,
pool->capacity, pj_pool_get_used_size(pool),
pj_pool_get_used_size(pool)*100/pool->capacity,
((pj_pool_block*)pool->block_list.next)->buf,
((pj_pool_block*)pool->block_list.next)->end));

View File

@ -174,7 +174,8 @@ static void cpool_release_pool( pj_pool_factory *pf, pj_pool_t *pool)
/* Reset pool. */
PJ_LOG(4, (pool->obj_name, "recycle(): cap=%d, used=%d(%d%%)",
pool->capacity, pool->used_size, pool->used_size*100/pool->capacity));
pool->capacity, pj_pool_get_used_size(pool),
pj_pool_get_used_size(pool)*100/pool->capacity));
pj_pool_reset(pool);
/*
@ -207,9 +208,9 @@ static void cpool_dump_status(pj_pool_factory *factory, pj_bool_t detail )
PJ_LOG(3,("cachpool", " Dumping all active pools:"));
while (pool != (void*)&cp->used_list) {
PJ_LOG(3,("cachpool", " %12s: %8d of %8d (%d%%) used", pool->obj_name,
pool->used_size, pool->capacity,
pool->used_size*100/pool->capacity));
total_used += pool->used_size;
pj_pool_get_used_size(pool), pool->capacity,
pj_pool_get_used_size(pool)*100/pool->capacity));
total_used += pj_pool_get_used_size(pool);
total_capacity += pool->capacity;
pool = pool->next;
}