This repository has been archived by the owner on Aug 8, 2023. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 1.3k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Anand Thakker
committed
Feb 27, 2017
1 parent
92e6e48
commit c9ae8b6
Showing
6 changed files
with
198 additions
and
32 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,39 @@ | ||
#!/usr/bin/env bash | ||
|
||
set -e | ||
set -o pipefail | ||
set -u | ||
|
||
# Logs metrics on memory usage to CloudWatch | ||
|
||
GTEST_OUTPUT=$1 | ||
DIMENSIONS=$2 | ||
|
||
if [ -z "${DIMENSIONS}" ]; then | ||
echo "* No dimensions specified for memory benchmarks" | ||
exit 1 | ||
fi | ||
|
||
function reportAttributeValue { | ||
ATTR_NAME=$1 | ||
ATTR_UNITS=$2 | ||
ATTR_VALUE=$(cat $GTEST_OUTPUT | grep -o "$ATTR_NAME=\"[^\"]*" | sed "s/$ATTR_NAME=\"//") | ||
if [ ${CLOUDWATCH:-} ]; then | ||
echo "* Reporting $ATTR_NAME = $ATTR_VALUE $ATTR_UNITS for '${DIMENSIONS}'" | ||
aws --region us-east-1 cloudwatch put-metric-data \ | ||
--namespace "Mapbox/GL" \ | ||
--metric-name "$ATTR_NAME" \ | ||
--unit "$ATTR_UNITS" \ | ||
--value ${ATTR_VALUE} \ | ||
--dimensions "${DIMENSIONS}" | ||
else | ||
echo "* Measured $ATTR_NAME = $ATTR_VALUE $ATTR_UNITS for '${DIMENSIONS}'" | ||
fi | ||
} | ||
|
||
if [ -f "${GTEST_OUTPUT}" ]; then | ||
reportAttributeValue vectorFootprint Bytes | ||
reportAttributeValue rasterFootprint Bytes | ||
else | ||
echo "* File '${GTEST_OUTPUT}' does not exist" | ||
fi |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -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 | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -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(); | ||
|
||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters