summaryrefslogtreecommitdiff
path: root/src/com/android/loganalysis
diff options
context:
space:
mode:
Diffstat (limited to 'src/com/android/loganalysis')
-rw-r--r--src/com/android/loganalysis/item/DumpsysWifiStatsItem.java18
-rw-r--r--src/com/android/loganalysis/parser/DumpsysWifiStatsParser.java14
-rw-r--r--src/com/android/loganalysis/rule/WifiStatsRule.java11
3 files changed, 42 insertions, 1 deletions
diff --git a/src/com/android/loganalysis/item/DumpsysWifiStatsItem.java b/src/com/android/loganalysis/item/DumpsysWifiStatsItem.java
index 6ceb073..b956a65 100644
--- a/src/com/android/loganalysis/item/DumpsysWifiStatsItem.java
+++ b/src/com/android/loganalysis/item/DumpsysWifiStatsItem.java
@@ -27,9 +27,11 @@ public class DumpsysWifiStatsItem extends GenericItem {
public static final String WIFI_DISCONNECT = "WIFI_DISCONNECT";
/** Constant for JSON output */
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(
- WIFI_DISCONNECT, WIFI_SCAN));
+ WIFI_DISCONNECT, WIFI_SCAN, WIFI_ASSOCIATION));
/**
* The constructor for {@link DumpsysWifiStatsItem}.
@@ -53,6 +55,13 @@ public class DumpsysWifiStatsItem extends GenericItem {
}
/**
+ * Set number of times of wifi associations
+ */
+ public void setNumWifiAssociation(int numWifiAssociations) {
+ setAttribute(WIFI_ASSOCIATION, numWifiAssociations);
+ }
+
+ /**
* Get the number of times wifi disconnected
*/
public int getNumWifiDisconnects() {
@@ -65,4 +74,11 @@ public class DumpsysWifiStatsItem extends GenericItem {
public int getNumWifiScans() {
return (int) getAttribute(WIFI_SCAN);
}
+
+ /**
+ * Get the number of times wifi association event triggered
+ */
+ public int getNumWifiAssociations() {
+ return (int) getAttribute(WIFI_ASSOCIATION);
+ }
}
diff --git a/src/com/android/loganalysis/parser/DumpsysWifiStatsParser.java b/src/com/android/loganalysis/parser/DumpsysWifiStatsParser.java
index d977902..52c1bf3 100644
--- a/src/com/android/loganalysis/parser/DumpsysWifiStatsParser.java
+++ b/src/com/android/loganalysis/parser/DumpsysWifiStatsParser.java
@@ -41,6 +41,13 @@ public class DumpsysWifiStatsParser implements IParser {
+ "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}
*
* @return The {@link DumpsysWifiStatsItem}.
@@ -50,6 +57,7 @@ public class DumpsysWifiStatsParser implements IParser {
DumpsysWifiStatsItem item = new DumpsysWifiStatsItem();
int numWifiScans = 0;
int numWifiDisconnects = 0;
+ int numWifiAssociations = 0;
for (String line : lines) {
Matcher m = WIFI_SCAN.matcher(line);
if(m.matches()) {
@@ -59,10 +67,16 @@ public class DumpsysWifiStatsParser implements IParser {
m = WIFI_DISCONNECT.matcher(line);
if (m.matches()) {
numWifiDisconnects++;
+ continue;
+ }
+ m = WIFI_ASSOCIATION.matcher(line);
+ if (m.matches()) {
+ numWifiAssociations++;
}
}
item.setNumWifiScan(numWifiScans);
item.setNumWifiDisconnect(numWifiDisconnects);
+ item.setNumWifiAssociation(numWifiAssociations);
return item;
}
diff --git a/src/com/android/loganalysis/rule/WifiStatsRule.java b/src/com/android/loganalysis/rule/WifiStatsRule.java
index f9bca39..da422de 100644
--- a/src/com/android/loganalysis/rule/WifiStatsRule.java
+++ b/src/com/android/loganalysis/rule/WifiStatsRule.java
@@ -31,11 +31,13 @@ public class WifiStatsRule extends AbstractPowerRule {
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_ASSOCIATION_THRESHOLD = 1;
// 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 long mFrequentWifiScansIntervalSecs = 0;
private int mNumFrequentWifiDisconnects = 0;
+ private int mNumFrequentWifiAssociations = 0;
private BugreportItem mBugreportItem = null;
@@ -65,6 +67,9 @@ public class WifiStatsRule extends AbstractPowerRule {
if (dumpsysWifiStatsItem.getNumWifiDisconnects() >= WIFI_DISCONNECT_THRESHOLD) {
mNumFrequentWifiDisconnects = dumpsysWifiStatsItem.getNumWifiDisconnects();
}
+ if (dumpsysWifiStatsItem.getNumWifiAssociations() > WIFI_ASSOCIATION_THRESHOLD) {
+ mNumFrequentWifiAssociations = dumpsysWifiStatsItem.getNumWifiAssociations();
+ }
}
@Override
@@ -83,6 +88,12 @@ public class WifiStatsRule extends AbstractPowerRule {
analysis.append(String.format("Wifi got disconnected %d times. ",
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 {
wifiStatsAnalysis.put(WIFI_STATS, analysis.toString().trim());
} catch (JSONException e) {