+++ /dev/null
-#! /usr/bin/env python2.3\r
-\r
-"""Transform gprof(1) output into useful HTML."""\r
-\r
-import re, os, sys, cgi, webbrowser\r
-\r
-header = """\\r
-<html>\r
-<head>\r
- <title>gprof output (%s)</title>\r
-</head>\r
-<body>\r
-<pre>\r
-"""\r
-\r
-trailer = """\\r
-</pre>\r
-</body>\r
-</html>\r
-"""\r
-\r
-def add_escapes(input):\r
- for line in input:\r
- yield cgi.escape(line)\r
-\r
-def main():\r
- filename = "gprof.out"\r
- if sys.argv[1:]:\r
- filename = sys.argv[1]\r
- outputfilename = filename + ".html"\r
- input = add_escapes(file(filename))\r
- output = file(outputfilename, "w")\r
- output.write(header % filename)\r
- for line in input:\r
- output.write(line)\r
- if line.startswith(" time"):\r
- break\r
- labels = {}\r
- for line in input:\r
- m = re.match(r"(.* )(\w+)\n", line)\r
- if not m:\r
- output.write(line)\r
- break\r
- stuff, fname = m.group(1, 2)\r
- labels[fname] = fname\r
- output.write('%s<a name="flat:%s" href="#call:%s">%s</a>\n' %\r
- (stuff, fname, fname, fname))\r
- for line in input:\r
- output.write(line)\r
- if line.startswith("index % time"):\r
- break\r
- for line in input:\r
- m = re.match(r"(.* )(\w+)(( <cycle.*>)? \[\d+\])\n", line)\r
- if not m:\r
- output.write(line)\r
- if line.startswith("Index by function name"):\r
- break\r
- continue\r
- prefix, fname, suffix = m.group(1, 2, 3)\r
- if fname not in labels:\r
- output.write(line)\r
- continue\r
- if line.startswith("["):\r
- output.write('%s<a name="call:%s" href="#flat:%s">%s</a>%s\n' %\r
- (prefix, fname, fname, fname, suffix))\r
- else:\r
- output.write('%s<a href="#call:%s">%s</a>%s\n' %\r
- (prefix, fname, fname, suffix))\r
- for line in input:\r
- for part in re.findall(r"(\w+(?:\.c)?|\W+)", line):\r
- if part in labels:\r
- part = '<a href="#call:%s">%s</a>' % (part, part)\r
- output.write(part)\r
- output.write(trailer)\r
- output.close()\r
- webbrowser.open("file:" + os.path.abspath(outputfilename))\r
-\r
-if __name__ == '__main__':\r
- main()\r