Mercurial > hg
view mercurial/lsprofcalltree.py @ 17392:bdd248666dbc stable
debuginstall: show directory for Python lib
Example new output
on Windows:
$ hg debuginstall
checking encoding (cp1252)...
checking Python lib (C:\Users\adi\hgrepos\hg-main\hg-python\lib)...
checking installed modules (C:\Users\adi\hgrepos\hg-main\mercurial)...
checking templates (C:\Users\adi\hgrepos\hg-main\mercurial\templates)...
checking commit editor...
C:\Program Files (x86)\Notepad++\notepad++.exe
checking username...
no problems detected
on Linux:
adi@kork-ubuntu64:~/hgrepos/hg-main$ ./hg debuginstall
checking encoding (UTF-8)...
checking Python lib (/usr/lib/python2.7)...
checking installed modules (/home/adi/hgrepos/hg-main/mercurial)...
checking templates (/home/adi/hgrepos/hg-main/mercurial/templates)...
checking commit editor...
checking username...
no problems detected
author | Adrian Buehlmann <adrian@cadifra.com> |
---|---|
date | Mon, 06 Aug 2012 12:59:47 +0200 |
parents | beae42f3d93b |
children | 071af8d385a9 |
line wrap: on
line source
""" lsprofcalltree.py - lsprof output which is readable by kcachegrind Authors: * David Allouche <david <at> allouche.net> * Jp Calderone & Itamar Shtull-Trauring * Johan Dahlin This software may be used and distributed according to the terms of the GNU General Public License, incorporated herein by reference. """ def label(code): if isinstance(code, str): return '~' + code # built-in functions ('~' sorts at the end) else: return '%s %s:%d' % (code.co_name, code.co_filename, code.co_firstlineno) class KCacheGrind(object): def __init__(self, profiler): self.data = profiler.getstats() self.out_file = None def output(self, out_file): self.out_file = out_file print >> out_file, 'events: Ticks' self._print_summary() for entry in self.data: self._entry(entry) def _print_summary(self): max_cost = 0 for entry in self.data: totaltime = int(entry.totaltime * 1000) max_cost = max(max_cost, totaltime) print >> self.out_file, 'summary: %d' % (max_cost,) def _entry(self, entry): out_file = self.out_file code = entry.code #print >> out_file, 'ob=%s' % (code.co_filename,) if isinstance(code, str): print >> out_file, 'fi=~' else: print >> out_file, 'fi=%s' % (code.co_filename,) print >> out_file, 'fn=%s' % (label(code),) inlinetime = int(entry.inlinetime * 1000) if isinstance(code, str): print >> out_file, '0 ', inlinetime else: print >> out_file, '%d %d' % (code.co_firstlineno, inlinetime) # recursive calls are counted in entry.calls if entry.calls: calls = entry.calls else: calls = [] if isinstance(code, str): lineno = 0 else: lineno = code.co_firstlineno for subentry in calls: self._subentry(lineno, subentry) print >> out_file def _subentry(self, lineno, subentry): out_file = self.out_file code = subentry.code #print >> out_file, 'cob=%s' % (code.co_filename,) print >> out_file, 'cfn=%s' % (label(code),) if isinstance(code, str): print >> out_file, 'cfi=~' print >> out_file, 'calls=%d 0' % (subentry.callcount,) else: print >> out_file, 'cfi=%s' % (code.co_filename,) print >> out_file, 'calls=%d %d' % ( subentry.callcount, code.co_firstlineno) totaltime = int(subentry.totaltime * 1000) print >> out_file, '%d %d' % (lineno, totaltime)