From d8928ba2a3cbf893332451066d02b19a91f6a585 Mon Sep 17 00:00:00 2001
From: Hector Tellez <htellez@google.com>
Date: Tue, 20 Sep 2016 17:59:55 -0700
Subject: [PATCH] Updates bugreport parser to handle newest version of
 bugreports.

fixes: 31397868

Change-Id: Ie5b73d3916f15893ef372d26dd4b47239f5c1fcc
---
 .../loganalysis/parser/WakelockParser.java    | 17 ++++++-------
 .../parser/WakelockParserTest.java            | 25 +++++++++++++++++++
 2 files changed, 33 insertions(+), 9 deletions(-)

diff --git a/src/com/android/loganalysis/parser/WakelockParser.java b/src/com/android/loganalysis/parser/WakelockParser.java
index a7db455..a6a36d5 100644
--- a/src/com/android/loganalysis/parser/WakelockParser.java
+++ b/src/com/android/loganalysis/parser/WakelockParser.java
@@ -30,7 +30,7 @@ public class WakelockParser implements IParser {
 
     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";
+            + "\\s?\\((\\d+) times\\)(?: max=\\d+)? realtime";
 
     /**
      * Match a valid line such as:
@@ -57,26 +57,25 @@ public class WakelockParser implements IParser {
         Matcher m = null;
         int wakelockCounter = 0;
         for (String line : lines) {
-            if ("".equals(line.trim())) {
+            if (wakelockCounter >= TOP_WAKELOCK_COUNT || "".equals(line.trim())) {
                 // Done with wakelock parsing
                 break;
             }
 
             m = KERNEL_WAKE_LOCK_PAT.matcher(line);
-            if (m.matches()) {
-                if (wakelockCounter < TOP_WAKELOCK_COUNT &&
-                        !line.contains("PowerManagerService.WakeLocks")) {
-                    parseKernelWakeLock(line, WakeLockCategory.KERNEL_WAKELOCK);
-                    wakelockCounter++;
-                }
+            if (m.matches() && !line.contains("PowerManagerService.WakeLocks")) {
+                parseKernelWakeLock(line, WakeLockCategory.KERNEL_WAKELOCK);
+                wakelockCounter++;
                 continue;
             }
+
             m = PARTIAL_WAKE_LOCK_PAT.matcher(line);
-            if (m.matches() && wakelockCounter < TOP_WAKELOCK_COUNT) {
+            if (m.matches()) {
                 parsePartialWakeLock(line, WakeLockCategory.PARTIAL_WAKELOCK);
                 wakelockCounter++;
             }
         }
+
         return mItem;
     }
 
diff --git a/tests/src/com/android/loganalysis/parser/WakelockParserTest.java b/tests/src/com/android/loganalysis/parser/WakelockParserTest.java
index 735362f..eff4ec8 100644
--- a/tests/src/com/android/loganalysis/parser/WakelockParserTest.java
+++ b/tests/src/com/android/loganalysis/parser/WakelockParserTest.java
@@ -56,6 +56,31 @@ public class WakelockParserTest extends TestCase {
     }
 
     public void testPartialWakelockParser() {
+        List<String> inputBlock = Arrays.asList(
+                " All partial wake locks:",
+                " Wake lock u0a7 NlpWakeLock: 8m 13s 203ms (1479 times) max=0 realtime",
+                " Wake lock u0a7 NlpCollectorWakeLock: 6m 29s 18ms (238 times) max=0 realtime",
+                " Wake lock u0a7 GCM_CONN_ALARM: 6m 8s 587ms (239 times) max=0 realtime",
+                " Wake lock 1000 *alarm*: 5m 11s 316ms (1469 times) max=0 realtime",
+                " Wake lock u10 xxx: 4m 11s 316ms (1469 times) max=0 realtime",
+                " Wake lock u30 cst: 2m 11s 316ms (1469 times) max=0 realtime",
+                "");
+
+        WakelockItem wakelock = new WakelockParser().parse(inputBlock);
+
+        assertEquals(WakelockParser.TOP_WAKELOCK_COUNT,
+                wakelock.getWakeLocks(WakeLockCategory.PARTIAL_WAKELOCK).size());
+        assertEquals("NlpWakeLock", wakelock.getWakeLocks(WakeLockCategory.PARTIAL_WAKELOCK).
+                get(0).getName());
+        assertEquals("u0a7", wakelock.getWakeLocks(WakeLockCategory.PARTIAL_WAKELOCK).
+                get(0).getProcessUID());
+        assertEquals(493203, wakelock.getWakeLocks(WakeLockCategory.PARTIAL_WAKELOCK).
+                get(0).getHeldTime());
+        assertEquals(1479, wakelock.getWakeLocks(WakeLockCategory.PARTIAL_WAKELOCK).
+                get(0).getLockedCount());
+    }
+
+    public void testPartialWakelockParserOnOldFormat() {
         List<String> inputBlock = Arrays.asList(
                 " All partial wake locks:",
                 " Wake lock u0a7 NlpWakeLock: 8m 13s 203ms (1479 times) realtime",
-- 
GitLab