From 7e34869ebd3df187a31f7240fb527a0f466945f0 Mon Sep 17 00:00:00 2001 From: Edgar Arriaga Date: Thu, 25 Feb 2021 19:20:05 -0800 Subject: 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 --- services/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 87358476238b..e5a62d9cc1b2 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) { -- cgit v1.2.3-59-g8ed1b