diff options
-rw-r--r-- | tools/ProcStats.cpp | 17 |
1 files changed, 17 insertions, 0 deletions
diff --git a/tools/ProcStats.cpp b/tools/ProcStats.cpp index 1af71917bd..5c41213d4d 100644 --- a/tools/ProcStats.cpp +++ b/tools/ProcStats.cpp @@ -41,6 +41,23 @@ } return info.resident_size / 1024 / 1024; // Darwin reports bytes. } +#elif defined(SK_BUILD_FOR_UNIX) || defined(SK_BUILD_FOR_ANDROID) // N.B. /proc is Linux-only. + #include <unistd.h> + #include <stdio.h> + int sk_tools::getCurrResidentSetSizeMB() { + const long pageSize = sysconf(_SC_PAGESIZE); + long rssPages = 0; + if (FILE* statm = fopen("/proc/self/statm", "r")) { + // statm contains: program-size rss shared text lib data dirty, all in page counts. + int rc = fscanf(statm, "%*d %ld", &rssPages); + fclose(statm); + if (rc != 1) { + return -1; + } + } + return rssPages * pageSize / 1024 / 1024; + } + #elif defined(SK_BUILD_FOR_WIN32) int sk_tools::getCurrResidentSetSizeMB() { PROCESS_MEMORY_COUNTERS info; |