From 4f8b7e9f59070301cc975605e7df2c2b74036739 Mon Sep 17 00:00:00 2001 From: Sergei Trofimov Date: Thu, 24 Mar 2016 14:48:13 +0000 Subject: [PATCH] trace-cmd: updating sched_switch parser to handle both formats. Depending on the kernel, sched_switch events may be formatted one of two different ways in the text output. Previously, we've only handled the "old" format. This commit updates the parser to handle the new format as well. --- wlauto/utils/trace_cmd.py | 24 +++++++++++++++++++----- 1 file changed, 19 insertions(+), 5 deletions(-) diff --git a/wlauto/utils/trace_cmd.py b/wlauto/utils/trace_cmd.py index 6c64c72d..37ce1fb9 100644 --- a/wlauto/utils/trace_cmd.py +++ b/wlauto/utils/trace_cmd.py @@ -173,6 +173,24 @@ def regex_body_parser(regex, flags=0): return regex_parser_func +def sched_switch_parser(event, text): + """ + Sched switch output may be presented in a couple of different formats. One is handled + by a regex. The other format can *almost* be handled by the default parser, if it + weren't for the ``==>`` that appers in the middle. + """ + if text.count('=') == 2: # old format + regex = re.compile( + r'(?P\S.*):(?P\d+) \[(?P\d+)\] (?P\S+)' + r' ==> ' + r'(?P\S.*):(?P\d+) \[(?P\d+)\]' + ) + parser_func = regex_body_parser(regex) + return parser_func(event, text) + else: # three are more than two "=" -- new format + return default_body_parser(event, text.replace('==>', '')) + + # Maps event onto the corresponding parser for its body text. A parser may be # a callable with signature # @@ -182,11 +200,7 @@ def regex_body_parser(regex, flags=0): # regex). In case of a string/regex, its named groups will be used to populate # the event's attributes. EVENT_PARSER_MAP = { - 'sched_switch': re.compile( - r'(?P\S.*):(?P\d+) \[(?P\d+)\] (?P\S+)' - r' ==> ' - r'(?P\S.*):(?P\d+) \[(?P\d+)\]' - ), + 'sched_switch': sched_switch_parser, } TRACE_EVENT_REGEX = re.compile(r'^\s+(?P\S+.*?\S+)\s+\[(?P\d+)\]\s+(?P[\d.]+):\s+'