libmeminfo: Add support for counting swap pages
Adds procmeminfo API to get the vector of swap_offsets
if SWAP is enabled on the device.
Bug: 114325007
Bug: 111694435
Test: libmeminfo_test 1
Change-Id: If0b52d042749a5bcb2c87aa2cb1595190d4769b1
Signed-off-by: Sandeep Patil <sspatil@google.com>
diff --git a/libmeminfo/procmeminfo.cpp b/libmeminfo/procmeminfo.cpp
index fe91d25..e383934 100644
--- a/libmeminfo/procmeminfo.cpp
+++ b/libmeminfo/procmeminfo.cpp
@@ -44,6 +44,8 @@
to->pss += from.pss;
to->uss += from.uss;
+ to->swap += from.swap;
+
to->private_clean += from.private_clean;
to->private_dirty += from.private_dirty;
@@ -76,6 +78,10 @@
return wss_;
}
+const std::vector<uint16_t>& ProcMemInfo::SwapOffsets() const {
+ return swap_offsets_;
+}
+
bool ProcMemInfo::WssReset() {
if (!get_wss_) {
LOG(ERROR) << "Trying to reset working set from a memory usage counting object";
@@ -115,8 +121,8 @@
for (auto& vma : maps_) {
if (!ReadVmaStats(pagemap_fd.get(), vma, get_wss)) {
- LOG(ERROR) << "Failed to read page map for vma " << vma.name << "[" << vma.start
- << "-" << vma.end << "]";
+ LOG(ERROR) << "Failed to read page map for vma " << vma.name << "[" << vma.start << "-"
+ << vma.end << "]";
maps_.clear();
return false;
}
@@ -153,7 +159,8 @@
if (!PAGE_PRESENT(p) && !PAGE_SWAPPED(p)) continue;
if (PAGE_SWAPPED(p)) {
- // TODO: do what's needed for swapped pages
+ vma.usage.swap += pagesz;
+ swap_offsets_.emplace_back(PAGE_SWAP_OFFSET(p));
continue;
}