diff options
Diffstat (limited to 'trappy/ftrace.py')
-rw-r--r-- | trappy/ftrace.py | 29 |
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 |