scripts/pybootchart: Allow minimum task length to be configured from the commandline
Rather than hardcode the value of "8", allow the minimum task length to be configured from the commandline using the -m option. "-m 0" means all tasks will be graphed. (From OE-Core rev: 30001153d3ce7dadf8f1ec79e634a638a9994518) Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
This commit is contained in:
parent
295f1608b0
commit
077291583c
|
@ -19,6 +19,8 @@ def _mk_options_parser():
|
||||||
help="output path (file or directory) where charts are stored")
|
help="output path (file or directory) where charts are stored")
|
||||||
parser.add_option("-s", "--split", dest="num", type=int, default=1,
|
parser.add_option("-s", "--split", dest="num", type=int, default=1,
|
||||||
help="split the output chart into <NUM> charts, only works with \"-o PATH\"")
|
help="split the output chart into <NUM> charts, only works with \"-o PATH\"")
|
||||||
|
parser.add_option("-m", "--mintime", dest="mintime", type=int, default=8,
|
||||||
|
help="only tasks longer than this time will be displayed")
|
||||||
parser.add_option("-n", "--no-prune", action="store_false", dest="prune", default=True,
|
parser.add_option("-n", "--no-prune", action="store_false", dest="prune", default=True,
|
||||||
help="do not prune the process tree")
|
help="do not prune the process tree")
|
||||||
parser.add_option("-q", "--quiet", action="store_true", dest="quiet", default=False,
|
parser.add_option("-q", "--quiet", action="store_true", dest="quiet", default=False,
|
||||||
|
@ -51,7 +53,7 @@ def main(argv=None):
|
||||||
parser.error("insufficient arguments, expected at least one path.")
|
parser.error("insufficient arguments, expected at least one path.")
|
||||||
return 2
|
return 2
|
||||||
|
|
||||||
res = parsing.parse(args, options.prune)
|
res = parsing.parse(args, options.prune, options.mintime)
|
||||||
if options.interactive or options.output == None:
|
if options.interactive or options.output == None:
|
||||||
gui.show(res)
|
gui.show(res)
|
||||||
else:
|
else:
|
||||||
|
|
|
@ -170,7 +170,7 @@ class ParserState:
|
||||||
|
|
||||||
_relevant_files = set(["header", "proc_diskstats.log", "proc_ps.log", "proc_stat.log"])
|
_relevant_files = set(["header", "proc_diskstats.log", "proc_ps.log", "proc_stat.log"])
|
||||||
|
|
||||||
def _do_parse(state, filename, file):
|
def _do_parse(state, filename, file, mintime):
|
||||||
#print filename
|
#print filename
|
||||||
#writer.status("parsing '%s'" % filename)
|
#writer.status("parsing '%s'" % filename)
|
||||||
paths = filename.split("/")
|
paths = filename.split("/")
|
||||||
|
@ -183,7 +183,7 @@ def _do_parse(state, filename, file):
|
||||||
start = int(float(line.split()[-1]))
|
start = int(float(line.split()[-1]))
|
||||||
elif line.startswith("Ended:"):
|
elif line.startswith("Ended:"):
|
||||||
end = int(float(line.split()[-1]))
|
end = int(float(line.split()[-1]))
|
||||||
if start and end and (end - start) > 8:
|
if start and end and (end - start) >= mintime:
|
||||||
k = pn + ":" + task
|
k = pn + ":" + task
|
||||||
state.processes[pn + ":" + task] = [start, end]
|
state.processes[pn + ":" + task] = [start, end]
|
||||||
if start not in state.start:
|
if start not in state.start:
|
||||||
|
@ -196,12 +196,12 @@ def _do_parse(state, filename, file):
|
||||||
state.end[end].append(pn + ":" + task)
|
state.end[end].append(pn + ":" + task)
|
||||||
return state
|
return state
|
||||||
|
|
||||||
def parse_file(state, filename):
|
def parse_file(state, filename, mintime):
|
||||||
basename = os.path.basename(filename)
|
basename = os.path.basename(filename)
|
||||||
with open(filename, "rb") as file:
|
with open(filename, "rb") as file:
|
||||||
return _do_parse(state, filename, file)
|
return _do_parse(state, filename, file, mintime)
|
||||||
|
|
||||||
def parse_paths(state, paths):
|
def parse_paths(state, paths, mintime):
|
||||||
for path in paths:
|
for path in paths:
|
||||||
root,extension = os.path.splitext(path)
|
root,extension = os.path.splitext(path)
|
||||||
if not(os.path.exists(path)):
|
if not(os.path.exists(path)):
|
||||||
|
@ -210,7 +210,7 @@ def parse_paths(state, paths):
|
||||||
if os.path.isdir(path):
|
if os.path.isdir(path):
|
||||||
files = [ f for f in [os.path.join(path, f) for f in os.listdir(path)] ]
|
files = [ f for f in [os.path.join(path, f) for f in os.listdir(path)] ]
|
||||||
files.sort()
|
files.sort()
|
||||||
state = parse_paths(state, files)
|
state = parse_paths(state, files, mintime)
|
||||||
elif extension in [".tar", ".tgz", ".tar.gz"]:
|
elif extension in [".tar", ".tgz", ".tar.gz"]:
|
||||||
tf = None
|
tf = None
|
||||||
try:
|
try:
|
||||||
|
@ -223,11 +223,11 @@ def parse_paths(state, paths):
|
||||||
if tf != None:
|
if tf != None:
|
||||||
tf.close()
|
tf.close()
|
||||||
else:
|
else:
|
||||||
state = parse_file(state, path)
|
state = parse_file(state, path, mintime)
|
||||||
return state
|
return state
|
||||||
|
|
||||||
def parse(paths, prune):
|
def parse(paths, prune, mintime):
|
||||||
state = parse_paths(ParserState(), paths)
|
state = parse_paths(ParserState(), paths, mintime)
|
||||||
if not state.valid():
|
if not state.valid():
|
||||||
raise ParseError("empty state: '%s' does not contain a valid bootchart" % ", ".join(paths))
|
raise ParseError("empty state: '%s' does not contain a valid bootchart" % ", ".join(paths))
|
||||||
#monitored_app = state.headers.get("profile.process")
|
#monitored_app = state.headers.get("profile.process")
|
||||||
|
|
Loading…
Reference in New Issue