summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/com/android/loganalysis/item/AppVersionItem.java53
-rw-r--r--src/com/android/loganalysis/item/DumpsysItem.java25
-rw-r--r--src/com/android/loganalysis/item/DumpsysPackageStatsItem.java40
-rw-r--r--src/com/android/loganalysis/parser/DumpsysPackageStatsParser.java75
-rw-r--r--src/com/android/loganalysis/parser/DumpsysParser.java5
5 files changed, 190 insertions, 8 deletions
diff --git a/src/com/android/loganalysis/item/AppVersionItem.java b/src/com/android/loganalysis/item/AppVersionItem.java
new file mode 100644
index 0000000..5c144f2
--- /dev/null
+++ b/src/com/android/loganalysis/item/AppVersionItem.java
@@ -0,0 +1,53 @@
+/*
+ * 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);
+ }
+}
diff --git a/src/com/android/loganalysis/item/DumpsysItem.java b/src/com/android/loganalysis/item/DumpsysItem.java
index 7f219bf..b66a82c 100644
--- a/src/com/android/loganalysis/item/DumpsysItem.java
+++ b/src/com/android/loganalysis/item/DumpsysItem.java
@@ -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);
}
diff --git a/src/com/android/loganalysis/item/DumpsysPackageStatsItem.java b/src/com/android/loganalysis/item/DumpsysPackageStatsItem.java
new file mode 100644
index 0000000..14c4073
--- /dev/null
+++ b/src/com/android/loganalysis/item/DumpsysPackageStatsItem.java
@@ -0,0 +1,40 @@
+/*
+ * 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;
+ }
+}
diff --git a/src/com/android/loganalysis/parser/DumpsysPackageStatsParser.java b/src/com/android/loganalysis/parser/DumpsysPackageStatsParser.java
new file mode 100644
index 0000000..d06cfd5
--- /dev/null
+++ b/src/com/android/loganalysis/parser/DumpsysPackageStatsParser.java
@@ -0,0 +1,75 @@
+/*
+ * 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;
+ }
+}
diff --git a/src/com/android/loganalysis/parser/DumpsysParser.java b/src/com/android/loganalysis/parser/DumpsysParser.java
index b74a86c..8c94e0b 100644
--- a/src/com/android/loganalysis/parser/DumpsysParser.java
+++ b/src/com/android/loganalysis/parser/DumpsysParser.java
@@ -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));
}