summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorColin Cross <ccross@android.com>2013-06-21 17:01:06 -0700
committerColin Cross <ccross@android.com>2013-06-24 14:56:58 -0700
commit931563e96d9ff65d7d2a4642c8f26fb19e47be47 (patch)
tree465824b53a649c95853aa6fde429f569f46e1061
parent9a209c380278ca0da6ec7b3927c957b06b685a7a (diff)
downloadextras-931563e96d9ff65d7d2a4642c8f26fb19e47be47.tar.gz
libpagemap: add pm_process_usage_flags
Add pm_process_usage flags to get memory usage by a process, only counting pages with specified flags set. Change-Id: I900b673ddbb5ae92312773a8670dd59769617268
-rw-r--r--libpagemap/include/pagemap/pagemap.h5
-rw-r--r--libpagemap/pm_process.c12
2 files changed, 15 insertions, 2 deletions
diff --git a/libpagemap/include/pagemap/pagemap.h b/libpagemap/include/pagemap/pagemap.h
index 047a8619..22025672 100644
--- a/libpagemap/include/pagemap/pagemap.h
+++ b/libpagemap/include/pagemap/pagemap.h
@@ -137,6 +137,11 @@ int pm_process_create(pm_kernel_t *ker, pid_t pid, pm_process_t **proc_out);
/* Get the total memory usage of a process and store in *usage_out. */
int pm_process_usage(pm_process_t *proc, pm_memusage_t *usage_out);
+/* Get the total memory usage of a process and store in *usage_out, only
+ * counting pages with specified flags. */
+int pm_process_usage_flags(pm_process_t *proc, pm_memusage_t *usage_out,
+ uint64_t flags_mask, uint64_t required_flags);
+
/* Get the working set of a process (if ws_out != NULL), and reset it
* (if reset != 0). */
int pm_process_workingset(pm_process_t *proc, pm_memusage_t *ws_out, int reset);
diff --git a/libpagemap/pm_process.c b/libpagemap/pm_process.c
index c9aa8cab..73c96492 100644
--- a/libpagemap/pm_process.c
+++ b/libpagemap/pm_process.c
@@ -69,7 +69,9 @@ int pm_process_create(pm_kernel_t *ker, pid_t pid, pm_process_t **proc_out) {
return 0;
}
-int pm_process_usage(pm_process_t *proc, pm_memusage_t *usage_out) {
+int pm_process_usage_flags(pm_process_t *proc, pm_memusage_t *usage_out,
+ uint64_t flags_mask, uint64_t required_flags)
+{
pm_memusage_t usage, map_usage;
int error;
int i;
@@ -80,7 +82,8 @@ int pm_process_usage(pm_process_t *proc, pm_memusage_t *usage_out) {
pm_memusage_zero(&usage);
for (i = 0; i < proc->num_maps; i++) {
- error = pm_map_usage(proc->maps[i], &map_usage);
+ error = pm_map_usage_flags(proc->maps[i], &map_usage, flags_mask,
+ required_flags);
if (error) return error;
pm_memusage_add(&usage, &map_usage);
@@ -89,6 +92,11 @@ int pm_process_usage(pm_process_t *proc, pm_memusage_t *usage_out) {
memcpy(usage_out, &usage, sizeof(pm_memusage_t));
return 0;
+
+}
+
+int pm_process_usage(pm_process_t *proc, pm_memusage_t *usage_out) {
+ return pm_process_usage_flags(proc, usage_out, 0, 0);
}
int pm_process_pagemap_range(pm_process_t *proc,