[oe-commits] Robert Yang : pybootchartgui: split the output chart into multiple ones

git at git.openembedded.org git at git.openembedded.org
Fri Jun 15 14:12:51 UTC 2012


Module: openembedded-core.git
Branch: master
Commit: 04a34899e1c15a70babd97a3a59ccb9f8af05bad
URL:    http://git.openembedded.org/?p=openembedded-core.git&a=commit;h=04a34899e1c15a70babd97a3a59ccb9f8af05bad

Author: Robert Yang <liezhi.yang at windriver.com>
Date:   Wed Jun  6 14:10:11 2012 +0800

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]

Signed-off-by: Robert Yang <liezhi.yang at windriver.com>

---

 scripts/pybootchartgui/pybootchartgui/main.py    |   14 +++++++-
 scripts/pybootchartgui/pybootchartgui/parsing.py |   36 ++++++++++++++++++++++
 2 files changed, 48 insertions(+), 2 deletions(-)

diff --git a/scripts/pybootchartgui/pybootchartgui/main.py b/scripts/pybootchartgui/pybootchartgui/main.py
index bf50afb..fce8dd3 100644
--- a/scripts/pybootchartgui/pybootchartgui/main.py
+++ b/scripts/pybootchartgui/pybootchartgui/main.py
@@ -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)
diff --git a/scripts/pybootchartgui/pybootchartgui/parsing.py b/scripts/pybootchartgui/pybootchartgui/parsing.py
index 11a0829..c64eba0 100644
--- a/scripts/pybootchartgui/pybootchartgui/parsing.py
+++ b/scripts/pybootchartgui/pybootchartgui/parsing.py
@@ -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





More information about the Openembedded-commits mailing list