Patchwork D6477: profiling: add an option to show actual time spent

login
register
mail settings
Submitter phabricator
Date June 5, 2019, 7:05 p.m.
Message ID <differential-rev-PHID-DREV-ykxup3aeykxmj6lqksm7-req@phab.mercurial-scm.org>
Download mbox | patch
Permalink /patch/40324/
State Superseded
Headers show

Comments

phabricator - June 5, 2019, 7:05 p.m.
valentin.gatienbaron created this revision.
Herald added a subscriber: mercurial-devel.
Herald added a reviewer: hg-reviewers.

REVISION SUMMARY
  To get, for instance:
  
  ...
   \  6.6%  4.08s  lock.py:        __exit__          line 1566: ...
  
    |  6.5%  4.01s  exchange.py:    close           line 1191: ...
    |  6.5%  4.01s  transaction.py: _active         line 1443: ...
    |  6.5%  4.01s  transaction.py: close           line 47:   ...
    |  6.2%  3.84s  scmutil.py:     wrapped         line 529:  ...
    |  6.2%  3.81s  localrepo.py:   wrapper         line 2114: ...
    |  6.2%  3.81s  localrepo.py:   updatecaches    line 177:  ...
    ...
  
  instead of:
  
  ...
   \  6.6%  lock.py:        __exit__          line 1566: ...
  
    |  6.5%  exchange.py:    close           line 1191: ...
    |  6.5%  transaction.py: _active         line 1443: ...
    |  6.5%  transaction.py: close           line 47:   ...
    |  6.2%  scmutil.py:     wrapped         line 529:  ...
    |  6.2%  localrepo.py:   wrapper         line 2114: ...
    |  6.2%  localrepo.py:   updatecaches    line 177:  ...
    ...
  
  I find that if it's not displayed, I frequently end up estimating the
  numbers by hand.

REPOSITORY
  rHG Mercurial

REVISION DETAIL
  https://phab.mercurial-scm.org/D6477

AFFECTED FILES
  mercurial/configitems.py
  mercurial/help/config.txt
  mercurial/profiling.py
  mercurial/statprof.py

CHANGE DETAILS




To: valentin.gatienbaron, #hg-reviewers
Cc: mercurial-devel
phabricator - June 5, 2019, 7:45 p.m.
pulkit added a comment.


  > I find that if it's not displayed, I frequently end up estimating the
  >  numbers by hand.
  
  Mee too! I think we should enable this by default. What do you think?

REPOSITORY
  rHG Mercurial

REVISION DETAIL
  https://phab.mercurial-scm.org/D6477

To: valentin.gatienbaron, #hg-reviewers
Cc: pulkit, mercurial-devel
phabricator - June 6, 2019, 1:09 a.m.
valentin.gatienbaron added a comment.


  Oh yeah, I didn't really consider the default. I clearly prefer "true", so I'll change it. Maybe it's not even worth having an option. I think the only advantage of not printing this column is to have 5 more columns available for the code excerpt at the end of lines.

REPOSITORY
  rHG Mercurial

REVISION DETAIL
  https://phab.mercurial-scm.org/D6477

To: valentin.gatienbaron, #hg-reviewers
Cc: pulkit, mercurial-devel

Patch

diff --git a/mercurial/statprof.py b/mercurial/statprof.py
--- a/mercurial/statprof.py
+++ b/mercurial/statprof.py
@@ -678,6 +678,7 @@ 
     for sample in data.samples:
         root.add(sample.stack[::-1], sample.time - lasttime)
         lasttime = sample.time
+    showtime = kwargs.get(r'showtime', False)
 
     def _write(node, depth, multiple_siblings):
         site = node.site
@@ -695,7 +696,9 @@ 
             # lots of string formatting
             listpattern = ''.ljust(indent) +\
                           ('\\' if multiple_siblings else '|') +\
-                          ' %4.1f%%  %s %s'
+                          ' %4.1f%%' +\
+                          (' %5.2fs' % node.count if showtime else '') +\
+                          '  %s %s'
             liststring = listpattern % (node.count / root.count * 100,
                                         filename, function)
             codepattern = '%' + ('%d' % (55 - len(liststring))) + 's %d:  %s'
diff --git a/mercurial/profiling.py b/mercurial/profiling.py
--- a/mercurial/profiling.py
+++ b/mercurial/profiling.py
@@ -147,6 +147,8 @@ 
             # inconsistent config: profiling.showmin
             limit = ui.configwith(fraction, 'profiling', 'showmin', 0.05)
             kwargs[r'limit'] = limit
+            showtime = ui.configbool('profiling', 'showtime')
+            kwargs[r'showtime'] = showtime
 
         statprof.display(fp, data=data, format=displayformat, **kwargs)
 
diff --git a/mercurial/help/config.txt b/mercurial/help/config.txt
--- a/mercurial/help/config.txt
+++ b/mercurial/help/config.txt
@@ -1780,6 +1780,11 @@ 
 
     The option is unused on other formats.
 
+``showtime``
+    Show time taken as absolute durations, in addition to percentages.
+    Only used by the ``hotpath`` format.
+    (default: false)
+
 ``progress``
 ------------
 
diff --git a/mercurial/configitems.py b/mercurial/configitems.py
--- a/mercurial/configitems.py
+++ b/mercurial/configitems.py
@@ -947,6 +947,9 @@ 
 coreconfigitem('profiling', 'showmin',
     default=dynamicdefault,
 )
+coreconfigitem('profiling', 'showtime',
+    default=False,
+)
 coreconfigitem('profiling', 'sort',
     default='inlinetime',
 )