Merge "Eliminate memtrack variability from the lost RAM calculation"
This commit is contained in:
@@ -13318,6 +13318,7 @@ public class ActivityManagerService extends IActivityManager.Stub
|
|||||||
long[] miscPss = new long[Debug.MemoryInfo.NUM_OTHER_STATS];
|
long[] miscPss = new long[Debug.MemoryInfo.NUM_OTHER_STATS];
|
||||||
long[] miscSwapPss = new long[Debug.MemoryInfo.NUM_OTHER_STATS];
|
long[] miscSwapPss = new long[Debug.MemoryInfo.NUM_OTHER_STATS];
|
||||||
long[] miscRss = new long[Debug.MemoryInfo.NUM_OTHER_STATS];
|
long[] miscRss = new long[Debug.MemoryInfo.NUM_OTHER_STATS];
|
||||||
|
long[] memtrackTmp = new long[4];
|
||||||
|
|
||||||
long oomPss[] = new long[DUMP_MEM_OOM_LABEL.length];
|
long oomPss[] = new long[DUMP_MEM_OOM_LABEL.length];
|
||||||
long oomSwapPss[] = new long[DUMP_MEM_OOM_LABEL.length];
|
long oomSwapPss[] = new long[DUMP_MEM_OOM_LABEL.length];
|
||||||
@@ -13330,6 +13331,8 @@ public class ActivityManagerService extends IActivityManager.Stub
|
|||||||
long totalRss = 0;
|
long totalRss = 0;
|
||||||
long cachedPss = 0;
|
long cachedPss = 0;
|
||||||
long cachedSwapPss = 0;
|
long cachedSwapPss = 0;
|
||||||
|
long totalMemtrackGraphics = 0;
|
||||||
|
long totalMemtrackGl = 0;
|
||||||
boolean hasSwapPss = false;
|
boolean hasSwapPss = false;
|
||||||
|
|
||||||
Debug.MemoryInfo mi = null;
|
Debug.MemoryInfo mi = null;
|
||||||
@@ -13352,6 +13355,8 @@ public class ActivityManagerService extends IActivityManager.Stub
|
|||||||
final int reportType;
|
final int reportType;
|
||||||
final long startTime;
|
final long startTime;
|
||||||
final long endTime;
|
final long endTime;
|
||||||
|
long memtrackGraphics = 0;
|
||||||
|
long memtrackGl = 0;
|
||||||
if (opts.dumpDetails || (!brief && !opts.oomOnly)) {
|
if (opts.dumpDetails || (!brief && !opts.oomOnly)) {
|
||||||
reportType = ProcessStats.ADD_PSS_EXTERNAL_SLOW;
|
reportType = ProcessStats.ADD_PSS_EXTERNAL_SLOW;
|
||||||
startTime = SystemClock.currentThreadTimeMillis();
|
startTime = SystemClock.currentThreadTimeMillis();
|
||||||
@@ -13363,7 +13368,7 @@ public class ActivityManagerService extends IActivityManager.Stub
|
|||||||
} else {
|
} else {
|
||||||
reportType = ProcessStats.ADD_PSS_EXTERNAL;
|
reportType = ProcessStats.ADD_PSS_EXTERNAL;
|
||||||
startTime = SystemClock.currentThreadTimeMillis();
|
startTime = SystemClock.currentThreadTimeMillis();
|
||||||
long pss = Debug.getPss(pid, tmpLong, null);
|
long pss = Debug.getPss(pid, tmpLong, memtrackTmp);
|
||||||
if (pss == 0) {
|
if (pss == 0) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
@@ -13371,6 +13376,8 @@ public class ActivityManagerService extends IActivityManager.Stub
|
|||||||
endTime = SystemClock.currentThreadTimeMillis();
|
endTime = SystemClock.currentThreadTimeMillis();
|
||||||
mi.dalvikPrivateDirty = (int) tmpLong[0];
|
mi.dalvikPrivateDirty = (int) tmpLong[0];
|
||||||
mi.dalvikRss = (int) tmpLong[2];
|
mi.dalvikRss = (int) tmpLong[2];
|
||||||
|
memtrackGraphics = memtrackTmp[1];
|
||||||
|
memtrackGl = memtrackTmp[2];
|
||||||
}
|
}
|
||||||
if (!opts.isCheckinRequest && opts.dumpDetails) {
|
if (!opts.isCheckinRequest && opts.dumpDetails) {
|
||||||
pw.println("\n** MEMINFO in pid " + pid + " [" + r.processName + "] **");
|
pw.println("\n** MEMINFO in pid " + pid + " [" + r.processName + "] **");
|
||||||
@@ -13435,6 +13442,8 @@ public class ActivityManagerService extends IActivityManager.Stub
|
|||||||
totalPss += myTotalPss;
|
totalPss += myTotalPss;
|
||||||
totalSwapPss += myTotalSwapPss;
|
totalSwapPss += myTotalSwapPss;
|
||||||
totalRss += myTotalRss;
|
totalRss += myTotalRss;
|
||||||
|
totalMemtrackGraphics += memtrackGraphics;
|
||||||
|
totalMemtrackGl += memtrackGl;
|
||||||
MemItem pssItem = new MemItem(r.processName + " (pid " + pid +
|
MemItem pssItem = new MemItem(r.processName + " (pid " + pid +
|
||||||
(hasActivities ? " / activities)" : ")"), r.processName, myTotalPss,
|
(hasActivities ? " / activities)" : ")"), r.processName, myTotalPss,
|
||||||
myTotalSwapPss, myTotalRss, pid, hasActivities);
|
myTotalSwapPss, myTotalRss, pid, hasActivities);
|
||||||
@@ -13500,6 +13509,8 @@ public class ActivityManagerService extends IActivityManager.Stub
|
|||||||
for (int i=0; i<N; i++) {
|
for (int i=0; i<N; i++) {
|
||||||
ProcessCpuTracker.Stats st = mProcessCpuTracker.getStats(i);
|
ProcessCpuTracker.Stats st = mProcessCpuTracker.getStats(i);
|
||||||
if (st.vsize > 0 && procMemsMap.indexOfKey(st.pid) < 0) {
|
if (st.vsize > 0 && procMemsMap.indexOfKey(st.pid) < 0) {
|
||||||
|
long memtrackGraphics = 0;
|
||||||
|
long memtrackGl = 0;
|
||||||
if (mi == null) {
|
if (mi == null) {
|
||||||
mi = new Debug.MemoryInfo();
|
mi = new Debug.MemoryInfo();
|
||||||
}
|
}
|
||||||
@@ -13508,13 +13519,15 @@ public class ActivityManagerService extends IActivityManager.Stub
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
long pss = Debug.getPss(st.pid, tmpLong, null);
|
long pss = Debug.getPss(st.pid, tmpLong, memtrackTmp);
|
||||||
if (pss == 0) {
|
if (pss == 0) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
mi.nativePss = (int) pss;
|
mi.nativePss = (int) pss;
|
||||||
mi.nativePrivateDirty = (int) tmpLong[0];
|
mi.nativePrivateDirty = (int) tmpLong[0];
|
||||||
mi.nativeRss = (int) tmpLong[2];
|
mi.nativeRss = (int) tmpLong[2];
|
||||||
|
memtrackGraphics = memtrackTmp[1];
|
||||||
|
memtrackGl = memtrackTmp[2];
|
||||||
}
|
}
|
||||||
|
|
||||||
final long myTotalPss = mi.getTotalPss();
|
final long myTotalPss = mi.getTotalPss();
|
||||||
@@ -13524,6 +13537,8 @@ public class ActivityManagerService extends IActivityManager.Stub
|
|||||||
totalSwapPss += myTotalSwapPss;
|
totalSwapPss += myTotalSwapPss;
|
||||||
totalRss += myTotalRss;
|
totalRss += myTotalRss;
|
||||||
nativeProcTotalPss += myTotalPss;
|
nativeProcTotalPss += myTotalPss;
|
||||||
|
totalMemtrackGraphics += memtrackGraphics;
|
||||||
|
totalMemtrackGl += memtrackGl;
|
||||||
|
|
||||||
MemItem pssItem = new MemItem(st.name + " (pid " + st.pid + ")",
|
MemItem pssItem = new MemItem(st.name + " (pid " + st.pid + ")",
|
||||||
st.name, myTotalPss, mi.getSummaryTotalSwapPss(), myTotalRss,
|
st.name, myTotalPss, mi.getSummaryTotalSwapPss(), myTotalRss,
|
||||||
@@ -13746,7 +13761,11 @@ public class ActivityManagerService extends IActivityManager.Stub
|
|||||||
pw.print(" mapped + ");
|
pw.print(" mapped + ");
|
||||||
pw.print(stringifyKBSize(dmabufUnmapped));
|
pw.print(stringifyKBSize(dmabufUnmapped));
|
||||||
pw.println(" unmapped)");
|
pw.println(" unmapped)");
|
||||||
kernelUsed += totalExportedDmabuf;
|
// Account unmapped dmabufs as part of kernel memory allocations
|
||||||
|
kernelUsed += dmabufUnmapped;
|
||||||
|
// Replace memtrack HAL reported Graphics category with mapped dmabufs
|
||||||
|
totalPss -= totalMemtrackGraphics;
|
||||||
|
totalPss += dmabufMapped;
|
||||||
}
|
}
|
||||||
final long totalDmabufHeapPool = Debug.getDmabufHeapPoolsSizeKb();
|
final long totalDmabufHeapPool = Debug.getDmabufHeapPoolsSizeKb();
|
||||||
if (totalDmabufHeapPool >= 0) {
|
if (totalDmabufHeapPool >= 0) {
|
||||||
@@ -13766,15 +13785,17 @@ public class ActivityManagerService extends IActivityManager.Stub
|
|||||||
pw.print(" dmabuf + ");
|
pw.print(" dmabuf + ");
|
||||||
pw.print(stringifyKBSize(gpuPrivateUsage));
|
pw.print(stringifyKBSize(gpuPrivateUsage));
|
||||||
pw.println(" private)");
|
pw.println(" private)");
|
||||||
|
// Replace memtrack HAL reported GL category with private GPU allocations and
|
||||||
|
// account it as part of kernel memory allocations
|
||||||
|
totalPss -= totalMemtrackGl;
|
||||||
|
kernelUsed += gpuPrivateUsage;
|
||||||
} else {
|
} else {
|
||||||
pw.print(" GPU: "); pw.println(stringifyKBSize(gpuUsage));
|
pw.print(" GPU: "); pw.println(stringifyKBSize(gpuUsage));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
// Note: ION/DMA-BUF heap pools are reclaimable and hence, they are included as part of
|
||||||
* Note: ION/DMA-BUF heap pools are reclaimable and hence, they are included as part of
|
// memInfo.getCachedSizeKb().
|
||||||
* memInfo.getCachedSizeKb().
|
|
||||||
*/
|
|
||||||
final long lostRAM = memInfo.getTotalSizeKb() - (totalPss - totalSwapPss)
|
final long lostRAM = memInfo.getTotalSizeKb() - (totalPss - totalSwapPss)
|
||||||
- memInfo.getFreeSizeKb() - memInfo.getCachedSizeKb()
|
- memInfo.getFreeSizeKb() - memInfo.getCachedSizeKb()
|
||||||
- kernelUsed - memInfo.getZramTotalSizeKb();
|
- kernelUsed - memInfo.getZramTotalSizeKb();
|
||||||
@@ -14378,7 +14399,7 @@ public class ActivityManagerService extends IActivityManager.Stub
|
|||||||
infoMap.put(mi.pid, mi);
|
infoMap.put(mi.pid, mi);
|
||||||
}
|
}
|
||||||
updateCpuStatsNow();
|
updateCpuStatsNow();
|
||||||
long[] memtrackTmp = new long[1];
|
long[] memtrackTmp = new long[4];
|
||||||
long[] swaptrackTmp = new long[2];
|
long[] swaptrackTmp = new long[2];
|
||||||
final List<ProcessCpuTracker.Stats> stats;
|
final List<ProcessCpuTracker.Stats> stats;
|
||||||
// Get a list of Stats that have vsize > 0
|
// Get a list of Stats that have vsize > 0
|
||||||
@@ -14406,6 +14427,8 @@ public class ActivityManagerService extends IActivityManager.Stub
|
|||||||
long totalPss = 0;
|
long totalPss = 0;
|
||||||
long totalSwapPss = 0;
|
long totalSwapPss = 0;
|
||||||
long totalMemtrack = 0;
|
long totalMemtrack = 0;
|
||||||
|
long totalMemtrackGraphics = 0;
|
||||||
|
long totalMemtrackGl = 0;
|
||||||
for (int i=0, N=memInfos.size(); i<N; i++) {
|
for (int i=0, N=memInfos.size(); i<N; i++) {
|
||||||
ProcessMemInfo mi = memInfos.get(i);
|
ProcessMemInfo mi = memInfos.get(i);
|
||||||
if (mi.pss == 0) {
|
if (mi.pss == 0) {
|
||||||
@@ -14416,6 +14439,8 @@ public class ActivityManagerService extends IActivityManager.Stub
|
|||||||
totalPss += mi.pss;
|
totalPss += mi.pss;
|
||||||
totalSwapPss += mi.swapPss;
|
totalSwapPss += mi.swapPss;
|
||||||
totalMemtrack += mi.memtrack;
|
totalMemtrack += mi.memtrack;
|
||||||
|
totalMemtrackGraphics += memtrackTmp[1];
|
||||||
|
totalMemtrackGl += memtrackTmp[2];
|
||||||
}
|
}
|
||||||
Collections.sort(memInfos, new Comparator<ProcessMemInfo>() {
|
Collections.sort(memInfos, new Comparator<ProcessMemInfo>() {
|
||||||
@Override public int compare(ProcessMemInfo lhs, ProcessMemInfo rhs) {
|
@Override public int compare(ProcessMemInfo lhs, ProcessMemInfo rhs) {
|
||||||
@@ -14583,10 +14608,16 @@ public class ActivityManagerService extends IActivityManager.Stub
|
|||||||
} else {
|
} else {
|
||||||
final long totalExportedDmabuf = Debug.getDmabufTotalExportedKb();
|
final long totalExportedDmabuf = Debug.getDmabufTotalExportedKb();
|
||||||
if (totalExportedDmabuf >= 0) {
|
if (totalExportedDmabuf >= 0) {
|
||||||
|
final long dmabufMapped = Debug.getDmabufMappedSizeKb();
|
||||||
|
final long dmabufUnmapped = totalExportedDmabuf - dmabufMapped;
|
||||||
memInfoBuilder.append("DMA-BUF: ");
|
memInfoBuilder.append("DMA-BUF: ");
|
||||||
memInfoBuilder.append(stringifyKBSize(totalExportedDmabuf));
|
memInfoBuilder.append(stringifyKBSize(totalExportedDmabuf));
|
||||||
memInfoBuilder.append("\n");
|
memInfoBuilder.append("\n");
|
||||||
kernelUsed += totalExportedDmabuf;
|
// Account unmapped dmabufs as part of kernel memory allocations
|
||||||
|
kernelUsed += dmabufUnmapped;
|
||||||
|
// Replace memtrack HAL reported Graphics category with mapped dmabufs
|
||||||
|
totalPss -= totalMemtrackGraphics;
|
||||||
|
totalPss += dmabufMapped;
|
||||||
}
|
}
|
||||||
final long totalDmabufHeapPool = Debug.getDmabufHeapPoolsSizeKb();
|
final long totalDmabufHeapPool = Debug.getDmabufHeapPoolsSizeKb();
|
||||||
if (totalDmabufHeapPool >= 0) {
|
if (totalDmabufHeapPool >= 0) {
|
||||||
@@ -14608,6 +14639,10 @@ public class ActivityManagerService extends IActivityManager.Stub
|
|||||||
memInfoBuilder.append(" dmabuf + ");
|
memInfoBuilder.append(" dmabuf + ");
|
||||||
memInfoBuilder.append(stringifyKBSize(gpuPrivateUsage));
|
memInfoBuilder.append(stringifyKBSize(gpuPrivateUsage));
|
||||||
memInfoBuilder.append(" private)\n");
|
memInfoBuilder.append(" private)\n");
|
||||||
|
// Replace memtrack HAL reported GL category with private GPU allocations and
|
||||||
|
// account it as part of kernel memory allocations
|
||||||
|
totalPss -= totalMemtrackGl;
|
||||||
|
kernelUsed += gpuPrivateUsage;
|
||||||
} else {
|
} else {
|
||||||
memInfoBuilder.append(" GPU: ");
|
memInfoBuilder.append(" GPU: ");
|
||||||
memInfoBuilder.append(stringifyKBSize(gpuUsage));
|
memInfoBuilder.append(stringifyKBSize(gpuUsage));
|
||||||
@@ -14620,10 +14655,8 @@ public class ActivityManagerService extends IActivityManager.Stub
|
|||||||
totalPss - cachedPss + kernelUsed));
|
totalPss - cachedPss + kernelUsed));
|
||||||
memInfoBuilder.append("\n");
|
memInfoBuilder.append("\n");
|
||||||
|
|
||||||
/*
|
// Note: ION/DMA-BUF heap pools are reclaimable and hence, they are included as part of
|
||||||
* Note: ION/DMA-BUF heap pools are reclaimable and hence, they are included as part of
|
// memInfo.getCachedSizeKb().
|
||||||
* memInfo.getCachedSizeKb().
|
|
||||||
*/
|
|
||||||
memInfoBuilder.append(" Lost RAM: ");
|
memInfoBuilder.append(" Lost RAM: ");
|
||||||
memInfoBuilder.append(stringifyKBSize(memInfo.getTotalSizeKb()
|
memInfoBuilder.append(stringifyKBSize(memInfo.getTotalSizeKb()
|
||||||
- (totalPss - totalSwapPss) - memInfo.getFreeSizeKb() - memInfo.getCachedSizeKb()
|
- (totalPss - totalSwapPss) - memInfo.getFreeSizeKb() - memInfo.getCachedSizeKb()
|
||||||
|
|||||||
Reference in New Issue
Block a user