Merge "Unfreeze dependencies for apps receiving broadcast" into udc-dev
This commit is contained in:
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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));
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user