summaryrefslogtreecommitdiffstats
path: root/core
diff options
context:
space:
mode:
authorAmith Yamasani <yamasani@google.com>2009-06-19 09:21:17 -0700
committerAmith Yamasani <yamasani@google.com>2009-06-24 11:17:36 -0700
commit32dbefda71c50bf848da21fb5d1255273439f90d (patch)
treeb73db68d5802a75471a85fb93fa7109054e05a30 /core
parent4133751d51a04172aa65e24658b4207ef764de91 (diff)
downloadframeworks_base-32dbefda71c50bf848da21fb5d1255273439f90d.zip
frameworks_base-32dbefda71c50bf848da21fb5d1255273439f90d.tar.gz
frameworks_base-32dbefda71c50bf848da21fb5d1255273439f90d.tar.bz2
Track native processes and airplane mode.
Turn signal strengths on/off when toggling airplane mode.
Diffstat (limited to 'core')
-rw-r--r--core/java/com/android/internal/app/IBatteryStats.aidl1
-rw-r--r--core/java/com/android/internal/os/BatteryStatsImpl.java47
-rw-r--r--core/java/com/android/internal/os/PowerProfile.java10
3 files changed, 51 insertions, 7 deletions
diff --git a/core/java/com/android/internal/app/IBatteryStats.aidl b/core/java/com/android/internal/app/IBatteryStats.aidl
index ce32754..4bac593 100644
--- a/core/java/com/android/internal/app/IBatteryStats.aidl
+++ b/core/java/com/android/internal/app/IBatteryStats.aidl
@@ -37,6 +37,7 @@ interface IBatteryStats {
void notePhoneOff();
void notePhoneSignalStrength(in SignalStrength signalStrength);
void notePhoneDataConnectionState(int dataType, boolean hasData);
+ void noteAirplaneMode(boolean isAirplaneMode);
void noteWifiOn(int uid);
void noteWifiOff(int uid);
void noteWifiRunning();
diff --git a/core/java/com/android/internal/os/BatteryStatsImpl.java b/core/java/com/android/internal/os/BatteryStatsImpl.java
index 58a3a83..fc4a9c4 100644
--- a/core/java/com/android/internal/os/BatteryStatsImpl.java
+++ b/core/java/com/android/internal/os/BatteryStatsImpl.java
@@ -191,6 +191,8 @@ public final class BatteryStatsImpl extends BatteryStats {
private final Map<String, KernelWakelockStats> mProcWakelockFileStats =
new HashMap<String, KernelWakelockStats>();
+ private HashMap<String, Integer> mUidCache = new HashMap<String, Integer>();
+
// For debugging
public BatteryStatsImpl() {
mFile = mBackupFile = null;
@@ -714,6 +716,10 @@ public final class BatteryStatsImpl extends BatteryStats {
}
}
+ boolean isRunningLocked() {
+ return mNesting > 0;
+ }
+
void stopRunningLocked(BatteryStatsImpl stats) {
// Ignore attempt to stop a timer that isn't running
if (mNesting == 0) {
@@ -1048,7 +1054,24 @@ public final class BatteryStatsImpl extends BatteryStats {
mPhoneOnTimer.stopRunningLocked(this);
}
}
-
+
+ public void noteAirplaneModeLocked(boolean isAirplaneMode) {
+ final int bin = mPhoneSignalStrengthBin;
+ if (bin >= 0) {
+ if (!isAirplaneMode) {
+ if (!mPhoneSignalStrengthsTimer[bin].isRunningLocked()) {
+ mPhoneSignalStrengthsTimer[bin].startRunningLocked(this);
+ }
+ } else {
+ for (int i = 0; i < NUM_SIGNAL_STRENGTH_BINS; i++) {
+ while (mPhoneSignalStrengthsTimer[i].isRunningLocked()) {
+ mPhoneSignalStrengthsTimer[i].stopRunningLocked(this);
+ }
+ }
+ }
+ }
+ }
+
public void notePhoneSignalStrengthLocked(SignalStrength signalStrength) {
// Bin the strength.
int bin;
@@ -2797,7 +2820,7 @@ public final class BatteryStatsImpl extends BatteryStats {
public void removeUidStatsLocked(int uid) {
mUidStats.remove(uid);
}
-
+
/**
* Retrieve the statistics object for a particular process, creating
* if needed.
@@ -2808,6 +2831,26 @@ public final class BatteryStatsImpl extends BatteryStats {
}
/**
+ * Retrieve the statistics object for a particular process, given
+ * the name of the process.
+ * @param name process name
+ * @return the statistics object for the process
+ */
+ public Uid.Proc getProcessStatsLocked(String name) {
+ 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();
+ mUidCache.put(name, uid);
+ }
+ Uid u = getUidStatsLocked(uid);
+ return u.getProcessStatsLocked(name);
+ }
+
+ /**
* Retrieve the statistics object for a particular process, creating
* if needed.
*/
diff --git a/core/java/com/android/internal/os/PowerProfile.java b/core/java/com/android/internal/os/PowerProfile.java
index a37bf6e..4a8d8b1 100644
--- a/core/java/com/android/internal/os/PowerProfile.java
+++ b/core/java/com/android/internal/os/PowerProfile.java
@@ -219,12 +219,12 @@ public class PowerProfile {
public double getAveragePower(String type, int level) {
if (sPowerMap.containsKey(type)) {
Object data = sPowerMap.get(type);
- if (data instanceof double[]) {
- final double[] values = (double[]) data;
- if (values.length > level) {
+ if (data instanceof Double[]) {
+ final Double[] values = (Double[]) data;
+ if (values.length > level && level >= 0) {
return values[level];
- } else if (values.length < 0) {
- return values[0];
+ } else if (level < 0) {
+ return 0;
} else {
return values[values.length - 1];
}