Skip to content
Snippets Groups Projects
Commit 775ec86c authored by Avinankumar Vellore Suriyakumar's avatar Avinankumar Vellore Suriyakumar Committed by Android (Google) Code Review
Browse files

Merge "Add wifi association heuristic"

parents 3ad7774b 1d3a1ccf
Branches
No related tags found
No related merge requests found
...@@ -27,9 +27,11 @@ public class DumpsysWifiStatsItem extends GenericItem { ...@@ -27,9 +27,11 @@ public class DumpsysWifiStatsItem extends GenericItem {
public static final String WIFI_DISCONNECT = "WIFI_DISCONNECT"; public static final String WIFI_DISCONNECT = "WIFI_DISCONNECT";
/** Constant for JSON output */ /** Constant for JSON output */
public static final String WIFI_SCAN = "WIFI_SCAN"; public static final String WIFI_SCAN = "WIFI_SCAN";
/** Constant for JSON output */
public static final String WIFI_ASSOCIATION = "WIFI_ASSOCIATION";
private static final Set<String> ATTRIBUTES = new HashSet<String>(Arrays.asList( private static final Set<String> ATTRIBUTES = new HashSet<String>(Arrays.asList(
WIFI_DISCONNECT, WIFI_SCAN)); WIFI_DISCONNECT, WIFI_SCAN, WIFI_ASSOCIATION));
/** /**
* The constructor for {@link DumpsysWifiStatsItem}. * The constructor for {@link DumpsysWifiStatsItem}.
...@@ -52,6 +54,13 @@ public class DumpsysWifiStatsItem extends GenericItem { ...@@ -52,6 +54,13 @@ public class DumpsysWifiStatsItem extends GenericItem {
setAttribute(WIFI_SCAN, numWifiScans); setAttribute(WIFI_SCAN, numWifiScans);
} }
/**
* Set number of times of wifi associations
*/
public void setNumWifiAssociation(int numWifiAssociations) {
setAttribute(WIFI_ASSOCIATION, numWifiAssociations);
}
/** /**
* Get the number of times wifi disconnected * Get the number of times wifi disconnected
*/ */
...@@ -65,4 +74,11 @@ public class DumpsysWifiStatsItem extends GenericItem { ...@@ -65,4 +74,11 @@ public class DumpsysWifiStatsItem extends GenericItem {
public int getNumWifiScans() { public int getNumWifiScans() {
return (int) getAttribute(WIFI_SCAN); return (int) getAttribute(WIFI_SCAN);
} }
/**
* Get the number of times wifi association event triggered
*/
public int getNumWifiAssociations() {
return (int) getAttribute(WIFI_ASSOCIATION);
}
} }
...@@ -40,6 +40,13 @@ public class DumpsysWifiStatsParser implements IParser { ...@@ -40,6 +40,13 @@ public class DumpsysWifiStatsParser implements IParser {
"^\\d+-\\d+ \\d+:\\d+:\\d+\\.\\d+ - Event \\[IFNAME=wlan0 CTRL-EVENT-DISCONNECTED " "^\\d+-\\d+ \\d+:\\d+:\\d+\\.\\d+ - Event \\[IFNAME=wlan0 CTRL-EVENT-DISCONNECTED "
+ "bssid=\\w+:\\w+:\\w+:\\w+:\\w+:\\w+ reason=\\d+(\\s*locally_generated=\\d+)?\\]"); + "bssid=\\w+:\\w+:\\w+:\\w+:\\w+:\\w+ reason=\\d+(\\s*locally_generated=\\d+)?\\]");
/**
* Matches: 01-21 18:17:23.15 - Event [IFNAME=wlan0 Trying to associate with SSID 'WL-power-2']
*/
private static final Pattern WIFI_ASSOCIATION = Pattern.compile(
"^\\d+-\\d+ \\d+:\\d+:\\d+\\.\\d+ - Event \\[IFNAME=wlan0 Trying to associate with "
+ "SSID \\'.*\\'\\]");
/** /**
* {@inheritDoc} * {@inheritDoc}
* *
...@@ -50,6 +57,7 @@ public class DumpsysWifiStatsParser implements IParser { ...@@ -50,6 +57,7 @@ public class DumpsysWifiStatsParser implements IParser {
DumpsysWifiStatsItem item = new DumpsysWifiStatsItem(); DumpsysWifiStatsItem item = new DumpsysWifiStatsItem();
int numWifiScans = 0; int numWifiScans = 0;
int numWifiDisconnects = 0; int numWifiDisconnects = 0;
int numWifiAssociations = 0;
for (String line : lines) { for (String line : lines) {
Matcher m = WIFI_SCAN.matcher(line); Matcher m = WIFI_SCAN.matcher(line);
if(m.matches()) { if(m.matches()) {
...@@ -59,10 +67,16 @@ public class DumpsysWifiStatsParser implements IParser { ...@@ -59,10 +67,16 @@ public class DumpsysWifiStatsParser implements IParser {
m = WIFI_DISCONNECT.matcher(line); m = WIFI_DISCONNECT.matcher(line);
if (m.matches()) { if (m.matches()) {
numWifiDisconnects++; numWifiDisconnects++;
continue;
}
m = WIFI_ASSOCIATION.matcher(line);
if (m.matches()) {
numWifiAssociations++;
} }
} }
item.setNumWifiScan(numWifiScans); item.setNumWifiScan(numWifiScans);
item.setNumWifiDisconnect(numWifiDisconnects); item.setNumWifiDisconnect(numWifiDisconnects);
item.setNumWifiAssociation(numWifiAssociations);
return item; return item;
} }
......
...@@ -31,11 +31,13 @@ public class WifiStatsRule extends AbstractPowerRule { ...@@ -31,11 +31,13 @@ public class WifiStatsRule extends AbstractPowerRule {
private static final String WIFI_STATS = "WIFI_STATS"; private static final String WIFI_STATS = "WIFI_STATS";
private static final int WIFI_DISCONNECT_THRESHOLD = 1; // wifi disconnect should never happen private static final int WIFI_DISCONNECT_THRESHOLD = 1; // wifi disconnect should never happen
private static final int WIFI_ASSOCIATION_THRESHOLD = 1;
// Wifi scans are scheduled by GSA every 285 seconds, anything more frequent is an issue // Wifi scans are scheduled by GSA every 285 seconds, anything more frequent is an issue
private static final long WIFI_SCAN_INTERVAL_THRESHOLD_MS = 285000; private static final long WIFI_SCAN_INTERVAL_THRESHOLD_MS = 285000;
private long mFrequentWifiScansIntervalSecs = 0; private long mFrequentWifiScansIntervalSecs = 0;
private int mNumFrequentWifiDisconnects = 0; private int mNumFrequentWifiDisconnects = 0;
private int mNumFrequentWifiAssociations = 0;
private BugreportItem mBugreportItem = null; private BugreportItem mBugreportItem = null;
...@@ -65,6 +67,9 @@ public class WifiStatsRule extends AbstractPowerRule { ...@@ -65,6 +67,9 @@ public class WifiStatsRule extends AbstractPowerRule {
if (dumpsysWifiStatsItem.getNumWifiDisconnects() >= WIFI_DISCONNECT_THRESHOLD) { if (dumpsysWifiStatsItem.getNumWifiDisconnects() >= WIFI_DISCONNECT_THRESHOLD) {
mNumFrequentWifiDisconnects = dumpsysWifiStatsItem.getNumWifiDisconnects(); mNumFrequentWifiDisconnects = dumpsysWifiStatsItem.getNumWifiDisconnects();
} }
if (dumpsysWifiStatsItem.getNumWifiAssociations() > WIFI_ASSOCIATION_THRESHOLD) {
mNumFrequentWifiAssociations = dumpsysWifiStatsItem.getNumWifiAssociations();
}
} }
@Override @Override
...@@ -83,6 +88,12 @@ public class WifiStatsRule extends AbstractPowerRule { ...@@ -83,6 +88,12 @@ public class WifiStatsRule extends AbstractPowerRule {
analysis.append(String.format("Wifi got disconnected %d times. ", analysis.append(String.format("Wifi got disconnected %d times. ",
mNumFrequentWifiDisconnects)); mNumFrequentWifiDisconnects));
} }
if (mNumFrequentWifiAssociations == 0) {
analysis.append("No frequent wifi associations were observed. ");
} else {
analysis.append(String.format("Wifi got associated with AP %d times. ",
mNumFrequentWifiAssociations));
}
try { try {
wifiStatsAnalysis.put(WIFI_STATS, analysis.toString().trim()); wifiStatsAnalysis.put(WIFI_STATS, analysis.toString().trim());
} catch (JSONException e) { } catch (JSONException e) {
......
...@@ -56,11 +56,15 @@ public class DumpsysWifiStatsParserTest extends TestCase { ...@@ -56,11 +56,15 @@ public class DumpsysWifiStatsParserTest extends TestCase {
"10-08 13:06:25.363 - Event [IFNAME=wlan0 CTRL-EVENT-SCAN-STARTED ]", "10-08 13:06:25.363 - Event [IFNAME=wlan0 CTRL-EVENT-SCAN-STARTED ]",
"10-08 13:08:15.018 - Event [IFNAME=wlan0 CTRL-EVENT-DISCONNECTED " "10-08 13:08:15.018 - Event [IFNAME=wlan0 CTRL-EVENT-DISCONNECTED "
+ "bssid=9c:1c:12:e8:72:d2 reason=3 locally_generated=1]", + "bssid=9c:1c:12:e8:72:d2 reason=3 locally_generated=1]",
"10-08 13:08:15.324 - wlan0: 442:IFNAME=wlan0 ENABLE_NETWORK 0 -> true"); "10-08 13:08:15.324 - wlan0: 442:IFNAME=wlan0 ENABLE_NETWORK 0 -> true",
"01-21 13:17:23.1 - Event [IFNAME=wlan0 Trying to associate with SSID 'WL-power']",
"01-21 13:18:23.1 - Event [IFNAME=wlan0 Trying to associate with SSID 'WL-power']",
"01-21 13:18:23.1 - Event [IFNAME=wlan0 Trying to associate with SSID 'WL-power']");
DumpsysWifiStatsItem wifiStats = new DumpsysWifiStatsParser().parse(inputBlock); DumpsysWifiStatsItem wifiStats = new DumpsysWifiStatsParser().parse(inputBlock);
assertEquals(2, wifiStats.getNumWifiDisconnects()); assertEquals(2, wifiStats.getNumWifiDisconnects());
assertEquals(3, wifiStats.getNumWifiScans()); assertEquals(3, wifiStats.getNumWifiScans());
assertEquals(3, wifiStats.getNumWifiAssociations());
} }
/** /**
...@@ -93,6 +97,7 @@ public class DumpsysWifiStatsParserTest extends TestCase { ...@@ -93,6 +97,7 @@ public class DumpsysWifiStatsParserTest extends TestCase {
DumpsysWifiStatsItem wifiStats = new DumpsysWifiStatsParser().parse(inputBlock); DumpsysWifiStatsItem wifiStats = new DumpsysWifiStatsParser().parse(inputBlock);
assertEquals(0, wifiStats.getNumWifiDisconnects()); assertEquals(0, wifiStats.getNumWifiDisconnects());
assertEquals(0, wifiStats.getNumWifiScans()); assertEquals(0, wifiStats.getNumWifiScans());
assertEquals(0, wifiStats.getNumWifiAssociations());
} }
} }
...@@ -20,10 +20,6 @@ import com.android.loganalysis.item.BugreportItem; ...@@ -20,10 +20,6 @@ import com.android.loganalysis.item.BugreportItem;
import com.android.loganalysis.item.DumpsysBatteryStatsItem; import com.android.loganalysis.item.DumpsysBatteryStatsItem;
import com.android.loganalysis.item.DumpsysItem; import com.android.loganalysis.item.DumpsysItem;
import com.android.loganalysis.item.DumpsysWifiStatsItem; import com.android.loganalysis.item.DumpsysWifiStatsItem;
import com.android.loganalysis.parser.BugreportParser;
import java.util.Arrays;
import java.util.List;
import junit.framework.TestCase; import junit.framework.TestCase;
...@@ -58,6 +54,7 @@ public class WifiStatsRuleTest extends TestCase { ...@@ -58,6 +54,7 @@ public class WifiStatsRuleTest extends TestCase {
DumpsysWifiStatsItem wifiStats = new DumpsysWifiStatsItem(); DumpsysWifiStatsItem wifiStats = new DumpsysWifiStatsItem();
wifiStats.setNumWifiDisconnect(1); wifiStats.setNumWifiDisconnect(1);
wifiStats.setNumWifiScan(0); wifiStats.setNumWifiScan(0);
wifiStats.setNumWifiAssociation(0);
mDumpsys.setWifiStats(wifiStats); mDumpsys.setWifiStats(wifiStats);
WifiStatsRule wifiStatsRule = new WifiStatsRule(mBugreport); WifiStatsRule wifiStatsRule = new WifiStatsRule(mBugreport);
...@@ -66,13 +63,32 @@ public class WifiStatsRuleTest extends TestCase { ...@@ -66,13 +63,32 @@ public class WifiStatsRuleTest extends TestCase {
assertNotNull(analysis); assertNotNull(analysis);
assertTrue(analysis.has("WIFI_STATS")); assertTrue(analysis.has("WIFI_STATS"));
assertEquals(analysis.getString("WIFI_STATS"), assertEquals(analysis.getString("WIFI_STATS"),
"No apps requested for frequent wifi scans. Wifi got disconnected 1 times."); "No apps requested for frequent wifi scans. Wifi got disconnected 1 times. "
+ "No frequent wifi associations were observed.");
} }
public void testWifiScanAnalysis() throws Exception { public void testWifiScanAnalysis() throws Exception {
DumpsysWifiStatsItem wifiStats = new DumpsysWifiStatsItem(); DumpsysWifiStatsItem wifiStats = new DumpsysWifiStatsItem();
wifiStats.setNumWifiDisconnect(0); wifiStats.setNumWifiDisconnect(0);
wifiStats.setNumWifiScan(3); wifiStats.setNumWifiScan(3);
wifiStats.setNumWifiAssociation(0);
mDumpsys.setWifiStats(wifiStats);
WifiStatsRule wifiStatsRule = new WifiStatsRule(mBugreport);
wifiStatsRule.applyRule();
JSONObject analysis = wifiStatsRule.getAnalysis();
assertNotNull(analysis);
assertTrue(analysis.has("WIFI_STATS"));
assertEquals(analysis.getString("WIFI_STATS"),
"Wifi scans happened every 100 seconds. No frequent wifi disconnects were "
+ "observed. No frequent wifi associations were observed.");
}
public void testWifiAssociationAnalysis() throws Exception {
DumpsysWifiStatsItem wifiStats = new DumpsysWifiStatsItem();
wifiStats.setNumWifiDisconnect(0);
wifiStats.setNumWifiScan(0);
wifiStats.setNumWifiAssociation(3);
mDumpsys.setWifiStats(wifiStats); mDumpsys.setWifiStats(wifiStats);
WifiStatsRule wifiStatsRule = new WifiStatsRule(mBugreport); WifiStatsRule wifiStatsRule = new WifiStatsRule(mBugreport);
...@@ -81,7 +97,7 @@ public class WifiStatsRuleTest extends TestCase { ...@@ -81,7 +97,7 @@ public class WifiStatsRuleTest extends TestCase {
assertNotNull(analysis); assertNotNull(analysis);
assertTrue(analysis.has("WIFI_STATS")); assertTrue(analysis.has("WIFI_STATS"));
assertEquals(analysis.getString("WIFI_STATS"), assertEquals(analysis.getString("WIFI_STATS"),
"Wifi scans happened every 100 seconds. No frequent wifi disconnects were observed." "No apps requested for frequent wifi scans. No frequent wifi disconnects were "
); + "observed. Wifi got associated with AP 3 times.");
} }
} }
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment