Rework memory statistics to provide useful user information. (#1812)
Obsolote statistics is also removed. JerryScript-DCO-1.0-Signed-off-by: Zoltan Herczeg zherczeg.u-szeged@partner.samsung.com
This commit is contained in:
@@ -31,24 +31,6 @@
|
||||
* @{
|
||||
*/
|
||||
|
||||
#ifdef JMEM_STATS
|
||||
|
||||
static void jmem_pools_stat_free_pool (void);
|
||||
static void jmem_pools_stat_new_alloc (void);
|
||||
static void jmem_pools_stat_reuse (void);
|
||||
static void jmem_pools_stat_dealloc (void);
|
||||
|
||||
# define JMEM_POOLS_STAT_FREE_POOL() jmem_pools_stat_free_pool ()
|
||||
# define JMEM_POOLS_STAT_NEW_ALLOC() jmem_pools_stat_new_alloc ()
|
||||
# define JMEM_POOLS_STAT_REUSE() jmem_pools_stat_reuse ()
|
||||
# define JMEM_POOLS_STAT_DEALLOC() jmem_pools_stat_dealloc ()
|
||||
#else /* !JMEM_STATS */
|
||||
# define JMEM_POOLS_STAT_FREE_POOL()
|
||||
# define JMEM_POOLS_STAT_NEW_ALLOC()
|
||||
# define JMEM_POOLS_STAT_REUSE()
|
||||
# define JMEM_POOLS_STAT_DEALLOC()
|
||||
#endif /* JMEM_STATS */
|
||||
|
||||
/*
|
||||
* Valgrind-related options and headers
|
||||
*/
|
||||
@@ -107,8 +89,6 @@ jmem_pools_alloc (size_t size) /**< size of the chunk */
|
||||
{
|
||||
const jmem_pools_chunk_t *const chunk_p = JERRY_CONTEXT (jmem_free_8_byte_chunk_p);
|
||||
|
||||
JMEM_POOLS_STAT_REUSE ();
|
||||
|
||||
VALGRIND_DEFINED_SPACE (chunk_p, sizeof (jmem_pools_chunk_t));
|
||||
|
||||
JERRY_CONTEXT (jmem_free_8_byte_chunk_p) = chunk_p->next_p;
|
||||
@@ -119,7 +99,6 @@ jmem_pools_alloc (size_t size) /**< size of the chunk */
|
||||
}
|
||||
else
|
||||
{
|
||||
JMEM_POOLS_STAT_NEW_ALLOC ();
|
||||
return (void *) jmem_heap_alloc_block (8);
|
||||
}
|
||||
}
|
||||
@@ -131,8 +110,6 @@ jmem_pools_alloc (size_t size) /**< size of the chunk */
|
||||
{
|
||||
const jmem_pools_chunk_t *const chunk_p = JERRY_CONTEXT (jmem_free_16_byte_chunk_p);
|
||||
|
||||
JMEM_POOLS_STAT_REUSE ();
|
||||
|
||||
VALGRIND_DEFINED_SPACE (chunk_p, sizeof (jmem_pools_chunk_t));
|
||||
|
||||
JERRY_CONTEXT (jmem_free_16_byte_chunk_p) = chunk_p->next_p;
|
||||
@@ -143,7 +120,6 @@ jmem_pools_alloc (size_t size) /**< size of the chunk */
|
||||
}
|
||||
else
|
||||
{
|
||||
JMEM_POOLS_STAT_NEW_ALLOC ();
|
||||
return (void *) jmem_heap_alloc_block (16);
|
||||
}
|
||||
#else /* !JERRY_CPOINTER_32_BIT */
|
||||
@@ -183,8 +159,6 @@ jmem_pools_free (void *chunk_p, /**< pointer to the chunk */
|
||||
}
|
||||
|
||||
VALGRIND_NOACCESS_SPACE (chunk_to_free_p, size);
|
||||
|
||||
JMEM_POOLS_STAT_FREE_POOL ();
|
||||
} /* jmem_pools_free */
|
||||
|
||||
/**
|
||||
@@ -203,7 +177,6 @@ jmem_pools_collect_empty (void)
|
||||
VALGRIND_NOACCESS_SPACE (chunk_p, sizeof (jmem_pools_chunk_t));
|
||||
|
||||
jmem_heap_free_block (chunk_p, 8);
|
||||
JMEM_POOLS_STAT_DEALLOC ();
|
||||
chunk_p = next_p;
|
||||
}
|
||||
|
||||
@@ -218,122 +191,11 @@ jmem_pools_collect_empty (void)
|
||||
VALGRIND_NOACCESS_SPACE (chunk_p, sizeof (jmem_pools_chunk_t));
|
||||
|
||||
jmem_heap_free_block (chunk_p, 16);
|
||||
JMEM_POOLS_STAT_DEALLOC ();
|
||||
chunk_p = next_p;
|
||||
}
|
||||
#endif /* JERRY_CPOINTER_32_BIT */
|
||||
} /* jmem_pools_collect_empty */
|
||||
|
||||
#ifdef JMEM_STATS
|
||||
/**
|
||||
* Get pools memory usage statistics
|
||||
*/
|
||||
void
|
||||
jmem_pools_get_stats (jmem_pools_stats_t *out_pools_stats_p) /**< [out] pools' stats */
|
||||
{
|
||||
JERRY_ASSERT (out_pools_stats_p != NULL);
|
||||
|
||||
*out_pools_stats_p = JERRY_CONTEXT (jmem_pools_stats);
|
||||
} /* jmem_pools_get_stats */
|
||||
|
||||
/**
|
||||
* Reset peak values in memory usage statistics
|
||||
*/
|
||||
void
|
||||
jmem_pools_stats_reset_peak (void)
|
||||
{
|
||||
JERRY_CONTEXT (jmem_pools_stats).peak_pools_count = JERRY_CONTEXT (jmem_pools_stats.pools_count);
|
||||
} /* jmem_pools_stats_reset_peak */
|
||||
|
||||
/**
|
||||
* Print pools memory usage statistics
|
||||
*/
|
||||
void
|
||||
jmem_pools_stats_print (void)
|
||||
{
|
||||
jmem_pools_stats_t *pools_stats = &JERRY_CONTEXT (jmem_pools_stats);
|
||||
|
||||
JERRY_DEBUG_MSG ("Pools stats:\n"
|
||||
" Pool chunks: %zu\n"
|
||||
" Peak pool chunks: %zu\n"
|
||||
" Free chunks: %zu\n"
|
||||
" Pool reuse ratio: %zu.%04zu\n",
|
||||
pools_stats->pools_count,
|
||||
pools_stats->peak_pools_count,
|
||||
pools_stats->free_chunks,
|
||||
pools_stats->reused_count / pools_stats->new_alloc_count,
|
||||
pools_stats->reused_count % pools_stats->new_alloc_count * 10000 / pools_stats->new_alloc_count);
|
||||
} /* jmem_pools_stats_print */
|
||||
|
||||
/**
|
||||
* Account for allocation of new pool chunk
|
||||
*/
|
||||
static void
|
||||
jmem_pools_stat_new_alloc (void)
|
||||
{
|
||||
jmem_pools_stats_t *pools_stats = &JERRY_CONTEXT (jmem_pools_stats);
|
||||
|
||||
pools_stats->pools_count++;
|
||||
pools_stats->new_alloc_count++;
|
||||
|
||||
if (pools_stats->pools_count > pools_stats->peak_pools_count)
|
||||
{
|
||||
pools_stats->peak_pools_count = pools_stats->pools_count;
|
||||
}
|
||||
if (pools_stats->pools_count > pools_stats->global_peak_pools_count)
|
||||
{
|
||||
pools_stats->global_peak_pools_count = pools_stats->pools_count;
|
||||
}
|
||||
} /* jmem_pools_stat_new_alloc */
|
||||
|
||||
|
||||
/**
|
||||
* Account for reuse of pool chunk
|
||||
*/
|
||||
static void
|
||||
jmem_pools_stat_reuse (void)
|
||||
{
|
||||
jmem_pools_stats_t *pools_stats = &JERRY_CONTEXT (jmem_pools_stats);
|
||||
|
||||
pools_stats->pools_count++;
|
||||
pools_stats->free_chunks--;
|
||||
pools_stats->reused_count++;
|
||||
|
||||
if (pools_stats->pools_count > pools_stats->peak_pools_count)
|
||||
{
|
||||
pools_stats->peak_pools_count = pools_stats->pools_count;
|
||||
}
|
||||
if (pools_stats->pools_count > pools_stats->global_peak_pools_count)
|
||||
{
|
||||
pools_stats->global_peak_pools_count = pools_stats->pools_count;
|
||||
}
|
||||
} /* jmem_pools_stat_reuse */
|
||||
|
||||
|
||||
/**
|
||||
* Account for freeing a chunk
|
||||
*/
|
||||
static void
|
||||
jmem_pools_stat_free_pool (void)
|
||||
{
|
||||
jmem_pools_stats_t *pools_stats = &JERRY_CONTEXT (jmem_pools_stats);
|
||||
|
||||
JERRY_ASSERT (pools_stats->pools_count > 0);
|
||||
|
||||
pools_stats->pools_count--;
|
||||
pools_stats->free_chunks++;
|
||||
} /* jmem_pools_stat_free_pool */
|
||||
|
||||
/**
|
||||
* Account for freeing a chunk
|
||||
*/
|
||||
static void
|
||||
jmem_pools_stat_dealloc (void)
|
||||
{
|
||||
JERRY_CONTEXT (jmem_pools_stats).free_chunks--;
|
||||
} /* jmem_pools_stat_dealloc */
|
||||
#endif /* JMEM_STATS */
|
||||
|
||||
#undef VALGRIND_NOACCESS_SPACE
|
||||
#undef VALGRIND_UNDEFINED_SPACE
|
||||
#undef VALGRIND_DEFINED_SPACE
|
||||
|
||||
Reference in New Issue
Block a user