6
6
from django .template .loader import render_to_string
7
7
from django .utils .translation import ugettext_lazy as _
8
8
from debug_toolbar .panels import DebugPanel
9
- from debug_toolbar .debug .timer import DebugTimer
10
9
11
10
class TimerDebugPanel (DebugPanel ):
12
11
"""
13
12
Panel that displays the time a response took in milliseconds.
14
13
"""
15
14
name = 'Timer'
16
-
17
- def __init__ (self , context = {}):
18
- super (TimerDebugPanel , self ).__init__ (context )
19
- self .timer = DebugTimer ()
20
- self .has_content = self .timer .has_resource
15
+ try : # if resource module not available, don't show content panel
16
+ resource
17
+ except NameError :
18
+ has_content = False
19
+ has_resource = False
20
+ else :
21
+ has_content = True
22
+ has_resource = True
21
23
22
24
def process_request (self , request ):
23
- self .timer .start (request )
25
+ self ._start_time = time .time ()
26
+ if self .has_resource :
27
+ self ._start_rusage = resource .getrusage (resource .RUSAGE_SELF )
24
28
25
29
def process_response (self , request , response ):
26
- self .timer .stop (request , response )
30
+ self .total_time = (time .time () - self ._start_time ) * 1000
31
+ if self .has_resource :
32
+ self ._end_rusage = resource .getrusage (resource .RUSAGE_SELF )
27
33
28
34
def nav_title (self ):
29
35
return _ ('Time' )
30
36
31
37
def nav_subtitle (self ):
32
38
# TODO l10n
33
- if self .timer . has_resource :
34
- utime = self .timer . _end_rusage .ru_utime - self . timer ._start_rusage .ru_utime
35
- stime = self .timer . _end_rusage .ru_stime - self . timer ._start_rusage .ru_stime
36
- return 'CPU: %0.2fms (%0.2fms)' % ((utime + stime ) * 1000.0 , self .timer . total_time )
39
+ if self .has_resource :
40
+ utime = self ._end_rusage .ru_utime - self ._start_rusage .ru_utime
41
+ stime = self ._end_rusage .ru_stime - self ._start_rusage .ru_stime
42
+ return 'CPU: %0.2fms (%0.2fms)' % ((utime + stime ) * 1000.0 , self .total_time )
37
43
else :
38
- return 'TOTAL: %0.2fms' % (self .timer . total_time )
44
+ return 'TOTAL: %0.2fms' % (self .total_time )
39
45
40
46
def title (self ):
41
47
return _ ('Resource Usage' )
42
48
43
49
def url (self ):
44
50
return ''
45
51
52
+ def _elapsed_ru (self , name ):
53
+ return getattr (self ._end_rusage , name ) - getattr (self ._start_rusage , name )
54
+
46
55
def content (self ):
47
56
48
- utime = 1000 * self .timer . elapsed_ru ('ru_utime' )
49
- stime = 1000 * self .timer . elapsed_ru ('ru_stime' )
50
- vcsw = self .timer . elapsed_ru ('ru_nvcsw' )
51
- ivcsw = self .timer . elapsed_ru ('ru_nivcsw' )
52
- minflt = self .timer . elapsed_ru ('ru_minflt' )
53
- majflt = self .timer . elapsed_ru ('ru_majflt' )
57
+ utime = 1000 * self ._elapsed_ru ('ru_utime' )
58
+ stime = 1000 * self ._elapsed_ru ('ru_stime' )
59
+ vcsw = self ._elapsed_ru ('ru_nvcsw' )
60
+ ivcsw = self ._elapsed_ru ('ru_nivcsw' )
61
+ minflt = self ._elapsed_ru ('ru_minflt' )
62
+ majflt = self ._elapsed_ru ('ru_majflt' )
54
63
55
64
# these are documented as not meaningful under Linux. If you're running BSD
56
65
# feel free to enable them, and add any others that I hadn't gotten to before
@@ -69,7 +78,7 @@ def content(self):
69
78
(_ ('User CPU time' ), '%0.3f msec' % utime ),
70
79
(_ ('System CPU time' ), '%0.3f msec' % stime ),
71
80
(_ ('Total CPU time' ), '%0.3f msec' % (utime + stime )),
72
- (_ ('Elapsed time' ), '%0.3f msec' % self .timer . total_time ),
81
+ (_ ('Elapsed time' ), '%0.3f msec' % self .total_time ),
73
82
(_ ('Context switches' ), '%d voluntary, %d involuntary' % (vcsw , ivcsw )),
74
83
# ('Memory use', '%d max RSS, %d shared, %d unshared' % (rss, srss, urss + usrss)),
75
84
# ('Page faults', '%d no i/o, %d requiring i/o' % (minflt, majflt)),
0 commit comments