mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2025-02-21 05:26:23 +00:00
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:
parent
5eeba8c979
commit
ee72bd1b09
4 changed files with 26 additions and 15 deletions
|
@ -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:
|
||||
|
|
|
@ -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)
|
||||
|
|
13
tracer/tracer/parser_perf.py
Normal file
13
tracer/tracer/parser_perf.py
Normal 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()
|
|
@ -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)
|
||||
|
|
Loading…
Reference in a new issue