Mercurial > hg
changeset 30317:3fd53cc1aad8
profiling: make statprof the default profiler (BC)
The statprof sampling profiler runs with significantly less overhead.
Its data is therefore more useful. Furthermore, its default output
shows the hotpath by default, which I've found to be way more useful
than the default profiler's function time table.
There is one behavioral regression with this change worth noting:
the statprof profiler currently doesn't profile individual hgweb
requests like lsprof does. This is because the current implementation
of statprof only profiles the thread that started profiling.
The ability for lsprof to profile individual hgweb requests is
relatively new and likely not widely used. Furthermore, I have plans
to modify statprof to support profiling multiple threads. I expect
that change to go through several iterations. I'm submitting this
patch first so there is more time to test statprof. Perfect is the
enemy of good.
author | Gregory Szorc <gregory.szorc@gmail.com> |
---|---|
date | Fri, 04 Nov 2016 21:44:25 -0700 |
parents | faf1b8923da2 |
children | e1d6aa0e4c3a |
files | mercurial/help/config.txt mercurial/profiling.py tests/test-profile.t |
diffstat | 3 files changed, 8 insertions(+), 8 deletions(-) [+] |
line wrap: on
line diff
--- a/mercurial/help/config.txt Fri Nov 04 20:50:38 2016 -0700 +++ b/mercurial/help/config.txt Fri Nov 04 21:44:25 2016 -0700 @@ -1401,7 +1401,7 @@ ``type`` The type of profiler to use. - (default: ls) + (default: stat) ``ls`` Use Python's built-in instrumenting profiler. This profiler
--- a/mercurial/profiling.py Fri Nov 04 20:50:38 2016 -0700 +++ b/mercurial/profiling.py Fri Nov 04 21:44:25 2016 -0700 @@ -123,10 +123,10 @@ """ profiler = os.getenv('HGPROF') if profiler is None: - profiler = ui.config('profiling', 'type', default='ls') + profiler = ui.config('profiling', 'type', default='stat') if profiler not in ('ls', 'stat', 'flame'): ui.warn(_("unrecognized profiler '%s' - ignored\n") % profiler) - profiler = 'ls' + profiler = 'stat' output = ui.config('profiling', 'output')
--- a/tests/test-profile.t Fri Nov 04 20:50:38 2016 -0700 +++ b/tests/test-profile.t Fri Nov 04 21:44:25 2016 -0700 @@ -66,29 +66,29 @@ statistical profiler works - $ HGPROF=stat hg --profile sleep 2>../out + $ hg --profile sleep 2>../out $ grep Sample ../out Sample count: \d+ (re) Various statprof formatters work - $ HGPROF=stat hg --profile --config profiling.statformat=byline sleep 2>../out + $ hg --profile --config profiling.statformat=byline sleep 2>../out $ head -n 1 ../out % cumulative self $ grep Sample ../out Sample count: \d+ (re) - $ HGPROF=stat hg --profile --config profiling.statformat=bymethod sleep 2>../out + $ hg --profile --config profiling.statformat=bymethod sleep 2>../out $ head -n 1 ../out % cumulative self $ grep Sample ../out Sample count: \d+ (re) - $ HGPROF=stat hg --profile --config profiling.statformat=hotpath sleep 2>../out + $ hg --profile --config profiling.statformat=hotpath sleep 2>../out $ grep Sample ../out Sample count: \d+ (re) - $ HGPROF=stat hg --profile --config profiling.statformat=json sleep 2>../out + $ hg --profile --config profiling.statformat=json sleep 2>../out $ cat ../out \[\[\d+.* (re)