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
diff --git a/services/core/java/com/android/server/am/CachedAppOptimizer.java b/services/core/java/com/android/server/am/CachedAppOptimizer.java
index 709139e..4629d0b 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 @@
 
     @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(