# HG changeset patch # User Gregory Szorc # Date 1478321065 25200 # Node ID 3fd53cc1aad882ac9191d7388885acdbbc2d7103 # Parent faf1b8923da222dc172e072c77bba3893f8f7ae8 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. diff -r faf1b8923da2 -r 3fd53cc1aad8 mercurial/help/config.txt --- 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 diff -r faf1b8923da2 -r 3fd53cc1aad8 mercurial/profiling.py --- 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') diff -r faf1b8923da2 -r 3fd53cc1aad8 tests/test-profile.t --- 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)