Merge "Re-evaluate frozen state in CAO.onCleanupApplicationRecordLocked" into udc-dev

This commit is contained in:
Mark Fasheh
2023-06-15 17:48:20 +00:00
committed by Android (Google) Code Review
2 changed files with 21 additions and 6 deletions

View File

@@ -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());

View File

@@ -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;