From 3536bf7b5531a6f7a42d1c0366e36a651ebba656 Mon Sep 17 00:00:00 2001 From: Edgar Arriaga Date: Thu, 25 Feb 2021 19:20:05 -0800 Subject: [PATCH] Avoid unnecessary smaps logic during app compaction ForEachVma can extract data from both maps and smaps files, however the smaps logic is not used during app compaction. Replace its usage with ForEachVmaFromMaps which reads only maps file and skips any smaps logic. This results in ~22% CPU usage reduction. Test: Manual Bug: 181174877 Signed-off-by: Edgar Arriaga Change-Id: I165f211c2084676bc7872d190ffad14141f56ea8 Merged-In: I165f211c2084676bc7872d190ffad14141f56ea8 --- .../core/jni/com_android_server_am_CachedAppOptimizer.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/services/core/jni/com_android_server_am_CachedAppOptimizer.cpp b/services/core/jni/com_android_server_am_CachedAppOptimizer.cpp index 456ff0049303b..f78e7bfc01a74 100644 --- a/services/core/jni/com_android_server_am_CachedAppOptimizer.cpp +++ b/services/core/jni/com_android_server_am_CachedAppOptimizer.cpp @@ -135,7 +135,7 @@ static int getAnyPageAdvice(const Vma& vma) { static int compactProcess(int pid, VmaToAdviseFunc vmaToAdviseFunc) { ProcMemInfo meminfo(pid); std::vector pageoutVmas, coldVmas; - auto vmaCollectorCb = [&](Vma vma) { + auto vmaCollectorCb = [&coldVmas,&pageoutVmas,&vmaToAdviseFunc](const Vma& vma) { int advice = vmaToAdviseFunc(vma); switch (advice) { case MADV_COLD: @@ -146,7 +146,7 @@ static int compactProcess(int pid, VmaToAdviseFunc vmaToAdviseFunc) { break; } }; - meminfo.ForEachVma(vmaCollectorCb); + meminfo.ForEachVmaFromMaps(vmaCollectorCb); int err = compactMemory(pageoutVmas, pid, MADV_PAGEOUT); if (!err) {