From d9d8c9929ba0a92b9e13396c8b3cb9051c452e33 Mon Sep 17 00:00:00 2001 From: Mathieu Chartier Date: Fri, 21 Jul 2017 12:08:14 -0700 Subject: 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 --- showmap/showmap.cpp | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) (limited to 'showmap/showmap.cpp') 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; -- cgit v1.2.3