comparison mercurial/statprof.py @ 46017:068307b638f4

statprof: fix off-by-one-line error in output 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: ``` Differential Revision: https://phab.mercurial-scm.org/D9510
author Kyle Lippincott <spectral@google.com>
date Wed, 02 Dec 2020 15:38:05 -0800
parents 89a2afe31e82
children 8b0a3ff5ed12
comparison
equal deleted inserted replaced
46016:372409eb5cd1 46017:068307b638f4
730 # Skip boiler plate parts of the stack 730 # Skip boiler plate parts of the stack
731 while i < len(stack) and stack[i].skipname() in skips: 731 while i < len(stack) and stack[i].skipname() in skips:
732 i += 1 732 i += 1
733 if i < len(stack): 733 if i < len(stack):
734 child.add(stack[i:], time) 734 child.add(stack[i:], time)
735 else:
736 # Normally this is done by the .add() calls
737 child.count += time
735 738
736 root = HotNode(None) 739 root = HotNode(None)
737 lasttime = data.samples[0].time 740 lasttime = data.samples[0].time
738 for sample in data.samples: 741 for sample in data.samples:
739 root.add(sample.stack[::-1], sample.time - lasttime) 742 root.add(sample.stack[::-1], sample.time - lasttime)
747 for c in pycompat.itervalues(node.children) 750 for c in pycompat.itervalues(node.children)
748 if c.count >= (limit * root.count) 751 if c.count >= (limit * root.count)
749 ] 752 ]
750 if site: 753 if site:
751 indent = depth * 2 - 1 754 indent = depth * 2 - 1
752 filename = b'' 755 filename = (site.filename() + b':').ljust(15)
753 function = b'' 756 function = site.function
754 if len(node.children) > 0:
755 childsite = list(pycompat.itervalues(node.children))[0].site
756 filename = (childsite.filename() + b':').ljust(15)
757 function = childsite.function
758 757
759 # lots of string formatting 758 # lots of string formatting
760 listpattern = ( 759 listpattern = (
761 b''.ljust(indent) 760 b''.ljust(indent)
762 + (b'\\' if multiple_siblings else b'|') 761 + (b'\\' if multiple_siblings else b'|')