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();