Merge "Add VmStat atom and read the count of OOM kills" into sc-dev am: 3d44d6ed95
Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/14934060 Change-Id: Ic699a77c3b896277fac96214bd6229482152c952
This commit is contained in:
@@ -30,6 +30,9 @@ public final class ProcfsMemoryUtil {
|
|||||||
"RssAnon:",
|
"RssAnon:",
|
||||||
"VmSwap:"
|
"VmSwap:"
|
||||||
};
|
};
|
||||||
|
private static final String[] VMSTAT_KEYS = new String[] {
|
||||||
|
"oom_kill"
|
||||||
|
};
|
||||||
|
|
||||||
private ProcfsMemoryUtil() {}
|
private ProcfsMemoryUtil() {}
|
||||||
|
|
||||||
@@ -99,4 +102,22 @@ public final class ProcfsMemoryUtil {
|
|||||||
public int anonRssInKilobytes;
|
public int anonRssInKilobytes;
|
||||||
public int swapInKilobytes;
|
public int swapInKilobytes;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** Reads and parses selected entries of /proc/vmstat. */
|
||||||
|
@Nullable
|
||||||
|
static VmStat readVmStat() {
|
||||||
|
long[] vmstat = new long[VMSTAT_KEYS.length];
|
||||||
|
vmstat[0] = -1;
|
||||||
|
Process.readProcLines("/proc/vmstat", VMSTAT_KEYS, vmstat);
|
||||||
|
if (vmstat[0] == -1) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
VmStat result = new VmStat();
|
||||||
|
result.oomKillCount = (int) vmstat[0];
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
static final class VmStat {
|
||||||
|
public int oomKillCount;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -544,6 +544,8 @@ public class StatsPullAtomService extends SystemService {
|
|||||||
return pullProcessDmabufMemory(atomTag, data);
|
return pullProcessDmabufMemory(atomTag, data);
|
||||||
case FrameworkStatsLog.SYSTEM_MEMORY:
|
case FrameworkStatsLog.SYSTEM_MEMORY:
|
||||||
return pullSystemMemory(atomTag, data);
|
return pullSystemMemory(atomTag, data);
|
||||||
|
case FrameworkStatsLog.VMSTAT:
|
||||||
|
return pullVmStat(atomTag, data);
|
||||||
case FrameworkStatsLog.TEMPERATURE:
|
case FrameworkStatsLog.TEMPERATURE:
|
||||||
synchronized (mTemperatureLock) {
|
synchronized (mTemperatureLock) {
|
||||||
return pullTemperatureLocked(atomTag, data);
|
return pullTemperatureLocked(atomTag, data);
|
||||||
@@ -842,6 +844,7 @@ public class StatsPullAtomService extends SystemService {
|
|||||||
registerProcessSystemIonHeapSize();
|
registerProcessSystemIonHeapSize();
|
||||||
registerSystemMemory();
|
registerSystemMemory();
|
||||||
registerProcessDmabufMemory();
|
registerProcessDmabufMemory();
|
||||||
|
registerVmStat();
|
||||||
registerTemperature();
|
registerTemperature();
|
||||||
registerCoolingDevice();
|
registerCoolingDevice();
|
||||||
registerBinderCallsStats();
|
registerBinderCallsStats();
|
||||||
@@ -2273,6 +2276,27 @@ public class StatsPullAtomService extends SystemService {
|
|||||||
return StatsManager.PULL_SUCCESS;
|
return StatsManager.PULL_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void registerVmStat() {
|
||||||
|
int tagId = FrameworkStatsLog.VMSTAT;
|
||||||
|
mStatsManager.setPullAtomCallback(
|
||||||
|
tagId,
|
||||||
|
null, // use default PullAtomMetadata values
|
||||||
|
DIRECT_EXECUTOR,
|
||||||
|
mStatsCallbackImpl
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
int pullVmStat(int atomTag, List<StatsEvent> pulledData) {
|
||||||
|
ProcfsMemoryUtil.VmStat vmStat = ProcfsMemoryUtil.readVmStat();
|
||||||
|
if (vmStat != null) {
|
||||||
|
pulledData.add(
|
||||||
|
FrameworkStatsLog.buildStatsEvent(
|
||||||
|
atomTag,
|
||||||
|
vmStat.oomKillCount));
|
||||||
|
}
|
||||||
|
return StatsManager.PULL_SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
private void registerTemperature() {
|
private void registerTemperature() {
|
||||||
int tagId = FrameworkStatsLog.TEMPERATURE;
|
int tagId = FrameworkStatsLog.TEMPERATURE;
|
||||||
mStatsManager.setPullAtomCallback(
|
mStatsManager.setPullAtomCallback(
|
||||||
|
|||||||
Reference in New Issue
Block a user