From 17072cefabf162c5c911ead404617892065b023b Mon Sep 17 00:00:00 2001 From: Tim Murray Date: Wed, 30 Nov 2022 10:34:10 -0800 Subject: [PATCH] OomAdjuster: skip persistent/system processes in cycle detection Apps with negative oom_adj scores are either system_server or persistent. As a result, those apps don't need to be considered in cycle detection because no binding to that app can possibly promote the persistent process to a more important process state. Bug: 260854804 Test: atest MockingOomAdjusterTests Change-Id: I632dc41a5660935b9c49af3c01243314dab4cc0a --- services/core/java/com/android/server/am/OomAdjuster.java | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/services/core/java/com/android/server/am/OomAdjuster.java b/services/core/java/com/android/server/am/OomAdjuster.java index 66a8babe224eb..f75b62a96c81b 100644 --- a/services/core/java/com/android/server/am/OomAdjuster.java +++ b/services/core/java/com/android/server/am/OomAdjuster.java @@ -704,7 +704,9 @@ public class OomAdjuster { ConnectionRecord cr = psr.getConnectionAt(i); ProcessRecord service = (cr.flags & ServiceInfo.FLAG_ISOLATED_PROCESS) != 0 ? cr.binding.service.isolationHostProc : cr.binding.service.app; - if (service == null || service == pr) { + if (service == null || service == pr + || ((service.mState.getMaxAdj() >= ProcessList.SYSTEM_ADJ) + && (service.mState.getMaxAdj() < FOREGROUND_APP_ADJ))) { continue; } containsCycle |= service.mState.isReachable(); @@ -724,7 +726,9 @@ public class OomAdjuster { for (int i = ppr.numberOfProviderConnections() - 1; i >= 0; i--) { ContentProviderConnection cpc = ppr.getProviderConnectionAt(i); ProcessRecord provider = cpc.provider.proc; - if (provider == null || provider == pr) { + if (provider == null || provider == pr + || ((provider.mState.getMaxAdj() >= ProcessList.SYSTEM_ADJ) + && (provider.mState.getMaxAdj() < FOREGROUND_APP_ADJ))) { continue; } containsCycle |= provider.mState.isReachable();