From 7ec34b556c08f3cc47afaea16989b117ad9f0d91 Mon Sep 17 00:00:00 2001 From: Guido van Rossum Date: Fri, 9 Aug 2002 20:07:34 +0000 Subject: [PATCH] A tool to transform gprof(1) output into HTML, so you can click on a function name and go to the corresponding entry. --- Tools/scripts/gprof2html.py | 78 +++++++++++++++++++++++++++++++++++++ 1 file changed, 78 insertions(+) create mode 100755 Tools/scripts/gprof2html.py diff --git a/Tools/scripts/gprof2html.py b/Tools/scripts/gprof2html.py new file mode 100755 index 00000000000..aa13d524621 --- /dev/null +++ b/Tools/scripts/gprof2html.py @@ -0,0 +1,78 @@ +#! /usr/bin/env python2.3 + +"""Transform gprof(1) output into useful HTML.""" + +import re, os, sys, cgi, webbrowser + +header = """\ + + + gprof output (%s) + + +
+"""
+
+trailer = """\
+
+ + +""" + +def add_escapes(input): + for line in input: + yield cgi.escape(line) + +def main(): + filename = "gprof.out" + if sys.argv[1:]: + filename = sys.argv[1] + outputfilename = filename + ".html" + input = add_escapes(file(filename)) + output = file(outputfilename, "w") + output.write(header % filename) + for line in input: + output.write(line) + if line.startswith(" time"): + break + labels = {} + for line in input: + m = re.match(r"(.* )(\w+)\n", line) + if not m: + output.write(line) + break + stuff, fname = m.group(1, 2) + labels[fname] = fname + output.write('%s%s\n' % + (stuff, fname, fname, fname)) + for line in input: + output.write(line) + if line.startswith("index % time"): + break + for line in input: + m = re.match(r"(.* )(\w+)(( <cycle.*>)? \[\d+\])\n", line) + if not m: + output.write(line) + if line.startswith("Index by function name"): + break + continue + prefix, fname, suffix = m.group(1, 2, 3) + if fname not in labels: + output.write(line) + continue + if line.startswith("["): + output.write('%s%s%s\n' % + (prefix, fname, fname, fname, suffix)) + else: + output.write('%s%s%s\n' % + (prefix, fname, fname, suffix)) + for line in input: + for part in re.findall(r"(\w+(?:\.c)?|\W+)", line): + if part in labels: + part = '%s' % (part, part) + output.write(part) + output.write(trailer) + output.close() + webbrowser.open("file:" + os.path.abspath(outputfilename)) + +main()