Include WIFI scan's in Battery Stats.
Call noteWifiScanStartedFromSource() when a scan is started.
Call noteWifiScanStoppedFromSource() when a scan is finished.
The current implementation tracks to UID that requested the scan, and
correctly tracks the duration of the scan. It ignores scan requests
that occur when a scan is already in progress. It does not distinguish
between active and passive scans.
Repurpose all the noteScanWifiLockAcquired/Released() plumbing
for WIFI scan tracking. The WIFI scan locks were never reported
to the user. Use noteFullWifiLock() when WIFI scan locks are used -
this makes sense because the power draw for a WIFI scan lock
should be about the same as for a full WIFI lock.
Bug: 6642581
Change-Id: Ida6e87992853698545b89f875c973a239218317d
diff --git a/core/java/android/os/BatteryStats.java b/core/java/android/os/BatteryStats.java
index 438c536..2aa6fb5 100644
--- a/core/java/android/os/BatteryStats.java
+++ b/core/java/android/os/BatteryStats.java
@@ -71,9 +71,9 @@
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
@@ -136,7 +136,7 @@
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";
@@ -260,8 +260,8 @@
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();
@@ -270,7 +270,7 @@
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);
@@ -453,7 +453,7 @@
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.
@@ -859,7 +859,7 @@
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"),
@@ -1326,15 +1326,15 @@
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()) {
@@ -1692,7 +1692,7 @@
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) {
@@ -1723,7 +1723,7 @@
}
}
- if (fullWifiLockOnTime != 0 || scanWifiLockOnTime != 0
+ if (fullWifiLockOnTime != 0 || wifiScanTime != 0
|| uidWifiRunningTime != 0) {
sb.setLength(0);
sb.append(prefix); sb.append(" Wifi Running: ");
@@ -1731,12 +1731,12 @@
sb.append("("); sb.append(formatRatioLocked(uidWifiRunningTime,
whichBatteryRealtime)); sb.append(")\n");
sb.append(prefix); sb.append(" Full Wifi Lock: ");
- formatTimeMs(sb, fullWifiLockOnTime / 1000);
- sb.append("("); sb.append(formatRatioLocked(fullWifiLockOnTime,
+ 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());
}
diff --git a/core/java/com/android/internal/app/IBatteryStats.aidl b/core/java/com/android/internal/app/IBatteryStats.aidl
index 6a0cd36..1a76461 100644
--- a/core/java/com/android/internal/app/IBatteryStats.aidl
+++ b/core/java/com/android/internal/app/IBatteryStats.aidl
@@ -58,14 +58,14 @@
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);
diff --git a/core/java/com/android/internal/os/BatteryStatsImpl.java b/core/java/com/android/internal/os/BatteryStatsImpl.java
index 5157385..650d06b 100644
--- a/core/java/com/android/internal/os/BatteryStatsImpl.java
+++ b/core/java/com/android/internal/os/BatteryStatsImpl.java
@@ -159,8 +159,8 @@
= 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>();
@@ -2174,28 +2174,28 @@
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;
@@ -2236,17 +2236,17 @@
}
}
- 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));
}
}
@@ -2360,8 +2360,8 @@
boolean mFullWifiLockOut;
StopwatchTimer mFullWifiLockTimer;
- boolean mScanWifiLockOut;
- StopwatchTimer mScanWifiLockTimer;
+ boolean mWifiScanStarted;
+ StopwatchTimer mWifiScanTimer;
boolean mWifiMulticastEnabled;
StopwatchTimer mWifiMulticastTimer;
@@ -2405,8 +2405,8 @@
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,
@@ -2518,22 +2518,22 @@
}
@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);
}
}
@@ -2614,11 +2614,11 @@
}
@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
@@ -2698,9 +2698,9 @@
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);
@@ -2791,8 +2791,8 @@
if (mFullWifiLockTimer != null) {
mFullWifiLockTimer.detach();
}
- if (mScanWifiLockTimer != null) {
- mScanWifiLockTimer.detach();
+ if (mWifiScanTimer != null) {
+ mWifiScanTimer.detach();
}
if (mWifiMulticastTimer != null) {
mWifiMulticastTimer.detach();
@@ -2860,9 +2860,9 @@
} 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);
}
@@ -2954,12 +2954,12 @@
} 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) {
@@ -5118,9 +5118,9 @@
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) {
@@ -5310,9 +5310,9 @@
} 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);
}
@@ -5537,7 +5537,7 @@
mWindowTimers.clear();
mWifiRunningTimers.clear();
mFullWifiLockTimers.clear();
- mScanWifiLockTimers.clear();
+ mWifiScanTimers.clear();
mWifiMulticastTimers.clear();
sNumSpeedSteps = in.readInt();