Patchwork D9510: statprof: fix off-by-one-line error in output

login
register
mail settings
Submitter phabricator
Date Dec. 3, 2020, 3:20 a.m.
Message ID <differential-rev-PHID-DREV-5evob7kqynjo3hr6525l-req@mercurial-scm.org>
Download mbox | patch
Permalink /patch/47792/
State Superseded
Headers show

Comments

phabricator - Dec. 3, 2020, 3:20 a.m.
spectral created this revision.
Herald added a reviewer: hg-reviewers.
Herald added a subscriber: mercurial-patches.

REVISION SUMMARY
  martinvonz claims they thought that this was intentional, but couldn't remember
  the reasoning for it. I can't understand why it would be preferable, and I
  didn't see anything in the comments in the file about why this would be useful,
  so I'm hopefully not breaking anything by "fixing" it.
  
  Old output
  ----------
  
    | 100.0%  0.01s  dispatch.py:    run               line 43:  dispatch.run()
    | 100.0%  0.01s  dispatch.py:    dispatch          line 115:  status = dispatch(req)
    | 100.0%  0.01s  dispatch.py:    _runcatch         line 266:  ret = _runcatch(req) or 0
    | 100.0%  0.01s  dispatch.py:    _callcatch        line 442:  return _callcatch(ui, _runc...
    | 100.0%  0.01s  scmutil.py:     callcatch         line 451:  return scmutil.callcatch(ui...
    | 100.0%  0.01s  dispatch.py:    _runcatchfunc     line 155:  return func()
    | 100.0%  0.01s  dispatch.py:    _dispatch         line 432:  return _dispatch(req)
    | 100.0%  0.01s  hg.py:          repository        line 1179:  repo = hg.repository(
    | 100.0%  0.01s  hg.py:          _peerorrepo       line 221:  peer = _peerorrepo(
    | 100.0%  0.01s  util.py:        __getattribute__  line 188:  obj = _peerlookup(path).ins...
    | 100.0%  0.01s  localrepo.py:   makelocalrepositoryline 3227:  return makelocalrepository(...
    | 100.0%  0.01s  localrepo.py:   __init__          line 683:  return cls(
    | 100.0%  0.01s  util.py:        __getattribute__  line 1262:  self._extrafilterid = repov...
    | 100.0%  0.01s  <frozen importlib._bootstrap_external>: exec_moduleline          245:  self.__spec__.loader.exec_m...
    | 100.0%  0.01s  <frozen importlib._bootstrap_external>: get_codeline       779:
    | 100.0%  0.01s  <frozen importlib._bootstrap_external>: path_statsline         868:
    | 100.0%  0.01s  <frozen importlib._bootstrap_external>: _path_statline         1012:
  
  
  
  New output
  ----------
  
    | 100.0%  0.01s  hg:             <module>          line 43:  dispatch.run()
    | 100.0%  0.01s  dispatch.py:    run               line 115:  status = dispatch(req)
    | 100.0%  0.01s  dispatch.py:    dispatch          line 266:  ret = _runcatch(req) or 0
    | 100.0%  0.01s  dispatch.py:    _runcatch         line 442:  return _callcatch(ui, _runc...
    | 100.0%  0.01s  dispatch.py:    _callcatch        line 451:  return scmutil.callcatch(ui...
    | 100.0%  0.01s  scmutil.py:     callcatch         line 155:  return func()
    | 100.0%  0.01s  dispatch.py:    _runcatchfunc     line 432:  return _dispatch(req)
    | 100.0%  0.01s  dispatch.py:    _dispatch         line 1179:  repo = hg.repository(
    | 100.0%  0.01s  hg.py:          repository        line 221:  peer = _peerorrepo(
    | 100.0%  0.01s  hg.py:          _peerorrepo       line 188:  obj = _peerlookup(path).ins...
    | 100.0%  0.01s  localrepo.py:   instance          line 3227:  return makelocalrepository(...
    | 100.0%  0.01s  localrepo.py:   makelocalrepositoryline 683:  return cls(
    | 100.0%  0.01s  localrepo.py:   __init__          line 1262:  self._extrafilterid = repov...
    | 100.0%  0.01s  util.py:        __getattribute__  line 245:  self.__spec__.loader.exec_m...
    | 100.0%  0.01s  <frozen importlib._bootstrap_external>: exec_moduleline          779:
    | 100.0%  0.01s  <frozen importlib._bootstrap_external>: get_codeline       868:
    | 100.0%  0.01s  <frozen importlib._bootstrap_external>: path_statsline         1012:
    | 100.0%  0.01s  <frozen importlib._bootstrap_external>: _path_statline         87:

REPOSITORY
  rHG Mercurial

BRANCH
  default

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

AFFECTED FILES
  mercurial/statprof.py
  tests/test-profile.t

CHANGE DETAILS




To: spectral, #hg-reviewers
Cc: mercurial-patches, mercurial-devel

Patch

diff --git a/tests/test-profile.t b/tests/test-profile.t
--- a/tests/test-profile.t
+++ b/tests/test-profile.t
@@ -100,6 +100,8 @@ 
 
   $ hg --profile --config profiling.statformat=hotpath sleep 2>../out || cat ../out
   $ cat ../out | statprofran
+  $ grep sleepext.py ../out
+  .* [0-9.]+%  [0-9.]+s  sleepext.py:\s*sleep           line 7:  time\.sleep.* (re)
 
   $ hg --profile --config profiling.statformat=json sleep 2>../out || cat ../out
   $ cat ../out
diff --git a/mercurial/statprof.py b/mercurial/statprof.py
--- a/mercurial/statprof.py
+++ b/mercurial/statprof.py
@@ -732,6 +732,9 @@ 
                     i += 1
                 if i < len(stack):
                     child.add(stack[i:], time)
+            else:
+                # Normally this is done by the .add() calls
+                child.count += time
 
     root = HotNode(None)
     lasttime = data.samples[0].time
@@ -749,12 +752,8 @@ 
         ]
         if site:
             indent = depth * 2 - 1
-            filename = b''
-            function = b''
-            if len(node.children) > 0:
-                childsite = list(pycompat.itervalues(node.children))[0].site
-                filename = (childsite.filename() + b':').ljust(15)
-                function = childsite.function
+            filename = (site.filename() + b':').ljust(15)
+            function = site.function
 
             # lots of string formatting
             listpattern = (