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