Mercurial > public > mercurial-scm > hg-stable
diff mercurial/profiling.py @ 43076:2372284d9457
formatting: blacken the codebase
This is using my patch to black
(https://github.com/psf/black/pull/826) so we don't un-wrap collection
literals.
Done with:
hg files 'set:**.py - mercurial/thirdparty/** - "contrib/python-zstandard/**"' | xargs black -S
# skip-blame mass-reformatting only
# no-check-commit reformats foo_bar functions
Differential Revision: https://phab.mercurial-scm.org/D6971
author | Augie Fackler <augie@google.com> |
---|---|
date | Sun, 06 Oct 2019 09:45:02 -0400 |
parents | 0ae593e791fb |
children | 687b865b95ad |
line wrap: on
line diff
--- a/mercurial/profiling.py Sat Oct 05 10:29:34 2019 -0400 +++ b/mercurial/profiling.py Sun Oct 06 09:45:02 2019 -0400 @@ -18,6 +18,7 @@ util, ) + def _loadprofiler(ui, profiler): """load profiler extension. return profile method, or None on failure""" extname = profiler @@ -29,6 +30,7 @@ else: return getattr(mod, 'profile', None) + @contextlib.contextmanager def lsprofile(ui, fp): format = ui.config('profiling', 'format') @@ -37,16 +39,18 @@ climit = ui.configint('profiling', 'nested') if format not in ['text', 'kcachegrind']: - ui.warn(_("unrecognized profiling format '%s'" - " - Ignored\n") % format) + ui.warn(_("unrecognized profiling format '%s'" " - Ignored\n") % format) format = 'text' try: from . import lsprof except ImportError: - raise error.Abort(_( - 'lsprof not available - install from ' - 'http://codespeak.net/svn/user/arigo/hack/misc/lsprof/')) + raise error.Abort( + _( + 'lsprof not available - install from ' + 'http://codespeak.net/svn/user/arigo/hack/misc/lsprof/' + ) + ) p = lsprof.Profiler() p.enable(subcalls=True) try: @@ -56,6 +60,7 @@ if format == 'kcachegrind': from . import lsprofcalltree + calltree = lsprofcalltree.KCacheGrind(p) calltree.output(fp) else: @@ -64,20 +69,25 @@ stats.sort(pycompat.sysstr(field)) stats.pprint(limit=limit, file=fp, climit=climit) + @contextlib.contextmanager def flameprofile(ui, fp): try: from flamegraph import flamegraph except ImportError: - raise error.Abort(_( - 'flamegraph not available - install from ' - 'https://github.com/evanhempel/python-flamegraph')) + raise error.Abort( + _( + 'flamegraph not available - install from ' + 'https://github.com/evanhempel/python-flamegraph' + ) + ) # developer config: profiling.freq freq = ui.configint('profiling', 'freq') filter_ = None collapse_recursion = True - thread = flamegraph.ProfileThread(fp, 1.0 / freq, - filter_, collapse_recursion) + thread = flamegraph.ProfileThread( + fp, 1.0 / freq, filter_, collapse_recursion + ) start_time = util.timer() try: thread.start() @@ -85,9 +95,15 @@ finally: thread.stop() thread.join() - print('Collected %d stack frames (%d unique) in %2.2f seconds.' % ( - util.timer() - start_time, thread.num_frames(), - thread.num_frames(unique=True))) + print( + 'Collected %d stack frames (%d unique) in %2.2f seconds.' + % ( + util.timer() - start_time, + thread.num_frames(), + thread.num_frames(unique=True), + ) + ) + @contextlib.contextmanager def statprofile(ui, fp): @@ -101,8 +117,9 @@ else: ui.warn(_("invalid sampling frequency '%s' - ignoring\n") % freq) - track = ui.config('profiling', 'time-track', - pycompat.iswindows and 'cpu' or 'real') + track = ui.config( + 'profiling', 'time-track', pycompat.iswindows and 'cpu' or 'real' + ) statprof.start(mechanism='thread', track=track) try: @@ -152,12 +169,14 @@ statprof.display(fp, data=data, format=displayformat, **kwargs) + class profile(object): """Start profiling. Profiling is active when the context manager is active. When the context manager exits, profiling results will be written to the configured output. """ + def __init__(self, ui, enabled=True): self._ui = ui self._output = None @@ -193,8 +212,9 @@ # try load profiler from extension with the same name proffn = _loadprofiler(self._ui, profiler) if proffn is None: - self._ui.warn(_("unrecognized profiler '%s' - ignored\n") - % profiler) + self._ui.warn( + _("unrecognized profiler '%s' - ignored\n") % profiler + ) profiler = 'stat' self._output = self._ui.config('profiling', 'output') @@ -210,10 +230,13 @@ class uifp(object): def __init__(self, ui): self._ui = ui + def write(self, data): self._ui.write_err(data) + def flush(self): self._ui.flush() + self._fpdoclose = False self._fp = uifp(self._ui) else: @@ -231,15 +254,16 @@ self._profiler = proffn(self._ui, self._fp) self._profiler.__enter__() - except: # re-raises + except: # re-raises self._closefp() raise def __exit__(self, exception_type, exception_value, traceback): propagate = None if self._profiler is not None: - propagate = self._profiler.__exit__(exception_type, exception_value, - traceback) + propagate = self._profiler.__exit__( + exception_type, exception_value, traceback + ) if self._output == 'blackbox': val = 'Profile:\n%s' % self._fp.getvalue() # ui.log treats the input as a format string,