ecore: add infrastructure to get info from malloc_info to.

This commit is contained in:
Cedric Bail 2013-08-27 16:52:00 +09:00
parent 56983ed0d4
commit 0082c1b4eb
2 changed files with 31 additions and 6 deletions

View File

@ -1893,7 +1893,7 @@ AC_MSG_RESULT([${have_isfinite}])
# mallinfo, timerfd_create, clock_gettime
AC_CHECK_FUNCS_ONCE([mallinfo timerfd_create clock_gettime])
AC_CHECK_FUNCS_ONCE([mallinfo timerfd_create clock_gettime malloc_info])
if ! test "x${ac_cv_func_clock_gettime}" = "xyes" ; then
AC_CHECK_LIB([rt], [clock_gettime],

View File

@ -31,14 +31,14 @@
#include "Ecore.h"
#include "ecore_private.h"
#if defined HAVE_MALLINFO
#if defined(HAVE_MALLINFO) || defined(HAVE_MALLOC_INFO)
#include <malloc.h>
#endif
static Ecore_Version _version = { VMAJ, VMIN, VMIC, VREV };
EAPI Ecore_Version *ecore_version = &_version;
#ifdef HAVE_MALLINFO
#if defined(HAVE_MALLINFO) || defined(HAVE_MALLOC_INFO)
#define KEEP_MAX(Global, Local) \
if (Global < (Local)) \
Global = Local;
@ -47,6 +47,9 @@ static Eina_Bool _ecore_memory_statistic(void *data);
static int _ecore_memory_max_total = 0;
static int _ecore_memory_max_free = 0;
static pid_t _ecore_memory_pid = 0;
#ifdef HAVE_MALLOC_INFO
static FILE *_ecore_memory_statistic_file = NULL;
#endif
#endif
Eo *_ecore_parent = NULL;
@ -287,9 +290,15 @@ ecore_init(void)
#endif
_ecore_parent = eo_add(ECORE_PARENT_CLASS, NULL);
#if HAVE_MALLINFO
#if defined(HAVE_MALLINFO) || defined(HAVE_MALLOC_INFO)
if (getenv("ECORE_MEM_STAT"))
{
#ifdef HAVE_MALLOC_INFO
char tmp[1024];
snprintf(tmp, sizeof(tmp), "ecore_mem_stat.%i", getpid());
_ecore_memory_statistic_file = fopen(tmp, "w");
#endif
_ecore_memory_pid = getpid();
ecore_animator_add(_ecore_memory_statistic, NULL);
_ecore_memory_statistic(NULL);
@ -421,7 +430,7 @@ ecore_shutdown(void)
_ecore_signal_shutdown();
_ecore_main_loop_shutdown();
#if HAVE_MALLINFO
#if defined(HAVE_MALLINFO) || defined(HAVE_MALLOC_INFO)
if (getenv("ECORE_MEM_STAT"))
{
_ecore_memory_statistic(NULL);
@ -430,6 +439,12 @@ ecore_shutdown(void)
_ecore_memory_pid,
_ecore_memory_max_total,
_ecore_memory_max_free);
#ifdef HAVE_MALLOC_INFO
fclose(_ecore_memory_statistic_file);
_ecore_memory_statistic_file = NULL;
#endif
}
#endif
ecore_mempool_shutdown();
@ -895,10 +910,14 @@ _systemd_watchdog_cb(EINA_UNUSED void *data)
}
#endif
#if HAVE_MALLINFO
#if defined(HAVE_MALLINFO) || defined(HAVE_MALLOC_INFO)
static Eina_Bool
_ecore_memory_statistic(EINA_UNUSED void *data)
{
#ifdef HAVE_MALLOC_INFO
static int frame = 0;
#endif
#ifdef HAVE_MALLINFO
struct mallinfo mi;
static int uordblks = 0;
static int fordblks = 0;
@ -924,6 +943,12 @@ _ecore_memory_statistic(EINA_UNUSED void *data)
KEEP_MAX(_ecore_memory_max_total, mi.uordblks);
KEEP_MAX(_ecore_memory_max_free, mi.fordblks);
#endif
#ifdef HAVE_MALLOC_INFO
if (frame) fputs("\n", _ecore_memory_statistic_file);
fprintf(_ecore_memory_statistic_file, "=== Frame %i ===\n\n", frame++);
malloc_info(0, _ecore_memory_statistic_file);
#endif
return ECORE_CALLBACK_RENEW;
}