Loading core/java/com/android/internal/app/IBatteryStats.aidl +1 −0 Original line number Diff line number Diff line Loading @@ -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(); Loading core/java/com/android/internal/os/BatteryStatsImpl.java +45 −2 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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) { Loading Loading @@ -1049,6 +1055,23 @@ public final class BatteryStatsImpl extends BatteryStats { } } 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; Loading Loading @@ -2807,6 +2830,26 @@ public final class BatteryStatsImpl extends BatteryStats { return u.getProcessStatsLocked(name); } /** * 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. Loading core/java/com/android/internal/os/PowerProfile.java +5 −5 Original line number Diff line number Diff line Loading @@ -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]; } Loading services/java/com/android/server/TelephonyRegistry.java +9 −0 Original line number Diff line number Diff line Loading @@ -462,6 +462,15 @@ class TelephonyRegistry extends ITelephonyRegistry.Stub { // private void broadcastServiceStateChanged(ServiceState state) { long ident = Binder.clearCallingIdentity(); try { mBatteryStats.noteAirplaneMode(state.getState() == ServiceState.STATE_POWER_OFF); } catch (RemoteException re) { // Can't do much } finally { Binder.restoreCallingIdentity(ident); } Intent intent = new Intent(TelephonyIntents.ACTION_SERVICE_STATE_CHANGED); Bundle data = new Bundle(); state.fillInNotifierBundle(data); Loading services/java/com/android/server/am/ActivityManagerService.java +11 −2 Original line number Diff line number Diff line Loading @@ -61,6 +61,7 @@ import android.content.pm.ServiceInfo; import android.content.res.Configuration; import android.graphics.Bitmap; import android.net.Uri; import android.os.BatteryStats; import android.os.Binder; import android.os.Bundle; import android.os.Environment; Loading Loading @@ -1517,7 +1518,9 @@ public final class ActivityManagerService extends ActivityManagerNative implemen } } synchronized(mBatteryStatsService.getActiveStatistics()) { final BatteryStatsImpl bstats = (BatteryStatsImpl) mBatteryStatsService.getActiveStatistics(); synchronized(bstats) { synchronized(mPidsSelfLocked) { if (haveNewCpuStats) { if (mBatteryStatsService.isOnBattery()) { Loading @@ -1529,6 +1532,12 @@ public final class ActivityManagerService extends ActivityManagerNative implemen if (pr != null) { BatteryStatsImpl.Uid.Proc ps = pr.batteryStats; ps.addCpuTimeLocked(st.rel_utime, st.rel_stime); } else { BatteryStatsImpl.Uid.Proc ps = bstats.getProcessStatsLocked(st.name); if (ps != null) { ps.addCpuTimeLocked(st.rel_utime, st.rel_stime); } } } } Loading Loading
core/java/com/android/internal/app/IBatteryStats.aidl +1 −0 Original line number Diff line number Diff line Loading @@ -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(); Loading
core/java/com/android/internal/os/BatteryStatsImpl.java +45 −2 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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) { Loading Loading @@ -1049,6 +1055,23 @@ public final class BatteryStatsImpl extends BatteryStats { } } 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; Loading Loading @@ -2807,6 +2830,26 @@ public final class BatteryStatsImpl extends BatteryStats { return u.getProcessStatsLocked(name); } /** * 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. Loading
core/java/com/android/internal/os/PowerProfile.java +5 −5 Original line number Diff line number Diff line Loading @@ -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]; } Loading
services/java/com/android/server/TelephonyRegistry.java +9 −0 Original line number Diff line number Diff line Loading @@ -462,6 +462,15 @@ class TelephonyRegistry extends ITelephonyRegistry.Stub { // private void broadcastServiceStateChanged(ServiceState state) { long ident = Binder.clearCallingIdentity(); try { mBatteryStats.noteAirplaneMode(state.getState() == ServiceState.STATE_POWER_OFF); } catch (RemoteException re) { // Can't do much } finally { Binder.restoreCallingIdentity(ident); } Intent intent = new Intent(TelephonyIntents.ACTION_SERVICE_STATE_CHANGED); Bundle data = new Bundle(); state.fillInNotifierBundle(data); Loading
services/java/com/android/server/am/ActivityManagerService.java +11 −2 Original line number Diff line number Diff line Loading @@ -61,6 +61,7 @@ import android.content.pm.ServiceInfo; import android.content.res.Configuration; import android.graphics.Bitmap; import android.net.Uri; import android.os.BatteryStats; import android.os.Binder; import android.os.Bundle; import android.os.Environment; Loading Loading @@ -1517,7 +1518,9 @@ public final class ActivityManagerService extends ActivityManagerNative implemen } } synchronized(mBatteryStatsService.getActiveStatistics()) { final BatteryStatsImpl bstats = (BatteryStatsImpl) mBatteryStatsService.getActiveStatistics(); synchronized(bstats) { synchronized(mPidsSelfLocked) { if (haveNewCpuStats) { if (mBatteryStatsService.isOnBattery()) { Loading @@ -1529,6 +1532,12 @@ public final class ActivityManagerService extends ActivityManagerNative implemen if (pr != null) { BatteryStatsImpl.Uid.Proc ps = pr.batteryStats; ps.addCpuTimeLocked(st.rel_utime, st.rel_stime); } else { BatteryStatsImpl.Uid.Proc ps = bstats.getProcessStatsLocked(st.name); if (ps != null) { ps.addCpuTimeLocked(st.rel_utime, st.rel_stime); } } } } Loading