Loading core/java/android/os/BatteryStats.java +19 −19 Original line number Diff line number Diff line Loading @@ -71,9 +71,9 @@ public abstract class BatteryStats implements Parcelable { public static final int FULL_WIFI_LOCK = 5; /** * A constant indicating a scan wifi lock timer * A constant indicating a wifi scan */ public static final int SCAN_WIFI_LOCK = 6; public static final int WIFI_SCAN = 6; /** * A constant indicating a wifi multicast timer Loading Loading @@ -136,7 +136,7 @@ public abstract class BatteryStats implements Parcelable { private static final String BATTERY_DATA = "bt"; private static final String BATTERY_DISCHARGE_DATA = "dc"; private static final String BATTERY_LEVEL_DATA = "lv"; private static final String WIFI_LOCK_DATA = "wfl"; private static final String WIFI_DATA = "wfl"; private static final String MISC_DATA = "m"; private static final String SCREEN_BRIGHTNESS_DATA = "br"; private static final String SIGNAL_STRENGTH_TIME_DATA = "sgt"; Loading Loading @@ -260,8 +260,8 @@ public abstract class BatteryStats implements Parcelable { public abstract void noteWifiStoppedLocked(); public abstract void noteFullWifiLockAcquiredLocked(); public abstract void noteFullWifiLockReleasedLocked(); public abstract void noteScanWifiLockAcquiredLocked(); public abstract void noteScanWifiLockReleasedLocked(); public abstract void noteWifiScanStartedLocked(); public abstract void noteWifiScanStoppedLocked(); public abstract void noteWifiMulticastEnabledLocked(); public abstract void noteWifiMulticastDisabledLocked(); public abstract void noteAudioTurnedOnLocked(); Loading @@ -270,7 +270,7 @@ public abstract class BatteryStats implements Parcelable { public abstract void noteVideoTurnedOffLocked(); public abstract long getWifiRunningTime(long batteryRealtime, int which); public abstract long getFullWifiLockTime(long batteryRealtime, int which); public abstract long getScanWifiLockTime(long batteryRealtime, int which); public abstract long getWifiScanTime(long batteryRealtime, int which); public abstract long getWifiMulticastTime(long batteryRealtime, int which); public abstract long getAudioTurnedOnTime(long batteryRealtime, int which); Loading Loading @@ -453,7 +453,7 @@ public abstract class BatteryStats implements Parcelable { public static final int STATE_PHONE_SCANNING_FLAG = 1<<27; public static final int STATE_WIFI_RUNNING_FLAG = 1<<26; public static final int STATE_WIFI_FULL_LOCK_FLAG = 1<<25; public static final int STATE_WIFI_SCAN_LOCK_FLAG = 1<<24; public static final int STATE_WIFI_SCAN_FLAG = 1<<24; public static final int STATE_WIFI_MULTICAST_ON_FLAG = 1<<23; // These are on the lower bits used for the command; if they change // we need to write another int of data. Loading Loading @@ -859,7 +859,7 @@ public abstract class BatteryStats implements Parcelable { new BitDescription(HistoryItem.STATE_WIFI_ON_FLAG, "wifi"), new BitDescription(HistoryItem.STATE_WIFI_RUNNING_FLAG, "wifi_running"), new BitDescription(HistoryItem.STATE_WIFI_FULL_LOCK_FLAG, "wifi_full_lock"), new BitDescription(HistoryItem.STATE_WIFI_SCAN_LOCK_FLAG, "wifi_scan_lock"), new BitDescription(HistoryItem.STATE_WIFI_SCAN_FLAG, "wifi_scan"), new BitDescription(HistoryItem.STATE_WIFI_MULTICAST_ON_FLAG, "wifi_multicast"), new BitDescription(HistoryItem.STATE_BLUETOOTH_ON_FLAG, "bluetooth"), new BitDescription(HistoryItem.STATE_AUDIO_ON_FLAG, "audio"), Loading Loading @@ -1326,15 +1326,15 @@ public abstract class BatteryStats implements Parcelable { long rx = u.getTcpBytesReceived(which); long tx = u.getTcpBytesSent(which); long fullWifiLockOnTime = u.getFullWifiLockTime(batteryRealtime, which); long scanWifiLockOnTime = u.getScanWifiLockTime(batteryRealtime, which); long wifiScanTime = u.getWifiScanTime(batteryRealtime, which); long uidWifiRunningTime = u.getWifiRunningTime(batteryRealtime, which); if (rx > 0 || tx > 0) dumpLine(pw, uid, category, NETWORK_DATA, rx, tx); if (fullWifiLockOnTime != 0 || scanWifiLockOnTime != 0 if (fullWifiLockOnTime != 0 || wifiScanTime != 0 || uidWifiRunningTime != 0) { dumpLine(pw, uid, category, WIFI_LOCK_DATA, fullWifiLockOnTime, scanWifiLockOnTime, uidWifiRunningTime); dumpLine(pw, uid, category, WIFI_DATA, fullWifiLockOnTime, wifiScanTime, uidWifiRunningTime); } if (u.hasUserActivity()) { Loading Loading @@ -1692,7 +1692,7 @@ public abstract class BatteryStats implements Parcelable { long tcpReceived = u.getTcpBytesReceived(which); long tcpSent = u.getTcpBytesSent(which); long fullWifiLockOnTime = u.getFullWifiLockTime(batteryRealtime, which); long scanWifiLockOnTime = u.getScanWifiLockTime(batteryRealtime, which); long wifiScanTime = u.getWifiScanTime(batteryRealtime, which); long uidWifiRunningTime = u.getWifiRunningTime(batteryRealtime, which); if (tcpReceived != 0 || tcpSent != 0) { Loading Loading @@ -1723,7 +1723,7 @@ public abstract class BatteryStats implements Parcelable { } } if (fullWifiLockOnTime != 0 || scanWifiLockOnTime != 0 if (fullWifiLockOnTime != 0 || wifiScanTime != 0 || uidWifiRunningTime != 0) { sb.setLength(0); sb.append(prefix); sb.append(" Wifi Running: "); Loading @@ -1734,9 +1734,9 @@ public abstract class BatteryStats implements Parcelable { formatTimeMs(sb, fullWifiLockOnTime / 1000); sb.append("("); sb.append(formatRatioLocked(fullWifiLockOnTime, whichBatteryRealtime)); sb.append(")\n"); sb.append(prefix); sb.append(" Scan Wifi Lock: "); formatTimeMs(sb, scanWifiLockOnTime / 1000); sb.append("("); sb.append(formatRatioLocked(scanWifiLockOnTime, sb.append(prefix); sb.append(" Wifi Scan: "); formatTimeMs(sb, wifiScanTime / 1000); sb.append("("); sb.append(formatRatioLocked(wifiScanTime, whichBatteryRealtime)); sb.append(")"); pw.println(sb.toString()); } Loading core/java/com/android/internal/app/IBatteryStats.aidl +4 −4 Original line number Diff line number Diff line Loading @@ -58,14 +58,14 @@ interface IBatteryStats { void noteBluetoothOff(); void noteFullWifiLockAcquired(int uid); void noteFullWifiLockReleased(int uid); void noteScanWifiLockAcquired(int uid); void noteScanWifiLockReleased(int uid); void noteWifiScanStarted(int uid); void noteWifiScanStopped(int uid); void noteWifiMulticastEnabled(int uid); void noteWifiMulticastDisabled(int uid); void noteFullWifiLockAcquiredFromSource(in WorkSource ws); void noteFullWifiLockReleasedFromSource(in WorkSource ws); void noteScanWifiLockAcquiredFromSource(in WorkSource ws); void noteScanWifiLockReleasedFromSource(in WorkSource ws); void noteWifiScanStartedFromSource(in WorkSource ws); void noteWifiScanStoppedFromSource(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 +52 −52 Original line number Diff line number Diff line Loading @@ -159,8 +159,8 @@ public final class BatteryStatsImpl extends BatteryStats { = new SparseArray<ArrayList<StopwatchTimer>>(); final ArrayList<StopwatchTimer> mWifiRunningTimers = new ArrayList<StopwatchTimer>(); final ArrayList<StopwatchTimer> mFullWifiLockTimers = new ArrayList<StopwatchTimer>(); final ArrayList<StopwatchTimer> mScanWifiLockTimers = new ArrayList<StopwatchTimer>(); final ArrayList<StopwatchTimer> mWifiMulticastTimers = new ArrayList<StopwatchTimer>(); final ArrayList<StopwatchTimer> mWifiScanTimers = new ArrayList<StopwatchTimer>(); // Last partial timers we use for distributing CPU usage. final ArrayList<StopwatchTimer> mLastPartialTimers = new ArrayList<StopwatchTimer>(); Loading Loading @@ -2174,28 +2174,28 @@ public final class BatteryStatsImpl extends BatteryStats { getUidStatsLocked(uid).noteFullWifiLockReleasedLocked(); } int mWifiScanLockNesting = 0; int mWifiScanNesting = 0; public void noteScanWifiLockAcquiredLocked(int uid) { if (mWifiScanLockNesting == 0) { mHistoryCur.states |= HistoryItem.STATE_WIFI_SCAN_LOCK_FLAG; if (DEBUG_HISTORY) Slog.v(TAG, "WIFI scan lock on to: " public void noteWifiScanStartedLocked(int uid) { if (mWifiScanNesting == 0) { mHistoryCur.states |= HistoryItem.STATE_WIFI_SCAN_FLAG; if (DEBUG_HISTORY) Slog.v(TAG, "WIFI scan started for: " + Integer.toHexString(mHistoryCur.states)); addHistoryRecordLocked(SystemClock.elapsedRealtime()); } mWifiScanLockNesting++; getUidStatsLocked(uid).noteScanWifiLockAcquiredLocked(); mWifiScanNesting++; getUidStatsLocked(uid).noteWifiScanStartedLocked(); } public void noteScanWifiLockReleasedLocked(int uid) { mWifiScanLockNesting--; if (mWifiScanLockNesting == 0) { mHistoryCur.states &= ~HistoryItem.STATE_WIFI_SCAN_LOCK_FLAG; if (DEBUG_HISTORY) Slog.v(TAG, "WIFI scan lock off to: " public void noteWifiScanStoppedLocked(int uid) { mWifiScanNesting--; if (mWifiScanNesting == 0) { mHistoryCur.states &= ~HistoryItem.STATE_WIFI_SCAN_FLAG; if (DEBUG_HISTORY) Slog.v(TAG, "WIFI scan stopped for: " + Integer.toHexString(mHistoryCur.states)); addHistoryRecordLocked(SystemClock.elapsedRealtime()); } getUidStatsLocked(uid).noteScanWifiLockReleasedLocked(); getUidStatsLocked(uid).noteWifiScanStoppedLocked(); } int mWifiMulticastNesting = 0; Loading Loading @@ -2236,17 +2236,17 @@ public final class BatteryStatsImpl extends BatteryStats { } } public void noteScanWifiLockAcquiredFromSourceLocked(WorkSource ws) { public void noteWifiScanStartedFromSourceLocked(WorkSource ws) { int N = ws.size(); for (int i=0; i<N; i++) { noteScanWifiLockAcquiredLocked(ws.get(i)); noteWifiScanStartedLocked(ws.get(i)); } } public void noteScanWifiLockReleasedFromSourceLocked(WorkSource ws) { public void noteWifiScanStoppedFromSourceLocked(WorkSource ws) { int N = ws.size(); for (int i=0; i<N; i++) { noteScanWifiLockReleasedLocked(ws.get(i)); noteWifiScanStoppedLocked(ws.get(i)); } } Loading Loading @@ -2360,8 +2360,8 @@ public final class BatteryStatsImpl extends BatteryStats { boolean mFullWifiLockOut; StopwatchTimer mFullWifiLockTimer; boolean mScanWifiLockOut; StopwatchTimer mScanWifiLockTimer; boolean mWifiScanStarted; StopwatchTimer mWifiScanTimer; boolean mWifiMulticastEnabled; StopwatchTimer mWifiMulticastTimer; Loading Loading @@ -2405,8 +2405,8 @@ public final class BatteryStatsImpl extends BatteryStats { mWifiRunningTimers, mUnpluggables); mFullWifiLockTimer = new StopwatchTimer(Uid.this, FULL_WIFI_LOCK, mFullWifiLockTimers, mUnpluggables); mScanWifiLockTimer = new StopwatchTimer(Uid.this, SCAN_WIFI_LOCK, mScanWifiLockTimers, mUnpluggables); mWifiScanTimer = new StopwatchTimer(Uid.this, WIFI_SCAN, mWifiScanTimers, mUnpluggables); mWifiMulticastTimer = new StopwatchTimer(Uid.this, WIFI_MULTICAST_ENABLED, mWifiMulticastTimers, mUnpluggables); mAudioTurnedOnTimer = new StopwatchTimer(Uid.this, AUDIO_TURNED_ON, Loading Loading @@ -2518,22 +2518,22 @@ public final class BatteryStatsImpl extends BatteryStats { } @Override public void noteScanWifiLockAcquiredLocked() { if (!mScanWifiLockOut) { mScanWifiLockOut = true; if (mScanWifiLockTimer == null) { mScanWifiLockTimer = new StopwatchTimer(Uid.this, SCAN_WIFI_LOCK, mScanWifiLockTimers, mUnpluggables); public void noteWifiScanStartedLocked() { if (!mWifiScanStarted) { mWifiScanStarted = true; if (mWifiScanTimer == null) { mWifiScanTimer = new StopwatchTimer(Uid.this, WIFI_SCAN, mWifiScanTimers, mUnpluggables); } mScanWifiLockTimer.startRunningLocked(BatteryStatsImpl.this); mWifiScanTimer.startRunningLocked(BatteryStatsImpl.this); } } @Override public void noteScanWifiLockReleasedLocked() { if (mScanWifiLockOut) { mScanWifiLockOut = false; mScanWifiLockTimer.stopRunningLocked(BatteryStatsImpl.this); public void noteWifiScanStoppedLocked() { if (mWifiScanStarted) { mWifiScanStarted = false; mWifiScanTimer.stopRunningLocked(BatteryStatsImpl.this); } } Loading Loading @@ -2614,11 +2614,11 @@ public final class BatteryStatsImpl extends BatteryStats { } @Override public long getScanWifiLockTime(long batteryRealtime, int which) { if (mScanWifiLockTimer == null) { public long getWifiScanTime(long batteryRealtime, int which) { if (mWifiScanTimer == null) { return 0; } return mScanWifiLockTimer.getTotalTimeLocked(batteryRealtime, which); return mWifiScanTimer.getTotalTimeLocked(batteryRealtime, which); } @Override Loading Loading @@ -2698,9 +2698,9 @@ public final class BatteryStatsImpl extends BatteryStats { active |= !mFullWifiLockTimer.reset(BatteryStatsImpl.this, false); active |= mFullWifiLockOut; } if (mScanWifiLockTimer != null) { active |= !mScanWifiLockTimer.reset(BatteryStatsImpl.this, false); active |= mScanWifiLockOut; if (mWifiScanTimer != null) { active |= !mWifiScanTimer.reset(BatteryStatsImpl.this, false); active |= mWifiScanStarted; } if (mWifiMulticastTimer != null) { active |= !mWifiMulticastTimer.reset(BatteryStatsImpl.this, false); Loading Loading @@ -2791,8 +2791,8 @@ public final class BatteryStatsImpl extends BatteryStats { if (mFullWifiLockTimer != null) { mFullWifiLockTimer.detach(); } if (mScanWifiLockTimer != null) { mScanWifiLockTimer.detach(); if (mWifiScanTimer != null) { mWifiScanTimer.detach(); } if (mWifiMulticastTimer != null) { mWifiMulticastTimer.detach(); Loading Loading @@ -2860,9 +2860,9 @@ public final class BatteryStatsImpl extends BatteryStats { } else { out.writeInt(0); } if (mScanWifiLockTimer != null) { if (mWifiScanTimer != null) { out.writeInt(1); mScanWifiLockTimer.writeToParcel(out, batteryRealtime); mWifiScanTimer.writeToParcel(out, batteryRealtime); } else { out.writeInt(0); } Loading Loading @@ -2954,12 +2954,12 @@ public final class BatteryStatsImpl extends BatteryStats { } else { mFullWifiLockTimer = null; } mScanWifiLockOut = false; mWifiScanStarted = false; if (in.readInt() != 0) { mScanWifiLockTimer = new StopwatchTimer(Uid.this, SCAN_WIFI_LOCK, mScanWifiLockTimers, mUnpluggables, in); mWifiScanTimer = new StopwatchTimer(Uid.this, WIFI_SCAN, mWifiScanTimers, mUnpluggables, in); } else { mScanWifiLockTimer = null; mWifiScanTimer = null; } mWifiMulticastEnabled = false; if (in.readInt() != 0) { Loading Loading @@ -5118,9 +5118,9 @@ public final class BatteryStatsImpl extends BatteryStats { if (in.readInt() != 0) { u.mFullWifiLockTimer.readSummaryFromParcelLocked(in); } u.mScanWifiLockOut = false; u.mWifiScanStarted = false; if (in.readInt() != 0) { u.mScanWifiLockTimer.readSummaryFromParcelLocked(in); u.mWifiScanTimer.readSummaryFromParcelLocked(in); } u.mWifiMulticastEnabled = false; if (in.readInt() != 0) { Loading Loading @@ -5310,9 +5310,9 @@ public final class BatteryStatsImpl extends BatteryStats { } else { out.writeInt(0); } if (u.mScanWifiLockTimer != null) { if (u.mWifiScanTimer != null) { out.writeInt(1); u.mScanWifiLockTimer.writeSummaryFromParcelLocked(out, NOWREAL); u.mWifiScanTimer.writeSummaryFromParcelLocked(out, NOWREAL); } else { out.writeInt(0); } Loading Loading @@ -5537,7 +5537,7 @@ public final class BatteryStatsImpl extends BatteryStats { mWindowTimers.clear(); mWifiRunningTimers.clear(); mFullWifiLockTimers.clear(); mScanWifiLockTimers.clear(); mWifiScanTimers.clear(); mWifiMulticastTimers.clear(); sNumSpeedSteps = in.readInt(); Loading services/java/com/android/server/WifiService.java +47 −6 Original line number Diff line number Diff line Loading @@ -58,6 +58,7 @@ import android.os.SystemProperties; import android.os.WorkSource; import android.provider.Settings; import android.text.TextUtils; import android.util.Log; import android.util.Slog; import java.util.ArrayList; Loading Loading @@ -161,6 +162,10 @@ public class WifiService extends IWifiManager.Stub { /* Tracks whether wifi is enabled from WifiStateMachine's perspective */ private boolean mWifiEnabled; /* The work source (UID) that triggered the current WIFI scan, synchronized * on this */ private WorkSource mScanWorkSource; private boolean mIsReceiverRegistered = false; Loading Loading @@ -413,6 +418,7 @@ public class WifiService extends IWifiManager.Stub { } } else if (intent.getAction().equals( WifiManager.SCAN_RESULTS_AVAILABLE_ACTION)) { noteScanEnd(); checkAndSetNotification(); } } Loading @@ -430,6 +436,44 @@ public class WifiService extends IWifiManager.Stub { mNotificationEnabledSettingObserver.register(); } /** Tell battery stats about a new WIFI scan */ private void noteScanStart() { WorkSource scanWorkSource = null; synchronized (WifiService.this) { if (mScanWorkSource != null) { // Scan already in progress, don't add this one to battery stats return; } scanWorkSource = new WorkSource(Binder.getCallingUid()); mScanWorkSource = scanWorkSource; } long id = Binder.clearCallingIdentity(); try { mBatteryStats.noteWifiScanStartedFromSource(scanWorkSource); } catch (RemoteException e) { Log.w(TAG, e); } finally { Binder.restoreCallingIdentity(id); } } /** Tell battery stats that the current WIFI scan has completed */ private void noteScanEnd() { WorkSource scanWorkSource = null; synchronized (WifiService.this) { scanWorkSource = mScanWorkSource; mScanWorkSource = null; } if (scanWorkSource != null) { try { mBatteryStats.noteWifiScanStoppedFromSource(scanWorkSource); } catch (RemoteException e) { Log.w(TAG, e); } } } /** * Check if Wi-Fi needs to be enabled and start * if needed Loading Loading @@ -551,6 +595,7 @@ public class WifiService extends IWifiManager.Stub { mScanCount.put(uid, ++count); } mWifiStateMachine.startScan(forceActive); noteScanStart(); } private void enforceAccessPermission() { Loading Loading @@ -1333,10 +1378,8 @@ public class WifiService extends IWifiManager.Stub { switch(wifiLock.mMode) { case WifiManager.WIFI_MODE_FULL: case WifiManager.WIFI_MODE_FULL_HIGH_PERF: mBatteryStats.noteFullWifiLockAcquiredFromSource(wifiLock.mWorkSource); break; case WifiManager.WIFI_MODE_SCAN_ONLY: mBatteryStats.noteScanWifiLockAcquiredFromSource(wifiLock.mWorkSource); mBatteryStats.noteFullWifiLockAcquiredFromSource(wifiLock.mWorkSource); break; } } Loading @@ -1345,10 +1388,8 @@ public class WifiService extends IWifiManager.Stub { switch(wifiLock.mMode) { case WifiManager.WIFI_MODE_FULL: case WifiManager.WIFI_MODE_FULL_HIGH_PERF: mBatteryStats.noteFullWifiLockReleasedFromSource(wifiLock.mWorkSource); break; case WifiManager.WIFI_MODE_SCAN_ONLY: mBatteryStats.noteScanWifiLockReleasedFromSource(wifiLock.mWorkSource); mBatteryStats.noteFullWifiLockReleasedFromSource(wifiLock.mWorkSource); break; } } Loading services/java/com/android/server/am/BatteryStatsService.java +10 −10 Original line number Diff line number Diff line Loading @@ -347,17 +347,17 @@ public final class BatteryStatsService extends IBatteryStats.Stub { } } public void noteScanWifiLockAcquired(int uid) { public void noteWifiScanStarted(int uid) { enforceCallingPermission(); synchronized (mStats) { mStats.noteScanWifiLockAcquiredLocked(uid); mStats.noteWifiScanStartedLocked(uid); } } public void noteScanWifiLockReleased(int uid) { public void noteWifiScanStopped(int uid) { enforceCallingPermission(); synchronized (mStats) { mStats.noteScanWifiLockReleasedLocked(uid); mStats.noteWifiScanStoppedLocked(uid); } } Loading Loading @@ -389,17 +389,17 @@ public final class BatteryStatsService extends IBatteryStats.Stub { } } public void noteScanWifiLockAcquiredFromSource(WorkSource ws) { public void noteWifiScanStartedFromSource(WorkSource ws) { enforceCallingPermission(); synchronized (mStats) { mStats.noteScanWifiLockAcquiredFromSourceLocked(ws); mStats.noteWifiScanStartedFromSourceLocked(ws); } } public void noteScanWifiLockReleasedFromSource(WorkSource ws) { public void noteWifiScanStoppedFromSource(WorkSource ws) { enforceCallingPermission(); synchronized (mStats) { mStats.noteScanWifiLockReleasedFromSourceLocked(ws); mStats.noteWifiScanStoppedFromSourceLocked(ws); } } Loading Loading
core/java/android/os/BatteryStats.java +19 −19 Original line number Diff line number Diff line Loading @@ -71,9 +71,9 @@ public abstract class BatteryStats implements Parcelable { public static final int FULL_WIFI_LOCK = 5; /** * A constant indicating a scan wifi lock timer * A constant indicating a wifi scan */ public static final int SCAN_WIFI_LOCK = 6; public static final int WIFI_SCAN = 6; /** * A constant indicating a wifi multicast timer Loading Loading @@ -136,7 +136,7 @@ public abstract class BatteryStats implements Parcelable { private static final String BATTERY_DATA = "bt"; private static final String BATTERY_DISCHARGE_DATA = "dc"; private static final String BATTERY_LEVEL_DATA = "lv"; private static final String WIFI_LOCK_DATA = "wfl"; private static final String WIFI_DATA = "wfl"; private static final String MISC_DATA = "m"; private static final String SCREEN_BRIGHTNESS_DATA = "br"; private static final String SIGNAL_STRENGTH_TIME_DATA = "sgt"; Loading Loading @@ -260,8 +260,8 @@ public abstract class BatteryStats implements Parcelable { public abstract void noteWifiStoppedLocked(); public abstract void noteFullWifiLockAcquiredLocked(); public abstract void noteFullWifiLockReleasedLocked(); public abstract void noteScanWifiLockAcquiredLocked(); public abstract void noteScanWifiLockReleasedLocked(); public abstract void noteWifiScanStartedLocked(); public abstract void noteWifiScanStoppedLocked(); public abstract void noteWifiMulticastEnabledLocked(); public abstract void noteWifiMulticastDisabledLocked(); public abstract void noteAudioTurnedOnLocked(); Loading @@ -270,7 +270,7 @@ public abstract class BatteryStats implements Parcelable { public abstract void noteVideoTurnedOffLocked(); public abstract long getWifiRunningTime(long batteryRealtime, int which); public abstract long getFullWifiLockTime(long batteryRealtime, int which); public abstract long getScanWifiLockTime(long batteryRealtime, int which); public abstract long getWifiScanTime(long batteryRealtime, int which); public abstract long getWifiMulticastTime(long batteryRealtime, int which); public abstract long getAudioTurnedOnTime(long batteryRealtime, int which); Loading Loading @@ -453,7 +453,7 @@ public abstract class BatteryStats implements Parcelable { public static final int STATE_PHONE_SCANNING_FLAG = 1<<27; public static final int STATE_WIFI_RUNNING_FLAG = 1<<26; public static final int STATE_WIFI_FULL_LOCK_FLAG = 1<<25; public static final int STATE_WIFI_SCAN_LOCK_FLAG = 1<<24; public static final int STATE_WIFI_SCAN_FLAG = 1<<24; public static final int STATE_WIFI_MULTICAST_ON_FLAG = 1<<23; // These are on the lower bits used for the command; if they change // we need to write another int of data. Loading Loading @@ -859,7 +859,7 @@ public abstract class BatteryStats implements Parcelable { new BitDescription(HistoryItem.STATE_WIFI_ON_FLAG, "wifi"), new BitDescription(HistoryItem.STATE_WIFI_RUNNING_FLAG, "wifi_running"), new BitDescription(HistoryItem.STATE_WIFI_FULL_LOCK_FLAG, "wifi_full_lock"), new BitDescription(HistoryItem.STATE_WIFI_SCAN_LOCK_FLAG, "wifi_scan_lock"), new BitDescription(HistoryItem.STATE_WIFI_SCAN_FLAG, "wifi_scan"), new BitDescription(HistoryItem.STATE_WIFI_MULTICAST_ON_FLAG, "wifi_multicast"), new BitDescription(HistoryItem.STATE_BLUETOOTH_ON_FLAG, "bluetooth"), new BitDescription(HistoryItem.STATE_AUDIO_ON_FLAG, "audio"), Loading Loading @@ -1326,15 +1326,15 @@ public abstract class BatteryStats implements Parcelable { long rx = u.getTcpBytesReceived(which); long tx = u.getTcpBytesSent(which); long fullWifiLockOnTime = u.getFullWifiLockTime(batteryRealtime, which); long scanWifiLockOnTime = u.getScanWifiLockTime(batteryRealtime, which); long wifiScanTime = u.getWifiScanTime(batteryRealtime, which); long uidWifiRunningTime = u.getWifiRunningTime(batteryRealtime, which); if (rx > 0 || tx > 0) dumpLine(pw, uid, category, NETWORK_DATA, rx, tx); if (fullWifiLockOnTime != 0 || scanWifiLockOnTime != 0 if (fullWifiLockOnTime != 0 || wifiScanTime != 0 || uidWifiRunningTime != 0) { dumpLine(pw, uid, category, WIFI_LOCK_DATA, fullWifiLockOnTime, scanWifiLockOnTime, uidWifiRunningTime); dumpLine(pw, uid, category, WIFI_DATA, fullWifiLockOnTime, wifiScanTime, uidWifiRunningTime); } if (u.hasUserActivity()) { Loading Loading @@ -1692,7 +1692,7 @@ public abstract class BatteryStats implements Parcelable { long tcpReceived = u.getTcpBytesReceived(which); long tcpSent = u.getTcpBytesSent(which); long fullWifiLockOnTime = u.getFullWifiLockTime(batteryRealtime, which); long scanWifiLockOnTime = u.getScanWifiLockTime(batteryRealtime, which); long wifiScanTime = u.getWifiScanTime(batteryRealtime, which); long uidWifiRunningTime = u.getWifiRunningTime(batteryRealtime, which); if (tcpReceived != 0 || tcpSent != 0) { Loading Loading @@ -1723,7 +1723,7 @@ public abstract class BatteryStats implements Parcelable { } } if (fullWifiLockOnTime != 0 || scanWifiLockOnTime != 0 if (fullWifiLockOnTime != 0 || wifiScanTime != 0 || uidWifiRunningTime != 0) { sb.setLength(0); sb.append(prefix); sb.append(" Wifi Running: "); Loading @@ -1734,9 +1734,9 @@ public abstract class BatteryStats implements Parcelable { formatTimeMs(sb, fullWifiLockOnTime / 1000); sb.append("("); sb.append(formatRatioLocked(fullWifiLockOnTime, whichBatteryRealtime)); sb.append(")\n"); sb.append(prefix); sb.append(" Scan Wifi Lock: "); formatTimeMs(sb, scanWifiLockOnTime / 1000); sb.append("("); sb.append(formatRatioLocked(scanWifiLockOnTime, sb.append(prefix); sb.append(" Wifi Scan: "); formatTimeMs(sb, wifiScanTime / 1000); sb.append("("); sb.append(formatRatioLocked(wifiScanTime, whichBatteryRealtime)); sb.append(")"); pw.println(sb.toString()); } Loading
core/java/com/android/internal/app/IBatteryStats.aidl +4 −4 Original line number Diff line number Diff line Loading @@ -58,14 +58,14 @@ interface IBatteryStats { void noteBluetoothOff(); void noteFullWifiLockAcquired(int uid); void noteFullWifiLockReleased(int uid); void noteScanWifiLockAcquired(int uid); void noteScanWifiLockReleased(int uid); void noteWifiScanStarted(int uid); void noteWifiScanStopped(int uid); void noteWifiMulticastEnabled(int uid); void noteWifiMulticastDisabled(int uid); void noteFullWifiLockAcquiredFromSource(in WorkSource ws); void noteFullWifiLockReleasedFromSource(in WorkSource ws); void noteScanWifiLockAcquiredFromSource(in WorkSource ws); void noteScanWifiLockReleasedFromSource(in WorkSource ws); void noteWifiScanStartedFromSource(in WorkSource ws); void noteWifiScanStoppedFromSource(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 +52 −52 Original line number Diff line number Diff line Loading @@ -159,8 +159,8 @@ public final class BatteryStatsImpl extends BatteryStats { = new SparseArray<ArrayList<StopwatchTimer>>(); final ArrayList<StopwatchTimer> mWifiRunningTimers = new ArrayList<StopwatchTimer>(); final ArrayList<StopwatchTimer> mFullWifiLockTimers = new ArrayList<StopwatchTimer>(); final ArrayList<StopwatchTimer> mScanWifiLockTimers = new ArrayList<StopwatchTimer>(); final ArrayList<StopwatchTimer> mWifiMulticastTimers = new ArrayList<StopwatchTimer>(); final ArrayList<StopwatchTimer> mWifiScanTimers = new ArrayList<StopwatchTimer>(); // Last partial timers we use for distributing CPU usage. final ArrayList<StopwatchTimer> mLastPartialTimers = new ArrayList<StopwatchTimer>(); Loading Loading @@ -2174,28 +2174,28 @@ public final class BatteryStatsImpl extends BatteryStats { getUidStatsLocked(uid).noteFullWifiLockReleasedLocked(); } int mWifiScanLockNesting = 0; int mWifiScanNesting = 0; public void noteScanWifiLockAcquiredLocked(int uid) { if (mWifiScanLockNesting == 0) { mHistoryCur.states |= HistoryItem.STATE_WIFI_SCAN_LOCK_FLAG; if (DEBUG_HISTORY) Slog.v(TAG, "WIFI scan lock on to: " public void noteWifiScanStartedLocked(int uid) { if (mWifiScanNesting == 0) { mHistoryCur.states |= HistoryItem.STATE_WIFI_SCAN_FLAG; if (DEBUG_HISTORY) Slog.v(TAG, "WIFI scan started for: " + Integer.toHexString(mHistoryCur.states)); addHistoryRecordLocked(SystemClock.elapsedRealtime()); } mWifiScanLockNesting++; getUidStatsLocked(uid).noteScanWifiLockAcquiredLocked(); mWifiScanNesting++; getUidStatsLocked(uid).noteWifiScanStartedLocked(); } public void noteScanWifiLockReleasedLocked(int uid) { mWifiScanLockNesting--; if (mWifiScanLockNesting == 0) { mHistoryCur.states &= ~HistoryItem.STATE_WIFI_SCAN_LOCK_FLAG; if (DEBUG_HISTORY) Slog.v(TAG, "WIFI scan lock off to: " public void noteWifiScanStoppedLocked(int uid) { mWifiScanNesting--; if (mWifiScanNesting == 0) { mHistoryCur.states &= ~HistoryItem.STATE_WIFI_SCAN_FLAG; if (DEBUG_HISTORY) Slog.v(TAG, "WIFI scan stopped for: " + Integer.toHexString(mHistoryCur.states)); addHistoryRecordLocked(SystemClock.elapsedRealtime()); } getUidStatsLocked(uid).noteScanWifiLockReleasedLocked(); getUidStatsLocked(uid).noteWifiScanStoppedLocked(); } int mWifiMulticastNesting = 0; Loading Loading @@ -2236,17 +2236,17 @@ public final class BatteryStatsImpl extends BatteryStats { } } public void noteScanWifiLockAcquiredFromSourceLocked(WorkSource ws) { public void noteWifiScanStartedFromSourceLocked(WorkSource ws) { int N = ws.size(); for (int i=0; i<N; i++) { noteScanWifiLockAcquiredLocked(ws.get(i)); noteWifiScanStartedLocked(ws.get(i)); } } public void noteScanWifiLockReleasedFromSourceLocked(WorkSource ws) { public void noteWifiScanStoppedFromSourceLocked(WorkSource ws) { int N = ws.size(); for (int i=0; i<N; i++) { noteScanWifiLockReleasedLocked(ws.get(i)); noteWifiScanStoppedLocked(ws.get(i)); } } Loading Loading @@ -2360,8 +2360,8 @@ public final class BatteryStatsImpl extends BatteryStats { boolean mFullWifiLockOut; StopwatchTimer mFullWifiLockTimer; boolean mScanWifiLockOut; StopwatchTimer mScanWifiLockTimer; boolean mWifiScanStarted; StopwatchTimer mWifiScanTimer; boolean mWifiMulticastEnabled; StopwatchTimer mWifiMulticastTimer; Loading Loading @@ -2405,8 +2405,8 @@ public final class BatteryStatsImpl extends BatteryStats { mWifiRunningTimers, mUnpluggables); mFullWifiLockTimer = new StopwatchTimer(Uid.this, FULL_WIFI_LOCK, mFullWifiLockTimers, mUnpluggables); mScanWifiLockTimer = new StopwatchTimer(Uid.this, SCAN_WIFI_LOCK, mScanWifiLockTimers, mUnpluggables); mWifiScanTimer = new StopwatchTimer(Uid.this, WIFI_SCAN, mWifiScanTimers, mUnpluggables); mWifiMulticastTimer = new StopwatchTimer(Uid.this, WIFI_MULTICAST_ENABLED, mWifiMulticastTimers, mUnpluggables); mAudioTurnedOnTimer = new StopwatchTimer(Uid.this, AUDIO_TURNED_ON, Loading Loading @@ -2518,22 +2518,22 @@ public final class BatteryStatsImpl extends BatteryStats { } @Override public void noteScanWifiLockAcquiredLocked() { if (!mScanWifiLockOut) { mScanWifiLockOut = true; if (mScanWifiLockTimer == null) { mScanWifiLockTimer = new StopwatchTimer(Uid.this, SCAN_WIFI_LOCK, mScanWifiLockTimers, mUnpluggables); public void noteWifiScanStartedLocked() { if (!mWifiScanStarted) { mWifiScanStarted = true; if (mWifiScanTimer == null) { mWifiScanTimer = new StopwatchTimer(Uid.this, WIFI_SCAN, mWifiScanTimers, mUnpluggables); } mScanWifiLockTimer.startRunningLocked(BatteryStatsImpl.this); mWifiScanTimer.startRunningLocked(BatteryStatsImpl.this); } } @Override public void noteScanWifiLockReleasedLocked() { if (mScanWifiLockOut) { mScanWifiLockOut = false; mScanWifiLockTimer.stopRunningLocked(BatteryStatsImpl.this); public void noteWifiScanStoppedLocked() { if (mWifiScanStarted) { mWifiScanStarted = false; mWifiScanTimer.stopRunningLocked(BatteryStatsImpl.this); } } Loading Loading @@ -2614,11 +2614,11 @@ public final class BatteryStatsImpl extends BatteryStats { } @Override public long getScanWifiLockTime(long batteryRealtime, int which) { if (mScanWifiLockTimer == null) { public long getWifiScanTime(long batteryRealtime, int which) { if (mWifiScanTimer == null) { return 0; } return mScanWifiLockTimer.getTotalTimeLocked(batteryRealtime, which); return mWifiScanTimer.getTotalTimeLocked(batteryRealtime, which); } @Override Loading Loading @@ -2698,9 +2698,9 @@ public final class BatteryStatsImpl extends BatteryStats { active |= !mFullWifiLockTimer.reset(BatteryStatsImpl.this, false); active |= mFullWifiLockOut; } if (mScanWifiLockTimer != null) { active |= !mScanWifiLockTimer.reset(BatteryStatsImpl.this, false); active |= mScanWifiLockOut; if (mWifiScanTimer != null) { active |= !mWifiScanTimer.reset(BatteryStatsImpl.this, false); active |= mWifiScanStarted; } if (mWifiMulticastTimer != null) { active |= !mWifiMulticastTimer.reset(BatteryStatsImpl.this, false); Loading Loading @@ -2791,8 +2791,8 @@ public final class BatteryStatsImpl extends BatteryStats { if (mFullWifiLockTimer != null) { mFullWifiLockTimer.detach(); } if (mScanWifiLockTimer != null) { mScanWifiLockTimer.detach(); if (mWifiScanTimer != null) { mWifiScanTimer.detach(); } if (mWifiMulticastTimer != null) { mWifiMulticastTimer.detach(); Loading Loading @@ -2860,9 +2860,9 @@ public final class BatteryStatsImpl extends BatteryStats { } else { out.writeInt(0); } if (mScanWifiLockTimer != null) { if (mWifiScanTimer != null) { out.writeInt(1); mScanWifiLockTimer.writeToParcel(out, batteryRealtime); mWifiScanTimer.writeToParcel(out, batteryRealtime); } else { out.writeInt(0); } Loading Loading @@ -2954,12 +2954,12 @@ public final class BatteryStatsImpl extends BatteryStats { } else { mFullWifiLockTimer = null; } mScanWifiLockOut = false; mWifiScanStarted = false; if (in.readInt() != 0) { mScanWifiLockTimer = new StopwatchTimer(Uid.this, SCAN_WIFI_LOCK, mScanWifiLockTimers, mUnpluggables, in); mWifiScanTimer = new StopwatchTimer(Uid.this, WIFI_SCAN, mWifiScanTimers, mUnpluggables, in); } else { mScanWifiLockTimer = null; mWifiScanTimer = null; } mWifiMulticastEnabled = false; if (in.readInt() != 0) { Loading Loading @@ -5118,9 +5118,9 @@ public final class BatteryStatsImpl extends BatteryStats { if (in.readInt() != 0) { u.mFullWifiLockTimer.readSummaryFromParcelLocked(in); } u.mScanWifiLockOut = false; u.mWifiScanStarted = false; if (in.readInt() != 0) { u.mScanWifiLockTimer.readSummaryFromParcelLocked(in); u.mWifiScanTimer.readSummaryFromParcelLocked(in); } u.mWifiMulticastEnabled = false; if (in.readInt() != 0) { Loading Loading @@ -5310,9 +5310,9 @@ public final class BatteryStatsImpl extends BatteryStats { } else { out.writeInt(0); } if (u.mScanWifiLockTimer != null) { if (u.mWifiScanTimer != null) { out.writeInt(1); u.mScanWifiLockTimer.writeSummaryFromParcelLocked(out, NOWREAL); u.mWifiScanTimer.writeSummaryFromParcelLocked(out, NOWREAL); } else { out.writeInt(0); } Loading Loading @@ -5537,7 +5537,7 @@ public final class BatteryStatsImpl extends BatteryStats { mWindowTimers.clear(); mWifiRunningTimers.clear(); mFullWifiLockTimers.clear(); mScanWifiLockTimers.clear(); mWifiScanTimers.clear(); mWifiMulticastTimers.clear(); sNumSpeedSteps = in.readInt(); Loading
services/java/com/android/server/WifiService.java +47 −6 Original line number Diff line number Diff line Loading @@ -58,6 +58,7 @@ import android.os.SystemProperties; import android.os.WorkSource; import android.provider.Settings; import android.text.TextUtils; import android.util.Log; import android.util.Slog; import java.util.ArrayList; Loading Loading @@ -161,6 +162,10 @@ public class WifiService extends IWifiManager.Stub { /* Tracks whether wifi is enabled from WifiStateMachine's perspective */ private boolean mWifiEnabled; /* The work source (UID) that triggered the current WIFI scan, synchronized * on this */ private WorkSource mScanWorkSource; private boolean mIsReceiverRegistered = false; Loading Loading @@ -413,6 +418,7 @@ public class WifiService extends IWifiManager.Stub { } } else if (intent.getAction().equals( WifiManager.SCAN_RESULTS_AVAILABLE_ACTION)) { noteScanEnd(); checkAndSetNotification(); } } Loading @@ -430,6 +436,44 @@ public class WifiService extends IWifiManager.Stub { mNotificationEnabledSettingObserver.register(); } /** Tell battery stats about a new WIFI scan */ private void noteScanStart() { WorkSource scanWorkSource = null; synchronized (WifiService.this) { if (mScanWorkSource != null) { // Scan already in progress, don't add this one to battery stats return; } scanWorkSource = new WorkSource(Binder.getCallingUid()); mScanWorkSource = scanWorkSource; } long id = Binder.clearCallingIdentity(); try { mBatteryStats.noteWifiScanStartedFromSource(scanWorkSource); } catch (RemoteException e) { Log.w(TAG, e); } finally { Binder.restoreCallingIdentity(id); } } /** Tell battery stats that the current WIFI scan has completed */ private void noteScanEnd() { WorkSource scanWorkSource = null; synchronized (WifiService.this) { scanWorkSource = mScanWorkSource; mScanWorkSource = null; } if (scanWorkSource != null) { try { mBatteryStats.noteWifiScanStoppedFromSource(scanWorkSource); } catch (RemoteException e) { Log.w(TAG, e); } } } /** * Check if Wi-Fi needs to be enabled and start * if needed Loading Loading @@ -551,6 +595,7 @@ public class WifiService extends IWifiManager.Stub { mScanCount.put(uid, ++count); } mWifiStateMachine.startScan(forceActive); noteScanStart(); } private void enforceAccessPermission() { Loading Loading @@ -1333,10 +1378,8 @@ public class WifiService extends IWifiManager.Stub { switch(wifiLock.mMode) { case WifiManager.WIFI_MODE_FULL: case WifiManager.WIFI_MODE_FULL_HIGH_PERF: mBatteryStats.noteFullWifiLockAcquiredFromSource(wifiLock.mWorkSource); break; case WifiManager.WIFI_MODE_SCAN_ONLY: mBatteryStats.noteScanWifiLockAcquiredFromSource(wifiLock.mWorkSource); mBatteryStats.noteFullWifiLockAcquiredFromSource(wifiLock.mWorkSource); break; } } Loading @@ -1345,10 +1388,8 @@ public class WifiService extends IWifiManager.Stub { switch(wifiLock.mMode) { case WifiManager.WIFI_MODE_FULL: case WifiManager.WIFI_MODE_FULL_HIGH_PERF: mBatteryStats.noteFullWifiLockReleasedFromSource(wifiLock.mWorkSource); break; case WifiManager.WIFI_MODE_SCAN_ONLY: mBatteryStats.noteScanWifiLockReleasedFromSource(wifiLock.mWorkSource); mBatteryStats.noteFullWifiLockReleasedFromSource(wifiLock.mWorkSource); break; } } Loading
services/java/com/android/server/am/BatteryStatsService.java +10 −10 Original line number Diff line number Diff line Loading @@ -347,17 +347,17 @@ public final class BatteryStatsService extends IBatteryStats.Stub { } } public void noteScanWifiLockAcquired(int uid) { public void noteWifiScanStarted(int uid) { enforceCallingPermission(); synchronized (mStats) { mStats.noteScanWifiLockAcquiredLocked(uid); mStats.noteWifiScanStartedLocked(uid); } } public void noteScanWifiLockReleased(int uid) { public void noteWifiScanStopped(int uid) { enforceCallingPermission(); synchronized (mStats) { mStats.noteScanWifiLockReleasedLocked(uid); mStats.noteWifiScanStoppedLocked(uid); } } Loading Loading @@ -389,17 +389,17 @@ public final class BatteryStatsService extends IBatteryStats.Stub { } } public void noteScanWifiLockAcquiredFromSource(WorkSource ws) { public void noteWifiScanStartedFromSource(WorkSource ws) { enforceCallingPermission(); synchronized (mStats) { mStats.noteScanWifiLockAcquiredFromSourceLocked(ws); mStats.noteWifiScanStartedFromSourceLocked(ws); } } public void noteScanWifiLockReleasedFromSource(WorkSource ws) { public void noteWifiScanStoppedFromSource(WorkSource ws) { enforceCallingPermission(); synchronized (mStats) { mStats.noteScanWifiLockReleasedFromSourceLocked(ws); mStats.noteWifiScanStoppedFromSourceLocked(ws); } } Loading