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

Commit fb0d9121 authored by Chih-Yu Huang's avatar Chih-Yu Huang
Browse files

Move forceProcessStateUpTo() to ProcessStateController

The `forceProcessStateUpTo()` method has been moved from
`ProcessStateRecord` to `ProcessStateController`. This change
slightly reduces the dependency from `ProcessStateRecord` to the
`ActivityManagerService` and `ProcessRecord`.

Bug: 425766486
Test: mmm frameworks/base/services/
Test: atest MockingOomAdjusterTests
Flag: EXEMPT pure refactor

Change-Id: Ibd621238c04ca928717a4d99ad9bfea037bc0f95
parent 4c10ff77
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)