libpagemap: count swapped pages
Add a new memusage field for swapped pages.
Change-Id: I857143a5fdd294315dd89e834b1217a219f10479
diff --git a/libpagemap/pm_map.c b/libpagemap/pm_map.c
index 6e3fe7d..a65d315 100644
--- a/libpagemap/pm_map.c
+++ b/libpagemap/pm_map.c
@@ -46,27 +46,30 @@
for (i = 0; i < len; i++) {
usage.vss += map->proc->ker->pagesize;
- if (!PM_PAGEMAP_PRESENT(pagemap[i]) ||
- PM_PAGEMAP_SWAPPED(pagemap[i]))
+ if (!PM_PAGEMAP_PRESENT(pagemap[i]))
continue;
- if (flags_mask) {
- uint64_t flags;
- error = pm_kernel_flags(map->proc->ker, PM_PAGEMAP_PFN(pagemap[i]),
- &flags);
+ if (!PM_PAGEMAP_SWAPPED(pagemap[i])) {
+ if (flags_mask) {
+ uint64_t flags;
+ error = pm_kernel_flags(map->proc->ker, PM_PAGEMAP_PFN(pagemap[i]),
+ &flags);
+ if (error) goto out;
+
+ if ((flags & flags_mask) != required_flags)
+ continue;
+ }
+
+ error = pm_kernel_count(map->proc->ker, PM_PAGEMAP_PFN(pagemap[i]),
+ &count);
if (error) goto out;
- if ((flags & flags_mask) != required_flags)
- continue;
+ usage.rss += (count >= 1) ? map->proc->ker->pagesize : (0);
+ usage.pss += (count >= 1) ? (map->proc->ker->pagesize / count) : (0);
+ usage.uss += (count == 1) ? (map->proc->ker->pagesize) : (0);
+ } else {
+ usage.swap += map->proc->ker->pagesize;
}
-
- error = pm_kernel_count(map->proc->ker, PM_PAGEMAP_PFN(pagemap[i]),
- &count);
- if (error) goto out;
-
- usage.rss += (count >= 1) ? (map->proc->ker->pagesize) : (0);
- usage.pss += (count >= 1) ? (map->proc->ker->pagesize / count) : (0);
- usage.uss += (count == 1) ? (map->proc->ker->pagesize) : (0);
}
memcpy(usage_out, &usage, sizeof(usage));