~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to profile_imports.py

  • Committer: Martin Pool
  • Date: 2009-08-20 04:53:23 UTC
  • mto: This revision was merged to the branch mainline in revision 4632.
  • Revision ID: mbp@sourcefrog.net-20090820045323-4hsicfa87pdq3l29
Correction to xdg_cache_dir and add a simple test

Show diffs side-by-side

added added

removed removed

Lines of Context:
13
13
#
14
14
# You should have received a copy of the GNU General Public License
15
15
# along with this program; if not, write to the Free Software
16
 
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 
16
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
17
17
 
18
18
"""A custom importer and regex compiler which logs time spent."""
19
19
 
26
26
_total_stack = {}
27
27
_info = {}
28
28
_cur_id = 0
 
29
_timer = time.time
 
30
if sys.platform == 'win32':
 
31
    _timer = time.clock
29
32
 
30
33
 
31
34
def stack_add(name, frame_name, frame_lineno, scope_name=None):
82
85
        # scope_name, frame_name, frame_lineno
83
86
        out_file.write('%5.1f %5.1f %s %-35s\t@ %s:%d\n'
84
87
            % (info[-1]*1000., mod_time*1000., '+'*info[0], 
85
 
               cur[1][:40], info[1], info[2]))
 
88
               cur[1][:35], info[1], info[2]))
86
89
 
87
90
        if sorted:
88
91
            c_times.sort()
115
118
    frame = sys._getframe(1)
116
119
    frame_name = frame.f_globals.get('__name__', '<unknown>')
117
120
    extra = ''
118
 
    cur_frame = 1
119
121
    if frame_name.endswith('demandload'):
120
122
        # If this was demandloaded, we have 3 frames to ignore
121
 
        extra = ' (demandload)'
122
 
        frame = sys._getframe(4)
123
 
        cur_frame = 4
124
 
        frame_name = frame.f_globals.get('__name__', '<unknown>')
 
123
        extra = '(demandload) '
 
124
        frame = sys._getframe(4)
 
125
        frame_name = frame.f_globals.get('__name__', '<unknown>')
 
126
    elif frame_name.endswith('lazy_import'):
 
127
        # If this was lazily imported, we have 3 frames to ignore
 
128
        extra = '[l] '
 
129
        frame = sys._getframe(4)
 
130
        frame_name = frame.f_globals.get('__name__', '<unknown>')
 
131
    if fromlist:
 
132
        extra += ' [%s]' % (', '.join(map(str, fromlist)),)
125
133
    frame_lineno = frame.f_lineno
126
134
 
127
 
    this = stack_add(name+extra, frame_name, frame_lineno, scope_name)
 
135
    this = stack_add(extra + name, frame_name, frame_lineno, scope_name)
128
136
 
129
 
    tstart = time.time()
 
137
    tstart = _timer()
130
138
    try:
131
139
        # Do the import
132
140
        mod = _real_import(name, globals, locals, fromlist)
133
141
    finally:
134
 
        tload = time.time()-tstart
 
142
        tload = _timer()-tstart
135
143
        stack_finish(this, tload)
136
144
 
137
145
    return mod
145
153
    # And who is requesting this?
146
154
    frame = sys._getframe(2)
147
155
    frame_name = frame.f_globals.get('__name__', '<unknown>')
 
156
 
 
157
    extra = ''
 
158
    if frame_name.endswith('lazy_regex'):
 
159
        # If this was lazily compiled, we have 3 more frames to ignore
 
160
        extra = '[l] '
 
161
        frame = sys._getframe(5)
 
162
        frame_name = frame.f_globals.get('__name__', '<unknown>')
148
163
    frame_lineno = frame.f_lineno
149
 
 
150
 
    this = stack_add(repr(args[0]), frame_name, frame_lineno)
151
 
 
152
 
    tstart = time.time()
 
164
    this = stack_add(extra+repr(args[0]), frame_name, frame_lineno)
 
165
 
 
166
    tstart = _timer()
153
167
    try:
154
168
        # Measure the compile time
155
169
        comp = _real_compile(*args, **kwargs)
156
170
    finally:
157
 
        tcompile = time.time() - tstart
 
171
        tcompile = _timer() - tstart
158
172
        stack_finish(this, tcompile)
159
173
 
160
174
    return comp