Skip to content
Snippets Groups Projects
Commit 75a8a418 authored by Netta Peterbursky's avatar Netta Peterbursky
Browse files

Add app versions to Bugreport parser (for event history view in stability dashboard).

Bug: 38415015
Test: BugreportParserTest, DumpsysPackageStatsParserTest, DumpsysParserTest
Change-Id: Id6e5ccbd39188be0b6908df751b310cd0f642593
(cherry picked from commit 44e6c57b)
parent 6722a63f
No related branches found
No related tags found
No related merge requests found
/*
* Copyright (C) 2017 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.android.loganalysis.item;
import java.util.Arrays;
import java.util.HashSet;
import java.util.Set;
/** An {@link IItem} used to store an app's version code and name. */
public class AppVersionItem extends GenericItem {
/** Constants for JSON output */
public static final String VERSION_CODE = "VERSION_CODE";
public static final String VERSION_NAME = "VERSION_NAME";
private static final Set<String> ATTRIBUTES =
new HashSet<String>(Arrays.asList(VERSION_CODE, VERSION_NAME));
/**
* The constructor for {@link AppVersionItem}
*
* @param versionCode the version code
* @param versionName the version name
*/
public AppVersionItem(int versionCode, String versionName) {
super(ATTRIBUTES);
setAttribute(VERSION_CODE, versionCode);
setAttribute(VERSION_NAME, versionName);
}
public int getVersionCode() {
return (Integer) getAttribute(VERSION_CODE);
}
public String getVersionName() {
return (String) getAttribute(VERSION_NAME);
}
}
......@@ -27,12 +27,15 @@ public class DumpsysItem extends GenericItem {
/** Constant for JSON output */
private static final String BATTERY_STATS = "BATTERY_STATS";
/** Constant for JSON output */
private static final String PACKAGE_STATS = "PACKAGE_STATS";
/** Constant for JSON output */
private static final String PROC_STATS = "PROC_STATS";
/** Constant for JSON output */
private static final String WIFI_STATS = "WIFI_STATS";
private static final Set<String> ATTRIBUTES = new HashSet<String>(Arrays.asList(
BATTERY_STATS, PROC_STATS, WIFI_STATS));
private static final Set<String> ATTRIBUTES =
new HashSet<String>(
Arrays.asList(BATTERY_STATS, PACKAGE_STATS, PROC_STATS, WIFI_STATS));
/**
* The constructor for {@link DumpsysItem}.
......@@ -48,9 +51,12 @@ public class DumpsysItem extends GenericItem {
setAttribute(BATTERY_STATS, batteryStats);
}
/**
* Set the {@link DumpsysProcStatsItem} of the bugreport.
*/
/** Set the {@link DumpsysPackageStatsItem} of the bugreport. */
public void setPackageStats(DumpsysPackageStatsItem packageStats) {
setAttribute(PACKAGE_STATS, packageStats);
}
/** Set the {@link DumpsysProcStatsItem} of the bugreport. */
public void setProcStats(DumpsysProcStatsItem procStats) {
setAttribute(PROC_STATS, procStats);
}
......@@ -69,9 +75,12 @@ public class DumpsysItem extends GenericItem {
return (DumpsysBatteryStatsItem) getAttribute(BATTERY_STATS);
}
/**
* Get the {@link DumpsysProcStatsItem} of the bugreport.
*/
/** Get the {@link DumpsysPackageStatsItem} of the bugreport. */
public DumpsysPackageStatsItem getPackageStats() {
return (DumpsysPackageStatsItem) getAttribute(PACKAGE_STATS);
}
/** Get the {@link DumpsysProcStatsItem} of the bugreport. */
public DumpsysProcStatsItem getProcStats() {
return (DumpsysProcStatsItem) getAttribute(PROC_STATS);
}
......
/*
* Copyright (C) 2017 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.android.loganalysis.item;
import org.json.JSONException;
import org.json.JSONObject;
/** An {@link IItem} used to store apps and their version codes and names. */
public class DumpsysPackageStatsItem extends GenericMapItem<AppVersionItem> {
private static final long serialVersionUID = 1L;
/** Constant for JSON output */
public static final String APP_VERSIONS = "APP_VERSIONS";
/** {@inheritDoc} */
@Override
public JSONObject toJson() {
JSONObject object = new JSONObject();
try {
object.put(APP_VERSIONS, super.toJson());
} catch (JSONException e) {
// Ignore
}
return object;
}
}
/*
* Copyright (C) 2017 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.android.loganalysis.parser;
import com.android.loganalysis.item.AppVersionItem;
import com.android.loganalysis.item.DumpsysPackageStatsItem;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/** A {@link IParser} to parse package stats and create a mapping table of packages and versions */
public class DumpsysPackageStatsParser implements IParser {
/** Matches: Package [com.google.android.googlequicksearchbox] (607929e): */
private static final Pattern PACKAGE_NAME = Pattern.compile("^\\s*Package \\[(.*)\\].*");
/** Matches: versionCode=300734793 minSdk=10000 targetSdk=10000 */
private static final Pattern VERSION_CODE = Pattern.compile("^\\s*versionCode=(\\d+).*");
/** Matches: versionName=6.16.35.26.arm64 */
private static final Pattern VERSION_NAME = Pattern.compile("^\\s*versionName=(.*)$");
/**
* {@inheritDoc}
*
* @return The {@link DumpsysPackageStatsItem}.
*/
@Override
public DumpsysPackageStatsItem parse(List<String> lines) {
DumpsysPackageStatsItem item = new DumpsysPackageStatsItem();
String packageName = null;
String versionCode = null;
String versionName = null;
for (String line : lines) {
Matcher m = PACKAGE_NAME.matcher(line);
if (m.matches()) {
packageName = m.group(1);
versionCode = null;
versionName = null;
continue;
}
m = VERSION_CODE.matcher(line);
if (m.matches()) {
versionCode = m.group(1);
continue;
}
m = VERSION_NAME.matcher(line);
if (m.matches()) {
versionName = m.group(1).trim();
if (packageName != null && versionCode != null) {
item.put(
packageName,
new AppVersionItem(Integer.parseInt(versionCode), versionName));
}
packageName = null;
}
}
return item;
}
}
......@@ -18,6 +18,7 @@ package com.android.loganalysis.parser;
import com.android.loganalysis.item.DumpsysBatteryStatsItem;
import com.android.loganalysis.item.DumpsysItem;
import com.android.loganalysis.item.DumpsysPackageStatsItem;
import com.android.loganalysis.item.DumpsysProcStatsItem;
import com.android.loganalysis.item.DumpsysWifiStatsItem;
......@@ -29,11 +30,13 @@ import java.util.List;
public class DumpsysParser extends AbstractSectionParser {
private static final String BATTERY_STATS_SECTION_REGEX = "^DUMP OF SERVICE batterystats:$";
private static final String PACKAGE_SECTION_REGEX = "^DUMP OF SERVICE package:";
private static final String PROC_STATS_SECTION_REGEX = "^DUMP OF SERVICE procstats:";
private static final String WIFI_SECTION_REGEX = "^DUMP OF SERVICE wifi:";
private static final String NOOP_SECTION_REGEX = "DUMP OF SERVICE .*";
private DumpsysBatteryStatsParser mBatteryStatsParser = new DumpsysBatteryStatsParser();
private DumpsysPackageStatsParser mPackageStatsParser = new DumpsysPackageStatsParser();
private DumpsysProcStatsParser mProcStatsParser = new DumpsysProcStatsParser();
private DumpsysWifiStatsParser mWifiStatsParser = new DumpsysWifiStatsParser();
......@@ -63,6 +66,7 @@ public class DumpsysParser extends AbstractSectionParser {
*/
protected void setup() {
addSectionParser(mBatteryStatsParser, BATTERY_STATS_SECTION_REGEX);
addSectionParser(mPackageStatsParser, PACKAGE_SECTION_REGEX);
addSectionParser(mProcStatsParser, PROC_STATS_SECTION_REGEX);
addSectionParser(mWifiStatsParser, WIFI_SECTION_REGEX);
addSectionParser(new NoopParser(), NOOP_SECTION_REGEX);
......@@ -80,6 +84,7 @@ public class DumpsysParser extends AbstractSectionParser {
}
if (mDumpsys != null) {
mDumpsys.setBatteryInfo((DumpsysBatteryStatsItem) getSection(mBatteryStatsParser));
mDumpsys.setPackageStats((DumpsysPackageStatsItem) getSection(mPackageStatsParser));
mDumpsys.setProcStats((DumpsysProcStatsItem) getSection(mProcStatsParser));
mDumpsys.setWifiStats((DumpsysWifiStatsItem) getSection(mWifiStatsParser));
}
......
......@@ -38,120 +38,128 @@ public class BugreportParserTest extends TestCase {
* Test that a bugreport can be parsed.
*/
public void testParse() throws ParseException {
List<String> lines = Arrays.asList(
"========================================================",
"== dumpstate: 2012-04-25 20:45:10",
"========================================================",
"------ SECTION ------",
"",
"------ MEMORY INFO (/proc/meminfo) ------",
"MemTotal: 353332 kB",
"MemFree: 65420 kB",
"Buffers: 20800 kB",
"Cached: 86204 kB",
"SwapCached: 0 kB",
"",
"------ CPU INFO (top -n 1 -d 1 -m 30 -t) ------",
"",
"User 3%, System 3%, IOW 0%, IRQ 0%",
"User 33 + Nice 0 + Sys 32 + Idle 929 + IOW 0 + IRQ 0 + SIRQ 0 = 994",
"",
"------ PROCRANK (procrank) ------",
" PID Vss Rss Pss Uss cmdline",
" 178 87136K 81684K 52829K 50012K system_server",
" 1313 78128K 77996K 48603K 45812K com.google.android.apps.maps",
" 3247 61652K 61492K 33122K 30972K com.android.browser",
" ------ ------ ------",
" 203624K 163604K TOTAL",
"RAM: 731448K total, 415804K free, 9016K buffers, 108548K cached",
"[procrank: 1.6s elapsed]",
"",
"------ KERNEL LOG (dmesg) ------",
"<6>[ 0.000000] Initializing cgroup subsys cpu",
"<3>[ 1.000000] benign message",
"",
"",
"------ SYSTEM LOG (logcat -v threadtime -d *:v) ------",
"04-25 09:55:47.799 3064 3082 E AndroidRuntime: java.lang.Exception",
"04-25 09:55:47.799 3064 3082 E AndroidRuntime: \tat class.method1(Class.java:1)",
"04-25 09:55:47.799 3064 3082 E AndroidRuntime: \tat class.method2(Class.java:2)",
"04-25 09:55:47.799 3064 3082 E AndroidRuntime: \tat class.method3(Class.java:3)",
"04-25 17:17:08.445 312 366 E ActivityManager: ANR (application not responding) in process: com.android.package",
"04-25 17:17:08.445 312 366 E ActivityManager: Reason: keyDispatchingTimedOut",
"04-25 17:17:08.445 312 366 E ActivityManager: Load: 0.71 / 0.83 / 0.51",
"04-25 17:17:08.445 312 366 E ActivityManager: 33% TOTAL: 21% user + 11% kernel + 0.3% iowait",
"04-25 18:33:27.273 115 115 I DEBUG : *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***",
"04-25 18:33:27.273 115 115 I DEBUG : Build fingerprint: 'product:build:target'",
"04-25 18:33:27.273 115 115 I DEBUG : pid: 3112, tid: 3112 >>> com.google.android.browser <<<",
"04-25 18:33:27.273 115 115 I DEBUG : signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr 00000000",
"",
"------ SYSTEM PROPERTIES ------",
"[dalvik.vm.dexopt-flags]: [m=y]",
"[dalvik.vm.heapgrowthlimit]: [48m]",
"[dalvik.vm.heapsize]: [256m]",
"[gsm.version.ril-impl]: [android moto-ril-multimode 1.0]",
"",
"------ LAST KMSG (/proc/last_kmsg) ------",
"[ 0.000000] Initializing cgroup subsys cpu",
"[ 16.203491] benign message",
"",
"------ SECTION ------",
"",
"------ VM TRACES AT LAST ANR (/data/anr/traces.txt: 2012-04-25 17:17:08) ------",
"",
"",
"----- pid 2887 at 2012-04-25 17:17:08 -----",
"Cmd line: com.android.package",
"",
"DALVIK THREADS:",
"(mutexes: tll=0 tsl=0 tscl=0 ghl=0)",
"",
"\"main\" prio=5 tid=1 SUSPENDED",
" | group=\"main\" sCount=1 dsCount=0 obj=0x00000001 self=0x00000001",
" | sysTid=2887 nice=0 sched=0/0 cgrp=foreground handle=0000000001",
" | schedstat=( 0 0 0 ) utm=5954 stm=1017 core=0",
" at class.method1(Class.java:1)",
" at class.method2(Class.java:2)",
" at class.method2(Class.java:2)",
"",
"----- end 2887 -----",
"",
"------ SECTION ------",
"",
"------ DUMPSYS (dumpsys) ------",
"DUMP OF SERVICE batterystats:",
"Battery History (0% used, 1636 used of 256KB, 15 strings using 794):",
" 0 (15) RESET:TIME: 1970-01-10-06-23-28",
" +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 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",
" Kernel Wake lock msm_serial_hs_rx: 2m 13s 612ms (258 times) realtime",
"",
" 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:qcom,smd-rpm:2:fc4c.qcom,spmi: 7m 1s 914ms (7 times) realtime",
"",
"========================================================",
"== Running Application Services",
"========================================================",
"------ APP SERVICES (dumpsys activity service all) ------",
"SERVICE com.google.android.gms/"
+ "com.google.android.location.internal.GoogleLocationManagerService f4c9d pid=14",
" Location Request History By Package:",
"Interval effective/min/max 1/0/0[s] Duration: 140[minutes] ["
+ "com.google.android.gms, PRIORITY_NO_POWER, UserLocationProducer] "
+ "Num requests: 2 Active: true",
"Interval effective/min/max 284/285/3600[s] Duration: 140[minutes] "
+ "[com.google.android.googlequicksearchbox, PRIORITY_BALANCED_POWER_ACCURACY] "
+ "Num requests: 5 Active: true");
List<String> lines =
Arrays.asList(
"========================================================",
"== dumpstate: 2012-04-25 20:45:10",
"========================================================",
"------ SECTION ------",
"",
"------ MEMORY INFO (/proc/meminfo) ------",
"MemTotal: 353332 kB",
"MemFree: 65420 kB",
"Buffers: 20800 kB",
"Cached: 86204 kB",
"SwapCached: 0 kB",
"",
"------ CPU INFO (top -n 1 -d 1 -m 30 -t) ------",
"",
"User 3%, System 3%, IOW 0%, IRQ 0%",
"User 33 + Nice 0 + Sys 32 + Idle 929 + IOW 0 + IRQ 0 + SIRQ 0 = 994",
"",
"------ PROCRANK (procrank) ------",
" PID Vss Rss Pss Uss cmdline",
" 178 87136K 81684K 52829K 50012K system_server",
" 1313 78128K 77996K 48603K 45812K com.google.android.apps.maps",
" 3247 61652K 61492K 33122K 30972K com.android.browser",
" ------ ------ ------",
" 203624K 163604K TOTAL",
"RAM: 731448K total, 415804K free, 9016K buffers, 108548K cached",
"[procrank: 1.6s elapsed]",
"",
"------ KERNEL LOG (dmesg) ------",
"<6>[ 0.000000] Initializing cgroup subsys cpu",
"<3>[ 1.000000] benign message",
"",
"",
"------ SYSTEM LOG (logcat -v threadtime -d *:v) ------",
"04-25 09:55:47.799 3064 3082 E AndroidRuntime: java.lang.Exception",
"04-25 09:55:47.799 3064 3082 E AndroidRuntime: \tat class.method1(Class.java:1)",
"04-25 09:55:47.799 3064 3082 E AndroidRuntime: \tat class.method2(Class.java:2)",
"04-25 09:55:47.799 3064 3082 E AndroidRuntime: \tat class.method3(Class.java:3)",
"04-25 17:17:08.445 312 366 E ActivityManager: ANR (application not responding) in process: com.android.package",
"04-25 17:17:08.445 312 366 E ActivityManager: Reason: keyDispatchingTimedOut",
"04-25 17:17:08.445 312 366 E ActivityManager: Load: 0.71 / 0.83 / 0.51",
"04-25 17:17:08.445 312 366 E ActivityManager: 33% TOTAL: 21% user + 11% kernel + 0.3% iowait",
"04-25 18:33:27.273 115 115 I DEBUG : *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***",
"04-25 18:33:27.273 115 115 I DEBUG : Build fingerprint: 'product:build:target'",
"04-25 18:33:27.273 115 115 I DEBUG : pid: 3112, tid: 3112 >>> com.google.android.browser <<<",
"04-25 18:33:27.273 115 115 I DEBUG : signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr 00000000",
"",
"------ SYSTEM PROPERTIES ------",
"[dalvik.vm.dexopt-flags]: [m=y]",
"[dalvik.vm.heapgrowthlimit]: [48m]",
"[dalvik.vm.heapsize]: [256m]",
"[gsm.version.ril-impl]: [android moto-ril-multimode 1.0]",
"",
"------ LAST KMSG (/proc/last_kmsg) ------",
"[ 0.000000] Initializing cgroup subsys cpu",
"[ 16.203491] benign message",
"",
"------ SECTION ------",
"",
"------ VM TRACES AT LAST ANR (/data/anr/traces.txt: 2012-04-25 17:17:08) ------",
"",
"",
"----- pid 2887 at 2012-04-25 17:17:08 -----",
"Cmd line: com.android.package",
"",
"DALVIK THREADS:",
"(mutexes: tll=0 tsl=0 tscl=0 ghl=0)",
"",
"\"main\" prio=5 tid=1 SUSPENDED",
" | group=\"main\" sCount=1 dsCount=0 obj=0x00000001 self=0x00000001",
" | sysTid=2887 nice=0 sched=0/0 cgrp=foreground handle=0000000001",
" | schedstat=( 0 0 0 ) utm=5954 stm=1017 core=0",
" at class.method1(Class.java:1)",
" at class.method2(Class.java:2)",
" at class.method2(Class.java:2)",
"",
"----- end 2887 -----",
"",
"------ SECTION ------",
"",
"------ DUMPSYS (dumpsys) ------",
"DUMP OF SERVICE batterystats:",
"Battery History (0% used, 1636 used of 256KB, 15 strings using 794):",
" 0 (15) RESET:TIME: 1970-01-10-06-23-28",
" +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 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",
" Kernel Wake lock msm_serial_hs_rx: 2m 13s 612ms (258 times) realtime",
"",
" 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:qcom,smd-rpm:2:fc4c.qcom,spmi: 7m 1s 914ms (7 times) realtime",
"",
"DUMP OF SERVICE package:",
"Package [com.google.android.calculator] (e075c9d):",
" userId=10071",
" secondaryCpuAbi=null",
" versionCode=73000302 minSdk=10000 targetSdk=10000",
" versionName=7.3 (3821978)",
" splits=[base]",
"========================================================",
"== Running Application Services",
"========================================================",
"------ APP SERVICES (dumpsys activity service all) ------",
"SERVICE com.google.android.gms/"
+ "com.google.android.location.internal.GoogleLocationManagerService f4c9d pid=14",
" Location Request History By Package:",
"Interval effective/min/max 1/0/0[s] Duration: 140[minutes] ["
+ "com.google.android.gms, PRIORITY_NO_POWER, UserLocationProducer] "
+ "Num requests: 2 Active: true",
"Interval effective/min/max 284/285/3600[s] Duration: 140[minutes] "
+ "[com.google.android.googlequicksearchbox, PRIORITY_BALANCED_POWER_ACCURACY] "
+ "Num requests: 5 Active: true");
BugreportItem bugreport = new BugreportParser().parse(lines);
assertNotNull(bugreport);
......@@ -184,6 +192,7 @@ public class BugreportParserTest extends TestCase {
assertNotNull(bugreport.getDumpsys());
assertNotNull(bugreport.getDumpsys().getBatteryStats());
assertNotNull(bugreport.getDumpsys().getPackageStats());
assertNotNull(bugreport.getActivityService());
assertNotNull(bugreport.getActivityService().getLocationDumps().getLocationClients());
......@@ -546,48 +555,57 @@ public class BugreportParserTest extends TestCase {
* Test that section headers are correctly parsed.
*/
public void testSectionHeader() {
List<String> lines = Arrays.asList(
"========================================================",
"== dumpstate: 2012-04-25 20:45:10",
"========================================================",
"------ DUMPSYS (dumpsys) ------",
"DUMP OF SERVICE SurfaceFlinger:",
"--DrmDisplayCompositor[0]: num_frames=1456 num_ms=475440 fps=3.06243",
"---- DrmDisplayCompositor Layers: num=3",
"------ DrmDisplayCompositor Layer: plane=17 crtc=20 crtc[x/y/w/h]=0/0/2560/1800",
"------ DrmDisplayCompositor Layer: plane=21 disabled",
"------ DrmDisplayCompositor Layer: plane=22 disabled",
"DUMP OF SERVICE batterystats:",
"Battery History (0% used, 1636 used of 256KB, 15 strings using 794):",
" 0 (15) RESET:TIME: 1970-01-10-06-23-28",
" +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 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",
" Kernel Wake lock msm_serial_hs_rx: 2m 13s 612ms (258 times) realtime",
"",
" 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:qcom,smd-rpm:2:fc4c.qcom,spmi: 7m 1s 914ms (7 times) realtime",
"DUMP OF SERVICE procstats:",
"COMMITTED STATS FROM 2015-09-30-07-44-54:",
" * system / 1000 / v23:",
" TOTAL: 100% (118MB-118MB-118MB/71MB-71MB-71MB over 1)",
" Persistent: 100% (118MB-118MB-118MB/71MB-71MB-71MB over 1)",
" * com.android.phone / 1001 / v23:",
" TOTAL: 6.7%",
" Persistent: 6.7%",
"");
List<String> lines =
Arrays.asList(
"========================================================",
"== dumpstate: 2012-04-25 20:45:10",
"========================================================",
"------ DUMPSYS (dumpsys) ------",
"DUMP OF SERVICE SurfaceFlinger:",
"--DrmDisplayCompositor[0]: num_frames=1456 num_ms=475440 fps=3.06243",
"---- DrmDisplayCompositor Layers: num=3",
"------ DrmDisplayCompositor Layer: plane=17 crtc=20 crtc[x/y/w/h]=0/0/2560/1800",
"------ DrmDisplayCompositor Layer: plane=21 disabled",
"------ DrmDisplayCompositor Layer: plane=22 disabled",
"DUMP OF SERVICE batterystats:",
"Battery History (0% used, 1636 used of 256KB, 15 strings using 794):",
" 0 (15) RESET:TIME: 1970-01-10-06-23-28",
" +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 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",
" Kernel Wake lock msm_serial_hs_rx: 2m 13s 612ms (258 times) realtime",
"",
" 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:qcom,smd-rpm:2:fc4c.qcom,spmi: 7m 1s 914ms (7 times) realtime",
"DUMP OF SERVICE package:",
"Package [com.google.android.calculator] (e075c9d):",
" use rId=10071",
" secondaryCpuAbi=null",
" versionCode=73000302 minSdk=10000 targetSdk=10000",
" versionName=7.3 (3821978)",
" splits=[base]",
"DUMP OF SERVICE procstats:",
"COMMITTED STATS FROM 2015-09-30-07-44-54:",
" * system / 1000 / v23:",
" TOTAL: 100% (118MB-118MB-118MB/71MB-71MB-71MB over 1)",
" Persistent: 100% (118MB-118MB-118MB/71MB-71MB-71MB over 1)",
" * com.android.phone / 1001 / v23:",
" TOTAL: 6.7%",
" Persistent: 6.7%",
"");
BugreportItem bugreport = new BugreportParser().parse(lines);
assertNotNull(bugreport.getDumpsys());
assertNotNull(bugreport.getDumpsys().getBatteryStats());
assertNotNull(bugreport.getDumpsys().getPackageStats());
assertNotNull(bugreport.getDumpsys().getProcStats());
}
......@@ -673,4 +691,3 @@ public class BugreportParserTest extends TestCase {
return formatter.parse(timeStr);
}
}
/*
* Copyright (C) 2017 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.android.loganalysis.parser;
import com.android.loganalysis.item.DumpsysPackageStatsItem;
import com.android.loganalysis.item.AppVersionItem;
import junit.framework.TestCase;
import java.util.Arrays;
import java.util.List;
/** Unit tests for {@link DumpsysPackageStatsParser} */
public class DumpsysPackageStatsParserTest extends TestCase {
/** Test that normal input is parsed. */
public void testDumpsysPackageStatsParser() {
List<String> inputBlock =
Arrays.asList(
"DUMP OF SERVICE package:",
"Package [com.google.android.calculator] (e075c9d):",
" userId=10071",
" secondaryCpuAbi=null",
" versionCode=73000302 minSdk=10000 targetSdk=10000",
" versionName=7.3 (3821978)",
" splits=[base]",
" Package [com.google.android.googlequicksearchbox] (607929e):",
" userId=10037",
" pkg=Package{af43294 com.google.android.googlequicksearchbox}",
" versionCode=300734793 minSdk=10000 targetSdk=10000",
" versionName=6.16.35.26.arm64",
" apkSigningVersion=2");
final DumpsysPackageStatsItem packagestats =
new DumpsysPackageStatsParser().parse(inputBlock);
assertEquals(2, packagestats.size());
assertNotNull(packagestats.get("com.google.android.calculator"));
final AppVersionItem calculator = packagestats.get("com.google.android.calculator");
assertEquals(73000302, calculator.getVersionCode());
assertEquals("7.3 (3821978)", calculator.getVersionName());
assertNotNull(packagestats.get("com.google.android.googlequicksearchbox"));
final AppVersionItem googlequicksearchbox =
packagestats.get("com.google.android.googlequicksearchbox");
assertEquals(300734793, googlequicksearchbox.getVersionCode());
assertEquals("6.16.35.26.arm64", googlequicksearchbox.getVersionName());
}
}
......@@ -31,99 +31,113 @@ public class DumpsysParserTest extends TestCase {
* Test that normal input is parsed.
*/
public void testDumpsysParser() {
List<String> inputBlock = Arrays.asList(
"DUMP OF SERVICE batterystats:",
"Battery History (37% used, 95KB used of 256KB, 166 strings using 15KB):",
" 0 (9) RESET:TIME: 2014-12-09-11-33-29",
" +1s067ms (1) 100 c0500020 -wifi_full_lock -wifi_scan",
" +3s297ms (2) 100 80400020 -wake_lock -screen",
" +30m02s075ms (1) 100 c0500020 wifi_signal_strength=4 wifi_suppl=completed",
" +30m03s012ms (2) 099 c0500020 temp=306 volt=4217",
" +33m48s967ms (1) 099 f8400020 +wifi_scan",
" +33m49s335ms (2) 098 f0400020 temp=324 -wifi_scan",
"Statistics since last charge:",
" Time on battery: 2h 21m 5s 622ms (12.0%) realtime, 7m 54s 146ms (0.7%) uptime",
" Time on battery screen off: 2h 5m 55s 3ms (1%) realtime, 7m 4s 5ms (7%) uptime",
" Total run time: 19h 38m 43s 650ms realtime, 17h 25m 32s 175ms uptime",
" All kernel wake locks:",
" Kernel Wake lock PowerManagerService.WakeLocks: 1h 3m 50s 5ms (8 times) realtime",
" Kernel Wake lock event0-2656 : 3m 49s 268ms (2399 times) realtime",
" Kernel Wake lock wlan_wd_wake: 3m 34s 639ms (1751 times) realtime",
" 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",
" ",
" All wakeup reasons:",
" Wakeup reason 200:qcom,smd-rpm:222:fc4: 11m 49s 332ms (0 times) realtime",
" Wakeup reason 200:qcom,smd-rpm: 48s 45ms (0 times) realtime",
" Wakeup reason 2:qcom,smd-rpm:2:f0.qm,mm:22:fc4mi: 3s 417ms (0 times) realtime",
" Wakeup reason 188:qcom,smd-adsp:200:qcom,smd-rpm: 1s 656ms (0 times) realtime",
" Wakeup reason 58:qcom,smsm-modem:2:qcom,smd-rpm: 6m 16s 1ms (5 times) realtime",
" Wakeup reason 57:qcom,smd-modem:200:qcom,smd-rpm: 40s 995ms (0 times) realtime",
" Wakeup reason unknown: 8s 455ms (0 times) realtime",
" Wakeup reason 9:bcmsdh_sdmmc:2:qcomd-rpm:240:mso: 8m 5s 9ms (0 times) realtime",
" ",
" 0:",
" User activity: 2 other",
" Wake lock SCREEN_FROZEN realtime",
" Sensor 0: 9s 908ms realtime (1 times)",
" Sensor 1: 9s 997ms realtime (1 times)",
" Foreground for: 2h 21m 5s 622ms",
" Apk android:",
" 24 wakeup alarms",
" u0a9:",
" Mobile network: 8.1KB received, 1.6KB sent (packets 291 received, 342 sent)",
" Mobile radio active: 3m 43s 890ms (34.2%) 39x @ 354 mspp",
" Sensor 2: 12m 13s 15ms realtime (5 times)",
" Sensor 32: (not used)",
" Sensor 35: (not used)",
"DUMP OF SERVICE procstats:",
"COMMITTED STATS FROM 2015-03-20-02-01-02 (checked in):",
" * com.android.systemui / u0a22 / v22:",
" TOTAL: 100% (159MB-160MB-161MB/153MB-153MB-154MB over 13)",
" Persistent: 100% (159MB-160MB-161MB/153MB-153MB-154MB over 13)",
" * com.google.process.gapps / u0a9 / v22:",
" TOTAL: 100% (22MB-24MB-25MB/18MB-19MB-20MB over 13)",
" Imp Fg: 100% (22MB-24MB-25MB/18MB-19MB-20MB over 13)",
"DUMP OF SERVICE wifi:",
"Wi-Fi is enabled",
"rec[0]: time=10-09 00:25:16.737 processed=DefaultState org=DeviceActiveState "
+ "dest=<null> what=155654(0x26006)",
"mScreenOff true",
" rec[0]: time=10-08 16:49:55.034 processed=WatchdogEnabledState org=OnlineState "
+ "dest=OnlineWatchState what=135170(0x21002)",
"rec[30]: time=10-08 13:06:50.379 processed=DriverStartedState org=ConnectedState "
+ "dest=<null> what=131143(0x20047) (1)CMD_START_SCAN rt=4720806/7884852 10013 51 "
+ "ic=0 proc(ms):14 onGoing full started:1444334810368,11 cnt=24 rssi=-127 f=-1 "
+ "sc=0 link=-1 tx=1.5, 1.7, 0.0 rx=8.4 fiv=20000 [on:3266 tx:65 rx:556 "
+ "period:1268] from screen [on:266962 period:266959]",
"rec[357]: time=10-08 13:10:13.199 processed=DriverStartedState org=ConnectedState "
+ "dest=<null> what=131143(0x20047) (-2)CMD_START_SCAN rt=4923625/8087671 10013 "
+ "175 ic=0 proc(ms):2 onGoing full started:1444335011199,1999 cnt=24 rssi=-127 "
+ "f=-1 sc=0 link=-1 tx=8.4, 1.7, 0.0 rx=6.7 fiv=20000 [on:0 tx:0 rx:0 period:990]"
+ "from screen [on:467747 period:469779]",
"WifiConfigStore - Log Begin ----",
"10-08 11:09:14.653 - Event [IFNAME=wlan0 CTRL-EVENT-SCAN-STARTED ]",
"10-08 13:06:29.489 - Event [IFNAME=wlan0 CTRL-EVENT-DISCONNECTED "
+ "bssid=9c:1c:12:c3:d0:72 reason=0]",
"10-08 13:06:22.280 - Event [IFNAME=wlan0 CTRL-EVENT-SCAN-STARTED ]",
"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");
List<String> inputBlock =
Arrays.asList(
"DUMP OF SERVICE batterystats:",
"Battery History (37% used, 95KB used of 256KB, 166 strings using 15KB):",
" 0 (9) RESET:TIME: 2014-12-09-11-33-29",
" +1s067ms (1) 100 c0500020 -wifi_full_lock -wifi_scan",
" +3s297ms (2) 100 80400020 -wake_lock -screen",
" +30m02s075ms (1) 100 c0500020 wifi_signal_strength=4 wifi_suppl=completed",
" +30m03s012ms (2) 099 c0500020 temp=306 volt=4217",
" +33m48s967ms (1) 099 f8400020 +wifi_scan",
" +33m49s335ms (2) 098 f0400020 temp=324 -wifi_scan",
"Statistics since last charge:",
" Time on battery: 2h 21m 5s 622ms (12.0%) realtime, 7m 54s 146ms (0.7%) uptime",
" Time on battery screen off: 2h 5m 55s 3ms (1%) realtime, 7m 4s 5ms (7%) uptime",
" Total run time: 19h 38m 43s 650ms realtime, 17h 25m 32s 175ms uptime",
" All kernel wake locks:",
" Kernel Wake lock PowerManagerService.WakeLocks: 1h 3m 50s 5ms (8 times) realtime",
" Kernel Wake lock event0-2656 : 3m 49s 268ms (2399 times) realtime",
" Kernel Wake lock wlan_wd_wake: 3m 34s 639ms (1751 times) realtime",
" 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",
" ",
" All wakeup reasons:",
" Wakeup reason 200:qcom,smd-rpm:222:fc4: 11m 49s 332ms (0 times) realtime",
" Wakeup reason 200:qcom,smd-rpm: 48s 45ms (0 times) realtime",
" Wakeup reason 2:qcom,smd-rpm:2:f0.qm,mm:22:fc4mi: 3s 417ms (0 times) realtime",
" Wakeup reason 188:qcom,smd-adsp:200:qcom,smd-rpm: 1s 656ms (0 times) realtime",
" Wakeup reason 58:qcom,smsm-modem:2:qcom,smd-rpm: 6m 16s 1ms (5 times) realtime",
" Wakeup reason 57:qcom,smd-modem:200:qcom,smd-rpm: 40s 995ms (0 times) realtime",
" Wakeup reason unknown: 8s 455ms (0 times) realtime",
" Wakeup reason 9:bcmsdh_sdmmc:2:qcomd-rpm:240:mso: 8m 5s 9ms (0 times) realtime",
" ",
" 0:",
" User activity: 2 other",
" Wake lock SCREEN_FROZEN realtime",
" Sensor 0: 9s 908ms realtime (1 times)",
" Sensor 1: 9s 997ms realtime (1 times)",
" Foreground for: 2h 21m 5s 622ms",
" Apk android:",
" 24 wakeup alarms",
" u0a9:",
" Mobile network: 8.1KB received, 1.6KB sent (packets 291 received, 342 sent)",
" Mobile radio active: 3m 43s 890ms (34.2%) 39x @ 354 mspp",
" Sensor 2: 12m 13s 15ms realtime (5 times)",
" Sensor 32: (not used)",
" Sensor 35: (not used)",
"DUMP OF SERVICE package:",
"Package [com.google.android.calculator] (e075c9d):",
" userId=10071",
" secondaryCpuAbi=null",
" versionCode=73000302 minSdk=10000 targetSdk=10000",
" versionName=7.3 (3821978)",
" splits=[base]",
"Package [com.google.android.googlequicksearchbox] (607929e):",
" userId=10037",
" pkg=Package{af43294 com.google.android.googlequicksearchbox}",
" versionCode=300734793 minSdk=10000 targetSdk=10000",
" versionName=6.16.35.26.arm64",
" apkSigningVersion=2",
"DUMP OF SERVICE procstats:",
"COMMITTED STATS FROM 2015-03-20-02-01-02 (checked in):",
" * com.android.systemui / u0a22 / v22:",
" TOTAL: 100% (159MB-160MB-161MB/153MB-153MB-154MB over 13)",
" Persistent: 100% (159MB-160MB-161MB/153MB-153MB-154MB over 13)",
" * com.google.process.gapps / u0a9 / v22:",
" TOTAL: 100% (22MB-24MB-25MB/18MB-19MB-20MB over 13)",
" Imp Fg: 100% (22MB-24MB-25MB/18MB-19MB-20MB over 13)",
"DUMP OF SERVICE wifi:",
"Wi-Fi is enabled",
"rec[0]: time=10-09 00:25:16.737 processed=DefaultState org=DeviceActiveState "
+ "dest=<null> what=155654(0x26006)",
"mScreenOff true",
" rec[0]: time=10-08 16:49:55.034 processed=WatchdogEnabledState org=OnlineState "
+ "dest=OnlineWatchState what=135170(0x21002)",
"rec[30]: time=10-08 13:06:50.379 processed=DriverStartedState org=ConnectedState "
+ "dest=<null> what=131143(0x20047) (1)CMD_START_SCAN rt=4720806/7884852 10013 51 "
+ "ic=0 proc(ms):14 onGoing full started:1444334810368,11 cnt=24 rssi=-127 f=-1 "
+ "sc=0 link=-1 tx=1.5, 1.7, 0.0 rx=8.4 fiv=20000 [on:3266 tx:65 rx:556 "
+ "period:1268] from screen [on:266962 period:266959]",
"rec[357]: time=10-08 13:10:13.199 processed=DriverStartedState org=ConnectedState "
+ "dest=<null> what=131143(0x20047) (-2)CMD_START_SCAN rt=4923625/8087671 10013 "
+ "175 ic=0 proc(ms):2 onGoing full started:1444335011199,1999 cnt=24 rssi=-127 "
+ "f=-1 sc=0 link=-1 tx=8.4, 1.7, 0.0 rx=6.7 fiv=20000 [on:0 tx:0 rx:0 period:990]"
+ "from screen [on:467747 period:469779]",
"WifiConfigStore - Log Begin ----",
"10-08 11:09:14.653 - Event [IFNAME=wlan0 CTRL-EVENT-SCAN-STARTED ]",
"10-08 13:06:29.489 - Event [IFNAME=wlan0 CTRL-EVENT-DISCONNECTED "
+ "bssid=9c:1c:12:c3:d0:72 reason=0]",
"10-08 13:06:22.280 - Event [IFNAME=wlan0 CTRL-EVENT-SCAN-STARTED ]",
"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");
DumpsysItem dumpsys = new DumpsysParser().parse(inputBlock);
assertNotNull(dumpsys.getBatteryStats());
assertNotNull(dumpsys.getPackageStats());
assertNotNull(dumpsys.getProcStats());
assertNotNull(dumpsys.getWifiStats());
}
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment