Merge "Unfreeze dependencies for apps receiving broadcast" into udc-dev

This commit is contained in:
Li Li
2023-03-31 18:24:28 +00:00
committed by Android (Google) Code Review
4 changed files with 33 additions and 7 deletions

View File

@@ -835,7 +835,7 @@ public class BroadcastQueueImpl extends BroadcastQueue {
OOM_ADJ_REASON_START_RECEIVER);
}
} else if (filter.receiverList.app != null) {
mService.mOomAdjuster.mCachedAppOptimizer.unfreezeTemporarily(filter.receiverList.app,
mService.mOomAdjuster.unfreezeTemporarily(filter.receiverList.app,
CachedAppOptimizer.UNFREEZE_REASON_START_RECEIVER);
}
@@ -1129,7 +1129,7 @@ public class BroadcastQueueImpl extends BroadcastQueue {
}
if (sendResult) {
if (r.callerApp != null) {
mService.mOomAdjuster.mCachedAppOptimizer.unfreezeTemporarily(
mService.mOomAdjuster.unfreezeTemporarily(
r.callerApp,
CachedAppOptimizer.UNFREEZE_REASON_FINISH_RECEIVER);
}

View File

@@ -927,7 +927,7 @@ class BroadcastQueueModernImpl extends BroadcastQueue {
final ProcessRecord app = r.resultToApp;
final IApplicationThread thread = (app != null) ? app.getOnewayThread() : null;
if (thread != null) {
mService.mOomAdjuster.mCachedAppOptimizer.unfreezeTemporarily(
mService.mOomAdjuster.unfreezeTemporarily(
app, CachedAppOptimizer.UNFREEZE_REASON_FINISH_RECEIVER);
if (r.shareIdentity && app.uid != r.callingUid) {
mService.mPackageManagerInt.grantImplicitAccess(r.userId, r.intent,
@@ -1513,7 +1513,7 @@ class BroadcastQueueModernImpl extends BroadcastQueue {
mService.updateLruProcessLocked(queue.app, false, null);
}
mService.mOomAdjuster.mCachedAppOptimizer.unfreezeTemporarily(queue.app,
mService.mOomAdjuster.unfreezeTemporarily(queue.app,
CachedAppOptimizer.UNFREEZE_REASON_START_RECEIVER);
if (queue.runningOomAdjusted) {

View File

@@ -349,6 +349,7 @@ public class OomAdjuster {
private final ArrayList<UidRecord> mTmpBecameIdle = new ArrayList<UidRecord>();
private final ActiveUids mTmpUidRecords;
private final ArrayDeque<ProcessRecord> mTmpQueue;
private final ArraySet<ProcessRecord> mTmpProcessSet = new ArraySet<>();
private final ArraySet<ProcessRecord> mPendingProcessSet = new ArraySet<>();
private final ArraySet<ProcessRecord> mProcessesInCycle = new ArraySet<>();
@@ -3472,4 +3473,29 @@ public class OomAdjuster {
CachedAppOptimizer.getUnfreezeReasonCodeFromOomAdjReason(oomAdjReason));
}
}
@GuardedBy("mService")
void unfreezeTemporarily(ProcessRecord app, @OomAdjuster.OomAdjReason int reason) {
if (!mCachedAppOptimizer.useFreezer()) {
return;
}
final ProcessCachedOptimizerRecord opt = app.mOptRecord;
if (!opt.isFrozen() && !opt.isPendingFreeze()) {
return;
}
final ArrayList<ProcessRecord> processes = mTmpProcessList;
final ActiveUids uids = mTmpUidRecords;
mTmpProcessSet.add(app);
collectReachableProcessesLocked(mTmpProcessSet, processes, uids);
mTmpProcessSet.clear();
// Now processes contains app's downstream and app
final int size = processes.size();
for (int i = 0; i < size; i++) {
ProcessRecord proc = processes.get(i);
mCachedAppOptimizer.unfreezeTemporarily(proc, reason);
}
processes.clear();
}
}

View File

@@ -222,7 +222,7 @@ public class BroadcastQueueTest {
realAms.mActivityTaskManager = new ActivityTaskManagerService(mContext);
realAms.mActivityTaskManager.initialize(null, null, mContext.getMainLooper());
realAms.mAtmInternal = spy(realAms.mActivityTaskManager.getAtmInternal());
realAms.mOomAdjuster.mCachedAppOptimizer = spy(realAms.mOomAdjuster.mCachedAppOptimizer);
realAms.mOomAdjuster = spy(realAms.mOomAdjuster);
realAms.mPackageManagerInt = mPackageManagerInt;
realAms.mUsageStatsService = mUsageStatsManagerInt;
realAms.mProcessesReady = true;
@@ -951,7 +951,7 @@ public class BroadcastQueueTest {
// cold-started apps to be thawed, but the modern stack does
} else {
// Confirm that app was thawed
verify(mAms.mOomAdjuster.mCachedAppOptimizer, atLeastOnce()).unfreezeTemporarily(
verify(mAms.mOomAdjuster, atLeastOnce()).unfreezeTemporarily(
eq(receiverApp), eq(OomAdjuster.OOM_ADJ_REASON_START_RECEIVER));
// Confirm that we added package to process
@@ -1394,7 +1394,7 @@ public class BroadcastQueueTest {
anyInt(), any());
// Finally, verify that we thawed the final receiver
verify(mAms.mOomAdjuster.mCachedAppOptimizer).unfreezeTemporarily(eq(callerApp),
verify(mAms.mOomAdjuster).unfreezeTemporarily(eq(callerApp),
eq(OomAdjuster.OOM_ADJ_REASON_FINISH_RECEIVER));
}