pybootchartgui: Make "Show more" show all processes
While "Show more" is enabled, all processes are shown, regardless of --mintime. This also has the added benefit of making the first shown bar start at its correct offset from the start time, rather than always starting at 0. (From OE-Core rev: 5f1b8730f90099c0f73a6b08599990ee71e831b5) Signed-off-by: Peter Kjellerstedt <peter.kjellerstedt@axis.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
This commit is contained in:
parent
65d43843b6
commit
46c45853f0
|
@ -297,10 +297,20 @@ OPTIONS = None
|
||||||
|
|
||||||
def extents(options, xscale, trace):
|
def extents(options, xscale, trace):
|
||||||
start = min(trace.start.keys())
|
start = min(trace.start.keys())
|
||||||
end = max(trace.end.keys())
|
end = start
|
||||||
|
|
||||||
w = int ((end - start) * sec_w_base * xscale) + 2*off_x
|
processes = 0
|
||||||
h = proc_h * len(trace.processes) + header_h + 2 * off_y
|
for proc in trace.processes:
|
||||||
|
if not options.app_options.show_all and \
|
||||||
|
trace.processes[proc][1] - trace.processes[proc][0] < options.app_options.mintime:
|
||||||
|
continue
|
||||||
|
|
||||||
|
if trace.processes[proc][1] > end:
|
||||||
|
end = trace.processes[proc][1]
|
||||||
|
processes += 1
|
||||||
|
|
||||||
|
w = int ((end - start) * sec_w_base * xscale) + 2 * off_x
|
||||||
|
h = proc_h * processes + header_h + 2 * off_y
|
||||||
|
|
||||||
return (w, h)
|
return (w, h)
|
||||||
|
|
||||||
|
@ -419,6 +429,9 @@ def render_processes_chart(ctx, options, trace, curr_y, w, h, sec_w):
|
||||||
offset = min(trace.start.keys())
|
offset = min(trace.start.keys())
|
||||||
for s in sorted(trace.start.keys()):
|
for s in sorted(trace.start.keys()):
|
||||||
for val in sorted(trace.start[s]):
|
for val in sorted(trace.start[s]):
|
||||||
|
if not options.app_options.show_all and \
|
||||||
|
trace.processes[val][1] - s < options.app_options.mintime:
|
||||||
|
continue
|
||||||
task = val.split(":")[1]
|
task = val.split(":")[1]
|
||||||
#print val
|
#print val
|
||||||
#print trace.processes[val][1]
|
#print trace.processes[val][1]
|
||||||
|
|
|
@ -121,6 +121,8 @@ class PyBootchartWidget(gtk.DrawingArea):
|
||||||
|
|
||||||
def show_toggled(self, button):
|
def show_toggled(self, button):
|
||||||
self.options.app_options.show_all = button.get_property ('active')
|
self.options.app_options.show_all = button.get_property ('active')
|
||||||
|
self.chart_width, self.chart_height = draw.extents(self.options, self.xscale, self.trace)
|
||||||
|
self._set_scroll_adjustments(self.hadj, self.vadj)
|
||||||
self.queue_draw()
|
self.queue_draw()
|
||||||
|
|
||||||
POS_INCREMENT = 100
|
POS_INCREMENT = 100
|
||||||
|
|
|
@ -55,7 +55,7 @@ def _mk_options_parser():
|
||||||
# parser.add_option("--show-pid", action="store_true", dest="show_pid", default=False,
|
# parser.add_option("--show-pid", action="store_true", dest="show_pid", default=False,
|
||||||
# help="show process ids in the bootchart as 'processname [pid]'")
|
# help="show process ids in the bootchart as 'processname [pid]'")
|
||||||
parser.add_option("--show-all", action="store_true", dest="show_all", default=False,
|
parser.add_option("--show-all", action="store_true", dest="show_all", default=False,
|
||||||
help="show all process information in the bootchart as '/process/path/exe [pid] [args]'")
|
help="show all processes in the chart")
|
||||||
# parser.add_option("--crop-after", dest="crop_after", metavar="PROCESS", default=None,
|
# parser.add_option("--crop-after", dest="crop_after", metavar="PROCESS", default=None,
|
||||||
# help="crop chart when idle after PROCESS is started")
|
# help="crop chart when idle after PROCESS is started")
|
||||||
# parser.add_option("--annotate", action="append", dest="annotate", metavar="PROCESS", default=None,
|
# parser.add_option("--annotate", action="append", dest="annotate", metavar="PROCESS", default=None,
|
||||||
|
|
|
@ -50,7 +50,7 @@ class Trace:
|
||||||
self.parent_map = None
|
self.parent_map = None
|
||||||
self.mem_stats = None
|
self.mem_stats = None
|
||||||
|
|
||||||
parse_paths (writer, self, paths, options.mintime)
|
parse_paths (writer, self, paths)
|
||||||
if not self.valid():
|
if not self.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))
|
||||||
|
|
||||||
|
@ -630,7 +630,7 @@ def get_num_cpus(headers):
|
||||||
return 1
|
return 1
|
||||||
return max (int(mat.group(1)), 1)
|
return max (int(mat.group(1)), 1)
|
||||||
|
|
||||||
def _do_parse(writer, state, filename, file, mintime):
|
def _do_parse(writer, state, filename, file):
|
||||||
writer.info("parsing '%s'" % filename)
|
writer.info("parsing '%s'" % filename)
|
||||||
t1 = clock()
|
t1 = clock()
|
||||||
paths = filename.split("/")
|
paths = filename.split("/")
|
||||||
|
@ -643,7 +643,7 @@ def _do_parse(writer, state, filename, file, mintime):
|
||||||
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) >= mintime:
|
if start and end:
|
||||||
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:
|
||||||
|
@ -658,14 +658,14 @@ def _do_parse(writer, state, filename, file, mintime):
|
||||||
writer.info(" %s seconds" % str(t2-t1))
|
writer.info(" %s seconds" % str(t2-t1))
|
||||||
return state
|
return state
|
||||||
|
|
||||||
def parse_file(writer, state, filename, mintime):
|
def parse_file(writer, state, filename):
|
||||||
if state.filename is None:
|
if state.filename is None:
|
||||||
state.filename = filename
|
state.filename = filename
|
||||||
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(writer, state, filename, file, mintime)
|
return _do_parse(writer, state, filename, file)
|
||||||
|
|
||||||
def parse_paths(writer, state, paths, mintime):
|
def parse_paths(writer, state, paths):
|
||||||
for path in paths:
|
for path in paths:
|
||||||
if state.filename is None:
|
if state.filename is None:
|
||||||
state.filename = path
|
state.filename = path
|
||||||
|
@ -676,7 +676,7 @@ def parse_paths(writer, state, paths, mintime):
|
||||||
#state.filename = path
|
#state.filename = path
|
||||||
if os.path.isdir(path):
|
if os.path.isdir(path):
|
||||||
files = sorted([os.path.join(path, f) for f in os.listdir(path)])
|
files = sorted([os.path.join(path, f) for f in os.listdir(path)])
|
||||||
state = parse_paths(writer, state, files, mintime)
|
state = parse_paths(writer, state, files)
|
||||||
elif extension in [".tar", ".tgz", ".gz"]:
|
elif extension in [".tar", ".tgz", ".gz"]:
|
||||||
if extension == ".gz":
|
if extension == ".gz":
|
||||||
root, extension = os.path.splitext(root)
|
root, extension = os.path.splitext(root)
|
||||||
|
@ -695,7 +695,7 @@ def parse_paths(writer, state, paths, mintime):
|
||||||
if tf != None:
|
if tf != None:
|
||||||
tf.close()
|
tf.close()
|
||||||
else:
|
else:
|
||||||
state = parse_file(writer, state, path, mintime)
|
state = parse_file(writer, state, path)
|
||||||
return state
|
return state
|
||||||
|
|
||||||
def split_res(res, n):
|
def split_res(res, n):
|
||||||
|
|
Loading…
Reference in New Issue