Loading services/core/java/com/android/server/am/BroadcastQueueImpl.java +2 −2 Original line number Diff line number Diff line Loading @@ -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); } Loading Loading @@ -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); } Loading services/core/java/com/android/server/am/BroadcastQueueModernImpl.java +2 −2 Original line number Diff line number Diff line Loading @@ -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, Loading Loading @@ -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) { Loading services/core/java/com/android/server/am/OomAdjuster.java +26 −0 Original line number Diff line number Diff line Loading @@ -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<>(); Loading Loading @@ -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(); } } services/tests/mockingservicestests/src/com/android/server/am/BroadcastQueueTest.java +3 −3 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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 Loading Loading @@ -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)); } Loading Loading
services/core/java/com/android/server/am/BroadcastQueueImpl.java +2 −2 Original line number Diff line number Diff line Loading @@ -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); } Loading Loading @@ -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); } Loading
services/core/java/com/android/server/am/BroadcastQueueModernImpl.java +2 −2 Original line number Diff line number Diff line Loading @@ -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, Loading Loading @@ -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) { Loading
services/core/java/com/android/server/am/OomAdjuster.java +26 −0 Original line number Diff line number Diff line Loading @@ -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<>(); Loading Loading @@ -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(); } }
services/tests/mockingservicestests/src/com/android/server/am/BroadcastQueueTest.java +3 −3 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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 Loading Loading @@ -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)); } Loading