Fix a regression in setting oom_adj for cached processes

If a cached process happens to be part of a cycle,
it might end up at a score of 1001, which is never
reported to lmkd and hence not killed when under
memory pressure.

Fix: When recomputing oom adjust scores for apps in cycles,
use the last computed raw adj value instead of
UNKNOWN_ADJ.

Fixes: 135948152
Test: atest CtsAppTestCases:ActivityManagerProcessStateTests
      Launch specific known apps that have internal cycles
        and ensure they end up with an oom_adj in the 900s.

Change-Id: I000e6a06cd23873d09b9df3e9ddd280232757d3a
This commit is contained in:
Amith Yamasani
2019-06-24 16:47:44 -07:00
parent 956197e8e0
commit 853d509c53

View File

@@ -431,7 +431,7 @@ public final class OomAdjuster {
for (int i = 0; i < N; i++) { for (int i = 0; i < N; i++) {
ProcessRecord app = mProcessList.mLruProcesses.get(i); ProcessRecord app = mProcessList.mLruProcesses.get(i);
if (!app.killedByAm && app.thread != null && app.containsCycle == true) { if (!app.killedByAm && app.thread != null && app.containsCycle == true) {
if (computeOomAdjLocked(app, ProcessList.UNKNOWN_ADJ, TOP_APP, true, now, if (computeOomAdjLocked(app, app.getCurRawAdj(), TOP_APP, true, now,
true)) { true)) {
retryCycles = true; retryCycles = true;
} }