summaryrefslogtreecommitdiff
path: root/src/com/android/loganalysis/parser/TracesParser.java
diff options
context:
space:
mode:
authorEric Rowe <erowe@google.com>2013-02-27 18:47:16 -0800
committerEric Rowe <erowe@google.com>2013-02-28 11:06:30 -0800
commitb806548ef043fc36761ba9bf0167371e432bf0af (patch)
tree7bb98b2b72b423764a54401b03d34c02d6832373 /src/com/android/loganalysis/parser/TracesParser.java
parent3e3a6ce5de8fd927b2a025da105d4a917d0c465e (diff)
downloadloganalysis-b806548ef043fc36761ba9bf0167371e432bf0af.tar.gz
Move brillopad in tradefed to new project.
Code has been unmodified except for update packages and references, and removing CLog statements (to remove the dependency on ddmlib). Added .classpath and .project files for eclipse, and Android.mk files for the make system. Change-Id: I64d6764c08332b1c420a8f563a026aaa547e45bf
Diffstat (limited to 'src/com/android/loganalysis/parser/TracesParser.java')
-rw-r--r--src/com/android/loganalysis/parser/TracesParser.java90
1 files changed, 90 insertions, 0 deletions
diff --git a/src/com/android/loganalysis/parser/TracesParser.java b/src/com/android/loganalysis/parser/TracesParser.java
new file mode 100644
index 0000000..4d0f581
--- /dev/null
+++ b/src/com/android/loganalysis/parser/TracesParser.java
@@ -0,0 +1,90 @@
+/*
+ * Copyright (C) 2011 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.TracesItem;
+
+import java.util.List;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+/**
+ * A {@link IParser} to parse Android traces files.
+ * <p>
+ * For now, this only extracts the main stack trace from the first process. It is used to get a
+ * stack from {@code /data/anr/traces.txt} which can be used to give some context about the ANR. If
+ * there is a need, this parser can be expanded to parse all stacks from all processes.
+ */
+public class TracesParser implements IParser {
+
+ /**
+ * Matches: ----- pid PID at YYYY-MM-DD hh:mm:ss -----
+ */
+ private static final Pattern PID = Pattern.compile(
+ "^----- pid (\\d+) at \\d{4}-\\d{2}-\\d{2} \\d{2}:\\d{2}:\\d{2} -----$");
+
+ /**
+ * Matches: Cmd line: APP
+ */
+ private static final Pattern APP = Pattern.compile("^Cmd line: (\\S+)$");
+
+ /**
+ * Matches: "main" prio=5 tid=1 STATE
+ */
+ private static final Pattern STACK = Pattern.compile("^\"main\" .*$");
+
+ /**
+ * {@inheritDoc}
+ *
+ * @return The {@link TracesItem}.
+ */
+ @Override
+ public TracesItem parse(List<String> lines) {
+ TracesItem traces = new TracesItem();
+ StringBuffer stack = null;
+
+ for (String line : lines) {
+ if (stack == null) {
+ Matcher m = PID.matcher(line);
+ if (m.matches()) {
+ traces.setPid(Integer.parseInt(m.group(1)));
+ }
+ m = APP.matcher(line);
+ if (m.matches()) {
+ traces.setApp(m.group(1));
+ }
+ m = STACK.matcher(line);
+ if (m.matches()) {
+ stack = new StringBuffer();
+ stack.append(line);
+ stack.append("\n");
+ }
+ } else if (!"".equals(line)) {
+ stack.append(line);
+ stack.append("\n");
+ } else {
+ traces.setStack(stack.toString().trim());
+ return traces;
+ }
+ }
+ if (stack == null) {
+ return null;
+ }
+ traces.setStack(stack.toString().trim());
+ return traces;
+ }
+
+}