Mercurial > cpython-lru_cache-weakref
annotate Tools/scripts/gprof2html.py @ 66978:aed2bbafa550 3.1
Blocked revisions 87324 via svnmerge
........
r87324 | r.david.murray | 2010-12-16 14:08:51 -0500 (Thu, 16 Dec 2010) | 9 lines
#10719: restore messages generated on invalid compileall args
Before the introduction of filename arguments to compileall it gave semi useful
messages about not being able to 'list' names that weren't valid directories.
This fix restores that behavior. In addition to the test for this case, the
patch also adds a test for the default behavior of compileall when no arguments
are provided, and fixes a bug in one of the previously added tests.
........
| author | R. David Murray <rdmurray@bitdance.com> |
|---|---|
| date | Thu, 16 Dec 2010 19:10:16 +0000 |
| parents | 981fff7363b9 |
| children | 0c308d65d7bc fcfe324663a6 |
| rev | line source |
|---|---|
|
24721
2d3c4a7aec0a
A tool to transform gprof(1) output into HTML, so you can click on a
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
1 #! /usr/bin/env python2.3 |
|
2d3c4a7aec0a
A tool to transform gprof(1) output into HTML, so you can click on a
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
2 |
|
2d3c4a7aec0a
A tool to transform gprof(1) output into HTML, so you can click on a
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
3 """Transform gprof(1) output into useful HTML.""" |
|
2d3c4a7aec0a
A tool to transform gprof(1) output into HTML, so you can click on a
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
4 |
|
2d3c4a7aec0a
A tool to transform gprof(1) output into HTML, so you can click on a
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
5 import re, os, sys, cgi, webbrowser |
|
2d3c4a7aec0a
A tool to transform gprof(1) output into HTML, so you can click on a
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
6 |
|
2d3c4a7aec0a
A tool to transform gprof(1) output into HTML, so you can click on a
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
7 header = """\ |
|
2d3c4a7aec0a
A tool to transform gprof(1) output into HTML, so you can click on a
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
8 <html> |
|
2d3c4a7aec0a
A tool to transform gprof(1) output into HTML, so you can click on a
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
9 <head> |
|
2d3c4a7aec0a
A tool to transform gprof(1) output into HTML, so you can click on a
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
10 <title>gprof output (%s)</title> |
|
2d3c4a7aec0a
A tool to transform gprof(1) output into HTML, so you can click on a
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
11 </head> |
|
2d3c4a7aec0a
A tool to transform gprof(1) output into HTML, so you can click on a
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
12 <body> |
|
2d3c4a7aec0a
A tool to transform gprof(1) output into HTML, so you can click on a
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
13 <pre> |
|
2d3c4a7aec0a
A tool to transform gprof(1) output into HTML, so you can click on a
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
14 """ |
|
2d3c4a7aec0a
A tool to transform gprof(1) output into HTML, so you can click on a
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
15 |
|
2d3c4a7aec0a
A tool to transform gprof(1) output into HTML, so you can click on a
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
16 trailer = """\ |
|
2d3c4a7aec0a
A tool to transform gprof(1) output into HTML, so you can click on a
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
17 </pre> |
|
2d3c4a7aec0a
A tool to transform gprof(1) output into HTML, so you can click on a
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
18 </body> |
|
2d3c4a7aec0a
A tool to transform gprof(1) output into HTML, so you can click on a
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
19 </html> |
|
2d3c4a7aec0a
A tool to transform gprof(1) output into HTML, so you can click on a
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
20 """ |
|
2d3c4a7aec0a
A tool to transform gprof(1) output into HTML, so you can click on a
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
21 |
|
2d3c4a7aec0a
A tool to transform gprof(1) output into HTML, so you can click on a
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
22 def add_escapes(input): |
|
2d3c4a7aec0a
A tool to transform gprof(1) output into HTML, so you can click on a
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
23 for line in input: |
|
2d3c4a7aec0a
A tool to transform gprof(1) output into HTML, so you can click on a
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
24 yield cgi.escape(line) |
|
2d3c4a7aec0a
A tool to transform gprof(1) output into HTML, so you can click on a
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
25 |
|
2d3c4a7aec0a
A tool to transform gprof(1) output into HTML, so you can click on a
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
26 def main(): |
|
2d3c4a7aec0a
A tool to transform gprof(1) output into HTML, so you can click on a
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
27 filename = "gprof.out" |
|
2d3c4a7aec0a
A tool to transform gprof(1) output into HTML, so you can click on a
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
28 if sys.argv[1:]: |
|
2d3c4a7aec0a
A tool to transform gprof(1) output into HTML, so you can click on a
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
29 filename = sys.argv[1] |
|
2d3c4a7aec0a
A tool to transform gprof(1) output into HTML, so you can click on a
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
30 outputfilename = filename + ".html" |
|
2d3c4a7aec0a
A tool to transform gprof(1) output into HTML, so you can click on a
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
31 input = add_escapes(file(filename)) |
|
2d3c4a7aec0a
A tool to transform gprof(1) output into HTML, so you can click on a
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
32 output = file(outputfilename, "w") |
|
2d3c4a7aec0a
A tool to transform gprof(1) output into HTML, so you can click on a
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
33 output.write(header % filename) |
|
2d3c4a7aec0a
A tool to transform gprof(1) output into HTML, so you can click on a
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
34 for line in input: |
|
2d3c4a7aec0a
A tool to transform gprof(1) output into HTML, so you can click on a
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
35 output.write(line) |
|
2d3c4a7aec0a
A tool to transform gprof(1) output into HTML, so you can click on a
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
36 if line.startswith(" time"): |
|
2d3c4a7aec0a
A tool to transform gprof(1) output into HTML, so you can click on a
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
37 break |
|
2d3c4a7aec0a
A tool to transform gprof(1) output into HTML, so you can click on a
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
38 labels = {} |
|
2d3c4a7aec0a
A tool to transform gprof(1) output into HTML, so you can click on a
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
39 for line in input: |
|
2d3c4a7aec0a
A tool to transform gprof(1) output into HTML, so you can click on a
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
40 m = re.match(r"(.* )(\w+)\n", line) |
|
2d3c4a7aec0a
A tool to transform gprof(1) output into HTML, so you can click on a
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
41 if not m: |
|
2d3c4a7aec0a
A tool to transform gprof(1) output into HTML, so you can click on a
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
42 output.write(line) |
|
2d3c4a7aec0a
A tool to transform gprof(1) output into HTML, so you can click on a
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
43 break |
|
2d3c4a7aec0a
A tool to transform gprof(1) output into HTML, so you can click on a
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
44 stuff, fname = m.group(1, 2) |
|
2d3c4a7aec0a
A tool to transform gprof(1) output into HTML, so you can click on a
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
45 labels[fname] = fname |
|
2d3c4a7aec0a
A tool to transform gprof(1) output into HTML, so you can click on a
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
46 output.write('%s<a name="flat:%s" href="#call:%s">%s</a>\n' % |
|
2d3c4a7aec0a
A tool to transform gprof(1) output into HTML, so you can click on a
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
47 (stuff, fname, fname, fname)) |
|
2d3c4a7aec0a
A tool to transform gprof(1) output into HTML, so you can click on a
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
48 for line in input: |
|
2d3c4a7aec0a
A tool to transform gprof(1) output into HTML, so you can click on a
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
49 output.write(line) |
|
2d3c4a7aec0a
A tool to transform gprof(1) output into HTML, so you can click on a
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
50 if line.startswith("index % time"): |
|
2d3c4a7aec0a
A tool to transform gprof(1) output into HTML, so you can click on a
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
51 break |
|
2d3c4a7aec0a
A tool to transform gprof(1) output into HTML, so you can click on a
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
52 for line in input: |
|
2d3c4a7aec0a
A tool to transform gprof(1) output into HTML, so you can click on a
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
53 m = re.match(r"(.* )(\w+)(( <cycle.*>)? \[\d+\])\n", line) |
|
2d3c4a7aec0a
A tool to transform gprof(1) output into HTML, so you can click on a
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
54 if not m: |
|
2d3c4a7aec0a
A tool to transform gprof(1) output into HTML, so you can click on a
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
55 output.write(line) |
|
2d3c4a7aec0a
A tool to transform gprof(1) output into HTML, so you can click on a
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
56 if line.startswith("Index by function name"): |
|
2d3c4a7aec0a
A tool to transform gprof(1) output into HTML, so you can click on a
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
57 break |
|
2d3c4a7aec0a
A tool to transform gprof(1) output into HTML, so you can click on a
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
58 continue |
|
2d3c4a7aec0a
A tool to transform gprof(1) output into HTML, so you can click on a
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
59 prefix, fname, suffix = m.group(1, 2, 3) |
|
2d3c4a7aec0a
A tool to transform gprof(1) output into HTML, so you can click on a
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
60 if fname not in labels: |
|
2d3c4a7aec0a
A tool to transform gprof(1) output into HTML, so you can click on a
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
61 output.write(line) |
|
2d3c4a7aec0a
A tool to transform gprof(1) output into HTML, so you can click on a
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
62 continue |
|
2d3c4a7aec0a
A tool to transform gprof(1) output into HTML, so you can click on a
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
63 if line.startswith("["): |
|
2d3c4a7aec0a
A tool to transform gprof(1) output into HTML, so you can click on a
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
64 output.write('%s<a name="call:%s" href="#flat:%s">%s</a>%s\n' % |
|
2d3c4a7aec0a
A tool to transform gprof(1) output into HTML, so you can click on a
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
65 (prefix, fname, fname, fname, suffix)) |
|
2d3c4a7aec0a
A tool to transform gprof(1) output into HTML, so you can click on a
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
66 else: |
|
2d3c4a7aec0a
A tool to transform gprof(1) output into HTML, so you can click on a
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
67 output.write('%s<a href="#call:%s">%s</a>%s\n' % |
|
2d3c4a7aec0a
A tool to transform gprof(1) output into HTML, so you can click on a
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
68 (prefix, fname, fname, suffix)) |
|
2d3c4a7aec0a
A tool to transform gprof(1) output into HTML, so you can click on a
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
69 for line in input: |
|
2d3c4a7aec0a
A tool to transform gprof(1) output into HTML, so you can click on a
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
70 for part in re.findall(r"(\w+(?:\.c)?|\W+)", line): |
|
2d3c4a7aec0a
A tool to transform gprof(1) output into HTML, so you can click on a
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
71 if part in labels: |
|
2d3c4a7aec0a
A tool to transform gprof(1) output into HTML, so you can click on a
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
72 part = '<a href="#call:%s">%s</a>' % (part, part) |
|
2d3c4a7aec0a
A tool to transform gprof(1) output into HTML, so you can click on a
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
73 output.write(part) |
|
2d3c4a7aec0a
A tool to transform gprof(1) output into HTML, so you can click on a
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
74 output.write(trailer) |
|
2d3c4a7aec0a
A tool to transform gprof(1) output into HTML, so you can click on a
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
75 output.close() |
|
2d3c4a7aec0a
A tool to transform gprof(1) output into HTML, so you can click on a
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
76 webbrowser.open("file:" + os.path.abspath(outputfilename)) |
|
2d3c4a7aec0a
A tool to transform gprof(1) output into HTML, so you can click on a
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
77 |
|
33074
981fff7363b9
[Patch #1005491 ] use __name__ == '__main__' in scripts
Andrew M. Kuchling <amk@amk.ca>
parents:
24721
diff
changeset
|
78 if __name__ == '__main__': |
|
981fff7363b9
[Patch #1005491 ] use __name__ == '__main__' in scripts
Andrew M. Kuchling <amk@amk.ca>
parents:
24721
diff
changeset
|
79 main() |
