Snap for 9710098 from 1ed1e0c89b5956db27834f9339bd9149a53034d0 to mainline-tzdata5-release

Change-Id: Ibd258a1a537d2385d3160b89d59c2965b42365d5
diff --git a/Android.bp b/Android.bp
index 0e77526..6791bf4 100644
--- a/Android.bp
+++ b/Android.bp
@@ -26,4 +26,6 @@
     "guava",
     "json-prebuilt",
   ],
+  // b/267831518: Pin tradefed and dependencies to Java 11.
+  java_version: "11",
 }
diff --git a/javatests/com/android/loganalysis/parser/DmesgParserTest.java b/javatests/com/android/loganalysis/parser/DmesgParserTest.java
index cc79db7..a7705e3 100644
--- a/javatests/com/android/loganalysis/parser/DmesgParserTest.java
+++ b/javatests/com/android/loganalysis/parser/DmesgParserTest.java
@@ -220,6 +220,31 @@
         assertEquals("No service info should be available", 0, serviceInfoItems.size());
     }
 
+    public void testCompleteStageInfo_onKernel_5_15() {
+        DmesgParser dmesgParser = new DmesgParser();
+        String[] lines =
+                new String[] {
+                    "[    0.370107] [@2 init][....] init: Loading module /lib/modules/foo.ko "
+                            + "with args ''",
+                    "[    0.372497] [@2 init][....] init: Loaded kernel module /lib/modules/foo.ko",
+                    "[    0.372500] [@2 init][....] init: Loading module /lib/modules/bar.ko "
+                            + "with args ''",
+                    "[    1.115467] [@2 init][....] init: Loaded 198 kernel modules took 748 ms",
+                    "[    2.471163] [@2 init][....] init: Wait for property 'apexd.status=ready' "
+                            + "took 403ms",
+                    "[    3.786943] [@2 init][....] ueventd: Coldboot took 0.701291 seconds",
+                    "[    4.295667] [@2 init][....] init: Command 'mount_all --late' action=late-fs"
+                            + " /vendor/etc/init/hw/init.rc:347) took 250ms and succeeded",
+                    "[   41.665818] [@2 init][....] init: init first stage started!"
+                };
+        for (String line : lines) {
+            dmesgParser.parseStageInfo(line);
+        }
+        List<DmesgStageInfoItem> stageInfoItems = dmesgParser.getStageInfoItems();
+        assertEquals(4, stageInfoItems.size());
+        assertEquals(EXPECTED_STAGE_INFO_ITEMS, stageInfoItems);
+    }
+
     /**
      * Test init stages' start time logs
      */
diff --git a/src/com/android/loganalysis/parser/DmesgParser.java b/src/com/android/loganalysis/parser/DmesgParser.java
index f7aac4d..1b83ca4 100644
--- a/src/com/android/loganalysis/parser/DmesgParser.java
+++ b/src/com/android/loganalysis/parser/DmesgParser.java
@@ -49,12 +49,20 @@
     private static final String TOTAL_MODULE = "TOTAL_MODULE";
     private static final String MOUNT_ALL = "mount_all";
 
+    private static final String TIMESTAMP_PATTERN =
+            String.format("\\[\\s+(?<%s>[\\d.]+)]", TIMESTAMP);
+
+    // This is optionally present in dmesg output on some kernels
+    // Matches possibly repeated pairs of square brackets enclosing arbitrary text
+    // An example is [   10.258464] [@3 insmod][....] aml dvb init
+    private static final String CPU_INFO_PATTERN = "(\\[[^]]+])+";
+
     // Matches: [ 14.822691] init:
-    private static final String SERVICE_PREFIX = String.format("^\\[\\s+(?<%s>.*)\\] init:\\s+",
-            TIMESTAMP);
+    private static final String SERVICE_PREFIX =
+            String.format("^%s( %s)? init:\\s+", TIMESTAMP_PATTERN, CPU_INFO_PATTERN);
     // Matches: [    3.791635] ueventd:
-    private static final String UEVENTD_PREFIX = String.format("^\\[\\s+(?<%s>.*)\\] ueventd:\\s+",
-            TIMESTAMP);
+    private static final String UEVENTD_PREFIX =
+            String.format("^%s( %s)? ueventd:\\s+", TIMESTAMP_PATTERN, CPU_INFO_PATTERN);
 
     // Matches: starting service 'ueventd'...
     private static final String START_SERVICE_SUFFIX = String.format("starting service "