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

Commit a5b67eeb authored by T.J. Mercier's avatar T.J. Mercier
Browse files

Add dmabuf RSS and PSS to low memory report

In addition to normal process PSS, add two columns for dmabuf RSS and
PSS:

ActivityManager:   ntv      ??   89525       0       0: zygote (pid 658) native
ActivityManager:   ntv      ??   38557       0       0: zygote64 (pid 657) native
ActivityManager:   ntv      ??   36396       0       0: webview_zygote (pid 2911) native
ActivityManager:   ntv      ??   33735   24816   13591: surfaceflinger (pid 765) native
ActivityManager:   ntv      ??   22466       0       0: media.swcodec (pid 822) native
ActivityManager:   ntv      ??   18977       0       0: mediaserver (pid 816) native
ActivityManager:   ntv      ??   14854   27496   16853: android.hardware.graphics.composer3-service.ranchu (pid 667) native

If the procfs files for dmabuf_rss and dmabuf_pss do not exist, then -1 is reported.

Flag: NONE logging
Test: adb shell am kill-all
Bug: 424645186
Change-Id: Ie6deb65d5f81b194695b01169aa0bd14ed6122ff
parent 7bc1879d
Loading
Loading
Loading
Loading
+7 −2
Original line number Diff line number Diff line
@@ -13466,13 +13466,17 @@ public class ActivityManagerService extends IActivityManager.Stub
    }
    static void appendBasicMemEntry(StringBuilder sb, int oomAdj, int procState, long pss,
            long memtrack, String name) {
            long dmabufRss, long dmabufPss, long memtrack, String name) {
        sb.append("  ");
        sb.append(ProcessList.makeOomAdjString(oomAdj, false));
        sb.append(' ');
        sb.append(ProcessList.makeProcStateString(procState));
        sb.append(' ');
        ProcessList.appendRamKb(sb, pss);
        sb.append(' ');
        ProcessList.appendRamKb(sb, dmabufRss);
        sb.append(' ');
        ProcessList.appendRamKb(sb, dmabufPss);
        sb.append(": ");
        sb.append(name);
        if (memtrack > 0) {
@@ -13483,7 +13487,8 @@ public class ActivityManagerService extends IActivityManager.Stub
    }
    static void appendMemInfo(StringBuilder sb, ProcessMemInfo mi) {
        appendBasicMemEntry(sb, mi.oomAdj, mi.procState, mi.pss, mi.memtrack, mi.name);
        appendBasicMemEntry(sb, mi.oomAdj, mi.procState, mi.pss, mi.dmabufRss, mi.dmabufPss,
                mi.memtrack, mi.name);
        sb.append(" (pid ");
        sb.append(mi.pid);
        sb.append(") ");
+10 −2
Original line number Diff line number Diff line
@@ -26,6 +26,8 @@ import static com.android.internal.app.procstats.ProcessStats.ADJ_MEM_FACTOR_CRI
import static com.android.internal.app.procstats.ProcessStats.ADJ_MEM_FACTOR_LOW;
import static com.android.internal.app.procstats.ProcessStats.ADJ_MEM_FACTOR_MODERATE;
import static com.android.internal.app.procstats.ProcessStats.ADJ_MEM_FACTOR_NORMAL;
import static com.android.internal.os.ProcfsMemoryUtil.DmaBufType;
import static com.android.internal.os.ProcfsMemoryUtil.readDmabufFromProcfs;
import static com.android.server.am.ActivityManagerDebugConfig.DEBUG_OOM_ADJ;
import static com.android.server.am.ActivityManagerDebugConfig.DEBUG_PSS;
import static com.android.server.am.ActivityManagerDebugConfig.DEBUG_RSS;
@@ -1637,11 +1639,15 @@ public class AppProfiler {
        for (int i = 0; i < statsCount; i++) {
            ProcessCpuTracker.Stats st = stats.get(i);
            long pss = Debug.getPss(st.pid, swaptrackTmp, memtrackTmp);
            if (pss > 0) {
            long dmabufRss = readDmabufFromProcfs(DmaBufType.RSS, st.pid);
            long dmabufPss = readDmabufFromProcfs(DmaBufType.PSS, st.pid);
            if (pss > 0 || dmabufPss > 0) {
                if (infoMap.indexOfKey(st.pid) < 0) {
                    ProcessMemInfo mi = new ProcessMemInfo(st.name, st.pid,
                            ProcessList.NATIVE_ADJ, -1, "native", null);
                    mi.pss = pss;
                    mi.dmabufRss = dmabufRss;
                    mi.dmabufPss = dmabufPss;
                    mi.swapPss = swaptrackTmp[1];
                    mi.memtrack = memtrackTmp[0];
                    totalMemtrackGraphics += memtrackTmp[1];
@@ -1658,6 +1664,8 @@ public class AppProfiler {
            ProcessMemInfo mi = memInfos.get(i);
            if (mi.pss == 0) {
                mi.pss = Debug.getPss(mi.pid, swaptrackTmp, memtrackTmp);
                mi.dmabufRss = readDmabufFromProcfs(DmaBufType.RSS, mi.pid);
                mi.dmabufPss = readDmabufFromProcfs(DmaBufType.PSS, mi.pid);
                mi.swapPss = swaptrackTmp[1];
                mi.memtrack = memtrackTmp[0];
                totalMemtrackGraphics += memtrackTmp[1];
@@ -1755,7 +1763,7 @@ public class AppProfiler {
                // from smaller native processes let's dump a summary of that.
                if (extraNativeRam > 0) {
                    appendBasicMemEntry(shortNativeBuilder, ProcessList.NATIVE_ADJ,
                            -1, extraNativeRam, extraNativeMemtrack, "(Other native)");
                            -1, -1, -1, extraNativeRam, extraNativeMemtrack, "(Other native)");
                    shortNativeBuilder.append('\n');
                    extraNativeRam = 0;
                }
+2 −0
Original line number Diff line number Diff line
@@ -26,6 +26,8 @@ public class ProcessMemInfo {
    long pss;
    long swapPss;
    long memtrack;
    long dmabufRss;
    long dmabufPss;

    public ProcessMemInfo(String _name, int _pid, int _oomAdj, int _procState,
            String _adjType, String _adjReason) {