Merge "Skip scheduling cached app compaction if there's already a pending one" into sc-dev

This commit is contained in:
Jing Ji
2021-03-23 22:42:47 +00:00
committed by Android (Google) Code Review
2 changed files with 43 additions and 14 deletions

View File

@@ -382,10 +382,13 @@ public final class CachedAppOptimizer {
@GuardedBy("mProcLock")
void compactAppSome(ProcessRecord app) {
app.mOptRecord.setReqCompactAction(COMPACT_PROCESS_SOME);
mPendingCompactionProcesses.add(app);
mCompactionHandler.sendMessage(
mCompactionHandler.obtainMessage(
COMPACT_PROCESS_MSG, app.mState.getSetAdj(), app.mState.getSetProcState()));
if (!app.mOptRecord.hasPendingCompact()) {
app.mOptRecord.setHasPendingCompact(true);
mPendingCompactionProcesses.add(app);
mCompactionHandler.sendMessage(
mCompactionHandler.obtainMessage(
COMPACT_PROCESS_MSG, app.mState.getSetAdj(), app.mState.getSetProcState()));
}
}
@GuardedBy("mProcLock")
@@ -396,10 +399,13 @@ public final class CachedAppOptimizer {
&& app.mState.getCurAdj() >= mCompactThrottleMinOomAdj
&& app.mState.getCurAdj() <= mCompactThrottleMaxOomAdj) {
app.mOptRecord.setReqCompactAction(COMPACT_PROCESS_FULL);
mPendingCompactionProcesses.add(app);
mCompactionHandler.sendMessage(
mCompactionHandler.obtainMessage(
COMPACT_PROCESS_MSG, app.mState.getSetAdj(), app.mState.getSetProcState()));
if (!app.mOptRecord.hasPendingCompact()) {
app.mOptRecord.setHasPendingCompact(true);
mPendingCompactionProcesses.add(app);
mCompactionHandler.sendMessage(
mCompactionHandler.obtainMessage(
COMPACT_PROCESS_MSG, app.mState.getSetAdj(), app.mState.getSetProcState()));
}
} else {
if (DEBUG_COMPACTION) {
Slog.d(TAG_AM, "Skipping full compaction for " + app.processName
@@ -412,10 +418,13 @@ public final class CachedAppOptimizer {
@GuardedBy("mProcLock")
void compactAppPersistent(ProcessRecord app) {
app.mOptRecord.setReqCompactAction(COMPACT_PROCESS_PERSISTENT);
mPendingCompactionProcesses.add(app);
mCompactionHandler.sendMessage(
mCompactionHandler.obtainMessage(
if (!app.mOptRecord.hasPendingCompact()) {
app.mOptRecord.setHasPendingCompact(true);
mPendingCompactionProcesses.add(app);
mCompactionHandler.sendMessage(
mCompactionHandler.obtainMessage(
COMPACT_PROCESS_MSG, app.mState.getCurAdj(), app.mState.getSetProcState()));
}
}
@GuardedBy("mProcLock")
@@ -427,10 +436,13 @@ public final class CachedAppOptimizer {
@GuardedBy("mProcLock")
void compactAppBfgs(ProcessRecord app) {
app.mOptRecord.setReqCompactAction(COMPACT_PROCESS_BFGS);
mPendingCompactionProcesses.add(app);
mCompactionHandler.sendMessage(
mCompactionHandler.obtainMessage(
if (!app.mOptRecord.hasPendingCompact()) {
app.mOptRecord.setHasPendingCompact(true);
mPendingCompactionProcesses.add(app);
mCompactionHandler.sendMessage(
mCompactionHandler.obtainMessage(
COMPACT_PROCESS_MSG, app.mState.getCurAdj(), app.mState.getSetProcState()));
}
}
@GuardedBy("mProcLock")
@@ -954,6 +966,7 @@ public final class CachedAppOptimizer {
pendingAction = opt.getReqCompactAction();
pid = proc.getPid();
name = proc.processName;
opt.setHasPendingCompact(false);
// don't compact if the process has returned to perceptible
// and this is only a cached/home/prev compaction

View File

@@ -46,6 +46,12 @@ final class ProcessCachedOptimizerRecord {
@GuardedBy("mProcLock")
private int mLastCompactAction;
/**
* This process has been scheduled for a memory compaction.
*/
@GuardedBy("mProcLock")
private boolean mPendingCompact;
/**
* True when the process is frozen.
*/
@@ -100,6 +106,16 @@ final class ProcessCachedOptimizerRecord {
mLastCompactAction = lastCompactAction;
}
@GuardedBy("mProcLock")
boolean hasPendingCompact() {
return mPendingCompact;
}
@GuardedBy("mProcLock")
void setHasPendingCompact(boolean pendingCompact) {
mPendingCompact = pendingCompact;
}
@GuardedBy("mProcLock")
boolean isFrozen() {
return mFrozen;