--- a/mercurial/profiling.py Thu Oct 20 23:16:32 2016 +0900
+++ b/mercurial/profiling.py Fri Nov 04 20:50:38 2016 -0700
@@ -80,11 +80,7 @@
@contextlib.contextmanager
def statprofile(ui, fp):
- try:
- import statprof
- except ImportError:
- raise error.Abort(_(
- 'statprof not available - install using "easy_install statprof"'))
+ from . import statprof
freq = ui.configint('profiling', 'freq', default=1000)
if freq > 0:
@@ -94,12 +90,29 @@
else:
ui.warn(_("invalid sampling frequency '%s' - ignoring\n") % freq)
- statprof.start()
+ statprof.start(mechanism='thread')
+
try:
yield
finally:
- statprof.stop()
- statprof.display(fp)
+ data = statprof.stop()
+
+ profformat = ui.config('profiling', 'statformat', 'hotpath')
+
+ formats = {
+ 'byline': statprof.DisplayFormats.ByLine,
+ 'bymethod': statprof.DisplayFormats.ByMethod,
+ 'hotpath': statprof.DisplayFormats.Hotpath,
+ 'json': statprof.DisplayFormats.Json,
+ }
+
+ if profformat in formats:
+ displayformat = formats[profformat]
+ else:
+ ui.warn(_('unknown profiler output format: %s\n') % profformat)
+ displayformat = statprof.DisplayFormats.Hotpath
+
+ statprof.display(fp, data=data, format=displayformat)
@contextlib.contextmanager
def profile(ui):