aboutsummaryrefslogtreecommitdiff
path: root/trappy/ftrace.py
diff options
context:
space:
mode:
Diffstat (limited to 'trappy/ftrace.py')
-rw-r--r--trappy/ftrace.py29
1 files changed, 13 insertions, 16 deletions
diff --git a/trappy/ftrace.py b/trappy/ftrace.py
index 06e2a93..c0a40c2 100644
--- a/trappy/ftrace.py
+++ b/trappy/ftrace.py
@@ -249,31 +249,27 @@ subclassed by FTrace (for parsing FTrace coming from trace-cmd) and SysTrace."""
trace_class = DynamicTypeFactory(event_name, (Base,), kwords)
self.class_definitions[event_name] = trace_class
+ def __get_trace_class(self, line, cls_word):
+ trace_class = None
+ for unique_word, cls in cls_word.iteritems():
+ if unique_word in line:
+ trace_class = cls
+ if not cls.fallback:
+ return trace_class
+ return trace_class
+
def __populate_data(self, fin, cls_for_unique_word):
"""Append to trace data from a txt trace"""
- def contains_unique_word(line, unique_words=cls_for_unique_word.keys()):
- for unique_word in unique_words:
- if unique_word in line:
- return True
- return False
-
actual_trace = itertools.dropwhile(self.trace_hasnt_started(), fin)
actual_trace = itertools.takewhile(self.trace_hasnt_finished(),
actual_trace)
for line in actual_trace:
- if not contains_unique_word(line):
+ trace_class = self.__get_trace_class(line, cls_for_unique_word)
+ if not trace_class:
self.lines += 1
continue
- for unique_word, cls in cls_for_unique_word.iteritems():
- if unique_word in line:
- trace_class = cls
- if not cls.fallback:
- break
- else:
- if not trace_class:
- raise FTraceParseError("No unique word in '{}'".format(line))
line = line[:-1]
@@ -306,7 +302,8 @@ subclassed by FTrace (for parsing FTrace coming from trace-cmd) and SysTrace."""
return
# Remove empty arrays from the trace
- data_str = re.sub(r"[A-Za-z0-9_]+=\{\} ", r"", data_str)
+ if "={}" in data_str:
+ data_str = re.sub(r"[A-Za-z0-9_]+=\{\} ", r"", data_str)
trace_class.append_data(timestamp, comm, pid, cpu, self.lines, data_str)
self.lines += 1