diff options
author | Colin Cross <ccross@android.com> | 2013-06-21 12:53:51 -0700 |
---|---|---|
committer | Colin Cross <ccross@android.com> | 2013-06-24 14:56:58 -0700 |
commit | 6af7cf28ec6ec7d0e32a77b2ba36db514120d561 (patch) | |
tree | 2156b11c163c6e26790ce8c039b9031c43d7447d /libpagemap | |
parent | 703868023a03e4665ad42248e3bbd9a42af52d92 (diff) | |
download | extras-6af7cf28ec6ec7d0e32a77b2ba36db514120d561.tar.gz |
libpagemap: count swapped pages
Add a new memusage field for swapped pages.
Change-Id: I857143a5fdd294315dd89e834b1217a219f10479
Diffstat (limited to 'libpagemap')
-rw-r--r-- | libpagemap/include/pagemap/pagemap.h | 1 | ||||
-rw-r--r-- | libpagemap/pm_map.c | 35 | ||||
-rw-r--r-- | libpagemap/pm_memusage.c | 3 |
3 files changed, 22 insertions, 17 deletions
diff --git a/libpagemap/include/pagemap/pagemap.h b/libpagemap/include/pagemap/pagemap.h index ee6c26dd..4727e9b9 100644 --- a/libpagemap/include/pagemap/pagemap.h +++ b/libpagemap/include/pagemap/pagemap.h @@ -29,6 +29,7 @@ struct pm_memusage { size_t rss; size_t pss; size_t uss; + size_t swap; }; /* Clears a memusage. */ diff --git a/libpagemap/pm_map.c b/libpagemap/pm_map.c index 6e3fe7d5..a65d3154 100644 --- a/libpagemap/pm_map.c +++ b/libpagemap/pm_map.c @@ -46,27 +46,30 @@ int pm_map_usage_flags(pm_map_t *map, pm_memusage_t *usage_out, 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 (error) goto out; + 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; - } + if ((flags & flags_mask) != required_flags) + continue; + } - error = pm_kernel_count(map->proc->ker, PM_PAGEMAP_PFN(pagemap[i]), - &count); - if (error) goto out; + 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); + 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; + } } memcpy(usage_out, &usage, sizeof(usage)); diff --git a/libpagemap/pm_memusage.c b/libpagemap/pm_memusage.c index 9c5db92e..ea2a003c 100644 --- a/libpagemap/pm_memusage.c +++ b/libpagemap/pm_memusage.c @@ -17,7 +17,7 @@ #include <pagemap/pagemap.h> void pm_memusage_zero(pm_memusage_t *mu) { - mu->vss = mu->rss = mu->pss = mu->uss = 0; + mu->vss = mu->rss = mu->pss = mu->uss = mu->swap = 0; } void pm_memusage_add(pm_memusage_t *a, pm_memusage_t *b) { @@ -25,4 +25,5 @@ void pm_memusage_add(pm_memusage_t *a, pm_memusage_t *b) { a->rss += b->rss; a->pss += b->pss; a->uss += b->uss; + a->swap += b->swap; } |