[Support/Timer] Make GetMallocUsage() aware of jemalloc.

Differential Revision:	D7657
Reviewed by:	shankarke, majnemer


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@229824 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Davide Italiano 2015-02-19 07:27:14 +00:00
parent 668fc94ea5
commit d6f86b8614
4 changed files with 17 additions and 0 deletions

View File

@ -163,6 +163,7 @@ if( HAVE_SYS_UIO_H )
check_symbol_exists(writev sys/uio.h HAVE_WRITEV)
endif()
check_symbol_exists(nearbyintf math.h HAVE_NEARBYINTF)
check_symbol_exists(mallctl malloc_np.h HAVE_MALLCTL)
check_symbol_exists(mallinfo malloc.h HAVE_MALLINFO)
check_symbol_exists(malloc_zone_statistics malloc/malloc.h
HAVE_MALLOC_ZONE_STATISTICS)

View File

@ -222,6 +222,9 @@
/* Define to 1 if you have the `malloc_zone_statistics' function. */
#cmakedefine HAVE_MALLOC_ZONE_STATISTICS ${HAVE_MALLOC_ZONE_STATISTICS}
/* Define to 1 if you have the `mallctl` function. */
#cmakedefine HAVE_MALLCTL ${HAVE_MALLCTL}
/* Define to 1 if you have the `mkdtemp' function. */
#cmakedefine HAVE_MKDTEMP ${HAVE_MKDTEMP}

View File

@ -210,6 +210,9 @@
/* Define if mallinfo() is available on this platform. */
#undef HAVE_MALLINFO
/* Define if mallctl() is available on this plaform. */
#undef HAVE_MALLCTL
/* Define to 1 if you have the <malloc.h> header file. */
#undef HAVE_MALLOC_H

View File

@ -39,6 +39,9 @@
!defined(__OpenBSD__) && !defined(__Bitrig__)
#include <malloc.h>
#endif
#if defined(HAVE_MALLCTL)
#include <malloc_np.h>
#endif
#ifdef HAVE_MALLOC_MALLOC_H
#include <malloc/malloc.h>
#endif
@ -98,6 +101,13 @@ size_t Process::GetMallocUsage() {
malloc_statistics_t Stats;
malloc_zone_statistics(malloc_default_zone(), &Stats);
return Stats.size_in_use; // darwin
#elif defined(HAVE_MALLCTL)
size_t alloc, sz;
sz = sizeof(size_t);
if (mallctl("stats.allocated", &alloc, &sz, NULL, 0) == 0)
return alloc;
else
return 0;
#elif defined(HAVE_SBRK)
// Note this is only an approximation and more closely resembles
// the value returned by mallinfo in the arena field.