From 775770b2c15f5e084b4b0a9f955a3415b6324294 Mon Sep 17 00:00:00 2001 From: Li Li Date: Fri, 14 May 2021 17:47:04 -0700 Subject: [PATCH] Freezer: fix delayed freezing operation AMS will compute and apply OomAdj frequently, updating the value again and again. That makes freezer fall into a loop, removing and resetting delayed freezing messages. Fix it by dropping those redundant messages. Bug: 188189336 Bug: 181278288 Test: Verified apps are frozen 10 min after they become cached. Change-Id: I83aac961b00db129e0d84f1f4f485012c8aa90d4 --- .../core/java/com/android/server/am/CachedAppOptimizer.java | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/services/core/java/com/android/server/am/CachedAppOptimizer.java b/services/core/java/com/android/server/am/CachedAppOptimizer.java index 709139e462a61..4629d0b77799f 100644 --- a/services/core/java/com/android/server/am/CachedAppOptimizer.java +++ b/services/core/java/com/android/server/am/CachedAppOptimizer.java @@ -881,7 +881,10 @@ public final class CachedAppOptimizer { @GuardedBy({"mAm", "mProcLock"}) void freezeAppAsyncLSP(ProcessRecord app) { - mFreezeHandler.removeMessages(SET_FROZEN_PROCESS_MSG, app); + if (mFreezeHandler.hasMessages(SET_FROZEN_PROCESS_MSG, app)) { + // Skip redundant DO_FREEZE message + return; + } mFreezeHandler.sendMessageDelayed( mFreezeHandler.obtainMessage(