Loading core/java/android/os/BatteryStats.java +15 −3 Original line number Diff line number Diff line Loading @@ -105,6 +105,11 @@ public abstract class BatteryStats implements Parcelable { */ public static final int FOREGROUND_ACTIVITY = 10; /** * A constant indicating a wifi batched scan is active */ public static final int WIFI_BATCHED_SCAN = 11; /** * Include all of the data in the stats, including previously saved data. */ Loading Loading @@ -270,6 +275,8 @@ public abstract class BatteryStats implements Parcelable { public abstract void noteFullWifiLockReleasedLocked(); public abstract void noteWifiScanStartedLocked(); public abstract void noteWifiScanStoppedLocked(); public abstract void noteWifiBatchedScanStartedLocked(int csph); public abstract void noteWifiBatchedScanStoppedLocked(); public abstract void noteWifiMulticastEnabledLocked(); public abstract void noteWifiMulticastDisabledLocked(); public abstract void noteAudioTurnedOnLocked(); Loading @@ -281,6 +288,7 @@ public abstract class BatteryStats implements Parcelable { public abstract long getWifiRunningTime(long batteryRealtime, int which); public abstract long getFullWifiLockTime(long batteryRealtime, int which); public abstract long getWifiScanTime(long batteryRealtime, int which); public abstract long getWifiBatchedScanTime(int csphBin, long batteryRealtime, int which); public abstract long getWifiMulticastTime(long batteryRealtime, int which); public abstract long getAudioTurnedOnTime(long batteryRealtime, int which); Loading @@ -288,6 +296,8 @@ public abstract class BatteryStats implements Parcelable { public abstract Timer getForegroundActivityTimer(); public abstract Timer getVibratorOnTimer(); public static final int NUM_WIFI_BATCHED_SCAN_BINS = 5; /** * Note that these must match the constants in android.os.PowerManager. * Also, if the user activity types change, the BatteryStatsImpl.VERSION must Loading Loading @@ -2081,11 +2091,13 @@ public abstract class BatteryStats implements Parcelable { TimeUtils.formatDuration(ew.usedTime, pw); pw.print(" over "); TimeUtils.formatDuration(ew.overTime, pw); if (ew.overTime != 0) { pw.print(" ("); pw.print((ew.usedTime*100)/ew.overTime); pw.println("%)"); } } } uidActivity = true; } } Loading core/java/com/android/internal/app/IBatteryStats.aidl +2 −0 Original line number Diff line number Diff line Loading @@ -68,6 +68,8 @@ interface IBatteryStats { void noteFullWifiLockReleasedFromSource(in WorkSource ws); void noteWifiScanStartedFromSource(in WorkSource ws); void noteWifiScanStoppedFromSource(in WorkSource ws); void noteWifiBatchedScanStartedFromSource(in WorkSource ws, int csph); void noteWifiBatchedScanStoppedFromSource(in WorkSource ws); void noteWifiMulticastEnabledFromSource(in WorkSource ws); void noteWifiMulticastDisabledFromSource(in WorkSource ws); void noteNetworkInterfaceType(String iface, int type); Loading core/java/com/android/internal/os/BatteryStatsImpl.java +131 −0 Original line number Diff line number Diff line Loading @@ -154,6 +154,8 @@ public final class BatteryStatsImpl extends BatteryStats { final ArrayList<StopwatchTimer> mFullWifiLockTimers = new ArrayList<StopwatchTimer>(); final ArrayList<StopwatchTimer> mWifiMulticastTimers = new ArrayList<StopwatchTimer>(); final ArrayList<StopwatchTimer> mWifiScanTimers = new ArrayList<StopwatchTimer>(); final SparseArray<ArrayList<StopwatchTimer>> mWifiBatchedScanTimers = new SparseArray<ArrayList<StopwatchTimer>>(); // Last partial timers we use for distributing CPU usage. final ArrayList<StopwatchTimer> mLastPartialTimers = new ArrayList<StopwatchTimer>(); Loading Loading @@ -2404,6 +2406,14 @@ public final class BatteryStatsImpl extends BatteryStats { getUidStatsLocked(uid).noteWifiScanStoppedLocked(); } public void noteWifiBatchedScanStartedLocked(int uid, int csph) { getUidStatsLocked(uid).noteWifiBatchedScanStartedLocked(csph); } public void noteWifiBatchedScanStoppedLocked(int uid) { getUidStatsLocked(uid).noteWifiBatchedScanStoppedLocked(); } int mWifiMulticastNesting = 0; public void noteWifiMulticastEnabledLocked(int uid) { Loading Loading @@ -2456,6 +2466,20 @@ public final class BatteryStatsImpl extends BatteryStats { } } public void noteWifiBatchedScanStartedFromSourceLocked(WorkSource ws, int csph) { int N = ws.size(); for (int i=0; i<N; i++) { noteWifiBatchedScanStartedLocked(ws.get(i), csph); } } public void noteWifiBatchedScanStoppedFromSourceLocked(WorkSource ws) { int N = ws.size(); for (int i=0; i<N; i++) { noteWifiBatchedScanStoppedLocked(ws.get(i)); } } public void noteWifiMulticastEnabledFromSourceLocked(WorkSource ws) { int N = ws.size(); for (int i=0; i<N; i++) { Loading Loading @@ -2579,6 +2603,10 @@ public final class BatteryStatsImpl extends BatteryStats { boolean mWifiScanStarted; StopwatchTimer mWifiScanTimer; private static final int NO_BATCHED_SCAN_STARTED = -1; int mWifiBatchedScanBinStarted = NO_BATCHED_SCAN_STARTED; StopwatchTimer[] mWifiBatchedScanTimer; boolean mWifiMulticastEnabled; StopwatchTimer mWifiMulticastTimer; Loading Loading @@ -2629,6 +2657,7 @@ public final class BatteryStatsImpl extends BatteryStats { mFullWifiLockTimers, mUnpluggables); mWifiScanTimer = new StopwatchTimer(Uid.this, WIFI_SCAN, mWifiScanTimers, mUnpluggables); mWifiBatchedScanTimer = new StopwatchTimer[NUM_WIFI_BATCHED_SCAN_BINS]; mWifiMulticastTimer = new StopwatchTimer(Uid.this, WIFI_MULTICAST_ENABLED, mWifiMulticastTimers, mUnpluggables); } Loading Loading @@ -2718,6 +2747,36 @@ public final class BatteryStatsImpl extends BatteryStats { } } @Override public void noteWifiBatchedScanStartedLocked(int csph) { int bin = 0; while (csph > 8 && bin < NUM_WIFI_BATCHED_SCAN_BINS) { csph = csph >> 3; bin++; } if (mWifiBatchedScanBinStarted == bin) return; if (mWifiBatchedScanBinStarted != NO_BATCHED_SCAN_STARTED) { mWifiBatchedScanTimer[mWifiBatchedScanBinStarted]. stopRunningLocked(BatteryStatsImpl.this); } mWifiBatchedScanBinStarted = bin; if (mWifiBatchedScanTimer[bin] == null) { makeWifiBatchedScanBin(bin, null); } mWifiBatchedScanTimer[bin].startRunningLocked(BatteryStatsImpl.this); } @Override public void noteWifiBatchedScanStoppedLocked() { if (mWifiBatchedScanBinStarted != NO_BATCHED_SCAN_STARTED) { mWifiBatchedScanTimer[mWifiBatchedScanBinStarted]. stopRunningLocked(BatteryStatsImpl.this); mWifiBatchedScanBinStarted = NO_BATCHED_SCAN_STARTED; } } @Override public void noteWifiMulticastEnabledLocked() { if (!mWifiMulticastEnabled) { Loading Loading @@ -2853,6 +2912,15 @@ public final class BatteryStatsImpl extends BatteryStats { return mWifiScanTimer.getTotalTimeLocked(batteryRealtime, which); } @Override public long getWifiBatchedScanTime(int csphBin, long batteryRealtime, int which) { if (csphBin < 0 || csphBin >= NUM_WIFI_BATCHED_SCAN_BINS) return 0; if (mWifiBatchedScanTimer[csphBin] == null) { return 0; } return mWifiBatchedScanTimer[csphBin].getTotalTimeLocked(batteryRealtime, which); } @Override public long getWifiMulticastTime(long batteryRealtime, int which) { if (mWifiMulticastTimer == null) { Loading Loading @@ -2914,6 +2982,24 @@ public final class BatteryStatsImpl extends BatteryStats { return mUserActivityCounters[type].getCountLocked(which); } void makeWifiBatchedScanBin(int i, Parcel in) { if (i < 0 || i >= NUM_WIFI_BATCHED_SCAN_BINS) return; ArrayList<StopwatchTimer> collected = mWifiBatchedScanTimers.get(i); if (collected == null) { collected = new ArrayList<StopwatchTimer>(); mWifiBatchedScanTimers.put(i, collected); } if (in == null) { mWifiBatchedScanTimer[i] = new StopwatchTimer(this, WIFI_BATCHED_SCAN, collected, mUnpluggables); } else { mWifiBatchedScanTimer[i] = new StopwatchTimer(this, WIFI_BATCHED_SCAN, collected, mUnpluggables, in); } } void initUserActivityLocked() { mUserActivityCounters = new Counter[NUM_USER_ACTIVITY_TYPES]; for (int i=0; i<NUM_USER_ACTIVITY_TYPES; i++) { Loading Loading @@ -2974,6 +3060,14 @@ public final class BatteryStatsImpl extends BatteryStats { active |= !mWifiScanTimer.reset(BatteryStatsImpl.this, false); active |= mWifiScanStarted; } if (mWifiBatchedScanTimer != null) { for (int i = 0; i < NUM_WIFI_BATCHED_SCAN_BINS; i++) { if (mWifiBatchedScanTimer[i] != null) { active |= !mWifiBatchedScanTimer[i].reset(BatteryStatsImpl.this, false); } } active |= (mWifiBatchedScanBinStarted != NO_BATCHED_SCAN_STARTED); } if (mWifiMulticastTimer != null) { active |= !mWifiMulticastTimer.reset(BatteryStatsImpl.this, false); active |= mWifiMulticastEnabled; Loading Loading @@ -3080,6 +3174,11 @@ public final class BatteryStatsImpl extends BatteryStats { if (mWifiScanTimer != null) { mWifiScanTimer.detach(); } for (int i = 0; i < NUM_WIFI_BATCHED_SCAN_BINS; i++) { if (mWifiBatchedScanTimer[i] != null) { mWifiBatchedScanTimer[i].detach(); } } if (mWifiMulticastTimer != null) { mWifiMulticastTimer.detach(); } Loading Loading @@ -3157,6 +3256,14 @@ public final class BatteryStatsImpl extends BatteryStats { } else { out.writeInt(0); } for (int i = 0; i < NUM_WIFI_BATCHED_SCAN_BINS; i++) { if (mWifiBatchedScanTimer[i] != null) { out.writeInt(1); mWifiBatchedScanTimer[i].writeToParcel(out, batteryRealtime); } else { out.writeInt(0); } } if (mWifiMulticastTimer != null) { out.writeInt(1); mWifiMulticastTimer.writeToParcel(out, batteryRealtime); Loading Loading @@ -3266,6 +3373,14 @@ public final class BatteryStatsImpl extends BatteryStats { } else { mWifiScanTimer = null; } mWifiBatchedScanBinStarted = NO_BATCHED_SCAN_STARTED; for (int i = 0; i < NUM_WIFI_BATCHED_SCAN_BINS; i++) { if (in.readInt() != 0) { makeWifiBatchedScanBin(i, in); } else { mWifiBatchedScanTimer[i] = null; } } mWifiMulticastEnabled = false; if (in.readInt() != 0) { mWifiMulticastTimer = new StopwatchTimer(Uid.this, WIFI_MULTICAST_ENABLED, Loading Loading @@ -5463,6 +5578,13 @@ public final class BatteryStatsImpl extends BatteryStats { if (in.readInt() != 0) { u.mWifiScanTimer.readSummaryFromParcelLocked(in); } u.mWifiBatchedScanBinStarted = Uid.NO_BATCHED_SCAN_STARTED; for (int i = 0; i < Uid.NUM_WIFI_BATCHED_SCAN_BINS; i++) { if (in.readInt() != 0) { u.makeWifiBatchedScanBin(i, null); u.mWifiBatchedScanTimer[i].readSummaryFromParcelLocked(in); } } u.mWifiMulticastEnabled = false; if (in.readInt() != 0) { u.mWifiMulticastTimer.readSummaryFromParcelLocked(in); Loading Loading @@ -5674,6 +5796,14 @@ public final class BatteryStatsImpl extends BatteryStats { } else { out.writeInt(0); } for (int i = 0; i < Uid.NUM_WIFI_BATCHED_SCAN_BINS; i++) { if (u.mWifiBatchedScanTimer[i] != null) { out.writeInt(1); u.mWifiBatchedScanTimer[i].writeSummaryFromParcelLocked(out, NOWREAL); } else { out.writeInt(0); } } if (u.mWifiMulticastTimer != null) { out.writeInt(1); u.mWifiMulticastTimer.writeSummaryFromParcelLocked(out, NOWREAL); Loading Loading @@ -5909,6 +6039,7 @@ public final class BatteryStatsImpl extends BatteryStats { mWifiRunningTimers.clear(); mFullWifiLockTimers.clear(); mWifiScanTimers.clear(); mWifiBatchedScanTimers.clear(); mWifiMulticastTimers.clear(); sNumSpeedSteps = in.readInt(); Loading core/java/com/android/internal/os/PowerProfile.java +8 −1 Original line number Diff line number Diff line Loading @@ -135,6 +135,13 @@ public class PowerProfile { public static final String POWER_CPU_SPEEDS = "cpu.speeds"; /** * Power consumed by wif batched scaning. Broken down into bins by * Channels Scanned per Hour. May do 1-720 scans per hour of 1-100 channels * for a range of 1-72,000. Going logrithmic (1-8, 9-64, 65-512, 513-4096, 4097-)! */ public static final String POWER_WIFI_BATCHED_SCAN = "wifi.batchedscan"; /** * Battery capacity in milliAmpHour (mAh). */ Loading core/res/res/xml/power_profile.xml +8 −0 Original line number Diff line number Diff line Loading @@ -58,4 +58,12 @@ </array> <!-- This is the battery capacity in mAh (measured at nominal voltage) --> <item name="battery.capacity">1000</item> <array name="wifi.batchedscan"> <!-- mA --> <value>.0002</value> <!-- 1-8/hr --> <value>.002</value> <!-- 9-64/hr --> <value>.02</value> <!-- 65-512/hr --> <value>.2</value> <!-- 513-4,096/hr --> <value>2</value> <!-- 4097-/hr --> </array> </device> Loading
core/java/android/os/BatteryStats.java +15 −3 Original line number Diff line number Diff line Loading @@ -105,6 +105,11 @@ public abstract class BatteryStats implements Parcelable { */ public static final int FOREGROUND_ACTIVITY = 10; /** * A constant indicating a wifi batched scan is active */ public static final int WIFI_BATCHED_SCAN = 11; /** * Include all of the data in the stats, including previously saved data. */ Loading Loading @@ -270,6 +275,8 @@ public abstract class BatteryStats implements Parcelable { public abstract void noteFullWifiLockReleasedLocked(); public abstract void noteWifiScanStartedLocked(); public abstract void noteWifiScanStoppedLocked(); public abstract void noteWifiBatchedScanStartedLocked(int csph); public abstract void noteWifiBatchedScanStoppedLocked(); public abstract void noteWifiMulticastEnabledLocked(); public abstract void noteWifiMulticastDisabledLocked(); public abstract void noteAudioTurnedOnLocked(); Loading @@ -281,6 +288,7 @@ public abstract class BatteryStats implements Parcelable { public abstract long getWifiRunningTime(long batteryRealtime, int which); public abstract long getFullWifiLockTime(long batteryRealtime, int which); public abstract long getWifiScanTime(long batteryRealtime, int which); public abstract long getWifiBatchedScanTime(int csphBin, long batteryRealtime, int which); public abstract long getWifiMulticastTime(long batteryRealtime, int which); public abstract long getAudioTurnedOnTime(long batteryRealtime, int which); Loading @@ -288,6 +296,8 @@ public abstract class BatteryStats implements Parcelable { public abstract Timer getForegroundActivityTimer(); public abstract Timer getVibratorOnTimer(); public static final int NUM_WIFI_BATCHED_SCAN_BINS = 5; /** * Note that these must match the constants in android.os.PowerManager. * Also, if the user activity types change, the BatteryStatsImpl.VERSION must Loading Loading @@ -2081,11 +2091,13 @@ public abstract class BatteryStats implements Parcelable { TimeUtils.formatDuration(ew.usedTime, pw); pw.print(" over "); TimeUtils.formatDuration(ew.overTime, pw); if (ew.overTime != 0) { pw.print(" ("); pw.print((ew.usedTime*100)/ew.overTime); pw.println("%)"); } } } uidActivity = true; } } Loading
core/java/com/android/internal/app/IBatteryStats.aidl +2 −0 Original line number Diff line number Diff line Loading @@ -68,6 +68,8 @@ interface IBatteryStats { void noteFullWifiLockReleasedFromSource(in WorkSource ws); void noteWifiScanStartedFromSource(in WorkSource ws); void noteWifiScanStoppedFromSource(in WorkSource ws); void noteWifiBatchedScanStartedFromSource(in WorkSource ws, int csph); void noteWifiBatchedScanStoppedFromSource(in WorkSource ws); void noteWifiMulticastEnabledFromSource(in WorkSource ws); void noteWifiMulticastDisabledFromSource(in WorkSource ws); void noteNetworkInterfaceType(String iface, int type); Loading
core/java/com/android/internal/os/BatteryStatsImpl.java +131 −0 Original line number Diff line number Diff line Loading @@ -154,6 +154,8 @@ public final class BatteryStatsImpl extends BatteryStats { final ArrayList<StopwatchTimer> mFullWifiLockTimers = new ArrayList<StopwatchTimer>(); final ArrayList<StopwatchTimer> mWifiMulticastTimers = new ArrayList<StopwatchTimer>(); final ArrayList<StopwatchTimer> mWifiScanTimers = new ArrayList<StopwatchTimer>(); final SparseArray<ArrayList<StopwatchTimer>> mWifiBatchedScanTimers = new SparseArray<ArrayList<StopwatchTimer>>(); // Last partial timers we use for distributing CPU usage. final ArrayList<StopwatchTimer> mLastPartialTimers = new ArrayList<StopwatchTimer>(); Loading Loading @@ -2404,6 +2406,14 @@ public final class BatteryStatsImpl extends BatteryStats { getUidStatsLocked(uid).noteWifiScanStoppedLocked(); } public void noteWifiBatchedScanStartedLocked(int uid, int csph) { getUidStatsLocked(uid).noteWifiBatchedScanStartedLocked(csph); } public void noteWifiBatchedScanStoppedLocked(int uid) { getUidStatsLocked(uid).noteWifiBatchedScanStoppedLocked(); } int mWifiMulticastNesting = 0; public void noteWifiMulticastEnabledLocked(int uid) { Loading Loading @@ -2456,6 +2466,20 @@ public final class BatteryStatsImpl extends BatteryStats { } } public void noteWifiBatchedScanStartedFromSourceLocked(WorkSource ws, int csph) { int N = ws.size(); for (int i=0; i<N; i++) { noteWifiBatchedScanStartedLocked(ws.get(i), csph); } } public void noteWifiBatchedScanStoppedFromSourceLocked(WorkSource ws) { int N = ws.size(); for (int i=0; i<N; i++) { noteWifiBatchedScanStoppedLocked(ws.get(i)); } } public void noteWifiMulticastEnabledFromSourceLocked(WorkSource ws) { int N = ws.size(); for (int i=0; i<N; i++) { Loading Loading @@ -2579,6 +2603,10 @@ public final class BatteryStatsImpl extends BatteryStats { boolean mWifiScanStarted; StopwatchTimer mWifiScanTimer; private static final int NO_BATCHED_SCAN_STARTED = -1; int mWifiBatchedScanBinStarted = NO_BATCHED_SCAN_STARTED; StopwatchTimer[] mWifiBatchedScanTimer; boolean mWifiMulticastEnabled; StopwatchTimer mWifiMulticastTimer; Loading Loading @@ -2629,6 +2657,7 @@ public final class BatteryStatsImpl extends BatteryStats { mFullWifiLockTimers, mUnpluggables); mWifiScanTimer = new StopwatchTimer(Uid.this, WIFI_SCAN, mWifiScanTimers, mUnpluggables); mWifiBatchedScanTimer = new StopwatchTimer[NUM_WIFI_BATCHED_SCAN_BINS]; mWifiMulticastTimer = new StopwatchTimer(Uid.this, WIFI_MULTICAST_ENABLED, mWifiMulticastTimers, mUnpluggables); } Loading Loading @@ -2718,6 +2747,36 @@ public final class BatteryStatsImpl extends BatteryStats { } } @Override public void noteWifiBatchedScanStartedLocked(int csph) { int bin = 0; while (csph > 8 && bin < NUM_WIFI_BATCHED_SCAN_BINS) { csph = csph >> 3; bin++; } if (mWifiBatchedScanBinStarted == bin) return; if (mWifiBatchedScanBinStarted != NO_BATCHED_SCAN_STARTED) { mWifiBatchedScanTimer[mWifiBatchedScanBinStarted]. stopRunningLocked(BatteryStatsImpl.this); } mWifiBatchedScanBinStarted = bin; if (mWifiBatchedScanTimer[bin] == null) { makeWifiBatchedScanBin(bin, null); } mWifiBatchedScanTimer[bin].startRunningLocked(BatteryStatsImpl.this); } @Override public void noteWifiBatchedScanStoppedLocked() { if (mWifiBatchedScanBinStarted != NO_BATCHED_SCAN_STARTED) { mWifiBatchedScanTimer[mWifiBatchedScanBinStarted]. stopRunningLocked(BatteryStatsImpl.this); mWifiBatchedScanBinStarted = NO_BATCHED_SCAN_STARTED; } } @Override public void noteWifiMulticastEnabledLocked() { if (!mWifiMulticastEnabled) { Loading Loading @@ -2853,6 +2912,15 @@ public final class BatteryStatsImpl extends BatteryStats { return mWifiScanTimer.getTotalTimeLocked(batteryRealtime, which); } @Override public long getWifiBatchedScanTime(int csphBin, long batteryRealtime, int which) { if (csphBin < 0 || csphBin >= NUM_WIFI_BATCHED_SCAN_BINS) return 0; if (mWifiBatchedScanTimer[csphBin] == null) { return 0; } return mWifiBatchedScanTimer[csphBin].getTotalTimeLocked(batteryRealtime, which); } @Override public long getWifiMulticastTime(long batteryRealtime, int which) { if (mWifiMulticastTimer == null) { Loading Loading @@ -2914,6 +2982,24 @@ public final class BatteryStatsImpl extends BatteryStats { return mUserActivityCounters[type].getCountLocked(which); } void makeWifiBatchedScanBin(int i, Parcel in) { if (i < 0 || i >= NUM_WIFI_BATCHED_SCAN_BINS) return; ArrayList<StopwatchTimer> collected = mWifiBatchedScanTimers.get(i); if (collected == null) { collected = new ArrayList<StopwatchTimer>(); mWifiBatchedScanTimers.put(i, collected); } if (in == null) { mWifiBatchedScanTimer[i] = new StopwatchTimer(this, WIFI_BATCHED_SCAN, collected, mUnpluggables); } else { mWifiBatchedScanTimer[i] = new StopwatchTimer(this, WIFI_BATCHED_SCAN, collected, mUnpluggables, in); } } void initUserActivityLocked() { mUserActivityCounters = new Counter[NUM_USER_ACTIVITY_TYPES]; for (int i=0; i<NUM_USER_ACTIVITY_TYPES; i++) { Loading Loading @@ -2974,6 +3060,14 @@ public final class BatteryStatsImpl extends BatteryStats { active |= !mWifiScanTimer.reset(BatteryStatsImpl.this, false); active |= mWifiScanStarted; } if (mWifiBatchedScanTimer != null) { for (int i = 0; i < NUM_WIFI_BATCHED_SCAN_BINS; i++) { if (mWifiBatchedScanTimer[i] != null) { active |= !mWifiBatchedScanTimer[i].reset(BatteryStatsImpl.this, false); } } active |= (mWifiBatchedScanBinStarted != NO_BATCHED_SCAN_STARTED); } if (mWifiMulticastTimer != null) { active |= !mWifiMulticastTimer.reset(BatteryStatsImpl.this, false); active |= mWifiMulticastEnabled; Loading Loading @@ -3080,6 +3174,11 @@ public final class BatteryStatsImpl extends BatteryStats { if (mWifiScanTimer != null) { mWifiScanTimer.detach(); } for (int i = 0; i < NUM_WIFI_BATCHED_SCAN_BINS; i++) { if (mWifiBatchedScanTimer[i] != null) { mWifiBatchedScanTimer[i].detach(); } } if (mWifiMulticastTimer != null) { mWifiMulticastTimer.detach(); } Loading Loading @@ -3157,6 +3256,14 @@ public final class BatteryStatsImpl extends BatteryStats { } else { out.writeInt(0); } for (int i = 0; i < NUM_WIFI_BATCHED_SCAN_BINS; i++) { if (mWifiBatchedScanTimer[i] != null) { out.writeInt(1); mWifiBatchedScanTimer[i].writeToParcel(out, batteryRealtime); } else { out.writeInt(0); } } if (mWifiMulticastTimer != null) { out.writeInt(1); mWifiMulticastTimer.writeToParcel(out, batteryRealtime); Loading Loading @@ -3266,6 +3373,14 @@ public final class BatteryStatsImpl extends BatteryStats { } else { mWifiScanTimer = null; } mWifiBatchedScanBinStarted = NO_BATCHED_SCAN_STARTED; for (int i = 0; i < NUM_WIFI_BATCHED_SCAN_BINS; i++) { if (in.readInt() != 0) { makeWifiBatchedScanBin(i, in); } else { mWifiBatchedScanTimer[i] = null; } } mWifiMulticastEnabled = false; if (in.readInt() != 0) { mWifiMulticastTimer = new StopwatchTimer(Uid.this, WIFI_MULTICAST_ENABLED, Loading Loading @@ -5463,6 +5578,13 @@ public final class BatteryStatsImpl extends BatteryStats { if (in.readInt() != 0) { u.mWifiScanTimer.readSummaryFromParcelLocked(in); } u.mWifiBatchedScanBinStarted = Uid.NO_BATCHED_SCAN_STARTED; for (int i = 0; i < Uid.NUM_WIFI_BATCHED_SCAN_BINS; i++) { if (in.readInt() != 0) { u.makeWifiBatchedScanBin(i, null); u.mWifiBatchedScanTimer[i].readSummaryFromParcelLocked(in); } } u.mWifiMulticastEnabled = false; if (in.readInt() != 0) { u.mWifiMulticastTimer.readSummaryFromParcelLocked(in); Loading Loading @@ -5674,6 +5796,14 @@ public final class BatteryStatsImpl extends BatteryStats { } else { out.writeInt(0); } for (int i = 0; i < Uid.NUM_WIFI_BATCHED_SCAN_BINS; i++) { if (u.mWifiBatchedScanTimer[i] != null) { out.writeInt(1); u.mWifiBatchedScanTimer[i].writeSummaryFromParcelLocked(out, NOWREAL); } else { out.writeInt(0); } } if (u.mWifiMulticastTimer != null) { out.writeInt(1); u.mWifiMulticastTimer.writeSummaryFromParcelLocked(out, NOWREAL); Loading Loading @@ -5909,6 +6039,7 @@ public final class BatteryStatsImpl extends BatteryStats { mWifiRunningTimers.clear(); mFullWifiLockTimers.clear(); mWifiScanTimers.clear(); mWifiBatchedScanTimers.clear(); mWifiMulticastTimers.clear(); sNumSpeedSteps = in.readInt(); Loading
core/java/com/android/internal/os/PowerProfile.java +8 −1 Original line number Diff line number Diff line Loading @@ -135,6 +135,13 @@ public class PowerProfile { public static final String POWER_CPU_SPEEDS = "cpu.speeds"; /** * Power consumed by wif batched scaning. Broken down into bins by * Channels Scanned per Hour. May do 1-720 scans per hour of 1-100 channels * for a range of 1-72,000. Going logrithmic (1-8, 9-64, 65-512, 513-4096, 4097-)! */ public static final String POWER_WIFI_BATCHED_SCAN = "wifi.batchedscan"; /** * Battery capacity in milliAmpHour (mAh). */ Loading
core/res/res/xml/power_profile.xml +8 −0 Original line number Diff line number Diff line Loading @@ -58,4 +58,12 @@ </array> <!-- This is the battery capacity in mAh (measured at nominal voltage) --> <item name="battery.capacity">1000</item> <array name="wifi.batchedscan"> <!-- mA --> <value>.0002</value> <!-- 1-8/hr --> <value>.002</value> <!-- 9-64/hr --> <value>.02</value> <!-- 65-512/hr --> <value>.2</value> <!-- 513-4,096/hr --> <value>2</value> <!-- 4097-/hr --> </array> </device>