aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--tools/ProcStats.cpp17
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;