This is an archive of the discontinued Mercurial Phabricator instance.

statprof: separate functions and "line", assume 4 digit line numbers
ClosedPublic

Authored by spectral on Dec 2 2020, 10:20 PM.

Details

Summary

Previously, the profile output looked like this (I've removed many lines that
are mostly inconsequential):

| 100.0%  0.02s  hg:             <module>          line 43:  dispatch.run()
| 100.0%  0.02s  dispatch.py:    run               line 115:  status = dispatch(req)
| 100.0%  0.02s  dispatch.py:    _runcatchfunc     line 432:  return _dispatch(req)
 \ 50.0%  0.01s  dispatch.py:    _dispatch         line 1228:  return runcommand(
   | 50.0%  0.01s  dispatch.py:    runcommand      line 883:  ret = _runcommand(ui, optio...
   | 50.0%  0.01s  dispatch.py:    _runcommand     line 1240:  return cmdfunc()
   | 50.0%  0.01s  localrepo.py:   __getitem__     line 1670:  quick_access = self._quick_...
   | 50.0%  0.01s  localrepo.py:   _quick_access_changeidline 1650:  return self._quick_access_c...
   | 50.0%  0.01s  localrepo.py:   __get__         line 179:  return getattr(unfi, self.n...
   | 50.0%  0.01s  util.py:        __get__         line 1747:  result = self.func(obj)
   | 50.0%  0.01s  localrepo.py:   _quick_access_changeid_wcline  1611:  cl = self.unfiltered().chan...
   | 50.0%  0.01s  localrepo.py:   __get__         line 110:  return super(_basefilecache...
   | 50.0%  0.01s  util.py:        __getattribute__line 245:  self.__spec__.loader.exec_m...
   | 50.0%  0.01s  <frozen importlib._bootstrap_external>: exec_moduleline            783:
   | 50.0%  0.01s  <frozen importlib._bootstrap>: _call_with_frames_removedline                 219:
   | 50.0%  0.01s  changelog.py:   <module>        line 376:  class changelog(revlog.revl...
   | 50.0%  0.01s  util.py:        __getattribute__line 245:  self.__spec__.loader.exec_m...
   | 50.0%  0.01s  <frozen importlib._bootstrap_external>: exec_moduleline            779:
   | 50.0%  0.01s  <frozen importlib._bootstrap_external>: get_codeline         868:
   | 50.0%  0.01s  <frozen importlib._bootstrap_external>: path_statsline           1012:
   | 50.0%  0.01s  <frozen importlib._bootstrap_external>: _path_statline           87:

This has a few problems, though I'm only addressing some of them.

  1. If the stuff before "line ###" is long, there's no separation between the function name and the "line" string.
  2. If the stuff before "line ###" is really long, there's excessive separation between the "line" string and the line number.
  3. We frequently have 4-digit line numbers, the code on the right wasn't dynamically indented and ended up quite messy looking.

To solve these problems, I've added a ", " prefix before "line" iff it would
otherwise not have any separation such as spaces. I've added a 'max' so that we
never use a negative width (which is the cause of problem #2 above), and I've
added a default assumption of 4 digit line numbers (but again using a 'max' so
this shouldn't cause problems if we go beyond that.

With these changes, it now looks like this:

| 100.0%  0.02s  hg:             <module>          line 43:   dispatch.run()
| 100.0%  0.02s  dispatch.py:    run               line 115:  status = dispatch(req)
| 100.0%  0.02s  dispatch.py:    _runcatchfunc     line 432:  return _dispatch(req)
 \ 50.0%  0.01s  dispatch.py:    _dispatch         line 1228: return runcommand(
   | 50.0%  0.01s  dispatch.py:    runcommand      line 883:  ret = _runcommand(ui, optio...
   | 50.0%  0.01s  dispatch.py:    _runcommand     line 1240: return cmdfunc()
   | 50.0%  0.01s  localrepo.py:   __getitem__     line 1670: quick_access = self._quick_...
   | 50.0%  0.01s  localrepo.py:   _quick_access_changeid, line 1650: return self._quick_access_c...
   | 50.0%  0.01s  localrepo.py:   __get__         line 179:  return getattr(unfi, self.n...
   | 50.0%  0.01s  util.py:        __get__         line 1747: result = self.func(obj)
   | 50.0%  0.01s  localrepo.py:   _quick_access_changeid_wc, line 1611: cl = self.unfiltered().chan...
   | 50.0%  0.01s  localrepo.py:   __get__         line 110:  return super(_basefilecache...
   | 50.0%  0.01s  util.py:        __getattribute__, line 245:  self.__spec__.loader.exec_m...
   | 50.0%  0.01s  <frozen importlib._bootstrap_external>: exec_module, line 783:
   | 50.0%  0.01s  <frozen importlib._bootstrap>: _call_with_frames_removed, line 219:
   | 50.0%  0.01s  changelog.py:   <module>        line 376:  class changelog(revlog.revl...
   | 50.0%  0.01s  util.py:        __getattribute__, line 245:  self.__spec__.loader.exec_m...
   | 50.0%  0.01s  <frozen importlib._bootstrap_external>: exec_module, line 779:
   | 50.0%  0.01s  <frozen importlib._bootstrap_external>: get_code, line 868:
   | 50.0%  0.01s  <frozen importlib._bootstrap_external>: path_stats, line 1012:
   | 50.0%  0.01s  <frozen importlib._bootstrap_external>: _path_stat, line 87:

Diff Detail

Repository
rHG Mercurial
Lint
Automatic diff as part of commit; lint not applicable.
Unit
Automatic diff as part of commit; unit tests not applicable.

Event Timeline

spectral created this revision.Dec 2 2020, 10:20 PM
pulkit accepted this revision.Dec 3 2020, 3:20 AM
This revision is now accepted and ready to land.Dec 3 2020, 3:20 AM
baymax updated this revision to Diff 24003.Dec 3 2020, 6:16 AM