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

Commit 2f2b5aca authored by Amith Yamasani's avatar Amith Yamasani Committed by android-build-merger
Browse files

Call Debug.getPss without a lock held am: 10e8f16a am: f10d31f5

am: 65fdd196

Change-Id: Ic41194d60d8919d69123bd40082c86b2a1e22571
parents dff38ad8 65fdd196
Loading
Loading
Loading
Loading
+18 −0
Original line number Diff line number Diff line
@@ -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 {
@@ -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;
@@ -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();
+28 −26
Original line number Diff line number Diff line
@@ -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) {
@@ -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) {
@@ -16521,8 +16525,6 @@ public final class ActivityManagerService extends ActivityManagerNative
                }
            }
        }
            }
        }
        long totalPss = 0;
        long totalMemtrack = 0;