summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authoravellore <avellore@google.com>2015-06-25 16:46:28 -0700
committeravellore <avellore@google.com>2015-06-25 16:53:19 -0700
commit8fbbc70563619f83cec64358fb3f230cdcc168c0 (patch)
treebba226922733b30ea1a858ffb8b472e43ba63141
parent69155df867ac697a430ab9a998400ef727cffa1b (diff)
downloadloganalysis-8fbbc70563619f83cec64358fb3f230cdcc168c0.tar.gz
Separate kernel and partial wakelock parsing
In some bugreports kernel wakelock section is missing. This prevents parsing of partial wakelock as well. So this fix is to separate kernel and partial wakelock parsing Change-Id: I196dcd9438976cb5d3fcd3b0a81839903aebac15
-rw-r--r--src/com/android/loganalysis/parser/BatteryStatsDetailedInfoParser.java6
-rw-r--r--src/com/android/loganalysis/parser/WakelockParser.java21
-rw-r--r--tests/src/com/android/loganalysis/parser/BugreportParserTest.java5
-rw-r--r--tests/src/com/android/loganalysis/parser/WakelockParserTest.java45
4 files changed, 46 insertions, 31 deletions
diff --git a/src/com/android/loganalysis/parser/BatteryStatsDetailedInfoParser.java b/src/com/android/loganalysis/parser/BatteryStatsDetailedInfoParser.java
index b800371..85188a4 100644
--- a/src/com/android/loganalysis/parser/BatteryStatsDetailedInfoParser.java
+++ b/src/com/android/loganalysis/parser/BatteryStatsDetailedInfoParser.java
@@ -34,7 +34,8 @@ import java.util.regex.Pattern;
public class BatteryStatsDetailedInfoParser extends AbstractSectionParser {
private static final String BATTERY_USAGE_SECTION_REGEX = "^\\s*Estimated power use \\(mAh\\):$";
- private static final String WAKELOCK_SECTION_REGEX = "^\\s*All kernel wake locks:$";
+ private static final String KERNEL_WAKELOCK_SECTION_REGEX = "^\\s*All kernel wake locks:$";
+ private static final String PARTIAL_WAKELOCK_SECTION_REGEX = "^\\s*All partial wake locks:$";
private static final String INTERRUPT_SECTION_REGEX = "^\\s*All wakeup reasons:$";
private static final String PROCESS_USAGE_SECTION_REGEX = "^\\s*0:$";
@@ -127,7 +128,8 @@ public class BatteryStatsDetailedInfoParser extends AbstractSectionParser {
protected void setup() {
setParser(mBatteryTimeParser);
addSectionParser(mBatteryUsageParser, BATTERY_USAGE_SECTION_REGEX);
- addSectionParser(mWakelockParser, WAKELOCK_SECTION_REGEX);
+ addSectionParser(mWakelockParser, KERNEL_WAKELOCK_SECTION_REGEX);
+ addSectionParser(mWakelockParser, PARTIAL_WAKELOCK_SECTION_REGEX);
addSectionParser(mInterruptParser, INTERRUPT_SECTION_REGEX);
addSectionParser(mProcessUsageParser, PROCESS_USAGE_SECTION_REGEX);
}
diff --git a/src/com/android/loganalysis/parser/WakelockParser.java b/src/com/android/loganalysis/parser/WakelockParser.java
index 91652f7..a7db455 100644
--- a/src/com/android/loganalysis/parser/WakelockParser.java
+++ b/src/com/android/loganalysis/parser/WakelockParser.java
@@ -28,9 +28,6 @@ import java.util.regex.Pattern;
*/
public class WakelockParser implements IParser {
- private static final Pattern PARTIAL_WAKE_LOCK_START_PAT = Pattern.compile(
- "^\\s*All partial wake locks:$");
-
private static final String WAKE_LOCK_PAT_SUFFIX =
"(?:(\\d+)d)?\\s?(?:(\\d+)h)?\\s?(?:(\\d+)m)?\\s?(?:(\\d+)s)?\\s?(?:(\\d+)ms)?"
+ "\\s?\\((\\d+) times\\) realtime";
@@ -57,21 +54,14 @@ public class WakelockParser implements IParser {
*/
@Override
public WakelockItem parse(List<String> lines) {
- boolean inPartialWakeLock = false;
Matcher m = null;
int wakelockCounter = 0;
for (String line : lines) {
if ("".equals(line.trim())) {
- if (inPartialWakeLock) {
- // Done with parsing wakelock sections
- break;
- } else {
- // Done with parsing kernel wakelocks and continue with
- // partial wakelock
- wakelockCounter = 0;
- continue;
- }
+ // Done with wakelock parsing
+ break;
}
+
m = KERNEL_WAKE_LOCK_PAT.matcher(line);
if (m.matches()) {
if (wakelockCounter < TOP_WAKELOCK_COUNT &&
@@ -81,11 +71,6 @@ public class WakelockParser implements IParser {
}
continue;
}
- m = PARTIAL_WAKE_LOCK_START_PAT.matcher(line);
- if (m.matches()) {
- inPartialWakeLock = true;
- continue;
- }
m = PARTIAL_WAKE_LOCK_PAT.matcher(line);
if (m.matches() && wakelockCounter < TOP_WAKELOCK_COUNT) {
parsePartialWakeLock(line, WakeLockCategory.PARTIAL_WAKELOCK);
diff --git a/tests/src/com/android/loganalysis/parser/BugreportParserTest.java b/tests/src/com/android/loganalysis/parser/BugreportParserTest.java
index ea7537f..b36e834 100644
--- a/tests/src/com/android/loganalysis/parser/BugreportParserTest.java
+++ b/tests/src/com/android/loganalysis/parser/BugreportParserTest.java
@@ -124,7 +124,7 @@ public class BugreportParserTest extends TestCase {
" +45s702ms (2) 001 80080000 volt=4187",
" +1m15s525ms (2) 001 80080000 temp=299 volt=4155",
"Statistics since last charged:",
- " Time on battery: 1h 5m 2s 4ms (9%) realtime, 1h 5m 2s 4ms (9%) uptime",
+ " Time on battery: 1h 5m 2s 4ms (9%) realtime, 1h 5m 2s 4ms (9%) uptime",
" Time on battery screen off: 1h 4m 5s 8ms (9%) realtime, 1h 4m 5s 8ms (9%) uptime",
" All kernel wake locks:",
" Kernel Wake lock PowerManagerService.WakeLocks: 5m 10s 6ms (2 times) realtime",
@@ -133,8 +133,9 @@ public class BugreportParserTest extends TestCase {
" All partial wake locks:",
" Wake lock 1001 ProxyController: 1h 4m 47s 565ms (4 times) realtime",
" Wake lock 1013 AudioMix: 1s 979ms (3 times) realtime",
+ "",
" All wakeup reasons:",
- " Wakeup reason 2:bcmsdh_sdmmc:2:qcom,smd:2:msmgio: 1m 5s 4ms (2 times) realtime",
+ " Wakeup reason 2:bcmsdh_sdmmc:2:qcom,smd:2:msmgio: 1m 5s 4ms (2 times) realtime",
" Wakeup reason 2:qcom,smd-rpm:2:fc4c.qcom,spmi: 7m 1s 914ms (7 times) realtime",
"");
diff --git a/tests/src/com/android/loganalysis/parser/WakelockParserTest.java b/tests/src/com/android/loganalysis/parser/WakelockParserTest.java
index bed831b..735362f 100644
--- a/tests/src/com/android/loganalysis/parser/WakelockParserTest.java
+++ b/tests/src/com/android/loganalysis/parser/WakelockParserTest.java
@@ -31,7 +31,7 @@ public class WakelockParserTest extends TestCase {
/**
* Test that normal input is parsed.
*/
- public void testWakelockParser() {
+ public void testKernelWakelockParser() {
List<String> inputBlock = Arrays.asList(
" All kernel wake locks:",
" Kernel Wake lock PowerManagerService.WakeLocks: 1h 3m 50s 5ms (8 times) realtime",
@@ -40,14 +40,8 @@ public class WakelockParserTest extends TestCase {
" Kernel Wake lock wlan_rx_wake: 3m 19s 887ms (225 times) realtime",
" Kernel Wake lock wlan_tx_wake: 2m 19s 887ms (225 times) realtime",
" Kernel Wake lock tx_wake: 1m 19s 887ms (225 times) realtime",
- " ",
- " All partial wake locks:",
- " Wake lock u0a7 NlpWakeLock: 8m 13s 203ms (1479 times) realtime",
- " Wake lock u0a7 NlpCollectorWakeLock: 6m 29s 18ms (238 times) realtime",
- " Wake lock u0a7 GCM_CONN_ALARM: 6m 8s 587ms (239 times) realtime",
- " Wake lock 1000 *alarm*: 5m 11s 316ms (1469 times) realtime",
- " Wake lock u10 xxx: 4m 11s 316ms (1469 times) realtime",
- " Wake lock u30 cst: 2m 11s 316ms (1469 times) realtime");
+ " "
+ );
WakelockItem wakelock = new WakelockParser().parse(inputBlock);
@@ -59,6 +53,20 @@ public class WakelockParserTest extends TestCase {
get(0).getHeldTime());
assertEquals(2399, wakelock.getWakeLocks(WakeLockCategory.KERNEL_WAKELOCK).
get(0).getLockedCount());
+ }
+
+ public void testPartialWakelockParser() {
+ List<String> inputBlock = Arrays.asList(
+ " All partial wake locks:",
+ " Wake lock u0a7 NlpWakeLock: 8m 13s 203ms (1479 times) realtime",
+ " Wake lock u0a7 NlpCollectorWakeLock: 6m 29s 18ms (238 times) realtime",
+ " Wake lock u0a7 GCM_CONN_ALARM: 6m 8s 587ms (239 times) realtime",
+ " Wake lock 1000 *alarm*: 5m 11s 316ms (1469 times) realtime",
+ " Wake lock u10 xxx: 4m 11s 316ms (1469 times) realtime",
+ " Wake lock u30 cst: 2m 11s 316ms (1469 times) realtime",
+ "");
+
+ WakelockItem wakelock = new WakelockParser().parse(inputBlock);
assertEquals(WakelockParser.TOP_WAKELOCK_COUNT,
wakelock.getWakeLocks(WakeLockCategory.PARTIAL_WAKELOCK).size());
@@ -71,5 +79,24 @@ public class WakelockParserTest extends TestCase {
assertEquals(1479, wakelock.getWakeLocks(WakeLockCategory.PARTIAL_WAKELOCK).
get(0).getLockedCount());
}
+
+ public void testInvalidInputWakelockParser() {
+ List<String> inputBlock = Arrays.asList(
+ " lock PowerManagerService.WakeLocks: 1h 3m 50s 5ms (8 times) realtime",
+ " lock event0-2656 : 3m 49s 268ms (2399 times) realtime",
+ " lock wlan_wd_wake: 3m 34s 639ms (1751 times) realtime",
+ " lock wlan_rx_wake: 3m 19s 887ms (225 times) realtime",
+ " wlan_tx_wake: 2m 19s 887ms (225 times) realtime",
+ " tx_wake: 1m 19s 887ms (225 times) realtime",
+ " "
+ );
+
+ WakelockItem wakelock = new WakelockParser().parse(inputBlock);
+
+ assertEquals(0,
+ wakelock.getWakeLocks(WakeLockCategory.KERNEL_WAKELOCK).size());
+ assertEquals(0,
+ wakelock.getWakeLocks(WakeLockCategory.PARTIAL_WAKELOCK).size());
+ }
}