summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAmith Yamasani <yamasani@google.com>2009-06-24 23:18:15 -0700
committerAmith Yamasani <yamasani@google.com>2009-06-24 23:26:29 -0700
commit819f928f6a9dc3fdf408236f33e17f03a7dfed2c (patch)
treee830a39404ad66b8a2bfc40ef7e96f0c2a85c014
parentc6a482e778e7b5fc5790edf22e554c93f53b1112 (diff)
downloadframeworks_base-819f928f6a9dc3fdf408236f33e17f03a7dfed2c.zip
frameworks_base-819f928f6a9dc3fdf408236f33e17f03a7dfed2c.tar.gz
frameworks_base-819f928f6a9dc3fdf408236f33e17f03a7dfed2c.tar.bz2
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.
-rw-r--r--core/java/android/os/Process.java16
-rw-r--r--core/java/com/android/internal/os/BatteryStatsImpl.java6
-rw-r--r--services/java/com/android/server/am/ActivityManagerService.java5
3 files changed, 19 insertions, 8 deletions
diff --git a/core/java/android/os/Process.java b/core/java/android/os/Process.java
index 333c7cb..1214abc 100644
--- a/core/java/android/os/Process.java
+++ b/core/java/android/os/Process.java
@@ -573,7 +573,21 @@ public class Process {
* directly to a gid.
*/
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.
*
diff --git a/core/java/com/android/internal/os/BatteryStatsImpl.java b/core/java/com/android/internal/os/BatteryStatsImpl.java
index fc4a9c4..a03802d 100644
--- a/core/java/com/android/internal/os/BatteryStatsImpl.java
+++ b/core/java/com/android/internal/os/BatteryStatsImpl.java
@@ -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);
diff --git a/services/java/com/android/server/am/ActivityManagerService.java b/services/java/com/android/server/am/ActivityManagerService.java
index 0d9d2b0..fd1dfc8 100644
--- a/services/java/com/android/server/am/ActivityManagerService.java
+++ b/services/java/com/android/server/am/ActivityManagerService.java
@@ -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);
}