OSDN Git Service

libpagemap: count swapped pages
authorColin Cross <ccross@android.com>
Fri, 21 Jun 2013 19:53:51 +0000 (12:53 -0700)
committerColin Cross <ccross@android.com>
Fri, 21 Jun 2013 19:53:51 +0000 (12:53 -0700)
Add a new memusage field for swapped pages.

Change-Id: I857143a5fdd294315dd89e834b1217a219f10479

libpagemap/include/pagemap/pagemap.h
libpagemap/pm_map.c
libpagemap/pm_memusage.c

index ee6c26d..4727e9b 100644 (file)
@@ -29,6 +29,7 @@ struct pm_memusage {
     size_t rss;
     size_t pss;
     size_t uss;
+    size_t swap;
 };
 
 /* Clears a memusage. */
index 6e3fe7d..a65d315 100644 (file)
@@ -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));
index 9c5db92..ea2a003 100644 (file)
@@ -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;
 }