pybootchartgui: split the output chart into multiple ones
Split the output chart into multiple ones to make it more readable, it only works with "-o path", which means that it doesn't work if the user doesn't want to save the chart to the disk. For example: $ ./pybootchartgui.py /path/to/tmp/buildstats/core-image-sato-qemux86/201205301810/ -f svg -s 5 -o /tmp/ bootchart written to /tmp/bootchart_1.svg bootchart written to /tmp/bootchart_2.svg bootchart written to /tmp/bootchart_3.svg bootchart written to /tmp/bootchart_4.svg bootchart written to /tmp/bootchart_5.svg [YOCTO #2403] (From OE-Core rev: 04a34899e1c15a70babd97a3a59ccb9f8af05bad) Signed-off-by: Robert Yang <liezhi.yang@windriver.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
This commit is contained in:
parent
bc5b86f025
commit
0ad3f75432
|
@ -17,6 +17,8 @@ def _mk_options_parser():
|
|||
help="image format (...); default format ...")
|
||||
parser.add_option("-o", "--output", dest="output", metavar="PATH", default=None,
|
||||
help="output path (file or directory) where charts are stored")
|
||||
parser.add_option("-s", "--split", dest="num", type=int, default=1,
|
||||
help="split the output chart into <NUM> charts, only works with \"-o PATH\"")
|
||||
parser.add_option("-n", "--no-prune", action="store_false", dest="prune", default=True,
|
||||
help="do not prune the process tree")
|
||||
parser.add_option("-q", "--quiet", action="store_true", dest="quiet", default=False,
|
||||
|
@ -59,8 +61,16 @@ def main(argv=None):
|
|||
gui.show(res)
|
||||
else:
|
||||
filename = _get_filename(args, options)
|
||||
batch.render(res, options.format, filename)
|
||||
print "bootchart written to", filename
|
||||
res_list = parsing.split_res(res, options.num)
|
||||
n = 1
|
||||
for r in res_list:
|
||||
if len(res_list) == 1:
|
||||
f = filename + "." + options.format
|
||||
else:
|
||||
f = filename + "_" + str(n) + "." + options.format
|
||||
n = n + 1
|
||||
batch.render(r, options.format, f)
|
||||
print "bootchart written to", f
|
||||
return 0
|
||||
except parsing.ParseError, ex:
|
||||
print("Parse error: %s" % ex)
|
||||
|
|
|
@ -226,3 +226,39 @@ def parse(paths, prune):
|
|||
#monitored_app = state.headers.get("profile.process")
|
||||
#proc_tree = ProcessTree(state.ps_stats, monitored_app, prune)
|
||||
return state
|
||||
|
||||
def split_res(res, n):
|
||||
""" Split the res into n pieces """
|
||||
res_list = []
|
||||
if n > 1:
|
||||
s_list = sorted(res.start.keys())
|
||||
frag_size = len(s_list) / float(n)
|
||||
# Need the top value
|
||||
if frag_size > int(frag_size):
|
||||
frag_size = int(frag_size + 1)
|
||||
else:
|
||||
frag_size = int(frag_size)
|
||||
|
||||
start = 0
|
||||
end = frag_size
|
||||
while start < end:
|
||||
state = ParserState()
|
||||
for i in range(start, end):
|
||||
# Add these lines for reference
|
||||
#state.processes[pn + ":" + task] = [start, end]
|
||||
#state.start[start] = pn + ":" + task
|
||||
#state.end[end] = pn + ":" + task
|
||||
p = res.start[s_list[i]]
|
||||
s = s_list[i]
|
||||
e = res.processes[p][1]
|
||||
state.processes[p] = [s, e]
|
||||
state.start[s] = p
|
||||
state.end[e] = p
|
||||
start = end
|
||||
end = end + frag_size
|
||||
if end > len(s_list):
|
||||
end = len(s_list)
|
||||
res_list.append(state)
|
||||
else:
|
||||
res_list.append(res)
|
||||
return res_list
|
||||
|
|
Loading…
Reference in New Issue