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

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

Merge changes Ic78896f4,I996ceb34 into main

* changes:
  Move makeAdjReason() to ProcessRecord
  Decouple ProcessStateRecord from ProcessRecord
parents 40bd0acf 079b21ba
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -1287,7 +1287,7 @@ public final class ActiveServices {
                StringBuilder sb = new StringBuilder(128);
                sb.append("Not potential delay (state=").append(proc.mState.getCurProcState())
                        .append(' ').append(proc.mState.getAdjType());
                String reason = proc.mState.makeAdjReason();
                String reason = proc.makeAdjReason();
                if (reason != null) {
                    sb.append(' ');
                    sb.append(reason);
+1 −1
Original line number Diff line number Diff line
@@ -1595,7 +1595,7 @@ public class AppProfiler {
                if (memInfos != null) {
                    memInfos.add(new ProcessMemInfo(rec.processName, rec.getPid(),
                                state.getSetAdj(), state.getSetProcState(),
                                state.getAdjType(), state.makeAdjReason()));
                                state.getAdjType(), rec.makeAdjReason()));
                }
                final ProcessProfileRecord profile = rec.mProfile;
                if ((profile.getLastLowMemory() + mService.mConstants.GC_MIN_INTERVAL) <= now) {
+20 −0
Original line number Diff line number Diff line
@@ -17,6 +17,8 @@
package com.android.server.am;

import static android.app.ActivityManager.PROCESS_STATE_NONEXISTENT;
import static android.app.ProcessMemoryState.HOSTING_COMPONENT_TYPE_ACTIVITY;
import static android.app.ProcessMemoryState.HOSTING_COMPONENT_TYPE_BROADCAST_RECEIVER;
import static android.app.ProcessMemoryState.HOSTING_COMPONENT_TYPE_EMPTY;
import static android.app.ProcessMemoryState.HOSTING_COMPONENT_TYPE_STARTED_SERVICE;

@@ -741,4 +743,22 @@ final class ProcessProfileRecord implements ProcessStateRecord.StartedServiceObs
            clearHostingComponentType(HOSTING_COMPONENT_TYPE_STARTED_SERVICE);
        }
    }

    @Override
    public void onIsReceivingBroadcastChanged(boolean isReceivingBroadcast) {
        if (isReceivingBroadcast) {
            addHostingComponentType(HOSTING_COMPONENT_TYPE_BROADCAST_RECEIVER);
        } else {
            clearHostingComponentType(HOSTING_COMPONENT_TYPE_BROADCAST_RECEIVER);
        }
    }

    @Override
    public void onHasActivitiesChanged(boolean hasActivities) {
        if (hasActivities) {
            addHostingComponentType(HOSTING_COMPONENT_TYPE_ACTIVITY);
        } else {
            clearHostingComponentType(HOSTING_COMPONENT_TYPE_ACTIVITY);
        }
    }
}
+72 −6
Original line number Diff line number Diff line
@@ -35,6 +35,7 @@ import android.app.ApplicationExitInfo.Reason;
import android.app.ApplicationExitInfo.SubReason;
import android.app.BackgroundStartPrivileges;
import android.app.IApplicationThread;
import android.content.ComponentName;
import android.content.pm.ApplicationInfo;
import android.content.pm.PackageManagerInternal;
import android.content.pm.ProcessInfo;
@@ -66,6 +67,7 @@ import com.android.internal.app.procstats.ProcessStats;
import com.android.internal.os.Zygote;
import com.android.server.FgThread;
import com.android.server.am.OomAdjusterImpl.ProcessRecordNode;
import com.android.server.am.psc.PlatformCompatCache.CachedCompatChangeId;
import com.android.server.wm.WindowProcessController;
import com.android.server.wm.WindowProcessListener;

@@ -79,7 +81,7 @@ import java.util.function.Consumer;
 * Full information about a particular process that
 * is currently running.
 */
class ProcessRecord implements WindowProcessListener {
class ProcessRecord implements WindowProcessListener, ProcessStateRecord.ProcessRecordReader {
    static final String TAG = TAG_WITH_CLASS_NAME ? "ProcessRecord" : TAG_AM;

    final ActivityManagerService mService; // where we came from
@@ -626,7 +628,8 @@ class ProcessRecord implements WindowProcessListener {
        mErrorState = new ProcessErrorStateRecord(this);
        mWindowProcessController = new WindowProcessController(
                mService.mActivityTaskManager, info, processName, uid, userId, this, this);
        mState = new ProcessStateRecord(processName, uid, mWindowProcessController, mProfile, this);
        mState = new ProcessStateRecord(processName, uid, mWindowProcessController, mProfile, this,
                mService, mService.mProcLock);
        mOptRecord = new ProcessCachedOptimizerRecord(this);
        final long now = SystemClock.uptimeMillis();
        mProfile.init(now);
@@ -1171,18 +1174,51 @@ class ProcessRecord implements WindowProcessListener {
        return mState.isCached();
    }

    boolean hasActivities() {
    @Override
    public boolean hasActivities() {
        return mWindowProcessController.hasActivities();
    }

    boolean hasActivitiesOrRecentTasks() {
        return mWindowProcessController.hasActivitiesOrRecentTasks();
    @Override
    public boolean isHeavyWeightProcess() {
        return mWindowProcessController.isHeavyWeightProcess();
    }

    @Override
    public boolean hasVisibleActivities() {
        return mWindowProcessController.hasVisibleActivities();
    }

    @Override
    public boolean isHomeProcess() {
        return mWindowProcessController.isHomeProcess();
    }

    boolean hasRecentTasks() {
    @Override
    public boolean isPreviousProcess() {
        return mWindowProcessController.isPreviousProcess();
    }

    @Override
    public boolean hasRecentTasks() {
        return mWindowProcessController.hasRecentTasks();
    }

    @Override
    public boolean isReceivingBroadcast(int[] outSchedGroup) {
        return mService.isReceivingBroadcastLocked(this, outSchedGroup);
    }

    @Override
    public boolean hasCompatChange(@CachedCompatChangeId int cachedCompatChangeId) {
        return mService.mOomAdjuster.isChangeEnabled(cachedCompatChangeId, info,
                false/* default */);
    }

    boolean hasActivitiesOrRecentTasks() {
        return mWindowProcessController.hasActivitiesOrRecentTasks();
    }

    @GuardedBy("mService")
    public ApplicationInfo getApplicationInfo() {
        return info;
@@ -1367,6 +1403,36 @@ class ProcessRecord implements WindowProcessListener {
        proto.end(token);
    }

    @GuardedBy(anyOf = {"mService", "mProcLock"})
    String makeAdjReason() {
        final Object adjSource = mState.getAdjSource();
        final Object adjTarget = mState.getAdjTarget();
        if (adjSource == null && adjTarget == null) {
            return null;
        }

        StringBuilder sb = new StringBuilder(128);
        sb.append(' ');
        if (adjTarget instanceof ComponentName) {
            sb.append(((ComponentName) adjTarget).flattenToShortString());
        } else if (adjTarget != null) {
            sb.append(adjTarget);
        } else {
            sb.append("{null}");
        }
        sb.append("<=");
        if (adjSource instanceof ProcessRecord) {
            sb.append("Proc{");
            sb.append(((ProcessRecord) adjSource).toShortString());
            sb.append("}");
        } else if (adjSource != null) {
            sb.append(adjSource);
        } else {
            sb.append("{null}");
        }
        return sb.toString();
    }

    public String toShortString() {
        final String shortStringName = mShortStringName;
        if (shortStringName != null) {
+309 −276

File changed.

Preview size limit exceeded, changes collapsed.