summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Mark Fasheh <mfasheh@google.com> 2023-06-15 17:48:20 +0000
committer Android (Google) Code Review <android-gerrit@google.com> 2023-06-15 17:48:20 +0000
commit84647eb97b4b4577272ef50111a0d138f0e9a7fc (patch)
treeb0ca7b2dbd7b0bc9847fe69f380c03f8a611bbb1
parent7fa4d915180f10b5d23208ea51f40c6cda2cdcb0 (diff)
parent997239631cfd69d60354ae3bc7e029178c52ad19 (diff)
Merge "Re-evaluate frozen state in CAO.onCleanupApplicationRecordLocked" into udc-dev
-rw-r--r--services/core/java/com/android/server/am/CachedAppOptimizer.java12
-rw-r--r--services/core/java/com/android/server/am/UidRecord.java15
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;