179
|
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)
|