Skip to content

Refactor the printing of memory usage statistics #960

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
21 changes: 3 additions & 18 deletions jerry-core/mem/mem-allocator.c
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
/* Copyright 2014-2015 Samsung Electronics Co., Ltd.
/* Copyright 2014-2016 Samsung Electronics Co., Ltd.
* Copyright 2016 University of Szeged.
*
* Licensed under the Apache License, Version 2.0 (the "License");
Expand Down Expand Up @@ -144,22 +144,7 @@ mem_stats_reset_peak (void)
void
mem_stats_print (void)
{
mem_heap_print ();

mem_pools_stats_t stats;
mem_pools_get_stats (&stats);

printf ("Pools stats:\n");
printf (" Chunk size: %zu\n"
" Pool chunks: %zu\n"
" Peak pool chunks: %zu\n"
" Free chunks: %zu\n"
" Pool reuse ratio: %zu.%04zu\n",
MEM_POOL_CHUNK_SIZE,
stats.pools_count,
stats.peak_pools_count,
stats.free_chunks,
stats.reused_count / stats.new_alloc_count,
stats.reused_count % stats.new_alloc_count * 10000 / stats.new_alloc_count);
mem_heap_stats_print ();
mem_pools_stats_print ();
} /* mem_stats_print */
#endif /* MEM_STATS */
58 changes: 29 additions & 29 deletions jerry-core/mem/mem-heap.c
Original file line number Diff line number Diff line change
Expand Up @@ -607,22 +607,44 @@ mem_is_heap_pointer (const void *pointer) /**< pointer */
} /* mem_is_heap_pointer */
#endif /* !JERRY_NDEBUG */

#ifdef MEM_STATS
/**
* Print heap
* Get heap memory usage statistics
*/
void
mem_heap_print ()
mem_heap_get_stats (mem_heap_stats_t *out_heap_stats_p) /**< [out] heap stats */
{
#ifdef MEM_STATS
printf ("Heap stats:\n");
printf (" Heap size = %zu bytes\n"
JERRY_ASSERT (out_heap_stats_p != NULL);

*out_heap_stats_p = mem_heap_stats;
} /* mem_heap_get_stats */

/**
* Reset peak values in memory usage statistics
*/
void
mem_heap_stats_reset_peak (void)
{
mem_heap_stats.peak_allocated_bytes = mem_heap_stats.allocated_bytes;
mem_heap_stats.peak_waste_bytes = mem_heap_stats.waste_bytes;
} /* mem_heap_stats_reset_peak */

/**
* Print heap memory usage statistics
*/
void
mem_heap_stats_print (void)
{
printf ("Heap stats:\n"
" Heap size = %zu bytes\n"
" Allocated = %zu bytes\n"
" Waste = %zu bytes\n"
" Peak allocated = %zu bytes\n"
" Peak waste = %zu bytes\n"
" Skip-ahead ratio = %zu.%04zu\n"
" Average alloc iteration = %zu.%04zu\n"
" Average free iteration = %zu.%04zu\n",
" Average free iteration = %zu.%04zu\n"
"\n",
mem_heap_stats.size,
mem_heap_stats.allocated_bytes,
mem_heap_stats.waste_bytes,
Expand All @@ -634,29 +656,7 @@ mem_heap_print ()
mem_heap_stats.alloc_iter_count % mem_heap_stats.alloc_count * 10000 / mem_heap_stats.alloc_count,
mem_heap_stats.free_iter_count / mem_heap_stats.free_count,
mem_heap_stats.free_iter_count % mem_heap_stats.free_count * 10000 / mem_heap_stats.free_count);
printf ("\n");
#endif /* !MEM_STATS */
} /* mem_heap_print */

#ifdef MEM_STATS
/**
* Get heap memory usage statistics
*/
void
mem_heap_get_stats (mem_heap_stats_t *out_heap_stats_p) /**< [out] heap stats */
{
*out_heap_stats_p = mem_heap_stats;
} /* mem_heap_get_stats */

/**
* Reset peak values in memory usage statistics
*/
void
mem_heap_stats_reset_peak (void)
{
mem_heap_stats.peak_allocated_bytes = mem_heap_stats.allocated_bytes;
mem_heap_stats.peak_waste_bytes = mem_heap_stats.waste_bytes;
} /* mem_heap_stats_reset_peak */
} /* mem_heap_stats_print */

/**
* Initalize heap memory usage statistics account structure
Expand Down
1 change: 0 additions & 1 deletion jerry-core/mem/mem-heap.h
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,6 @@ extern void mem_heap_free_block_size_stored (void *);
extern uintptr_t mem_heap_compress_pointer (const void *);
extern void *mem_heap_decompress_pointer (uintptr_t);
extern bool mem_is_heap_pointer (const void *);
extern void mem_heap_print ();

#ifdef MEM_STATS
/**
Expand Down
20 changes: 20 additions & 0 deletions jerry-core/mem/mem-poolman.c
Original file line number Diff line number Diff line change
Expand Up @@ -217,6 +217,26 @@ mem_pools_stats_reset_peak (void)
mem_pools_stats.peak_pools_count = mem_pools_stats.pools_count;
} /* mem_pools_stats_reset_peak */

/**
* Print pools memory usage statistics
*/
void
mem_pools_stats_print (void)
{
printf ("Pools stats:\n"
" Chunk size: %zu\n"
" Pool chunks: %zu\n"
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why two printf?

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I've copied them over from existing code. Shall I rewrite them?

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

+1 to use one printf

" Peak pool chunks: %zu\n"
" Free chunks: %zu\n"
" Pool reuse ratio: %zu.%04zu\n",
MEM_POOL_CHUNK_SIZE,
mem_pools_stats.pools_count,
mem_pools_stats.peak_pools_count,
mem_pools_stats.free_chunks,
mem_pools_stats.reused_count / mem_pools_stats.new_alloc_count,
mem_pools_stats.reused_count % mem_pools_stats.new_alloc_count * 10000 / mem_pools_stats.new_alloc_count);
} /* mem_pools_stats_print */

/**
* Initalize pools' memory usage statistics account structure
*/
Expand Down
1 change: 1 addition & 0 deletions jerry-core/mem/mem-poolman.h
Original file line number Diff line number Diff line change
Expand Up @@ -63,6 +63,7 @@ typedef struct

extern void mem_pools_get_stats (mem_pools_stats_t *);
extern void mem_pools_stats_reset_peak (void);
extern void mem_pools_stats_print (void);
#endif /* MEM_STATS */

#endif /* !MEM_POOLMAN_H */
Expand Down
10 changes: 7 additions & 3 deletions tests/unit/test-heap.c
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
/* Copyright 2014-2015 Samsung Electronics Co., Ltd.
/* Copyright 2014-2016 Samsung Electronics Co., Ltd.
* Copyright 2016 University of Szeged.
*
* Licensed under the Apache License, Version 2.0 (the "License");
Expand Down Expand Up @@ -78,7 +78,9 @@ main (int __attr_unused___ argc,

mem_register_a_try_give_memory_back_callback (test_heap_give_some_memory_back);

mem_heap_print ();
#ifdef MEM_STATS
mem_heap_stats_print ();
#endif /* MEM_STATS */

for (uint32_t i = 0; i < test_iters; i++)
{
Expand Down Expand Up @@ -110,7 +112,9 @@ main (int __attr_unused___ argc,
}
}

mem_heap_print ();
#ifdef MEM_STATS
mem_heap_stats_print ();
#endif /* MEM_STATS */

return 0;
} /* main */
19 changes: 2 additions & 17 deletions tests/unit/test-poolman.c
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
/* Copyright 2014-2015 Samsung Electronics Co., Ltd.
/* Copyright 2014-2016 Samsung Electronics Co., Ltd.
* Copyright 2016 University of Szeged.
*
* Licensed under the Apache License, Version 2.0 (the "License");
Expand Down Expand Up @@ -80,22 +80,7 @@ main (int __attr_unused___ argc,
}

#ifdef MEM_STATS
mem_pools_stats_t stats;
mem_pools_get_stats (&stats);

printf ("Pools stats:\n");
printf (" Chunk size: %u\n"
" Pools: %zu\n"
" Allocated chunks: %zu\n"
" Free chunks: %zu\n"
" Peak pools: %zu\n"
" Peak allocated chunks: %zu\n\n",
MEM_POOL_CHUNK_SIZE,
stats.pools_count,
stats.allocated_chunks,
stats.free_chunks,
stats.peak_pools_count,
stats.peak_allocated_chunks);
mem_pools_stats_print ();
#endif /* MEM_STATS */

mem_finalize (false);
Expand Down