summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMathieu Chartier <mathieuc@google.com>2017-07-21 12:08:14 -0700
committerMathieu Chartier <mathieuc@google.com>2017-07-21 14:27:40 -0700
commitd9d8c9929ba0a92b9e13396c8b3cb9051c452e33 (patch)
tree7ba63a45ecd4184acdcc5aa47ae8e779419b1b38
parent3d37780d14d3a9c825fd2c7adc357f319293c386 (diff)
downloadextras-d9d8c9929ba0a92b9e13396c8b3cb9051c452e33.tar.gz
Add swapPSS support to showmap
The swap column in showmap is sometimes misleading since it is total swap and not proportional. Shared dirty RAM is often shared swap with the zygote and other processes. Added a swapPSS column to the showmap output that shows the swapPss which is proportional swap usage (from smaps). Test: looked at showmap for a device that is swapping Bug: 36457259 (cherry picked from commit 737412d6d59bdf5caee3504426019b95b2cf1a83) Change-Id: I8ffdbcea325016e0cbb967fc5c425ec0ac5dda59
-rw-r--r--showmap/showmap.cpp13
1 files changed, 9 insertions, 4 deletions
diff --git a/showmap/showmap.cpp b/showmap/showmap.cpp
index 6efe2607..6f16b49b 100644
--- a/showmap/showmap.cpp
+++ b/showmap/showmap.cpp
@@ -20,6 +20,7 @@ struct mapinfo {
unsigned private_clean;
unsigned private_dirty;
unsigned swap;
+ unsigned swap_pss;
int is_bss;
int count;
char name[1];
@@ -111,6 +112,8 @@ static int parse_field(mapinfo* mi, const char* line) {
mi->private_dirty = size;
} else if (!strcmp(field, "Swap:")) {
mi->swap = size;
+ } else if (!strcmp(field, "SwapPss:")) {
+ mi->swap_pss = size;
}
}
return 0;
@@ -145,6 +148,7 @@ static void enqueue_map(mapinfo **head, mapinfo *map, int sort_by_address, int c
current->private_clean += map->private_clean;
current->private_dirty += map->private_dirty;
current->swap += map->swap;
+ current->swap_pss += map->swap_pss;
current->is_bss &= map->is_bss;
current->count++;
free(map);
@@ -220,7 +224,7 @@ static void print_header()
const char *addr2 = addresses ? " addr addr " : "";
printf("%s virtual shared shared private private\n", addr1);
- printf("%s size RSS PSS clean dirty clean dirty swap ", addr2);
+ printf("%s size RSS PSS clean dirty clean dirty swap swapPSS", addr2);
if (!verbose && !addresses) {
printf(" # ");
}
@@ -232,7 +236,7 @@ static void print_divider()
if (addresses) {
printf("-------- -------- ");
}
- printf("-------- -------- -------- -------- -------- -------- -------- -------- ");
+ printf("-------- -------- -------- -------- -------- -------- -------- -------- -------- ");
if (!verbose && !addresses) {
printf("---- ");
}
@@ -248,11 +252,11 @@ static void print_mi(mapinfo *mi, bool total)
printf("%08x %08x ", mi->start, mi->end);
}
}
- printf("%8d %8d %8d %8d %8d %8d %8d %8d ", mi->size,
+ printf("%8d %8d %8d %8d %8d %8d %8d %8d %8d ", mi->size,
mi->rss,
mi->pss,
mi->shared_clean, mi->shared_dirty,
- mi->private_clean, mi->private_dirty, mi->swap);
+ mi->private_clean, mi->private_dirty, mi->swap, mi->swap_pss);
if (!verbose && !addresses) {
printf("%4d ", mi->count);
}
@@ -279,6 +283,7 @@ static int show_map(int pid)
total.private_clean += mi->private_clean;
total.private_dirty += mi->private_dirty;
total.swap += mi->swap;
+ total.swap_pss += mi->swap_pss;
total.rss += mi->rss;
total.pss += mi->pss;
total.size += mi->size;