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

Commit 819f928f authored by Amith Yamasani's avatar Amith Yamasani
Browse files

Add a method to Process to get uid for a pid.

Use the uids to track native processes. Cache the uids to avoid
checking /proc every time.
parent c6a482e7
Loading
Loading
Loading
Loading
+15 −1
Original line number Diff line number Diff line
@@ -574,6 +574,20 @@ public class Process {
     */
    public static final native int getGidForName(String name);

    /**
     * Returns a uid for a currently running process.
     * @param pid the process id
     * @return the uid of the process, or -1 if the process is not running.
     * @hide pending API council review
     */
    public static final int getUidForPid(int pid) {
        String[] procStatusLabels = { "Uid:" };
        long[] procStatusValues = new long[1];
        procStatusValues[0] = -1;
        Process.readProcLines("/proc/" + pid + "/status", procStatusLabels, procStatusValues);
        return (int) procStatusValues[0];
    }

    /**
     * Set the priority of a thread, based on Linux priorities.
     * 
+2 −4
Original line number Diff line number Diff line
@@ -2836,14 +2836,12 @@ public final class BatteryStatsImpl extends BatteryStats {
     * @param name process name
     * @return the statistics object for the process
     */
    public Uid.Proc getProcessStatsLocked(String name) {
    public Uid.Proc getProcessStatsLocked(String name, int pid) {
        int uid;
        if (mUidCache.containsKey(name)) {
            uid = mUidCache.get(name);
        } else {
            // TODO: Find the actual uid from /proc/pid/status. For now use the hashcode of the
            // process name
            uid = name.hashCode();
            uid = Process.getUidForPid(pid);
            mUidCache.put(name, uid);
        }
        Uid u = getUidStatsLocked(uid);
+2 −3
Original line number Diff line number Diff line
@@ -1518,8 +1518,7 @@ public final class ActivityManagerService extends ActivityManagerNative implemen
                }
            }
            
            final BatteryStatsImpl bstats =
                    (BatteryStatsImpl) mBatteryStatsService.getActiveStatistics();
            final BatteryStatsImpl bstats = mBatteryStatsService.getActiveStatistics();
            synchronized(bstats) {
                synchronized(mPidsSelfLocked) {
                    if (haveNewCpuStats) {
@@ -1534,7 +1533,7 @@ public final class ActivityManagerService extends ActivityManagerNative implemen
                                    ps.addCpuTimeLocked(st.rel_utime, st.rel_stime);
                                } else {
                                    BatteryStatsImpl.Uid.Proc ps =
                                            bstats.getProcessStatsLocked(st.name);
                                            bstats.getProcessStatsLocked(st.name, st.pid);
                                    if (ps != null) {
                                        ps.addCpuTimeLocked(st.rel_utime, st.rel_stime);
                                    }