diff options
author | Anand Thakker <anandthakker@users.noreply.github.com> | 2017-02-28 14:11:35 -0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-02-28 14:11:35 -0800 |
commit | 4b81c924cc52e557fcae63725cd07a052ad1f4f7 (patch) | |
tree | e53c5d304b3ee5600c4ca90db7a2a80a051aa0da /test/src | |
parent | f8766f704a13d0bff7c04b346fe2653d314684fa (diff) | |
download | qtlocation-mapboxgl-4b81c924cc52e557fcae63725cd07a052ad1f4f7.tar.gz |
[core] Log Memory.Footprint test results (#8170)
* Log Memory.Footprint test output
* On CI, only run Memory.Footprint test with libjemalloc
Diffstat (limited to 'test/src')
-rw-r--r-- | test/src/mbgl/test/getrss.cpp | 102 | ||||
-rw-r--r-- | test/src/mbgl/test/getrss.hpp | 45 |
2 files changed, 147 insertions, 0 deletions
diff --git a/test/src/mbgl/test/getrss.cpp b/test/src/mbgl/test/getrss.cpp new file mode 100644 index 0000000000..9f57ad8e7b --- /dev/null +++ b/test/src/mbgl/test/getrss.cpp @@ -0,0 +1,102 @@ +#include <mbgl/test/getrss.hpp> + +/* + * Adapted from + * http://nadeausoftware.com/articles/2012/07/c_c_tip_how_get_process_resident_set_size_physical_memory_use + * + * Author: David Robert Nadeau + * Site: http://NadeauSoftware.com/ + * License: Creative Commons Attribution 3.0 Unported License + * http://creativecommons.org/licenses/by/3.0/deed.en_US + */ + +namespace mbgl { +namespace test { + +/** + * Returns the peak (maximum so far) resident set size (physical + * memory use) measured in bytes, or zero if the value cannot be + * determined on this OS. + */ +size_t getPeakRSS( ) +{ +#if defined(_WIN32) + /* Windows -------------------------------------------------- */ + PROCESS_MEMORY_COUNTERS info; + GetProcessMemoryInfo( GetCurrentProcess( ), &info, sizeof(info) ); + return (size_t)info.PeakWorkingSetSize; + +#elif (defined(_AIX) || defined(__TOS__AIX__)) || (defined(__sun__) || defined(__sun) || defined(sun) && (defined(__SVR4) || defined(__svr4__))) + /* AIX and Solaris ------------------------------------------ */ + struct psinfo psinfo; + int fd = -1; + if ( (fd = open( "/proc/self/psinfo", O_RDONLY )) == -1 ) + return (size_t)0L; /* Can't open? */ + if ( read( fd, &psinfo, sizeof(psinfo) ) != sizeof(psinfo) ) + { + close( fd ); + return (size_t)0L; /* Can't read? */ + } + close( fd ); + return (size_t)(psinfo.pr_rssize * 1024L); + +#elif defined(__unix__) || defined(__unix) || defined(unix) || (defined(__APPLE__) && defined(__MACH__)) + /* BSD, Linux, and OSX -------------------------------------- */ + struct rusage rusage; + getrusage( RUSAGE_SELF, &rusage ); +#if defined(__APPLE__) && defined(__MACH__) + return (size_t)rusage.ru_maxrss; +#else + return (size_t)(rusage.ru_maxrss * 1024L); +#endif + +#else + /* Unknown OS ----------------------------------------------- */ + return (size_t)0L; /* Unsupported. */ +#endif +} + +/** + * Returns the current resident set size (physical memory use) measured + * in bytes, or zero if the value cannot be determined on this OS. + */ +size_t getCurrentRSS( ) +{ +#if defined(_WIN32) + /* Windows -------------------------------------------------- */ + PROCESS_MEMORY_COUNTERS info; + GetProcessMemoryInfo( GetCurrentProcess( ), &info, sizeof(info) ); + return (size_t)info.WorkingSetSize; + +#elif defined(__APPLE__) && defined(__MACH__) + /* OSX ------------------------------------------------------ */ + struct mach_task_basic_info info; + mach_msg_type_number_t infoCount = MACH_TASK_BASIC_INFO_COUNT; + if ( task_info( mach_task_self( ), MACH_TASK_BASIC_INFO, + (task_info_t)&info, &infoCount ) != KERN_SUCCESS ) + return (size_t)0L; /* Can't access? */ + return (size_t)info.resident_size; + +#elif defined(__linux__) || defined(__linux) || defined(linux) || defined(__gnu_linux__) + /* Linux ---------------------------------------------------- */ + long rss = 0L; + FILE* fp = NULL; + if ( (fp = fopen( "/proc/self/statm", "r" )) == NULL ) + return (size_t)0L; /* Can't open? */ + if ( fscanf( fp, "%*s%ld", &rss ) != 1 ) + { + fclose( fp ); + return (size_t)0L; /* Can't read? */ + } + fclose( fp ); + return (size_t)rss * (size_t)sysconf( _SC_PAGESIZE); + +#else + /* AIX, BSD, Solaris, and Unknown OS ------------------------ */ + return (size_t)0L; /* Unsupported. */ +#endif +} + +} // namespace test +} // namespace mbgl + diff --git a/test/src/mbgl/test/getrss.hpp b/test/src/mbgl/test/getrss.hpp new file mode 100644 index 0000000000..a4420c4b5f --- /dev/null +++ b/test/src/mbgl/test/getrss.hpp @@ -0,0 +1,45 @@ +#if defined(_WIN32) +#include <windows.h> +#include <psapi.h> + +#elif defined(__unix__) || defined(__unix) || defined(unix) || (defined(__APPLE__) && defined(__MACH__)) +#include <unistd.h> +#include <sys/resource.h> + +#if defined(__APPLE__) && defined(__MACH__) +#include <mach/mach.h> +#include <mach/message.h> // for mach_port_t +#include <mach/task_info.h> + +#elif (defined(_AIX) || defined(__TOS__AIX__)) || (defined(__sun__) || defined(__sun) || defined(sun) && (defined(__SVR4) || defined(__svr4__))) +#include <fcntl.h> +#include <procfs.h> + +#elif defined(__linux__) || defined(__linux) || defined(linux) || defined(__gnu_linux__) +#include <stdio.h> + +#endif + +#else +#error "Cannot define getPeakRSS( ) or getCurrentRSS( ) for an unknown OS." +#endif + +namespace mbgl { +namespace test { + + +/** + * Returns the peak (maximum so far) resident set size (physical + * memory use) measured in bytes, or zero if the value cannot be + * determined on this OS. + */ +size_t getPeakRSS(); + +/** + * Returns the current resident set size (physical memory use) measured + * in bytes, or zero if the value cannot be determined on this OS. + */ +size_t getCurrentRSS(); + +} +} |