mirror of
https://github.com/facebook/sapling.git
synced 2024-10-11 09:17:30 +03:00
d203784d68
Summary: As the title. Test Plan: `arc unit` Reviewers: #sourcecontrol, stash, rmcelroy Reviewed By: stash, rmcelroy Subscribers: rmcelroy, stash, mjpieters Differential Revision: https://phabricator.intern.facebook.com/D4232321 Signature: t1:4232321:1480067588:54e91ece8fa6b5ff13b3ebc9279217c76bf96a24
60 lines
1.7 KiB
Python
60 lines
1.7 KiB
Python
# statprofext.py - improved statprof integration
|
|
#
|
|
# Copyright 2013 Facebook, Inc.
|
|
#
|
|
# This software may be used and distributed according to the terms of the
|
|
# GNU General Public License version 2 or any later version.
|
|
"""integrates the statprof profiler more tightly with Mercurial
|
|
|
|
This extension configures the statprof based on Mercurial config knobs.
|
|
|
|
statprof.mechanism - configures which profiling mechanism is used
|
|
(thread, signal)
|
|
statprof.format - configures the output format
|
|
(hotpath, json)
|
|
"""
|
|
|
|
import contextlib
|
|
from mercurial.i18n import _
|
|
from mercurial import (
|
|
error,
|
|
extensions,
|
|
profiling,
|
|
)
|
|
|
|
def extsetup(ui):
|
|
extensions.wrapfunction(profiling, 'statprofile', statprofile)
|
|
|
|
@contextlib.contextmanager
|
|
def statprofile(orig, ui, fp):
|
|
try:
|
|
import statprof
|
|
except ImportError:
|
|
raise error.Abort(_(
|
|
'statprof not available - install using "easy_install statprof"'))
|
|
|
|
freq = ui.configint('profiling', 'freq', default=1000)
|
|
if freq > 0:
|
|
statprof.reset(freq)
|
|
else:
|
|
ui.warn(_("invalid sampling frequency '%s' - ignoring\n") % freq)
|
|
|
|
mechanism = ui.config('statprof', 'mechanism', 'thread')
|
|
statprof.start(mechanism=mechanism)
|
|
try:
|
|
yield
|
|
finally:
|
|
statprof.stop()
|
|
|
|
profformat = ui.config('statprof', 'format', 'hotpath')
|
|
|
|
if profformat == 'hotpath':
|
|
displayformat = statprof.DisplayFormats.Hotpath
|
|
elif profformat == 'json':
|
|
displayformat = statprof.DisplayFormats.Json
|
|
else:
|
|
ui.warn(_("unknown profiler output format: %s") % profformat)
|
|
displayformat = statprof.DisplayFormats.Hotpath
|
|
|
|
statprof.display(fp, format=displayformat)
|