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

Commit ce42c9f2 authored by Aka (Chih-Yu) Huang's avatar Aka (Chih-Yu) Huang Committed by Android (Google) Code Review
Browse files

Merge changes I97306978,I5c41ac9e into main

* changes:
  am: Make forEachClientConnectionLSP use internal classes
  am: Clean up unused methods and variables at OomAdjuster
parents 98ada6ae cfebc957
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -374,6 +374,7 @@ public abstract class ActivityManagerInternal {
     */
    public abstract boolean hasRunningActivity(int uid, @Nullable String packageName);

    // TODO: b/425766486 - Define the OOM_ADJ_* value by AppProtoEnums.
    /**
     * Oom Adj Reason: none - internal use only, do not use it.
     * @hide
+10 −0
Original line number Diff line number Diff line
@@ -150,6 +150,16 @@ final class ConnectionRecord extends ConnectionRecordInternal {
        return binding.service;
    }

    @Override
    public ProcessRecord getClient() {
        return binding.client;
    }

    @Override
    public ProcessRecord getAttributedClient() {
        return binding.attributedClient;
    }

    public String getClientProcessName() {
        return clientProcessName;
    }
+5 −0
Original line number Diff line number Diff line
@@ -120,6 +120,11 @@ public final class ContentProviderConnection extends Binder implements
        return provider;
    }

    @Override
    public ProcessRecord getClient() {
        return client;
    }

    public void stopAssociation() {
        if (association == null) {
            return; // early exit to optimize on oomadj cycles
+2 −75
Original line number Diff line number Diff line
@@ -121,7 +121,6 @@ import android.annotation.UserIdInt;
import android.app.ActivityManager;
import android.app.ActivityManagerInternal.OomAdjReason;
import android.app.ActivityThread;
import android.app.AppProtoEnums;
import android.app.ApplicationExitInfo;
import android.app.usage.UsageEvents;
import android.content.BroadcastReceiver;
@@ -231,67 +230,6 @@ public abstract class OomAdjuster {
    public @interface ImplicitCpuTimeReasons {
    }

    public static final int oomAdjReasonToProto(@OomAdjReason int oomReason) {
        switch (oomReason) {
            case OOM_ADJ_REASON_NONE:
                return AppProtoEnums.OOM_ADJ_REASON_NONE;
            case OOM_ADJ_REASON_ACTIVITY:
                return AppProtoEnums.OOM_ADJ_REASON_ACTIVITY;
            case OOM_ADJ_REASON_FINISH_RECEIVER:
                return AppProtoEnums.OOM_ADJ_REASON_FINISH_RECEIVER;
            case OOM_ADJ_REASON_START_RECEIVER:
                return AppProtoEnums.OOM_ADJ_REASON_START_RECEIVER;
            case OOM_ADJ_REASON_BIND_SERVICE:
                return AppProtoEnums.OOM_ADJ_REASON_BIND_SERVICE;
            case OOM_ADJ_REASON_UNBIND_SERVICE:
                return AppProtoEnums.OOM_ADJ_REASON_UNBIND_SERVICE;
            case OOM_ADJ_REASON_START_SERVICE:
                return AppProtoEnums.OOM_ADJ_REASON_START_SERVICE;
            case OOM_ADJ_REASON_GET_PROVIDER:
                return AppProtoEnums.OOM_ADJ_REASON_GET_PROVIDER;
            case OOM_ADJ_REASON_REMOVE_PROVIDER:
                return AppProtoEnums.OOM_ADJ_REASON_REMOVE_PROVIDER;
            case OOM_ADJ_REASON_UI_VISIBILITY:
                return AppProtoEnums.OOM_ADJ_REASON_UI_VISIBILITY;
            case OOM_ADJ_REASON_ALLOWLIST:
                return AppProtoEnums.OOM_ADJ_REASON_ALLOWLIST;
            case OOM_ADJ_REASON_PROCESS_BEGIN:
                return AppProtoEnums.OOM_ADJ_REASON_PROCESS_BEGIN;
            case OOM_ADJ_REASON_PROCESS_END:
                return AppProtoEnums.OOM_ADJ_REASON_PROCESS_END;
            case OOM_ADJ_REASON_SHORT_FGS_TIMEOUT:
                return AppProtoEnums.OOM_ADJ_REASON_SHORT_FGS_TIMEOUT;
            case OOM_ADJ_REASON_SYSTEM_INIT:
                return AppProtoEnums.OOM_ADJ_REASON_SYSTEM_INIT;
            case OOM_ADJ_REASON_BACKUP:
                return AppProtoEnums.OOM_ADJ_REASON_BACKUP;
            case OOM_ADJ_REASON_SHELL:
                return AppProtoEnums.OOM_ADJ_REASON_SHELL;
            case OOM_ADJ_REASON_REMOVE_TASK:
                return AppProtoEnums.OOM_ADJ_REASON_REMOVE_TASK;
            case OOM_ADJ_REASON_UID_IDLE:
                return AppProtoEnums.OOM_ADJ_REASON_UID_IDLE;
            case OOM_ADJ_REASON_STOP_SERVICE:
                return AppProtoEnums.OOM_ADJ_REASON_STOP_SERVICE;
            case OOM_ADJ_REASON_EXECUTING_SERVICE:
                return AppProtoEnums.OOM_ADJ_REASON_EXECUTING_SERVICE;
            case OOM_ADJ_REASON_RESTRICTION_CHANGE:
                return AppProtoEnums.OOM_ADJ_REASON_RESTRICTION_CHANGE;
            case OOM_ADJ_REASON_COMPONENT_DISABLED:
                return AppProtoEnums.OOM_ADJ_REASON_COMPONENT_DISABLED;
            case OOM_ADJ_REASON_FOLLOW_UP:
                return AppProtoEnums.OOM_ADJ_REASON_FOLLOW_UP;
            case OOM_ADJ_REASON_RECONFIGURATION:
                return AppProtoEnums.OOM_ADJ_REASON_RECONFIGURATION;
            case OOM_ADJ_REASON_SERVICE_BINDER_CALL:
                return AppProtoEnums.OOM_ADJ_REASON_SERVICE_BINDER_CALL;
            case OOM_ADJ_REASON_BATCH_UPDATE_REQUEST:
                return AppProtoEnums.OOM_ADJ_REASON_BATCH_UPDATE_REQUEST;
            default:
                return AppProtoEnums.OOM_ADJ_REASON_UNKNOWN_TO_PROTO;
        }
    }

    public static final String oomAdjReasonToString(@OomAdjReason int oomReason) {
        final String OOM_ADJ_REASON_METHOD = "updateOomAdj";
        switch (oomReason) {
@@ -367,8 +305,6 @@ public abstract class OomAdjuster {

    ActivityManagerConstants mConstants;

    final long[] mTmpLong = new long[3];

    /**
     * Current sequence id for oom_adj computation traversal.
     */
@@ -414,14 +350,12 @@ public abstract class OomAdjuster {

    private final int mNumSlots;
    protected final ArrayList<ProcessRecord> mTmpProcessList = new ArrayList<ProcessRecord>();
    protected final ArrayList<ProcessRecord> mTmpProcessList2 = new ArrayList<ProcessRecord>();
    protected final ArrayList<UidRecordInternal> mTmpBecameIdle =
            new ArrayList<UidRecordInternal>();
    protected final ActiveUids mTmpUidRecords;
    protected final ArrayDeque<ProcessRecord> mTmpQueue;
    protected final ArraySet<ProcessRecord> mTmpProcessSet = new ArraySet<>();
    protected final ArraySet<ProcessRecord> mPendingProcessSet = new ArraySet<>();
    protected final ArraySet<ProcessRecord> mProcessesInCycle = new ArraySet<>();

    /**
     * List of processes that we want to batch for LMKD to adjust their respective
@@ -990,8 +924,7 @@ public abstract class OomAdjuster {
        mNumNonCachedProcs = 0;
        mNumCachedHiddenProcs = 0;

        updateAndTrimProcessLSP(now, nowElapsed, oldTime, activeUids,
                oomAdjReason, doingAll);
        updateAndTrimProcessLSP(now, nowElapsed, oldTime, oomAdjReason, doingAll);
        mNumServiceProcs = mNewNumServiceProcs;

        if (mService.mAlwaysFinishActivities) {
@@ -1221,7 +1154,7 @@ public abstract class OomAdjuster {

    @GuardedBy({"mService", "mProcLock"})
    private void updateAndTrimProcessLSP(final long now, final long nowElapsed,
            final long oldTime, final ActiveUids activeUids, @OomAdjReason int oomAdjReason,
            final long oldTime, @OomAdjReason int oomAdjReason,
            boolean doingAll) {
        ArrayList<ProcessRecord> lruList = mProcessList.getLruProcessesLOSP();
        final int numLru = lruList.size();
@@ -2198,12 +2131,6 @@ public abstract class OomAdjuster {
        mCachedAppOptimizer.onWakefulnessChanged(wakefulness);
    }

    @GuardedBy({"mService", "mProcLock"})
    protected boolean applyOomAdjLSP(ProcessRecord app, boolean doingAll, long now,
            long nowElapsed, @OomAdjReason int oomAdjReason) {
        return applyOomAdjLSP(app, doingAll, now, nowElapsed, oomAdjReason, false);
    }

    /** Applies the computed oomadj, procstate and sched group values and freezes them in set* */
    @GuardedBy({"mService", "mProcLock"})
    protected boolean applyOomAdjLSP(ProcessRecord app, boolean doingAll, long now,
+14 −19
Original line number Diff line number Diff line
@@ -566,7 +566,7 @@ public class OomAdjusterImpl extends OomAdjuster {
     * Connections for clients marked reachable will be ignored.
     */
    private class ComputeConnectionIgnoringReachableClientsConsumer implements
            BiConsumer<Connection, ProcessRecord> {
            BiConsumer<Connection, ProcessRecordInternal> {
        private OomAdjusterArgs mArgs = null;
        public boolean hasReachableClient = false;

@@ -576,7 +576,7 @@ public class OomAdjusterImpl extends OomAdjuster {
        }

        @Override
        public void accept(Connection conn, ProcessRecord client) {
        public void accept(Connection conn, ProcessRecordInternal client) {
            final ProcessRecordInternal host = mArgs.mApp;
            final ProcessRecordInternal topApp = mArgs.mTopApp;
            final long now = mArgs.mNow;
@@ -970,9 +970,6 @@ public class OomAdjusterImpl extends OomAdjuster {

        for (int size = reachables.size(); i < size; i++) {
            final ProcessRecord reachable = reachables.get(i);
            final int prevProcState = reachable.getCurProcState();
            final int prevAdj = reachable.getCurRawAdj();

            args.mApp = reachable;
            computeOomAdjIgnoringReachablesLSP(args);

@@ -994,7 +991,6 @@ public class OomAdjusterImpl extends OomAdjuster {
        final ProcessRecord app = args.mApp;
        final ProcessRecord topApp = args.mTopApp;
        final long now = args.mNow;
        final @OomAdjReason int oomAdjReason = args.mOomAdjReason;

        computeOomAdjLSP(app, topApp, false, now);

@@ -1089,9 +1085,9 @@ public class OomAdjusterImpl extends OomAdjuster {
     * connectionConsumer}.
     */
    @GuardedBy({"mService", "mProcLock"})
    private static void forEachClientConnectionLSP(ProcessRecord app,
            BiConsumer<Connection, ProcessRecord> connectionConsumer) {
        final ProcessServiceRecordInternal psr = app.mServices;
    private static void forEachClientConnectionLSP(ProcessRecordInternal app,
            BiConsumer<Connection, ProcessRecordInternal> connectionConsumer) {
        final ProcessServiceRecordInternal psr = app.getServices();

        for (int i = psr.numberOfRunningServices() - 1; i >= 0; i--) {
            final ServiceRecordInternal s = psr.getRunningServiceAt(i);
@@ -1099,13 +1095,12 @@ public class OomAdjusterImpl extends OomAdjuster {
                final ArrayList<? extends ConnectionRecordInternal> clist =
                        s.getConnectionAt(j);
                for (int k = clist.size() - 1; k >= 0; k--) {
                    // TODO(b/425766486): Switch to use ConnectionRecordInternal.
                    final ConnectionRecord cr = (ConnectionRecord) clist.get(k);
                    final ProcessRecord client;
                    if (app.isSdkSandbox && cr.binding.attributedClient != null) {
                        client = cr.binding.attributedClient;
                    final ConnectionRecordInternal cr = clist.get(k);
                    final ProcessRecordInternal client;
                    if (app.isSdkSandbox && cr.getAttributedClient() != null) {
                        client = cr.getAttributedClient();
                    } else {
                        client = cr.binding.client;
                        client = cr.getClient();
                    }
                    if (client == null || client == app) continue;
                    connectionConsumer.accept(cr, client);
@@ -1113,12 +1108,12 @@ public class OomAdjusterImpl extends OomAdjuster {
            }
        }

        final ProcessProviderRecord ppr = app.getProviders();
        final ProcessProviderRecordInternal ppr = app.getProviders();
        for (int i = ppr.numberOfProviders() - 1; i >= 0; i--) {
            final ContentProviderRecord cpr = ppr.getProviderAt(i);
            final ContentProviderRecordInternal cpr = ppr.getProviderAt(i);
            for (int j = cpr.numberOfConnections() - 1; j >= 0; j--) {
                final ContentProviderConnection conn = cpr.getConnectionsAt(j);
                connectionConsumer.accept(conn, conn.client);
                final ContentProviderConnectionInternal conn = cpr.getConnectionsAt(j);
                connectionConsumer.accept(conn, conn.getClient());
            }
        }
    }
Loading