From 5048207d983fbff2acec941e5c6c191e0bf7e9be Mon Sep 17 00:00:00 2001 From: Vinit Deshpande Date: Wed, 20 May 2015 14:27:49 -0700 Subject: [PATCH 1/2] Indicate failed scans with EXTRA_RESULTS_UPDATED This flag indicates if scan was successful and results were updated. It will be set to false if a scan is not performed (intentionally) or if it failed to produce any results. Bug: 20642015 Change-Id: I06a1fdd684932db68891ee28d5a049980f483f0f --- api/current.txt | 1 + api/system-current.txt | 1 + wifi/java/android/net/wifi/WifiManager.java | 8 ++++++++ 3 files changed, 10 insertions(+) diff --git a/api/current.txt b/api/current.txt index bbdb878b288f9..c855b62ea77d5 100644 --- a/api/current.txt +++ b/api/current.txt @@ -19255,6 +19255,7 @@ package android.net.wifi { field public static final java.lang.String EXTRA_NEW_RSSI = "newRssi"; field public static final java.lang.String EXTRA_NEW_STATE = "newState"; field public static final java.lang.String EXTRA_PREVIOUS_WIFI_STATE = "previous_wifi_state"; + field public static final java.lang.String EXTRA_RESULTS_UPDATED = "resultsUpdated"; field public static final java.lang.String EXTRA_SUPPLICANT_CONNECTED = "connected"; field public static final java.lang.String EXTRA_SUPPLICANT_ERROR = "supplicantError"; field public static final java.lang.String EXTRA_WIFI_INFO = "wifiInfo"; diff --git a/api/system-current.txt b/api/system-current.txt index 1a3673d8548eb..e6883cd0b26da 100644 --- a/api/system-current.txt +++ b/api/system-current.txt @@ -21016,6 +21016,7 @@ package android.net.wifi { field public static final java.lang.String EXTRA_NEW_RSSI = "newRssi"; field public static final java.lang.String EXTRA_NEW_STATE = "newState"; field public static final java.lang.String EXTRA_PREVIOUS_WIFI_STATE = "previous_wifi_state"; + field public static final java.lang.String EXTRA_RESULTS_UPDATED = "resultsUpdated"; field public static final java.lang.String EXTRA_SUPPLICANT_CONNECTED = "connected"; field public static final java.lang.String EXTRA_SUPPLICANT_ERROR = "supplicantError"; field public static final java.lang.String EXTRA_WIFI_CONFIGURATION = "wifiConfiguration"; diff --git a/wifi/java/android/net/wifi/WifiManager.java b/wifi/java/android/net/wifi/WifiManager.java index f2c2a28764999..64fa0e5226e61 100644 --- a/wifi/java/android/net/wifi/WifiManager.java +++ b/wifi/java/android/net/wifi/WifiManager.java @@ -403,6 +403,14 @@ public class WifiManager { */ @SdkConstant(SdkConstantType.BROADCAST_INTENT_ACTION) public static final String SCAN_RESULTS_AVAILABLE_ACTION = "android.net.wifi.SCAN_RESULTS"; + + /** + * The result of previous scan, reported with {@link #SCAN_RESULTS_AVAILABLE_ACTION}. + * @return true scan was successful, results updated + * @return false scan was not successful, results haven't been updated since previous scan + */ + public static final String EXTRA_RESULTS_UPDATED = "resultsUpdated"; + /** * A batch of access point scans has been completed and the results areavailable. * Call {@link #getBatchedScanResults()} to obtain the results. From f7a06315e77d9de5c87789174edb3b0346cd1a54 Mon Sep 17 00:00:00 2001 From: Adam Lesinski Date: Thu, 21 May 2015 15:04:18 -0700 Subject: [PATCH 2/2] BatteryStatsService: Only query bluetooth on demand. Bluetooth was being queried too often, leading to more power consumption and wakelock time. Bug:21063567 Bug:21269307 Change-Id: Idddbab46d13016ef8528e095945b7817c12f7266 --- .../server/am/BatteryStatsService.java | 38 +++++++++++++------ 1 file changed, 27 insertions(+), 11 deletions(-) diff --git a/services/core/java/com/android/server/am/BatteryStatsService.java b/services/core/java/com/android/server/am/BatteryStatsService.java index a61223a00cb61..b1cc2880e58fa 100644 --- a/services/core/java/com/android/server/am/BatteryStatsService.java +++ b/services/core/java/com/android/server/am/BatteryStatsService.java @@ -83,11 +83,11 @@ public final class BatteryStatsService extends IBatteryStats.Stub public void handleMessage(Message msg) { switch (msg.what) { case MSG_SYNC_EXTERNAL_STATS: - updateExternalStats((String)msg.obj); + updateExternalStats((String)msg.obj, false); break; case MSG_WRITE_TO_DISK: - updateExternalStats("write"); + updateExternalStats("write", true); synchronized (mStats) { mStats.writeAsyncLocked(); } @@ -137,7 +137,7 @@ public final class BatteryStatsService extends IBatteryStats.Stub public void shutdown() { Slog.w("BatteryStats", "Writing battery stats before shutdown..."); - updateExternalStats("shutdown"); + updateExternalStats("shutdown", true); synchronized (mStats) { mStats.shutdownLocked(); } @@ -237,7 +237,7 @@ public final class BatteryStatsService extends IBatteryStats.Stub //Slog.i("foo", "SENDING BATTERY INFO:"); //mStats.dumpLocked(new LogPrinter(Log.INFO, "foo", Log.LOG_ID_SYSTEM)); Parcel out = Parcel.obtain(); - updateExternalStats("get-stats"); + updateExternalStats("get-stats", true); synchronized (mStats) { mStats.writeToParcel(out, 0); } @@ -252,7 +252,7 @@ public final class BatteryStatsService extends IBatteryStats.Stub //Slog.i("foo", "SENDING BATTERY INFO:"); //mStats.dumpLocked(new LogPrinter(Log.INFO, "foo", Log.LOG_ID_SYSTEM)); Parcel out = Parcel.obtain(); - updateExternalStats("get-stats"); + updateExternalStats("get-stats", true); synchronized (mStats) { mStats.writeToParcel(out, 0); } @@ -779,7 +779,7 @@ public final class BatteryStatsService extends IBatteryStats.Stub // Sync external stats first as the battery has changed states. If we don't sync // immediately here, we may not collect the relevant data later. - updateExternalStats("battery-state"); + updateExternalStats("battery-state", false); synchronized (mStats) { mStats.setBatteryStateLocked(status, health, plugType, level, temp, volt); } @@ -933,9 +933,9 @@ public final class BatteryStatsService extends IBatteryStats.Stub pw.println("Battery stats reset."); noOutput = true; } - updateExternalStats("dump"); + updateExternalStats("dump", true); } else if ("--write".equals(arg)) { - updateExternalStats("dump"); + updateExternalStats("dump", true); synchronized (mStats) { mStats.writeSyncLocked(); pw.println("Battery stats written."); @@ -999,7 +999,7 @@ public final class BatteryStatsService extends IBatteryStats.Stub flags |= BatteryStats.DUMP_DEVICE_WIFI_ONLY; } // Fetch data from external sources and update the BatteryStatsImpl object with them. - updateExternalStats("dump"); + updateExternalStats("dump", true); } finally { Binder.restoreCallingIdentity(ident); } @@ -1142,8 +1142,16 @@ public final class BatteryStatsService extends IBatteryStats.Stub * * We first grab a lock specific to this method, then once all the data has been collected, * we grab the mStats lock and update the data. + * + * TODO(adamlesinski): When we start distributing bluetooth data to apps, we'll want to + * separate these external stats so that they can be collected individually and on different + * intervals. + * + * @param reason The reason why this collection was requested. Useful for debugging. + * @param force If false, some stats may decide not to be collected for efficiency as their + * results aren't needed immediately. When true, collect all stats unconditionally. */ - void updateExternalStats(String reason) { + void updateExternalStats(String reason, boolean force) { synchronized (mExternalStatsLock) { if (mContext == null) { // We haven't started yet (which means the BatteryStatsImpl object has @@ -1152,7 +1160,15 @@ public final class BatteryStatsService extends IBatteryStats.Stub } final WifiActivityEnergyInfo wifiEnergyInfo = pullWifiEnergyInfoLocked(); - final BluetoothActivityEnergyInfo bluetoothEnergyInfo = pullBluetoothEnergyInfoLocked(); + final BluetoothActivityEnergyInfo bluetoothEnergyInfo; + if (force) { + // We only pull bluetooth stats when we have to, as we are not distributing its + // use amongst apps and the sampling frequency does not matter. + bluetoothEnergyInfo = pullBluetoothEnergyInfoLocked(); + } else { + bluetoothEnergyInfo = null; + } + synchronized (mStats) { if (mStats.mRecordAllHistory) { final long elapsedRealtime = SystemClock.elapsedRealtime();