Add benchmarks for reading proc maps

Test: Ran libmeminfo_benchmark benchmark
Bug: 181174877

Signed-off-by: Edgar Arriaga <[email protected]>
Change-Id: I0189550de5eda5b539ffba8dde4e99ffe2173614
diff --git a/libmeminfo_benchmark.cpp b/libmeminfo_benchmark.cpp
index 7450c6c..e076c9c 100644
--- a/libmeminfo_benchmark.cpp
+++ b/libmeminfo_benchmark.cpp
@@ -22,6 +22,7 @@
 #include <stdio.h>
 #include <sys/stat.h>
 #include <sys/types.h>
+#include <unistd.h>
 
 #include <string>
 
@@ -36,6 +37,7 @@
 using ::android::meminfo::ProcMemInfo;
 using ::android::meminfo::SmapsOrRollupFromFile;
 using ::android::meminfo::SysMemInfo;
+using ::android::meminfo::Vma;
 
 enum {
     MEMINFO_TOTAL,
@@ -544,4 +546,40 @@
 }
 BENCHMARK(BM_SmapsRollup_new);
 
+static void BM_MapsVmaParsing_ForEachVmaFromMaps(benchmark::State& state) {
+    state.PauseTiming();
+    int pid = getpid();
+    ProcMemInfo meminfo(pid);
+    state.ResumeTiming();
+
+    std::vector<Vma> vmas;
+    auto vmaCollectorCb = [&](const Vma& vma) { vmas.push_back(vma); };
+    for (int i = 0; i < 100000; ++i) {
+        meminfo.ForEachVmaFromMaps(vmaCollectorCb);
+
+        state.PauseTiming();
+        vmas.clear();
+        state.ResumeTiming();
+    }
+}
+BENCHMARK(BM_MapsVmaParsing_ForEachVmaFromMaps)->Unit(benchmark::kMillisecond);
+
+static void BM_MapsVmaParsing_ForEachVma(benchmark::State& state) {
+    state.PauseTiming();
+    int pid = getpid();
+    ProcMemInfo meminfo(pid);
+    state.ResumeTiming();
+
+    std::vector<Vma> vmas;
+    auto vmaCollectorCb = [&](const Vma& vma) { vmas.push_back(vma); };
+    for (int i = 0; i < 100000; ++i) {
+        meminfo.ForEachVma(vmaCollectorCb, false);
+
+        state.PauseTiming();
+        vmas.clear();
+        state.ResumeTiming();
+    }
+}
+BENCHMARK(BM_MapsVmaParsing_ForEachVma)->Unit(benchmark::kMillisecond);
+
 BENCHMARK_MAIN();