diff options
| author | 2023-06-15 17:48:20 +0000 | |
|---|---|---|
| committer | 2023-06-15 17:48:20 +0000 | |
| commit | 84647eb97b4b4577272ef50111a0d138f0e9a7fc (patch) | |
| tree | b0ca7b2dbd7b0bc9847fe69f380c03f8a611bbb1 | |
| parent | 7fa4d915180f10b5d23208ea51f40c6cda2cdcb0 (diff) | |
| parent | 997239631cfd69d60354ae3bc7e029178c52ad19 (diff) | |
Merge "Re-evaluate frozen state in CAO.onCleanupApplicationRecordLocked" into udc-dev
| -rw-r--r-- | services/core/java/com/android/server/am/CachedAppOptimizer.java | 12 | ||||
| -rw-r--r-- | services/core/java/com/android/server/am/UidRecord.java | 15 |
2 files changed, 21 insertions, 6 deletions
diff --git a/services/core/java/com/android/server/am/CachedAppOptimizer.java b/services/core/java/com/android/server/am/CachedAppOptimizer.java index 7773190d22b6..1fa2bea6e5ea 100644 --- a/services/core/java/com/android/server/am/CachedAppOptimizer.java +++ b/services/core/java/com/android/server/am/CachedAppOptimizer.java @@ -1525,10 +1525,14 @@ public final class CachedAppOptimizer { opt.setPendingFreeze(false); } - UidRecord uidRec = app.getUidRecord(); - if (uidRec != null && uidRec.isFrozen()) { - uidRec.setFrozen(false); - postUidFrozenMessage(uidRec.getUid(), false); + final UidRecord uidRec = app.getUidRecord(); + if (uidRec != null) { + final boolean isFrozen = uidRec.getNumOfProcs() > 1 + && uidRec.areAllProcessesFrozen(app); + if (isFrozen != uidRec.isFrozen()) { + uidRec.setFrozen(isFrozen); + postUidFrozenMessage(uidRec.getUid(), isFrozen); + } } mFrozenProcesses.delete(app.getPid()); diff --git a/services/core/java/com/android/server/am/UidRecord.java b/services/core/java/com/android/server/am/UidRecord.java index 993088ef106e..4329afc7e863 100644 --- a/services/core/java/com/android/server/am/UidRecord.java +++ b/services/core/java/com/android/server/am/UidRecord.java @@ -345,21 +345,32 @@ public final class UidRecord { } /** + * Check whether all processes in the Uid are frozen. + * + * @param excluding Skip this process record during the check. * @return true if all processes in the Uid are frozen, false otherwise. */ @GuardedBy(anyOf = {"mService", "mProcLock"}) - public boolean areAllProcessesFrozen() { + public boolean areAllProcessesFrozen(ProcessRecord excluding) { for (int i = mProcRecords.size() - 1; i >= 0; i--) { final ProcessRecord app = mProcRecords.valueAt(i); final ProcessCachedOptimizerRecord opt = app.mOptRecord; - if (!opt.isFrozen()) { + if (excluding != app && !opt.isFrozen()) { return false; } } return true; } + /** + * @return true if all processes in the Uid are frozen, false otherwise. + */ + @GuardedBy(anyOf = {"mService", "mProcLock"}) + public boolean areAllProcessesFrozen() { + return areAllProcessesFrozen(null); + } + @GuardedBy(anyOf = {"mService", "mProcLock"}) public void setFrozen(boolean frozen) { mUidIsFrozen = frozen; |