summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAvinankumar Vellore Suriyakumar <avellore@google.com>2016-01-26 17:59:06 +0000
committerAndroid (Google) Code Review <android-gerrit@google.com>2016-01-26 17:59:06 +0000
commit775ec86c48d93a5c0ee3dae94ac881154aeab37f (patch)
tree9770d27d7d030fd28df26ae2d49ba50478a92773
parent3ad7774bab4b8fe97c571192e74693762086bc66 (diff)
parent1d3a1ccffd046a9e032e3cffbeabb921a69e646e (diff)
downloadloganalysis-android-cts-7.0_r25.tar.gz
Merge "Add wifi association heuristic"android-n-mr1-preview-2android-n-mr1-preview-1android-cts_7.1_r1android-cts-7.1_r9android-cts-7.1_r8android-cts-7.1_r7android-cts-7.1_r6android-cts-7.1_r5android-cts-7.1_r4android-cts-7.1_r3android-cts-7.1_r29android-cts-7.1_r28android-cts-7.1_r27android-cts-7.1_r26android-cts-7.1_r25android-cts-7.1_r24android-cts-7.1_r23android-cts-7.1_r22android-cts-7.1_r21android-cts-7.1_r20android-cts-7.1_r2android-cts-7.1_r19android-cts-7.1_r18android-cts-7.1_r17android-cts-7.1_r16android-cts-7.1_r15android-cts-7.1_r14android-cts-7.1_r13android-cts-7.1_r12android-cts-7.1_r11android-cts-7.1_r10android-cts-7.1_r1android-cts-7.0_r9android-cts-7.0_r8android-cts-7.0_r7android-cts-7.0_r6android-cts-7.0_r5android-cts-7.0_r4android-cts-7.0_r33android-cts-7.0_r32android-cts-7.0_r31android-cts-7.0_r30android-cts-7.0_r3android-cts-7.0_r29android-cts-7.0_r28android-cts-7.0_r27android-cts-7.0_r26android-cts-7.0_r25android-cts-7.0_r24android-cts-7.0_r23android-cts-7.0_r22android-cts-7.0_r21android-cts-7.0_r20android-cts-7.0_r2android-cts-7.0_r19android-cts-7.0_r18android-cts-7.0_r17android-cts-7.0_r16android-cts-7.0_r15android-cts-7.0_r14android-cts-7.0_r13android-cts-7.0_r12android-cts-7.0_r11android-cts-7.0_r10android-cts-7.0_r1android-7.1.2_r9android-7.1.2_r8android-7.1.2_r6android-7.1.2_r5android-7.1.2_r4android-7.1.2_r39android-7.1.2_r38android-7.1.2_r37android-7.1.2_r36android-7.1.2_r33android-7.1.2_r32android-7.1.2_r30android-7.1.2_r3android-7.1.2_r29android-7.1.2_r28android-7.1.2_r27android-7.1.2_r25android-7.1.2_r24android-7.1.2_r23android-7.1.2_r2android-7.1.2_r19android-7.1.2_r18android-7.1.2_r17android-7.1.2_r16android-7.1.2_r15android-7.1.2_r14android-7.1.2_r13android-7.1.2_r12android-7.1.2_r11android-7.1.2_r10android-7.1.2_r1android-7.1.1_r9android-7.1.1_r8android-7.1.1_r7android-7.1.1_r61android-7.1.1_r60android-7.1.1_r6android-7.1.1_r59android-7.1.1_r58android-7.1.1_r57android-7.1.1_r56android-7.1.1_r55android-7.1.1_r54android-7.1.1_r53android-7.1.1_r52android-7.1.1_r51android-7.1.1_r50android-7.1.1_r49android-7.1.1_r48android-7.1.1_r47android-7.1.1_r46android-7.1.1_r45android-7.1.1_r44android-7.1.1_r43android-7.1.1_r42android-7.1.1_r41android-7.1.1_r40android-7.1.1_r4android-7.1.1_r39android-7.1.1_r38android-7.1.1_r35android-7.1.1_r33android-7.1.1_r32android-7.1.1_r31android-7.1.1_r3android-7.1.1_r28android-7.1.1_r27android-7.1.1_r26android-7.1.1_r25android-7.1.1_r24android-7.1.1_r23android-7.1.1_r22android-7.1.1_r21android-7.1.1_r20android-7.1.1_r2android-7.1.1_r17android-7.1.1_r16android-7.1.1_r15android-7.1.1_r14android-7.1.1_r13android-7.1.1_r12android-7.1.1_r11android-7.1.1_r10android-7.1.1_r1android-7.1.0_r7android-7.1.0_r6android-7.1.0_r5android-7.1.0_r4android-7.1.0_r3android-7.1.0_r2android-7.1.0_r1android-7.0.0_r9android-7.0.0_r8android-7.0.0_r7android-7.0.0_r6android-7.0.0_r5android-7.0.0_r4android-7.0.0_r36android-7.0.0_r35android-7.0.0_r34android-7.0.0_r33android-7.0.0_r32android-7.0.0_r31android-7.0.0_r30android-7.0.0_r3android-7.0.0_r29android-7.0.0_r28android-7.0.0_r27android-7.0.0_r24android-7.0.0_r21android-7.0.0_r19android-7.0.0_r17android-7.0.0_r15android-7.0.0_r14android-7.0.0_r13android-7.0.0_r12android-7.0.0_r11android-7.0.0_r10android-7.0.0_r1nougat-releasenougat-mr2.3-releasenougat-mr2.2-releasenougat-mr2.1-releasenougat-mr2-security-releasenougat-mr2-releasenougat-mr2-pixel-releasenougat-mr2-devnougat-mr1.8-releasenougat-mr1.7-releasenougat-mr1.6-releasenougat-mr1.5-releasenougat-mr1.4-releasenougat-mr1.3-releasenougat-mr1.2-releasenougat-mr1.1-releasenougat-mr1-volantis-releasenougat-mr1-security-releasenougat-mr1-releasenougat-mr1-flounder-releasenougat-mr1-devnougat-mr1-cts-releasenougat-mr0.5-releasenougat-dr1-releasenougat-devnougat-cts-releasenougat-bugfix-release
-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
-rw-r--r--tests/src/com/android/loganalysis/parser/DumpsysWifiStatsParserTest.java7
-rw-r--r--tests/src/com/android/loganalysis/rule/WifiStatsRuleTest.java30
5 files changed, 71 insertions, 9 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) {
diff --git a/tests/src/com/android/loganalysis/parser/DumpsysWifiStatsParserTest.java b/tests/src/com/android/loganalysis/parser/DumpsysWifiStatsParserTest.java
index 6a9e302..f52e432 100644
--- a/tests/src/com/android/loganalysis/parser/DumpsysWifiStatsParserTest.java
+++ b/tests/src/com/android/loganalysis/parser/DumpsysWifiStatsParserTest.java
@@ -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:08:15.018 - Event [IFNAME=wlan0 CTRL-EVENT-DISCONNECTED "
+ "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);
assertEquals(2, wifiStats.getNumWifiDisconnects());
assertEquals(3, wifiStats.getNumWifiScans());
+ assertEquals(3, wifiStats.getNumWifiAssociations());
}
/**
@@ -93,6 +97,7 @@ public class DumpsysWifiStatsParserTest extends TestCase {
DumpsysWifiStatsItem wifiStats = new DumpsysWifiStatsParser().parse(inputBlock);
assertEquals(0, wifiStats.getNumWifiDisconnects());
assertEquals(0, wifiStats.getNumWifiScans());
+ assertEquals(0, wifiStats.getNumWifiAssociations());
}
}
diff --git a/tests/src/com/android/loganalysis/rule/WifiStatsRuleTest.java b/tests/src/com/android/loganalysis/rule/WifiStatsRuleTest.java
index 628039e..984ed20 100644
--- a/tests/src/com/android/loganalysis/rule/WifiStatsRuleTest.java
+++ b/tests/src/com/android/loganalysis/rule/WifiStatsRuleTest.java
@@ -20,10 +20,6 @@ import com.android.loganalysis.item.BugreportItem;
import com.android.loganalysis.item.DumpsysBatteryStatsItem;
import com.android.loganalysis.item.DumpsysItem;
import com.android.loganalysis.item.DumpsysWifiStatsItem;
-import com.android.loganalysis.parser.BugreportParser;
-
-import java.util.Arrays;
-import java.util.List;
import junit.framework.TestCase;
@@ -58,6 +54,7 @@ public class WifiStatsRuleTest extends TestCase {
DumpsysWifiStatsItem wifiStats = new DumpsysWifiStatsItem();
wifiStats.setNumWifiDisconnect(1);
wifiStats.setNumWifiScan(0);
+ wifiStats.setNumWifiAssociation(0);
mDumpsys.setWifiStats(wifiStats);
WifiStatsRule wifiStatsRule = new WifiStatsRule(mBugreport);
@@ -66,13 +63,32 @@ public class WifiStatsRuleTest extends TestCase {
assertNotNull(analysis);
assertTrue(analysis.has("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 {
DumpsysWifiStatsItem wifiStats = new DumpsysWifiStatsItem();
wifiStats.setNumWifiDisconnect(0);
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);
WifiStatsRule wifiStatsRule = new WifiStatsRule(mBugreport);
@@ -81,7 +97,7 @@ public class WifiStatsRuleTest extends TestCase {
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 apps requested for frequent wifi scans. No frequent wifi disconnects were "
+ + "observed. Wifi got associated with AP 3 times.");
}
}