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

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

Merge changes I4a6be982,Id48d4272 into main

* changes:
  am: Move modifyRawOomAdj to OomAdjuster
  psc: Move ProcessRecord.mPendingFinishAttach to ProcessRecordInternal
parents fb34ba2d d85d8c22
Loading
Loading
Loading
Loading
+34 −5
Original line number Diff line number Diff line
@@ -995,7 +995,7 @@ public abstract class OomAdjuster {
                        targetAdj += 10 + mConstants.TIERED_CACHED_ADJ_UI_TIER_SIZE;
                    }
                    state.setCurRawAdj(targetAdj);
                    state.setCurAdj(psr.modifyRawOomAdj(targetAdj));
                    state.setCurAdj(applyBindAboveClientToAdj(psr.hasAboveClient(), targetAdj));
                }
            }
        } else {
@@ -1096,8 +1096,10 @@ public abstract class OomAdjuster {
                            // This process is a cached process holding activities...
                            // assign it the next cached value for that type, and then
                            // step that cached level.
                            state.setCurRawAdj(curCachedAdj + curCachedImpAdj);
                            state.setCurAdj(psr.modifyRawOomAdj(curCachedAdj + curCachedImpAdj));
                            final int rawAdj = curCachedAdj + curCachedImpAdj;
                            state.setCurRawAdj(rawAdj);
                            state.setCurAdj(
                                    applyBindAboveClientToAdj(psr.hasAboveClient(), rawAdj));
                            if (DEBUG_LRU) {
                                Slog.d(TAG_LRU, "Assigning activity LRU #" + i
                                        + " adj: " + state.getCurAdj()
@@ -1124,7 +1126,8 @@ public abstract class OomAdjuster {
                            // cached level will be treated as empty (since their process
                            // state is still as a service), which is what we want.
                            state.setCurRawAdj(curEmptyAdj);
                            state.setCurAdj(psr.modifyRawOomAdj(curEmptyAdj));
                            state.setCurAdj(
                                    applyBindAboveClientToAdj(psr.hasAboveClient(), curEmptyAdj));
                            if (DEBUG_LRU) {
                                Slog.d(TAG_LRU, "Assigning empty LRU #" + i
                                        + " adj: " + state.getCurAdj()
@@ -1863,7 +1866,7 @@ public abstract class OomAdjuster {
        final ProcessRecordInternal state = app;
        state.setCurRawAdj(adj);

        adj = app.mServices.modifyRawOomAdj(adj);
        adj = applyBindAboveClientToAdj(app.mServices.hasAboveClient(), adj);
        if (adj > state.getMaxAdj()) {
            adj = state.getMaxAdj();
            if (adj <= PERCEPTIBLE_LOW_APP_ADJ) {
@@ -1876,6 +1879,32 @@ public abstract class OomAdjuster {
        return schedGroup;
    }

    private static int applyBindAboveClientToAdj(boolean hasAboveClient, int adj) {
        if (hasAboveClient) {
            // If this process has bound to any services with BIND_ABOVE_CLIENT,
            // then we need to drop its adjustment to be lower than the service's
            // in order to honor the request.  We want to drop it by one adjustment
            // level...  but there is special meaning applied to various levels so
            // we will skip some of them.
            if (adj < ProcessList.FOREGROUND_APP_ADJ) {
                // System process will not get dropped, ever
            } else if (adj < ProcessList.VISIBLE_APP_ADJ) {
                adj = ProcessList.VISIBLE_APP_ADJ;
            } else if (adj < ProcessList.PERCEPTIBLE_APP_ADJ) {
                adj = ProcessList.PERCEPTIBLE_APP_ADJ;
            } else if (adj < ProcessList.PERCEPTIBLE_LOW_APP_ADJ) {
                adj = ProcessList.PERCEPTIBLE_LOW_APP_ADJ;
            } else if (adj < ProcessList.SERVICE_ADJ) {
                adj = ProcessList.SERVICE_ADJ;
            } else if (adj < ProcessList.CACHED_APP_MIN_ADJ) {
                adj = ProcessList.CACHED_APP_MIN_ADJ;
            } else if (adj < ProcessList.CACHED_APP_MAX_ADJ) {
                adj++;
            }
        }
        return adj;
    }

    @GuardedBy({"mService", "mProcLock"})
    protected void setIntermediateProcStateLSP(ProcessRecordInternal state, int procState) {
        state.setCurProcState(procState);
+1 −17
Original line number Diff line number Diff line
@@ -186,12 +186,6 @@ class ProcessRecord extends ProcessRecordInternal implements WindowProcessListen
    @GuardedBy("mService")
    private boolean mPendingStart;

    /**
     * Process finish attach application is pending.
     */
    @GuardedBy("mService")
    private boolean mPendingFinishAttach;

    /**
     * Seq no. Indicating the latest process start associated with this process record.
     */
@@ -811,19 +805,9 @@ class ProcessRecord extends ProcessRecordInternal implements WindowProcessListen
        mPendingStart = pendingStart;
    }

    @GuardedBy("mService")
    void setPendingFinishAttach(boolean pendingFinishAttach) {
        mPendingFinishAttach = pendingFinishAttach;
    }

    @GuardedBy("mService")
    boolean isPendingFinishAttach() {
        return mPendingFinishAttach;
    }

    @GuardedBy("mService")
    boolean isThreadReady() {
        return mThread != null && !mPendingFinishAttach;
        return mThread != null && !isPendingFinishAttach();
    }

    @GuardedBy("mService")
+0 −26
Original line number Diff line number Diff line
@@ -376,32 +376,6 @@ final class ProcessServiceRecord {
        return mHasAboveClient;
    }

    int modifyRawOomAdj(int adj) {
        if (mHasAboveClient) {
            // If this process has bound to any services with BIND_ABOVE_CLIENT,
            // then we need to drop its adjustment to be lower than the service's
            // in order to honor the request.  We want to drop it by one adjustment
            // level...  but there is special meaning applied to various levels so
            // we will skip some of them.
            if (adj < ProcessList.FOREGROUND_APP_ADJ) {
                // System process will not get dropped, ever
            } else if (adj < ProcessList.VISIBLE_APP_ADJ) {
                adj = ProcessList.VISIBLE_APP_ADJ;
            } else if (adj < ProcessList.PERCEPTIBLE_APP_ADJ) {
                adj = ProcessList.PERCEPTIBLE_APP_ADJ;
            } else if (adj < ProcessList.PERCEPTIBLE_LOW_APP_ADJ) {
                adj = ProcessList.PERCEPTIBLE_LOW_APP_ADJ;
            } else if (adj < ProcessList.SERVICE_ADJ) {
                adj = ProcessList.SERVICE_ADJ;
            } else if (adj < ProcessList.CACHED_APP_MIN_ADJ) {
                adj = ProcessList.CACHED_APP_MIN_ADJ;
            } else if (adj < ProcessList.CACHED_APP_MAX_ADJ) {
                adj++;
            }
        }
        return adj;
    }

    boolean isTreatedLikeActivity() {
        return mTreatLikeActivity;
    }
+2 −1
Original line number Diff line number Diff line
@@ -349,7 +349,8 @@ public class ProcessStateController {
     * Note whether a process is pending attach or not.
     */
    @GuardedBy("mLock")
    public void setPendingFinishAttach(@NonNull ProcessRecord proc, boolean pendingFinishAttach) {
    public void setPendingFinishAttach(@NonNull ProcessRecordInternal proc,
            boolean pendingFinishAttach) {
        proc.setPendingFinishAttach(pendingFinishAttach);
    }

+14 −0
Original line number Diff line number Diff line
@@ -543,6 +543,10 @@ public abstract class ProcessRecordInternal {
    @GuardedBy("mServiceLock")
    private boolean mHasRecentTask = false;

    /** Process finish attach application is pending. */
    @GuardedBy("mServiceLock")
    private boolean mPendingFinishAttach;

    // Below are the cached task info for OomAdjuster only
    private static final int VALUE_INVALID = -1;
    private static final int VALUE_FALSE = 0;
@@ -1393,6 +1397,16 @@ public abstract class ProcessRecordInternal {
        mFollowupUpdateUptimeMs = updateUptimeMs;
    }

    @GuardedBy("mServiceLock")
    public void setPendingFinishAttach(boolean pendingFinishAttach) {
        mPendingFinishAttach = pendingFinishAttach;
    }

    @GuardedBy("mServiceLock")
    public boolean isPendingFinishAttach() {
        return mPendingFinishAttach;
    }

    /**
     * Performs cleanup operations on the ProcessRecordInternal when the application record is
     * cleaned up. This resets various state flags and adjustment values.