summaryrefslogtreecommitdiff
diff options
authorThomi Richards <thomi.richards@canonical.com>2012-01-30 15:45:23 +1300
committerThomi Richards <thomi.richards@canonical.com>2012-01-30 15:45:23 +1300
commitad59148fe37997a6bfaeaa16989f44ac9a2e8d2e (patch)
tree10e2571496c1a807a754ecd3f927470f7d944000
parentafc63af2ffdb6c2ed344f4062fc362df917d3014 (diff)
unity introspection tree debugging script now can write output to any format supported by dot, and has the option to display the image with the 'eog' app.
(bzr r1876.1.1)
-rwxr-xr-xtools/unity-introspection-visualiser.py40
1 files changed, 29 insertions, 11 deletions
diff --git a/tools/unity-introspection-visualiser.py b/tools/unity-introspection-visualiser.py
index fae236e2c..abb8e9041 100755
--- a/tools/unity-introspection-visualiser.py
+++ b/tools/unity-introspection-visualiser.py
@@ -2,7 +2,8 @@
#
# Script to generate a nice PNG file of the currently running unity introspection tree.
-from sys import argv
+from argparse import ArgumentParser
+from os.path import splitext
import dbus
try:
@@ -36,7 +37,6 @@ def string_rep(dbus_type):
else:
return repr(dbus_type)
-
def escape(s):
"""Escape a string so it can be use in a dot label."""
return pydot.quote_if_necessary(s).replace('<','\\<').replace('>', '\\>')
@@ -60,16 +60,17 @@ def traverse_tree(state, parent, graph):
graph.add_edge(pydot.Edge(parent, child))
traverse_tree(child_state, child, graph)
-
+
if __name__ == '__main__':
- if len(argv) != 2:
- print """Usage: %s output_file.png.
+ parser = ArgumentParser()
+ mg = parser.add_mutually_exclusive_group(required=True)
+ mg.add_argument('-o', '--output', nargs=1,
+ help='Store output in specified file on disk.')
+ mg.add_argument('-d','--display', action='store_true',
+ help='Display output in image viewer.')
-This script queries the currently running Unity process and dumps the entire
-introspection tree into a graph, and renders this to a PNG file.
-""" % (argv[0])
- exit(1)
+ args = parser.parse_args()
u = Unity()
introspection_tree = u.get_state()
@@ -78,10 +79,27 @@ introspection tree into a graph, and renders this to a PNG file.
graph.set_node_defaults(shape='Mrecord')
graph.set_fontname('Ubuntu')
graph.set_fontsize('10')
-
+
gnode_unity = pydot.Node("Unity")
gnode_unity.set_comment("Unity")
traverse_tree(introspection_tree[0], gnode_unity, graph)
- graph.write(argv[1], format='png')
+ if args.output:
+ base, extension = splitext(args.output[0])
+ write_method_name = 'write_' + extension[1:]
+ if hasattr(graph, write_method_name):
+ getattr(graph, write_method_name)(args.output[0])
+ else:
+ print "Error: unsupported format: '%s'" % (extension)
+ elif args.display:
+ from tempfile import NamedTemporaryFile
+ from subprocess import call
+ tf = NamedTemporaryFile(suffix='.png', delete=False)
+ tf.write(graph.create_png())
+ tf.close()
+ print tf.name
+ call(["eog", tf.name])
+ else:
+ print 'unknown output mode!'
+