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)