tools/gst-plot-timeline.py: Add more options to gst-plot-timeline

Original commit message from CVS:
* tools/gst-plot-timeline.py:
Add more options to gst-plot-timeline
This commit is contained in:
Thijs Vermeir 2008-01-01 17:10:32 +00:00
parent d8bea77230
commit 19dae75b53
2 changed files with 63 additions and 4 deletions

View file

@ -1,3 +1,8 @@
2008-01-01 Thijs Vermeir <thijsvermeir@gmail.com>
* tools/gst-plot-timeline.py:
Add more options to gst-plot-timeline
2007-12-31 Wim Taymans <wim.taymans@collabora.co.uk> 2007-12-31 Wim Taymans <wim.taymans@collabora.co.uk>
* docs/design/part-synchronisation.txt: * docs/design/part-synchronisation.txt:

View file

@ -35,6 +35,11 @@ mark_log_group = 3
success_result = "0" success_result = "0"
skip_lines = 0
max_lines = 500
filter_regex = re.compile ('')
skip_regex = re.compile('')
class BaseMark: class BaseMark:
colors = 0, 0, 0 colors = 0, 0, 0
def __init__(self, timestamp, log): def __init__(self, timestamp, log):
@ -102,10 +107,30 @@ class SyscallParser:
def parse_strace(filename): def parse_strace(filename):
parser = SyscallParser () parser = SyscallParser ()
global skip_lines
global max_lines
global skip_regex
skip_found = False
for line in file(filename, "r").readlines(): for line in file(filename, "r").readlines():
if line == "": if line == "":
break break
if not skip_found:
if skip_regex.search(line):
skip_found = True
else:
continue
if skip_lines > 0:
skip_lines -= 1
continue
if len(parser.syscalls) >= max_lines:
break
if filter_regex.search(line):
parser.add_line (line) parser.add_line (line)
return parser.syscalls return parser.syscalls
@ -127,10 +152,10 @@ def compute_syscall_metrics(syscalls):
metrics.width = PLOT_WIDTH metrics.width = PLOT_WIDTH
last_timestamp = syscalls[num_syscalls - 1].timestamp last_timestamp = syscalls[num_syscalls - 1].timestamp
num_seconds = int(math.ceil(last_timestamp))
time_height = num_seconds * PIXELS_PER_SECOND time_height = int(math.ceil(last_timestamp * PIXELS_PER_SECOND))
line_height = num_syscalls * PIXELS_PER_LINE line_height = num_syscalls * PIXELS_PER_LINE
if time_height > line_height: if time_height > line_height:
metrics.height = time_height metrics.height = time_height
print "Adjusting PIXELS_PER_LINE = %d" % PIXELS_PER_LINE print "Adjusting PIXELS_PER_LINE = %d" % PIXELS_PER_LINE
@ -139,7 +164,7 @@ def compute_syscall_metrics(syscalls):
else: else:
metrics.height = line_height metrics.height = line_height
print "Adjusting PIXELS_PER_SECOND %d" % PIXELS_PER_SECOND print "Adjusting PIXELS_PER_SECOND %d" % PIXELS_PER_SECOND
PIXELS_PER_SECOND = metrics.height / num_seconds PIXELS_PER_SECOND = int(math.ceil(metrics.height / last_timestamp))
print " PIXELS_PER_SECOND %d" % PIXELS_PER_SECOND print " PIXELS_PER_SECOND %d" % PIXELS_PER_SECOND
text_ypos = 0 text_ypos = 0
@ -216,12 +241,28 @@ def plot_syscalls_to_surface(syscalls, metrics):
return surface return surface
def main(args): def main(args):
global skip_lines
global max_lines
global filter_regex
global skip_regex
option_parser = optparse.OptionParser( option_parser = optparse.OptionParser(
usage="usage: %prog -o output.png <debug.log>") usage="usage: %prog -o output.png <debug.log>")
option_parser.add_option("-o", option_parser.add_option("-o",
"--output", dest="output", "--output", dest="output",
metavar="FILE", metavar="FILE",
help="Name of output file (output is a PNG file)") help="Name of output file (output is a PNG file)")
option_parser.add_option("-s",
"--skip", dest="skip",
metavar="LINES",
help="Skip a number of loglines at the beginning of the file or wait till a regular expression happens")
option_parser.add_option("-m",
"--max-lines", dest="max",
help="max lines that need to be plotted")
option_parser.add_option("-f",
"--filter", dest="filter",
help="filter the log lines on a regular expression")
options, args = option_parser.parse_args() options, args = option_parser.parse_args()
@ -236,6 +277,19 @@ def main(args):
in_filename = args[0] in_filename = args[0]
out_filename = options.output out_filename = options.output
if options.skip:
try:
skip_lines = int(options.skip)
except:
skip_regex = re.compile(options.skip)
skip_lines = 0
if options.max:
max_lines = int(options.max)
if options.filter:
filter_regex = re.compile(options.filter)
syscalls = [] syscalls = []
for syscall in parse_strace(in_filename): for syscall in parse_strace(in_filename):
syscalls.append(syscall) syscalls.append(syscall)