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

Commit 952b9767 authored by Treehugger Robot's avatar Treehugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Move forceProcessStateUpTo() to ProcessStateController" into main

parents 5e0c3966 fb0d9121
Loading
Loading
Loading
Loading
+2 −1
Original line number Diff line number Diff line
@@ -2101,7 +2101,8 @@ class BroadcastQueueImpl extends BroadcastQueue {
            mService.mProcessStateController.noteBroadcastDeliveryStarted(queue.app,
                    queue.getPreferredSchedulingGroupLocked());
            if (queue.runningOomAdjusted) {
                queue.app.mState.forceProcessStateUpTo(ActivityManager.PROCESS_STATE_RECEIVER);
                mService.mProcessStateController.forceProcessStateUpTo(queue.app,
                        ActivityManager.PROCESS_STATE_RECEIVER);
                mService.enqueueOomAdjTargetLocked(queue.app);
            }
        }
+2 −2
Original line number Diff line number Diff line
@@ -1630,7 +1630,7 @@ class ProcessRecord implements WindowProcessListener {
    public void setPendingUiCleanAndForceProcessStateUpTo(int newState) {
        synchronized (mService) {
            setPendingUiClean(true);
            mState.forceProcessStateUpTo(newState);
            mService.mProcessStateController.forceProcessStateUpTo(this, newState);
        }
    }

@@ -1686,7 +1686,7 @@ class ProcessRecord implements WindowProcessListener {
                    true /* activityChange */, true /* updateOomAdj */);
            setPendingUiClean(true);
            mService.mProcessStateController.setHasShownUi(this, true);
            mState.forceProcessStateUpTo(topProcessState);
            mService.mProcessStateController.forceProcessStateUpTo(this, topProcessState);
        }
    }

+21 −4
Original line number Diff line number Diff line
@@ -54,7 +54,9 @@ public class ProcessStateController {
    private final OomAdjuster mOomAdjuster;
    private final BiConsumer<ConnectionRecord, Boolean> mServiceBinderCallUpdater;

    // TODO(b/425766486): Investigate if we could use java.util.concurrent.locks.ReadWriteLock.
    private final Object mLock;
    private final Object mProcLock;

    private final Handler mActivityStateHandler;

@@ -64,12 +66,14 @@ public class ProcessStateController {

    private ProcessStateController(ActivityManagerService ams, ProcessList processList,
            ActiveUids activeUids, ServiceThread handlerThread,
            CachedAppOptimizer cachedAppOptimizer, Object lock, Looper activityStateLooper,
            Consumer<ProcessRecord> topChangeCallback, OomAdjuster.Injector oomAdjInjector) {
            CachedAppOptimizer cachedAppOptimizer, Object lock, Object procLock,
            Looper activityStateLooper, Consumer<ProcessRecord> topChangeCallback,
            OomAdjuster.Injector oomAdjInjector) {
        mOomAdjuster = new OomAdjusterImpl(ams, processList, activeUids, handlerThread,
                mGlobalState, cachedAppOptimizer, oomAdjInjector);

        mLock = lock;
        mProcLock = procLock;
        mActivityStateHandler = new Handler(activityStateLooper);
        mTopChangeCallback = topChangeCallback;
        final Handler serviceHandler = new Handler(handlerThread.getLooper());
@@ -466,6 +470,19 @@ public class ProcessStateController {
        proc.setActiveInstrumentation(activeInstrumentation);
    }

    @GuardedBy("mLock")
    void forceProcessStateUpTo(@NonNull ProcessRecord proc, int newState) {
        final int prevProcState = proc.mState.getReportedProcState();
        if (prevProcState > newState) {
            synchronized (mProcLock) {
                proc.mState.setReportedProcState(newState);
                proc.mState.setCurProcState(newState);
                proc.mState.setCurRawProcState(newState);
                mOomAdjuster.onProcessStateChanged(proc, prevProcState);
            }
        }
    }

    /********************* Process Visibility State Events *********************/
    /**
     * Note whether a process has Top UI or not.
@@ -955,8 +972,8 @@ public class ProcessStateController {
                mOomAdjInjector = new OomAdjuster.Injector();
            }
            return new ProcessStateController(mAms, mProcessList, mActiveUids, mHandlerThread,
                    mCachedAppOptimizer, mLock, mActivityStateLooper, mTopChangeCallback,
                    mOomAdjInjector);
                    mCachedAppOptimizer, mLock, mAms.mProcLock, mActivityStateLooper,
                    mTopChangeCallback, mOomAdjInjector);
        }

        /**
+0 −13
Original line number Diff line number Diff line
@@ -620,19 +620,6 @@ final class ProcessStateRecord {
        return mRepProcState;
    }

    @GuardedBy("mService")
    void forceProcessStateUpTo(int newState) {
        if (mRepProcState > newState) {
            synchronized (mProcLock) {
                final int prevProcState = mRepProcState;
                setReportedProcState(newState);
                setCurProcState(newState);
                setCurRawProcState(newState);
                mService.mOomAdjuster.onProcessStateChanged(mApp, prevProcState);
            }
        }
    }

    @GuardedBy({"mService", "mProcLock"})
    void setSetProcState(int setProcState) {
        if (ActivityManager.isProcStateCached(mSetProcState)