tracer: parser: small speedup

Add a parser_perf test. Skip the extra filter stage and change the regex to
match on category=TRACE lines only.
Also flip the check in analysis_runner, since we only have a few tracer
classes in the beginning, the rest are tracer entries.
This commit is contained in:
Stefan Sauer 2016-12-25 11:34:33 +01:00
parent 5eeba8c979
commit ee72bd1b09
4 changed files with 26 additions and 15 deletions

View file

@ -1,6 +1,7 @@
from tracer.parser import Parser
from tracer.structure import Structure
try:
from tracer.parser import Parser
except:
from parser import Parser
class AnalysisRunner(object):
"""
@ -36,10 +37,10 @@ class AnalysisRunner(object):
try:
for event in self.log:
# check if it is a tracer.class or tracer event
if self.is_tracer_class(event):
self.handle_tracer_class(event)
elif self.is_tracer_entry(event):
if self.is_tracer_entry(event):
self.handle_tracer_entry(event)
elif self.is_tracer_class(event):
self.handle_tracer_class(event)
#else:
# print("unhandled:", repr(event))
except StopIteration:

View file

@ -8,7 +8,8 @@ def _log_line_regex():
# "0:00:00.777913000 "
TIME = r"(\d+:\d\d:\d\d\.\d+)\s+"
# "DEBUG "
LEVEL = "([A-Z]+)\s+"
#LEVEL = "([A-Z]+)\s+"
LEVEL = "(TRACE)\s+"
# "0x8165430 "
THREAD = r"(0x[0-9a-f]+)\s+"
# "GST_REFCOUNTING ", "flacdec "
@ -54,14 +55,10 @@ class Parser(object):
self.file = None
def __enter__(self):
def __is_tracer(line):
return 'TRACE' in line
if self.filename != '-':
self.file = open(self.filename, 'rt')
else:
self.file = sys.stdin
self.data = filter(__is_tracer, self.file)
return self
def __exit__(self, *args):
@ -74,7 +71,7 @@ class Parser(object):
def __next__(self):
log_regex = self.log_regex
data = self.data
data = self.file
while True:
line = next(data)
match = log_regex.match(line)

View file

@ -0,0 +1,13 @@
from analysis_runner import AnalysisRunner
from parser import Parser
if __name__ == '__main__':
import argparse
parser = argparse.ArgumentParser()
parser.add_argument('file', nargs='?', default='debug.log')
args = parser.parse_args()
with Parser(args.file) as log:
runner = AnalysisRunner(log)
runner.run()

View file

@ -26,12 +26,12 @@ class TestParser(unittest.TestCase):
self.assertIsNotNone(log.file)
def test___enter___with_stdin(self):
sys.stdin = TEXT_DATA
sys.stdin = iter(TEXT_DATA)
with Parser('-') as log:
self.assertIsNotNone(log.file)
def test_random_text_reports_none(self):
sys.stdin = TEXT_DATA
sys.stdin = iter(TEXT_DATA)
with Parser('-') as log:
with self.assertRaises(StopIteration):
next(log)
@ -41,7 +41,7 @@ class TestParser(unittest.TestCase):
self.assertIsNotNone(next(log))
def test_trace_log_parsed(self):
sys.stdin = TRACER_LOG_DATA
sys.stdin = iter(TRACER_LOG_DATA)
with Parser('-') as log:
event = next(log)
self.assertEqual(len(event), 10)