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

Commit 60e5470d authored by Jing Ji's avatar Jing Ji
Browse files

Add field to note if a process has a foreground service

..into ProcessMemorySnapshot and AppProcessDied

Bug: 234618899
Test: statsd_testdrive 10064
Test: statsd_testdrive 373
Test: atest CtsStatsdAtomHostTestCases:ProcessMemoryStatsTests
Test: atest CtsAppExitTestCases
Change-Id: I1dc3e4ac54d0e46195b508a3e53e287192b3adc9
parent ca6ef912
Loading
Loading
Loading
Loading
+27 −0
Original line number Original line Diff line number Diff line
@@ -524,6 +524,13 @@ public final class ApplicationExitInfo implements Parcelable {
     */
     */
    private boolean mLoggedInStatsd;
    private boolean mLoggedInStatsd;


    /**
     * Whether or not this process hosts one or more foreground services.
     *
     * for system internal use only, will not retain across processes.
     */
    private boolean mHasForegroundServices;

    /** @hide */
    /** @hide */
    @IntDef(prefix = { "REASON_" }, value = {
    @IntDef(prefix = { "REASON_" }, value = {
        REASON_UNKNOWN,
        REASON_UNKNOWN,
@@ -996,6 +1003,24 @@ public final class ApplicationExitInfo implements Parcelable {
        mLoggedInStatsd = loggedInStatsd;
        mLoggedInStatsd = loggedInStatsd;
    }
    }


    /**
     * @see #mHasForegroundServices
     *
     * @hide
     */
    public boolean hasForegroundServices() {
        return mHasForegroundServices;
    }

    /**
     * @see #mHasForegroundServices
     *
     * @hide
     */
    public void setHasForegroundServices(boolean hasForegroundServices) {
        mHasForegroundServices = hasForegroundServices;
    }

    @Override
    @Override
    public int describeContents() {
    public int describeContents() {
        return 0;
        return 0;
@@ -1060,6 +1085,8 @@ public final class ApplicationExitInfo implements Parcelable {
        mTraceFile = other.mTraceFile;
        mTraceFile = other.mTraceFile;
        mAppTraceRetriever = other.mAppTraceRetriever;
        mAppTraceRetriever = other.mAppTraceRetriever;
        mNativeTombstoneRetriever = other.mNativeTombstoneRetriever;
        mNativeTombstoneRetriever = other.mNativeTombstoneRetriever;
        mLoggedInStatsd = other.mLoggedInStatsd;
        mHasForegroundServices = other.mHasForegroundServices;
    }
    }


    private ApplicationExitInfo(@NonNull Parcel in) {
    private ApplicationExitInfo(@NonNull Parcel in) {
+6 −1
Original line number Original line Diff line number Diff line
@@ -28,12 +28,15 @@ public final class ProcessMemoryState implements Parcelable {
    public final int pid;
    public final int pid;
    public final String processName;
    public final String processName;
    public final int oomScore;
    public final int oomScore;
    public final boolean hasForegroundServices;


    public ProcessMemoryState(int uid, int pid, String processName, int oomScore) {
    public ProcessMemoryState(int uid, int pid, String processName, int oomScore,
            boolean hasForegroundServices) {
        this.uid = uid;
        this.uid = uid;
        this.pid = pid;
        this.pid = pid;
        this.processName = processName;
        this.processName = processName;
        this.oomScore = oomScore;
        this.oomScore = oomScore;
        this.hasForegroundServices = hasForegroundServices;
    }
    }


    private ProcessMemoryState(Parcel in) {
    private ProcessMemoryState(Parcel in) {
@@ -41,6 +44,7 @@ public final class ProcessMemoryState implements Parcelable {
        pid = in.readInt();
        pid = in.readInt();
        processName = in.readString();
        processName = in.readString();
        oomScore = in.readInt();
        oomScore = in.readInt();
        hasForegroundServices = in.readInt() == 1;
    }
    }


    public static final @android.annotation.NonNull Creator<ProcessMemoryState> CREATOR = new Creator<ProcessMemoryState>() {
    public static final @android.annotation.NonNull Creator<ProcessMemoryState> CREATOR = new Creator<ProcessMemoryState>() {
@@ -66,5 +70,6 @@ public final class ProcessMemoryState implements Parcelable {
        parcel.writeInt(pid);
        parcel.writeInt(pid);
        parcel.writeString(processName);
        parcel.writeString(processName);
        parcel.writeInt(oomScore);
        parcel.writeInt(oomScore);
        parcel.writeInt(hasForegroundServices ? 1 : 0);
    }
    }
}
}
+1 −0
Original line number Original line Diff line number Diff line
@@ -2654,6 +2654,7 @@ public final class ActiveServices {
            }
            }
        }
        }
        mAm.updateProcessForegroundLocked(psr.mApp, anyForeground, fgServiceTypes, oomAdj);
        mAm.updateProcessForegroundLocked(psr.mApp, anyForeground, fgServiceTypes, oomAdj);
        psr.setHasReportedForegroundServices(anyForeground);
    }
    }


    private void updateAllowlistManagerLocked(ProcessServiceRecord psr) {
    private void updateAllowlistManagerLocked(ProcessServiceRecord psr) {
+2 −1
Original line number Original line Diff line number Diff line
@@ -16683,7 +16683,8 @@ public class ActivityManagerService extends IActivityManager.Stub
                for (int i = 0, size = mPidsSelfLocked.size(); i < size; i++) {
                for (int i = 0, size = mPidsSelfLocked.size(); i < size; i++) {
                    final ProcessRecord r = mPidsSelfLocked.valueAt(i);
                    final ProcessRecord r = mPidsSelfLocked.valueAt(i);
                    processMemoryStates.add(new ProcessMemoryState(
                    processMemoryStates.add(new ProcessMemoryState(
                            r.uid, r.getPid(), r.processName, r.mState.getCurAdj()));
                            r.uid, r.getPid(), r.processName, r.mState.getCurAdj(),
                            r.mServices.hasForegroundServices()));
                }
                }
            }
            }
            return processMemoryStates;
            return processMemoryStates;
+3 −1
Original line number Original line Diff line number Diff line
@@ -893,7 +893,8 @@ public final class AppExitInfoTracker {
        }
        }
        FrameworkStatsLog.write(FrameworkStatsLog.APP_PROCESS_DIED,
        FrameworkStatsLog.write(FrameworkStatsLog.APP_PROCESS_DIED,
                info.getPackageUid(), processName, info.getReason(), info.getSubReason(),
                info.getPackageUid(), processName, info.getReason(), info.getSubReason(),
                info.getImportance(), (int) info.getPss(), (int) info.getRss());
                info.getImportance(), (int) info.getPss(), (int) info.getRss(),
                info.hasForegroundServices());
    }
    }


    @GuardedBy("mLock")
    @GuardedBy("mLock")
@@ -1008,6 +1009,7 @@ public final class AppExitInfoTracker {
            info.setPss(app.mProfile.getLastPss());
            info.setPss(app.mProfile.getLastPss());
            info.setRss(app.mProfile.getLastRss());
            info.setRss(app.mProfile.getLastRss());
            info.setTimestamp(timestamp);
            info.setTimestamp(timestamp);
            info.setHasForegroundServices(app.mServices.hasReportedForegroundServices());
        }
        }


        return info;
        return info;
Loading