Loading services/core/java/com/android/server/stats/pull/ProcfsMemoryUtil.java +21 −0 Original line number Diff line number Diff line Loading @@ -30,6 +30,9 @@ public final class ProcfsMemoryUtil { "RssAnon:", "VmSwap:" }; private static final String[] VMSTAT_KEYS = new String[] { "oom_kill" }; private ProcfsMemoryUtil() {} Loading Loading @@ -99,4 +102,22 @@ public final class ProcfsMemoryUtil { public int anonRssInKilobytes; 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; } } services/core/java/com/android/server/stats/pull/StatsPullAtomService.java +24 −0 Original line number Diff line number Diff line Loading @@ -544,6 +544,8 @@ public class StatsPullAtomService extends SystemService { return pullProcessDmabufMemory(atomTag, data); case FrameworkStatsLog.SYSTEM_MEMORY: return pullSystemMemory(atomTag, data); case FrameworkStatsLog.VMSTAT: return pullVmStat(atomTag, data); case FrameworkStatsLog.TEMPERATURE: synchronized (mTemperatureLock) { return pullTemperatureLocked(atomTag, data); Loading Loading @@ -842,6 +844,7 @@ public class StatsPullAtomService extends SystemService { registerProcessSystemIonHeapSize(); registerSystemMemory(); registerProcessDmabufMemory(); registerVmStat(); registerTemperature(); registerCoolingDevice(); registerBinderCallsStats(); Loading Loading @@ -2273,6 +2276,27 @@ public class StatsPullAtomService extends SystemService { 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() { int tagId = FrameworkStatsLog.TEMPERATURE; mStatsManager.setPullAtomCallback( Loading Loading
services/core/java/com/android/server/stats/pull/ProcfsMemoryUtil.java +21 −0 Original line number Diff line number Diff line Loading @@ -30,6 +30,9 @@ public final class ProcfsMemoryUtil { "RssAnon:", "VmSwap:" }; private static final String[] VMSTAT_KEYS = new String[] { "oom_kill" }; private ProcfsMemoryUtil() {} Loading Loading @@ -99,4 +102,22 @@ public final class ProcfsMemoryUtil { public int anonRssInKilobytes; 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; } }
services/core/java/com/android/server/stats/pull/StatsPullAtomService.java +24 −0 Original line number Diff line number Diff line Loading @@ -544,6 +544,8 @@ public class StatsPullAtomService extends SystemService { return pullProcessDmabufMemory(atomTag, data); case FrameworkStatsLog.SYSTEM_MEMORY: return pullSystemMemory(atomTag, data); case FrameworkStatsLog.VMSTAT: return pullVmStat(atomTag, data); case FrameworkStatsLog.TEMPERATURE: synchronized (mTemperatureLock) { return pullTemperatureLocked(atomTag, data); Loading Loading @@ -842,6 +844,7 @@ public class StatsPullAtomService extends SystemService { registerProcessSystemIonHeapSize(); registerSystemMemory(); registerProcessDmabufMemory(); registerVmStat(); registerTemperature(); registerCoolingDevice(); registerBinderCallsStats(); Loading Loading @@ -2273,6 +2276,27 @@ public class StatsPullAtomService extends SystemService { 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() { int tagId = FrameworkStatsLog.TEMPERATURE; mStatsManager.setPullAtomCallback( Loading