Merge "BatteryStats: Add WorkChain support for WiFi events."
diff --git a/core/java/android/bluetooth/le/BluetoothLeScanner.java b/core/java/android/bluetooth/le/BluetoothLeScanner.java
index a189e27..347fc4d 100644
--- a/core/java/android/bluetooth/le/BluetoothLeScanner.java
+++ b/core/java/android/bluetooth/le/BluetoothLeScanner.java
@@ -387,7 +387,7 @@
if (mScannerId > 0) {
mLeScanClients.put(mScanCallback, this);
} else {
- // Registration timed out or got exception, reset scannerId to -1 so no
+ // Registration timed out or got exception, reset RscannerId to -1 so no
// subsequent operations can proceed.
if (mScannerId == 0) mScannerId = -1;
diff --git a/core/java/com/android/internal/os/BatteryStatsImpl.java b/core/java/com/android/internal/os/BatteryStatsImpl.java
index 1739bed..722dc75 100644
--- a/core/java/com/android/internal/os/BatteryStatsImpl.java
+++ b/core/java/com/android/internal/os/BatteryStatsImpl.java
@@ -5397,6 +5397,15 @@
int uid = mapUid(ws.get(i));
getUidStatsLocked(uid).noteWifiRunningLocked(elapsedRealtime);
}
+
+ List<WorkChain> workChains = ws.getWorkChains();
+ if (workChains != null) {
+ for (int i = 0; i < workChains.size(); ++i) {
+ int uid = mapUid(workChains.get(i).getAttributionUid());
+ getUidStatsLocked(uid).noteWifiRunningLocked(elapsedRealtime);
+ }
+ }
+
scheduleSyncExternalStatsLocked("wifi-running", ExternalStatsSync.UPDATE_WIFI);
} else {
Log.w(TAG, "noteWifiRunningLocked -- called while WIFI running");
@@ -5411,11 +5420,28 @@
int uid = mapUid(oldWs.get(i));
getUidStatsLocked(uid).noteWifiStoppedLocked(elapsedRealtime);
}
+
+ List<WorkChain> workChains = oldWs.getWorkChains();
+ if (workChains != null) {
+ for (int i = 0; i < workChains.size(); ++i) {
+ int uid = mapUid(workChains.get(i).getAttributionUid());
+ getUidStatsLocked(uid).noteWifiStoppedLocked(elapsedRealtime);
+ }
+ }
+
N = newWs.size();
for (int i=0; i<N; i++) {
int uid = mapUid(newWs.get(i));
getUidStatsLocked(uid).noteWifiRunningLocked(elapsedRealtime);
}
+
+ workChains = newWs.getWorkChains();
+ if (workChains != null) {
+ for (int i = 0; i < workChains.size(); ++i) {
+ int uid = mapUid(workChains.get(i).getAttributionUid());
+ getUidStatsLocked(uid).noteWifiRunningLocked(elapsedRealtime);
+ }
+ }
} else {
Log.w(TAG, "noteWifiRunningChangedLocked -- called while WIFI not running");
}
@@ -5436,6 +5462,15 @@
int uid = mapUid(ws.get(i));
getUidStatsLocked(uid).noteWifiStoppedLocked(elapsedRealtime);
}
+
+ List<WorkChain> workChains = ws.getWorkChains();
+ if (workChains != null) {
+ for (int i = 0; i < workChains.size(); ++i) {
+ int uid = mapUid(workChains.get(i).getAttributionUid());
+ getUidStatsLocked(uid).noteWifiStoppedLocked(elapsedRealtime);
+ }
+ }
+
scheduleSyncExternalStatsLocked("wifi-stopped", ExternalStatsSync.UPDATE_WIFI);
} else {
Log.w(TAG, "noteWifiStoppedLocked -- called while WIFI not running");
@@ -5517,7 +5552,6 @@
int mWifiFullLockNesting = 0;
public void noteFullWifiLockAcquiredLocked(int uid) {
- uid = mapUid(uid);
final long elapsedRealtime = mClocks.elapsedRealtime();
final long uptime = mClocks.uptimeMillis();
if (mWifiFullLockNesting == 0) {
@@ -5531,7 +5565,6 @@
}
public void noteFullWifiLockReleasedLocked(int uid) {
- uid = mapUid(uid);
final long elapsedRealtime = mClocks.elapsedRealtime();
final long uptime = mClocks.uptimeMillis();
mWifiFullLockNesting--;
@@ -5547,7 +5580,6 @@
int mWifiScanNesting = 0;
public void noteWifiScanStartedLocked(int uid) {
- uid = mapUid(uid);
final long elapsedRealtime = mClocks.elapsedRealtime();
final long uptime = mClocks.uptimeMillis();
if (mWifiScanNesting == 0) {
@@ -5561,7 +5593,6 @@
}
public void noteWifiScanStoppedLocked(int uid) {
- uid = mapUid(uid);
final long elapsedRealtime = mClocks.elapsedRealtime();
final long uptime = mClocks.uptimeMillis();
mWifiScanNesting--;
@@ -5631,28 +5662,95 @@
public void noteFullWifiLockAcquiredFromSourceLocked(WorkSource ws) {
int N = ws.size();
for (int i=0; i<N; i++) {
- noteFullWifiLockAcquiredLocked(ws.get(i));
+ final int uid = mapUid(ws.get(i));
+ noteFullWifiLockAcquiredLocked(uid);
+ StatsLog.write(StatsLog.WIFI_LOCK_STATE_CHANGED, uid, 1);
+ }
+
+ final List<WorkChain> workChains = ws.getWorkChains();
+ if (workChains != null) {
+ for (int i = 0; i < workChains.size(); ++i) {
+ final WorkChain workChain = workChains.get(i);
+ final int uid = mapUid(workChain.getAttributionUid());
+ noteFullWifiLockAcquiredLocked(uid);
+
+ // TODO(statsd): Log workChain instead of uid here.
+ if (DEBUG) {
+ Slog.v(TAG, "noteFullWifiLockAcquiredFromSourceLocked: " + workChain);
+ }
+ StatsLog.write(StatsLog.WIFI_LOCK_STATE_CHANGED, uid, 1);
+ }
}
}
public void noteFullWifiLockReleasedFromSourceLocked(WorkSource ws) {
int N = ws.size();
for (int i=0; i<N; i++) {
- noteFullWifiLockReleasedLocked(ws.get(i));
+ final int uid = mapUid(ws.get(i));
+ noteFullWifiLockReleasedLocked(uid);
+ StatsLog.write(StatsLog.WIFI_LOCK_STATE_CHANGED, uid, 0);
+ }
+
+ final List<WorkChain> workChains = ws.getWorkChains();
+ if (workChains != null) {
+ for (int i = 0; i < workChains.size(); ++i) {
+ final WorkChain workChain = workChains.get(i);
+ final int uid = mapUid(workChain.getAttributionUid());
+ noteFullWifiLockReleasedLocked(uid);
+
+ // TODO(statsd): Log workChain instead of uid here.
+ if (DEBUG) {
+ Slog.v(TAG, "noteFullWifiLockReleasedFromSourceLocked: " + workChain);
+ }
+ StatsLog.write(StatsLog.WIFI_LOCK_STATE_CHANGED, uid, 0);
+ }
}
}
public void noteWifiScanStartedFromSourceLocked(WorkSource ws) {
int N = ws.size();
for (int i=0; i<N; i++) {
- noteWifiScanStartedLocked(ws.get(i));
+ final int uid = mapUid(ws.get(i));
+ noteWifiScanStartedLocked(uid);
+ StatsLog.write(StatsLog.WIFI_SCAN_STATE_CHANGED, uid, 1);
+ }
+
+ final List<WorkChain> workChains = ws.getWorkChains();
+ if (workChains != null) {
+ for (int i = 0; i < workChains.size(); ++i) {
+ final WorkChain workChain = workChains.get(i);
+ final int uid = mapUid(workChain.getAttributionUid());
+ noteWifiScanStartedLocked(uid);
+
+ // TODO(statsd): Log workChain instead of uid here.
+ if (DEBUG) {
+ Slog.v(TAG, "noteWifiScanStartedFromSourceLocked: " + workChain);
+ }
+ StatsLog.write(StatsLog.WIFI_SCAN_STATE_CHANGED, uid, 1);
+ }
}
}
public void noteWifiScanStoppedFromSourceLocked(WorkSource ws) {
int N = ws.size();
for (int i=0; i<N; i++) {
- noteWifiScanStoppedLocked(ws.get(i));
+ final int uid = mapUid(ws.get(i));
+ noteWifiScanStoppedLocked(uid);
+ StatsLog.write(StatsLog.WIFI_SCAN_STATE_CHANGED, uid, 0);
+ }
+
+ final List<WorkChain> workChains = ws.getWorkChains();
+ if (workChains != null) {
+ for (int i = 0; i < workChains.size(); ++i) {
+ final WorkChain workChain = workChains.get(i);
+ final int uid = mapUid(workChain.getAttributionUid());
+ noteWifiScanStoppedLocked(uid);
+
+ if (DEBUG) {
+ Slog.v(TAG, "noteWifiScanStoppedFromSourceLocked: " + workChain);
+ }
+ StatsLog.write(StatsLog.WIFI_SCAN_STATE_CHANGED, uid, 0);
+ }
}
}
@@ -5661,6 +5759,13 @@
for (int i=0; i<N; i++) {
noteWifiBatchedScanStartedLocked(ws.get(i), csph);
}
+
+ final List<WorkChain> workChains = ws.getWorkChains();
+ if (workChains != null) {
+ for (int i = 0; i < workChains.size(); ++i) {
+ noteWifiBatchedScanStartedLocked(workChains.get(i).getAttributionUid(), csph);
+ }
+ }
}
public void noteWifiBatchedScanStoppedFromSourceLocked(WorkSource ws) {
@@ -5668,6 +5773,13 @@
for (int i=0; i<N; i++) {
noteWifiBatchedScanStoppedLocked(ws.get(i));
}
+
+ final List<WorkChain> workChains = ws.getWorkChains();
+ if (workChains != null) {
+ for (int i = 0; i < workChains.size(); ++i) {
+ noteWifiBatchedScanStoppedLocked(workChains.get(i).getAttributionUid());
+ }
+ }
}
public void noteWifiMulticastEnabledFromSourceLocked(WorkSource ws) {
@@ -5675,6 +5787,13 @@
for (int i=0; i<N; i++) {
noteWifiMulticastEnabledLocked(ws.get(i));
}
+
+ final List<WorkChain> workChains = ws.getWorkChains();
+ if (workChains != null) {
+ for (int i = 0; i < workChains.size(); ++i) {
+ noteWifiMulticastEnabledLocked(workChains.get(i).getAttributionUid());
+ }
+ }
}
public void noteWifiMulticastDisabledFromSourceLocked(WorkSource ws) {
@@ -5682,6 +5801,13 @@
for (int i=0; i<N; i++) {
noteWifiMulticastDisabledLocked(ws.get(i));
}
+
+ final List<WorkChain> workChains = ws.getWorkChains();
+ if (workChains != null) {
+ for (int i = 0; i < workChains.size(); ++i) {
+ noteWifiMulticastDisabledLocked(workChains.get(i).getAttributionUid());
+ }
+ }
}
private static String[] includeInStringArray(String[] array, String str) {
@@ -6476,8 +6602,6 @@
mBsi.mFullWifiLockTimers, mBsi.mOnBatteryTimeBase);
}
mFullWifiLockTimer.startRunningLocked(elapsedRealtimeMs);
- // TODO(statsd): Possibly use a worksource instead of a uid.
- StatsLog.write(StatsLog.WIFI_LOCK_STATE_CHANGED, getUid(), 1);
}
}
@@ -6486,10 +6610,6 @@
if (mFullWifiLockOut) {
mFullWifiLockOut = false;
mFullWifiLockTimer.stopRunningLocked(elapsedRealtimeMs);
- if (!mFullWifiLockTimer.isRunningLocked()) { // only tell statsd if truly stopped
- // TODO(statsd): Possibly use a worksource instead of a uid.
- StatsLog.write(StatsLog.WIFI_LOCK_STATE_CHANGED, getUid(), 0);
- }
}
}
@@ -6503,8 +6623,6 @@
mOnBatteryBackgroundTimeBase);
}
mWifiScanTimer.startRunningLocked(elapsedRealtimeMs);
- // TODO(statsd): Possibly use a worksource instead of a uid.
- StatsLog.write(StatsLog.WIFI_SCAN_STATE_CHANGED, getUid(), 1);
}
}
@@ -6513,10 +6631,6 @@
if (mWifiScanStarted) {
mWifiScanStarted = false;
mWifiScanTimer.stopRunningLocked(elapsedRealtimeMs);
- if (!mWifiScanTimer.isRunningLocked()) { // only tell statsd if truly stopped
- // TODO(statsd): Possibly use a worksource instead of a uid.
- StatsLog.write(StatsLog.WIFI_SCAN_STATE_CHANGED, getUid(), 0);
- }
}
}
diff --git a/wifi/java/android/net/wifi/WifiManager.java b/wifi/java/android/net/wifi/WifiManager.java
index ea9be29..3700bdb 100644
--- a/wifi/java/android/net/wifi/WifiManager.java
+++ b/wifi/java/android/net/wifi/WifiManager.java
@@ -3123,7 +3123,7 @@
public void setWorkSource(WorkSource ws) {
synchronized (mBinder) {
- if (ws != null && ws.size() == 0) {
+ if (ws != null && ws.isEmpty()) {
ws = null;
}
boolean changed = true;
@@ -3135,7 +3135,7 @@
changed = mWorkSource != null;
mWorkSource = new WorkSource(ws);
} else {
- changed = mWorkSource.diff(ws);
+ changed = !mWorkSource.equals(ws);
if (changed) {
mWorkSource.set(ws);
}