Loading core/java/com/android/internal/os/ProcessCpuTracker.java +18 −0 Original line number Diff line number Diff line Loading @@ -39,6 +39,7 @@ import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; import java.util.Date; import java.util.List; import java.util.StringTokenizer; public class ProcessCpuTracker { Loading Loading @@ -177,6 +178,11 @@ public class ProcessCpuTracker { private byte[] mBuffer = new byte[4096]; public interface FilterStats { /** Which stats to pick when filtering */ boolean needed(Stats stats); } public static class Stats { public final int pid; public final int uid; Loading Loading @@ -695,6 +701,18 @@ public class ProcessCpuTracker { return mProcStats.get(index); } final public List<Stats> getStats(FilterStats filter) { final ArrayList<Stats> statses = new ArrayList<>(mProcStats.size()); final int N = mProcStats.size(); for (int p = 0; p < N; p++) { Stats stats = mProcStats.get(p); if (filter.needed(stats)) { statses.add(stats); } } return statses; } final public int countWorkingStats() { buildWorkingProcs(); return mWorkingProcs.size(); Loading services/core/java/com/android/server/am/ActivityManagerService.java +28 −26 Original line number Diff line number Diff line Loading @@ -2397,22 +2397,21 @@ public final class ActivityManagerService extends ActivityManagerNative if (memInfo != null) { updateCpuStatsNow(); long nativeTotalPss = 0; final List<ProcessCpuTracker.Stats> stats; synchronized (mProcessCpuTracker) { final int N = mProcessCpuTracker.countStats(); for (int j=0; j<N; j++) { ProcessCpuTracker.Stats st = mProcessCpuTracker.getStats(j); if (st.vsize <= 0 || st.uid >= Process.FIRST_APPLICATION_UID) { // This is definitely an application process; skip it. continue; stats = mProcessCpuTracker.getStats( (st)-> { return st.vsize > 0 && st.uid < Process.FIRST_APPLICATION_UID; }); } final int N = stats.size(); for (int j = 0; j < N; j++) { synchronized (mPidsSelfLocked) { if (mPidsSelfLocked.indexOfKey(st.pid) >= 0) { if (mPidsSelfLocked.indexOfKey(stats.get(j).pid) >= 0) { // This is one of our own processes; skip it. continue; } } nativeTotalPss += Debug.getPss(st.pid, null, null); } nativeTotalPss += Debug.getPss(stats.get(j).pid, null, null); } memInfo.readMemInfo(); synchronized (ActivityManagerService.this) { Loading Loading @@ -16505,11 +16504,16 @@ public final class ActivityManagerService extends ActivityManagerNative } updateCpuStatsNow(); long[] memtrackTmp = new long[1]; final List<ProcessCpuTracker.Stats> stats; // Get a list of Stats that have vsize > 0 synchronized (mProcessCpuTracker) { final int N = mProcessCpuTracker.countStats(); for (int i=0; i<N; i++) { ProcessCpuTracker.Stats st = mProcessCpuTracker.getStats(i); if (st.vsize > 0) { stats = mProcessCpuTracker.getStats((st) -> { return st.vsize > 0; }); } final int statsCount = stats.size(); for (int i = 0; i < statsCount; i++) { ProcessCpuTracker.Stats st = stats.get(i); long pss = Debug.getPss(st.pid, null, memtrackTmp); if (pss > 0) { if (infoMap.indexOfKey(st.pid) < 0) { Loading @@ -16521,8 +16525,6 @@ public final class ActivityManagerService extends ActivityManagerNative } } } } } long totalPss = 0; long totalMemtrack = 0; Loading
core/java/com/android/internal/os/ProcessCpuTracker.java +18 −0 Original line number Diff line number Diff line Loading @@ -39,6 +39,7 @@ import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; import java.util.Date; import java.util.List; import java.util.StringTokenizer; public class ProcessCpuTracker { Loading Loading @@ -177,6 +178,11 @@ public class ProcessCpuTracker { private byte[] mBuffer = new byte[4096]; public interface FilterStats { /** Which stats to pick when filtering */ boolean needed(Stats stats); } public static class Stats { public final int pid; public final int uid; Loading Loading @@ -695,6 +701,18 @@ public class ProcessCpuTracker { return mProcStats.get(index); } final public List<Stats> getStats(FilterStats filter) { final ArrayList<Stats> statses = new ArrayList<>(mProcStats.size()); final int N = mProcStats.size(); for (int p = 0; p < N; p++) { Stats stats = mProcStats.get(p); if (filter.needed(stats)) { statses.add(stats); } } return statses; } final public int countWorkingStats() { buildWorkingProcs(); return mWorkingProcs.size(); Loading
services/core/java/com/android/server/am/ActivityManagerService.java +28 −26 Original line number Diff line number Diff line Loading @@ -2397,22 +2397,21 @@ public final class ActivityManagerService extends ActivityManagerNative if (memInfo != null) { updateCpuStatsNow(); long nativeTotalPss = 0; final List<ProcessCpuTracker.Stats> stats; synchronized (mProcessCpuTracker) { final int N = mProcessCpuTracker.countStats(); for (int j=0; j<N; j++) { ProcessCpuTracker.Stats st = mProcessCpuTracker.getStats(j); if (st.vsize <= 0 || st.uid >= Process.FIRST_APPLICATION_UID) { // This is definitely an application process; skip it. continue; stats = mProcessCpuTracker.getStats( (st)-> { return st.vsize > 0 && st.uid < Process.FIRST_APPLICATION_UID; }); } final int N = stats.size(); for (int j = 0; j < N; j++) { synchronized (mPidsSelfLocked) { if (mPidsSelfLocked.indexOfKey(st.pid) >= 0) { if (mPidsSelfLocked.indexOfKey(stats.get(j).pid) >= 0) { // This is one of our own processes; skip it. continue; } } nativeTotalPss += Debug.getPss(st.pid, null, null); } nativeTotalPss += Debug.getPss(stats.get(j).pid, null, null); } memInfo.readMemInfo(); synchronized (ActivityManagerService.this) { Loading Loading @@ -16505,11 +16504,16 @@ public final class ActivityManagerService extends ActivityManagerNative } updateCpuStatsNow(); long[] memtrackTmp = new long[1]; final List<ProcessCpuTracker.Stats> stats; // Get a list of Stats that have vsize > 0 synchronized (mProcessCpuTracker) { final int N = mProcessCpuTracker.countStats(); for (int i=0; i<N; i++) { ProcessCpuTracker.Stats st = mProcessCpuTracker.getStats(i); if (st.vsize > 0) { stats = mProcessCpuTracker.getStats((st) -> { return st.vsize > 0; }); } final int statsCount = stats.size(); for (int i = 0; i < statsCount; i++) { ProcessCpuTracker.Stats st = stats.get(i); long pss = Debug.getPss(st.pid, null, memtrackTmp); if (pss > 0) { if (infoMap.indexOfKey(st.pid) < 0) { Loading @@ -16521,8 +16525,6 @@ public final class ActivityManagerService extends ActivityManagerNative } } } } } long totalPss = 0; long totalMemtrack = 0;