diff options
author | Amith Yamasani <yamasani@google.com> | 2009-06-19 09:21:17 -0700 |
---|---|---|
committer | Amith Yamasani <yamasani@google.com> | 2009-06-24 11:17:36 -0700 |
commit | 32dbefda71c50bf848da21fb5d1255273439f90d (patch) | |
tree | b73db68d5802a75471a85fb93fa7109054e05a30 /core | |
parent | 4133751d51a04172aa65e24658b4207ef764de91 (diff) | |
download | frameworks_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.aidl | 1 | ||||
-rw-r--r-- | core/java/com/android/internal/os/BatteryStatsImpl.java | 47 | ||||
-rw-r--r-- | core/java/com/android/internal/os/PowerProfile.java | 10 |
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]; } |