Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit e6f8b654 authored by Li Li's avatar Li Li Committed by Android (Google) Code Review
Browse files

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

parents 6abb34e7 db1c135a
Loading
Loading
Loading
Loading
+2 −2
Original line number Diff line number Diff line
@@ -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);
                        }
+2 −2
Original line number Diff line number Diff line
@@ -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) {
+26 −0
Original line number Diff line number Diff line
@@ -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();
    }
}
+3 −3
Original line number Diff line number Diff line
@@ -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));
    }