|
1 ########################################################################### |
|
2 # |
|
3 # Psyco logger. |
|
4 # Copyright (C) 2001-2002 Armin Rigo et.al. |
|
5 |
|
6 """Psyco logger. |
|
7 |
|
8 See log() in core.py. |
|
9 """ |
|
10 ########################################################################### |
|
11 |
|
12 |
|
13 import _psyco |
|
14 from time import time, localtime, strftime |
|
15 |
|
16 |
|
17 current = None |
|
18 print_charges = 10 |
|
19 dump_delay = 0.2 |
|
20 dump_last = 0.0 |
|
21 |
|
22 def write(s, level): |
|
23 t = time() |
|
24 f = t-int(t) |
|
25 try: |
|
26 current.write("%s.%02d %-*s%s\n" % ( |
|
27 strftime("%X", localtime(int(t))), |
|
28 int(f*100.0), 63-level, s, |
|
29 "%"*level)) |
|
30 current.flush() |
|
31 except (OSError, IOError): |
|
32 pass |
|
33 |
|
34 def psycowrite(s): |
|
35 t = time() |
|
36 f = t-int(t) |
|
37 try: |
|
38 current.write("%s.%02d %-*s%s\n" % ( |
|
39 strftime("%X", localtime(int(t))), |
|
40 int(f*100.0), 60, s.strip(), |
|
41 "% %")) |
|
42 current.flush() |
|
43 except (OSError, IOError): |
|
44 pass |
|
45 |
|
46 ##def writelines(lines, level=0): |
|
47 ## if lines: |
|
48 ## t = time() |
|
49 ## f = t-int(t) |
|
50 ## timedesc = strftime("%x %X", localtime(int(t))) |
|
51 ## print >> current, "%s.%03d %-*s %s" % ( |
|
52 ## timedesc, int(f*1000), |
|
53 ## 50-level, lines[0], |
|
54 ## "+"*level) |
|
55 ## timedesc = " " * (len(timedesc)+5) |
|
56 ## for line in lines[1:]: |
|
57 ## print >> current, timedesc, line |
|
58 |
|
59 def writememory(): |
|
60 write("memory usage: %d+ kb" % _psyco.memory(), 1) |
|
61 |
|
62 def dumpcharges(): |
|
63 global dump_last |
|
64 if print_charges: |
|
65 t = time() |
|
66 if not (dump_last <= t < dump_last+dump_delay): |
|
67 if t <= dump_last+1.5*dump_delay: |
|
68 dump_last += dump_delay |
|
69 else: |
|
70 dump_last = t |
|
71 #write("%s: charges:" % who, 0) |
|
72 lst = _psyco.stattop(print_charges) |
|
73 if lst: |
|
74 f = t-int(t) |
|
75 lines = ["%s.%02d ______\n" % ( |
|
76 strftime("%X", localtime(int(t))), |
|
77 int(f*100.0))] |
|
78 i = 1 |
|
79 for co, charge in lst: |
|
80 detail = co.co_filename |
|
81 if len(detail) > 19: |
|
82 detail = '...' + detail[-17:] |
|
83 lines.append(" #%-3d |%4.1f %%| %-26s%20s:%d\n" % |
|
84 (i, charge*100.0, co.co_name, detail, |
|
85 co.co_firstlineno)) |
|
86 i += 1 |
|
87 current.writelines(lines) |
|
88 current.flush() |
|
89 |
|
90 def writefinalstats(): |
|
91 dumpcharges() |
|
92 writememory() |
|
93 writedate("program exit") |
|
94 |
|
95 def writedate(msg): |
|
96 write('%s, %s' % (msg, strftime("%x")), 20) |