Mercurial > hg
comparison contrib/perf.py @ 46388:d8ad391e10f5
command-namespace: use `::` are the command separator
This was discussed on the mailing list / phab and `::` got a couple of positive
feedback.
I dediced to not introduce automatic folding of `::`, I feel like it make sense
for `-`, but I like the expliciteness of `::`.
So I am adding alias for backward compatibility.
Differential Revision: https://phab.mercurial-scm.org/D9872
author | Pierre-Yves David <pierre-yves.david@octobus.net> |
---|---|
date | Mon, 25 Jan 2021 16:46:51 +0100 |
parents | b8d8fd2fe75f |
children | 66fb04552122 |
comparison
equal
deleted
inserted
replaced
46387:c41ac8985fe4 | 46388:d8ad391e10f5 |
---|---|
742 | 742 |
743 | 743 |
744 # perf commands | 744 # perf commands |
745 | 745 |
746 | 746 |
747 @command(b'perf--walk', formatteropts) | 747 @command(b'perf::walk|perfwalk', formatteropts) |
748 def perfwalk(ui, repo, *pats, **opts): | 748 def perfwalk(ui, repo, *pats, **opts): |
749 opts = _byteskwargs(opts) | 749 opts = _byteskwargs(opts) |
750 timer, fm = gettimer(ui, opts) | 750 timer, fm = gettimer(ui, opts) |
751 m = scmutil.match(repo[None], pats, {}) | 751 m = scmutil.match(repo[None], pats, {}) |
752 timer( | 752 timer( |
757 ) | 757 ) |
758 ) | 758 ) |
759 fm.end() | 759 fm.end() |
760 | 760 |
761 | 761 |
762 @command(b'perf--annotate', formatteropts) | 762 @command(b'perf::annotate|perfannotate', formatteropts) |
763 def perfannotate(ui, repo, f, **opts): | 763 def perfannotate(ui, repo, f, **opts): |
764 opts = _byteskwargs(opts) | 764 opts = _byteskwargs(opts) |
765 timer, fm = gettimer(ui, opts) | 765 timer, fm = gettimer(ui, opts) |
766 fc = repo[b'.'][f] | 766 fc = repo[b'.'][f] |
767 timer(lambda: len(fc.annotate(True))) | 767 timer(lambda: len(fc.annotate(True))) |
768 fm.end() | 768 fm.end() |
769 | 769 |
770 | 770 |
771 @command( | 771 @command( |
772 b'perf--status', | 772 b'perf::status|perfstatus', |
773 [ | 773 [ |
774 (b'u', b'unknown', False, b'ask status to look for unknown files'), | 774 (b'u', b'unknown', False, b'ask status to look for unknown files'), |
775 (b'', b'dirstate', False, b'benchmark the internal dirstate call'), | 775 (b'', b'dirstate', False, b'benchmark the internal dirstate call'), |
776 ] | 776 ] |
777 + formatteropts, | 777 + formatteropts, |
804 else: | 804 else: |
805 timer(lambda: sum(map(len, repo.status(unknown=opts[b'unknown'])))) | 805 timer(lambda: sum(map(len, repo.status(unknown=opts[b'unknown'])))) |
806 fm.end() | 806 fm.end() |
807 | 807 |
808 | 808 |
809 @command(b'perf--addremove', formatteropts) | 809 @command(b'perf::addremove|perfaddremove', formatteropts) |
810 def perfaddremove(ui, repo, **opts): | 810 def perfaddremove(ui, repo, **opts): |
811 opts = _byteskwargs(opts) | 811 opts = _byteskwargs(opts) |
812 timer, fm = gettimer(ui, opts) | 812 timer, fm = gettimer(ui, opts) |
813 try: | 813 try: |
814 oldquiet = repo.ui.quiet | 814 oldquiet = repo.ui.quiet |
835 | 835 |
836 cl._nodecache = {nullid: nullrev} | 836 cl._nodecache = {nullid: nullrev} |
837 cl._nodepos = None | 837 cl._nodepos = None |
838 | 838 |
839 | 839 |
840 @command(b'perf--heads', formatteropts) | 840 @command(b'perf::heads|perfheads', formatteropts) |
841 def perfheads(ui, repo, **opts): | 841 def perfheads(ui, repo, **opts): |
842 """benchmark the computation of a changelog heads""" | 842 """benchmark the computation of a changelog heads""" |
843 opts = _byteskwargs(opts) | 843 opts = _byteskwargs(opts) |
844 timer, fm = gettimer(ui, opts) | 844 timer, fm = gettimer(ui, opts) |
845 cl = repo.changelog | 845 cl = repo.changelog |
853 timer(d, setup=s) | 853 timer(d, setup=s) |
854 fm.end() | 854 fm.end() |
855 | 855 |
856 | 856 |
857 @command( | 857 @command( |
858 b'perf--tags', | 858 b'perf::tags|perftags', |
859 formatteropts | 859 formatteropts |
860 + [ | 860 + [ |
861 (b'', b'clear-revlogs', False, b'refresh changelog and manifest'), | 861 (b'', b'clear-revlogs', False, b'refresh changelog and manifest'), |
862 ], | 862 ], |
863 ) | 863 ) |
878 | 878 |
879 timer(t, setup=s) | 879 timer(t, setup=s) |
880 fm.end() | 880 fm.end() |
881 | 881 |
882 | 882 |
883 @command(b'perf--ancestors', formatteropts) | 883 @command(b'perf::ancestors|perfancestors', formatteropts) |
884 def perfancestors(ui, repo, **opts): | 884 def perfancestors(ui, repo, **opts): |
885 opts = _byteskwargs(opts) | 885 opts = _byteskwargs(opts) |
886 timer, fm = gettimer(ui, opts) | 886 timer, fm = gettimer(ui, opts) |
887 heads = repo.changelog.headrevs() | 887 heads = repo.changelog.headrevs() |
888 | 888 |
892 | 892 |
893 timer(d) | 893 timer(d) |
894 fm.end() | 894 fm.end() |
895 | 895 |
896 | 896 |
897 @command(b'perf--ancestorset', formatteropts) | 897 @command(b'perf::ancestorset|perfancestorset', formatteropts) |
898 def perfancestorset(ui, repo, revset, **opts): | 898 def perfancestorset(ui, repo, revset, **opts): |
899 opts = _byteskwargs(opts) | 899 opts = _byteskwargs(opts) |
900 timer, fm = gettimer(ui, opts) | 900 timer, fm = gettimer(ui, opts) |
901 revs = repo.revs(revset) | 901 revs = repo.revs(revset) |
902 heads = repo.changelog.headrevs() | 902 heads = repo.changelog.headrevs() |
908 | 908 |
909 timer(d) | 909 timer(d) |
910 fm.end() | 910 fm.end() |
911 | 911 |
912 | 912 |
913 @command(b'perf--discovery', formatteropts, b'PATH') | 913 @command(b'perf::discovery|perfdiscovery', formatteropts, b'PATH') |
914 def perfdiscovery(ui, repo, path, **opts): | 914 def perfdiscovery(ui, repo, path, **opts): |
915 """benchmark discovery between local repo and the peer at given path""" | 915 """benchmark discovery between local repo and the peer at given path""" |
916 repos = [repo, None] | 916 repos = [repo, None] |
917 timer, fm = gettimer(ui, opts) | 917 timer, fm = gettimer(ui, opts) |
918 path = ui.expandpath(path) | 918 path = ui.expandpath(path) |
926 timer(d, setup=s) | 926 timer(d, setup=s) |
927 fm.end() | 927 fm.end() |
928 | 928 |
929 | 929 |
930 @command( | 930 @command( |
931 b'perf--bookmarks', | 931 b'perf::bookmarks|perfbookmarks', |
932 formatteropts | 932 formatteropts |
933 + [ | 933 + [ |
934 (b'', b'clear-revlogs', False, b'refresh changelog and manifest'), | 934 (b'', b'clear-revlogs', False, b'refresh changelog and manifest'), |
935 ], | 935 ], |
936 ) | 936 ) |
951 | 951 |
952 timer(d, setup=s) | 952 timer(d, setup=s) |
953 fm.end() | 953 fm.end() |
954 | 954 |
955 | 955 |
956 @command(b'perf--bundleread', formatteropts, b'BUNDLE') | 956 @command(b'perf::bundleread|perfbundleread', formatteropts, b'BUNDLE') |
957 def perfbundleread(ui, repo, bundlepath, **opts): | 957 def perfbundleread(ui, repo, bundlepath, **opts): |
958 """Benchmark reading of bundle files. | 958 """Benchmark reading of bundle files. |
959 | 959 |
960 This command is meant to isolate the I/O part of bundle reading as | 960 This command is meant to isolate the I/O part of bundle reading as |
961 much as possible. | 961 much as possible. |
1078 timer(fn, title=title) | 1078 timer(fn, title=title) |
1079 fm.end() | 1079 fm.end() |
1080 | 1080 |
1081 | 1081 |
1082 @command( | 1082 @command( |
1083 b'perf--changegroupchangelog', | 1083 b'perf::changegroupchangelog|perfchangegroupchangelog', |
1084 formatteropts | 1084 formatteropts |
1085 + [ | 1085 + [ |
1086 (b'', b'cgversion', b'02', b'changegroup version'), | 1086 (b'', b'cgversion', b'02', b'changegroup version'), |
1087 (b'r', b'rev', b'', b'revisions to add to changegroup'), | 1087 (b'r', b'rev', b'', b'revisions to add to changegroup'), |
1088 ], | 1088 ], |
1114 timer(d) | 1114 timer(d) |
1115 | 1115 |
1116 fm.end() | 1116 fm.end() |
1117 | 1117 |
1118 | 1118 |
1119 @command(b'perf--dirs', formatteropts) | 1119 @command(b'perf::dirs|perfdirs', formatteropts) |
1120 def perfdirs(ui, repo, **opts): | 1120 def perfdirs(ui, repo, **opts): |
1121 opts = _byteskwargs(opts) | 1121 opts = _byteskwargs(opts) |
1122 timer, fm = gettimer(ui, opts) | 1122 timer, fm = gettimer(ui, opts) |
1123 dirstate = repo.dirstate | 1123 dirstate = repo.dirstate |
1124 b'a' in dirstate | 1124 b'a' in dirstate |
1130 timer(d) | 1130 timer(d) |
1131 fm.end() | 1131 fm.end() |
1132 | 1132 |
1133 | 1133 |
1134 @command( | 1134 @command( |
1135 b'perf--dirstate', | 1135 b'perf::dirstate|perfdirstate', |
1136 [ | 1136 [ |
1137 ( | 1137 ( |
1138 b'', | 1138 b'', |
1139 b'iteration', | 1139 b'iteration', |
1140 None, | 1140 None, |
1193 | 1193 |
1194 timer(d, setup=setup) | 1194 timer(d, setup=setup) |
1195 fm.end() | 1195 fm.end() |
1196 | 1196 |
1197 | 1197 |
1198 @command(b'perf--dirstatedirs', formatteropts) | 1198 @command(b'perf::dirstatedirs|perfdirstatedirs', formatteropts) |
1199 def perfdirstatedirs(ui, repo, **opts): | 1199 def perfdirstatedirs(ui, repo, **opts): |
1200 """benchmap a 'dirstate.hasdir' call from an empty `dirs` cache""" | 1200 """benchmap a 'dirstate.hasdir' call from an empty `dirs` cache""" |
1201 opts = _byteskwargs(opts) | 1201 opts = _byteskwargs(opts) |
1202 timer, fm = gettimer(ui, opts) | 1202 timer, fm = gettimer(ui, opts) |
1203 repo.dirstate.hasdir(b"a") | 1203 repo.dirstate.hasdir(b"a") |
1210 | 1210 |
1211 timer(d, setup=setup) | 1211 timer(d, setup=setup) |
1212 fm.end() | 1212 fm.end() |
1213 | 1213 |
1214 | 1214 |
1215 @command(b'perf--dirstatefoldmap', formatteropts) | 1215 @command(b'perf::dirstatefoldmap|perfdirstatefoldmap', formatteropts) |
1216 def perfdirstatefoldmap(ui, repo, **opts): | 1216 def perfdirstatefoldmap(ui, repo, **opts): |
1217 """benchmap a `dirstate._map.filefoldmap.get()` request | 1217 """benchmap a `dirstate._map.filefoldmap.get()` request |
1218 | 1218 |
1219 The dirstate filefoldmap cache is dropped between every request. | 1219 The dirstate filefoldmap cache is dropped between every request. |
1220 """ | 1220 """ |
1231 | 1231 |
1232 timer(d, setup=setup) | 1232 timer(d, setup=setup) |
1233 fm.end() | 1233 fm.end() |
1234 | 1234 |
1235 | 1235 |
1236 @command(b'perf--dirfoldmap', formatteropts) | 1236 @command(b'perf::dirfoldmap|perfdirfoldmap', formatteropts) |
1237 def perfdirfoldmap(ui, repo, **opts): | 1237 def perfdirfoldmap(ui, repo, **opts): |
1238 """benchmap a `dirstate._map.dirfoldmap.get()` request | 1238 """benchmap a `dirstate._map.dirfoldmap.get()` request |
1239 | 1239 |
1240 The dirstate dirfoldmap cache is dropped between every request. | 1240 The dirstate dirfoldmap cache is dropped between every request. |
1241 """ | 1241 """ |
1253 | 1253 |
1254 timer(d, setup=setup) | 1254 timer(d, setup=setup) |
1255 fm.end() | 1255 fm.end() |
1256 | 1256 |
1257 | 1257 |
1258 @command(b'perf--dirstatewrite', formatteropts) | 1258 @command(b'perf::dirstatewrite|perfdirstatewrite', formatteropts) |
1259 def perfdirstatewrite(ui, repo, **opts): | 1259 def perfdirstatewrite(ui, repo, **opts): |
1260 """benchmap the time it take to write a dirstate on disk""" | 1260 """benchmap the time it take to write a dirstate on disk""" |
1261 opts = _byteskwargs(opts) | 1261 opts = _byteskwargs(opts) |
1262 timer, fm = gettimer(ui, opts) | 1262 timer, fm = gettimer(ui, opts) |
1263 ds = repo.dirstate | 1263 ds = repo.dirstate |
1295 ancestor = wctx.ancestor(rctx) | 1295 ancestor = wctx.ancestor(rctx) |
1296 return (wctx, rctx, ancestor) | 1296 return (wctx, rctx, ancestor) |
1297 | 1297 |
1298 | 1298 |
1299 @command( | 1299 @command( |
1300 b'perf--mergecalculate', | 1300 b'perf::mergecalculate|perfmergecalculate', |
1301 [ | 1301 [ |
1302 (b'r', b'rev', b'.', b'rev to merge against'), | 1302 (b'r', b'rev', b'.', b'rev to merge against'), |
1303 (b'', b'from', b'', b'rev to merge from'), | 1303 (b'', b'from', b'', b'rev to merge from'), |
1304 (b'', b'base', b'', b'the revision to use as base'), | 1304 (b'', b'base', b'', b'the revision to use as base'), |
1305 ] | 1305 ] |
1328 timer(d) | 1328 timer(d) |
1329 fm.end() | 1329 fm.end() |
1330 | 1330 |
1331 | 1331 |
1332 @command( | 1332 @command( |
1333 b'perf--mergecopies', | 1333 b'perf::mergecopies|perfmergecopies', |
1334 [ | 1334 [ |
1335 (b'r', b'rev', b'.', b'rev to merge against'), | 1335 (b'r', b'rev', b'.', b'rev to merge against'), |
1336 (b'', b'from', b'', b'rev to merge from'), | 1336 (b'', b'from', b'', b'rev to merge from'), |
1337 (b'', b'base', b'', b'the revision to use as base'), | 1337 (b'', b'base', b'', b'the revision to use as base'), |
1338 ] | 1338 ] |
1351 | 1351 |
1352 timer(d) | 1352 timer(d) |
1353 fm.end() | 1353 fm.end() |
1354 | 1354 |
1355 | 1355 |
1356 @command(b'perf--pathcopies', [], b"REV REV") | 1356 @command(b'perf::pathcopies|perfpathcopies', [], b"REV REV") |
1357 def perfpathcopies(ui, repo, rev1, rev2, **opts): | 1357 def perfpathcopies(ui, repo, rev1, rev2, **opts): |
1358 """benchmark the copy tracing logic""" | 1358 """benchmark the copy tracing logic""" |
1359 opts = _byteskwargs(opts) | 1359 opts = _byteskwargs(opts) |
1360 timer, fm = gettimer(ui, opts) | 1360 timer, fm = gettimer(ui, opts) |
1361 ctx1 = scmutil.revsingle(repo, rev1, rev1) | 1361 ctx1 = scmutil.revsingle(repo, rev1, rev1) |
1367 timer(d) | 1367 timer(d) |
1368 fm.end() | 1368 fm.end() |
1369 | 1369 |
1370 | 1370 |
1371 @command( | 1371 @command( |
1372 b'perf--phases', | 1372 b'perf::phases|perfphases', |
1373 [ | 1373 [ |
1374 (b'', b'full', False, b'include file reading time too'), | 1374 (b'', b'full', False, b'include file reading time too'), |
1375 ], | 1375 ], |
1376 b"", | 1376 b"", |
1377 ) | 1377 ) |
1392 | 1392 |
1393 timer(d) | 1393 timer(d) |
1394 fm.end() | 1394 fm.end() |
1395 | 1395 |
1396 | 1396 |
1397 @command(b'perf--phasesremote', [], b"[DEST]") | 1397 @command(b'perf::phasesremote|perfphasesremote', [], b"[DEST]") |
1398 def perfphasesremote(ui, repo, dest=None, **opts): | 1398 def perfphasesremote(ui, repo, dest=None, **opts): |
1399 """benchmark time needed to analyse phases of the remote server""" | 1399 """benchmark time needed to analyse phases of the remote server""" |
1400 from mercurial.node import bin | 1400 from mercurial.node import bin |
1401 from mercurial import ( | 1401 from mercurial import ( |
1402 exchange, | 1402 exchange, |
1453 timer(d) | 1453 timer(d) |
1454 fm.end() | 1454 fm.end() |
1455 | 1455 |
1456 | 1456 |
1457 @command( | 1457 @command( |
1458 b'perf--manifest', | 1458 b'perf::manifest|perfmanifest', |
1459 [ | 1459 [ |
1460 (b'm', b'manifest-rev', False, b'Look up a manifest node revision'), | 1460 (b'm', b'manifest-rev', False, b'Look up a manifest node revision'), |
1461 (b'', b'clear-disk', False, b'clear on-disk caches too'), | 1461 (b'', b'clear-disk', False, b'clear on-disk caches too'), |
1462 ] | 1462 ] |
1463 + formatteropts, | 1463 + formatteropts, |
1497 | 1497 |
1498 timer(d) | 1498 timer(d) |
1499 fm.end() | 1499 fm.end() |
1500 | 1500 |
1501 | 1501 |
1502 @command(b'perf--changeset', formatteropts) | 1502 @command(b'perf::changeset|perfchangeset', formatteropts) |
1503 def perfchangeset(ui, repo, rev, **opts): | 1503 def perfchangeset(ui, repo, rev, **opts): |
1504 opts = _byteskwargs(opts) | 1504 opts = _byteskwargs(opts) |
1505 timer, fm = gettimer(ui, opts) | 1505 timer, fm = gettimer(ui, opts) |
1506 n = scmutil.revsingle(repo, rev).node() | 1506 n = scmutil.revsingle(repo, rev).node() |
1507 | 1507 |
1511 | 1511 |
1512 timer(d) | 1512 timer(d) |
1513 fm.end() | 1513 fm.end() |
1514 | 1514 |
1515 | 1515 |
1516 @command(b'perf--ignore', formatteropts) | 1516 @command(b'perf::ignore|perfignore', formatteropts) |
1517 def perfignore(ui, repo, **opts): | 1517 def perfignore(ui, repo, **opts): |
1518 """benchmark operation related to computing ignore""" | 1518 """benchmark operation related to computing ignore""" |
1519 opts = _byteskwargs(opts) | 1519 opts = _byteskwargs(opts) |
1520 timer, fm = gettimer(ui, opts) | 1520 timer, fm = gettimer(ui, opts) |
1521 dirstate = repo.dirstate | 1521 dirstate = repo.dirstate |
1530 timer(runone, setup=setupone, title=b"load") | 1530 timer(runone, setup=setupone, title=b"load") |
1531 fm.end() | 1531 fm.end() |
1532 | 1532 |
1533 | 1533 |
1534 @command( | 1534 @command( |
1535 b'perf--index', | 1535 b'perf::index|perfindex', |
1536 [ | 1536 [ |
1537 (b'', b'rev', [], b'revision to be looked up (default tip)'), | 1537 (b'', b'rev', [], b'revision to be looked up (default tip)'), |
1538 (b'', b'no-lookup', None, b'do not revision lookup post creation'), | 1538 (b'', b'no-lookup', None, b'do not revision lookup post creation'), |
1539 ] | 1539 ] |
1540 + formatteropts, | 1540 + formatteropts, |
1594 timer(d, setup=setup) | 1594 timer(d, setup=setup) |
1595 fm.end() | 1595 fm.end() |
1596 | 1596 |
1597 | 1597 |
1598 @command( | 1598 @command( |
1599 b'perf--nodemap', | 1599 b'perf::nodemap|perfnodemap', |
1600 [ | 1600 [ |
1601 (b'', b'rev', [], b'revision to be looked up (default tip)'), | 1601 (b'', b'rev', [], b'revision to be looked up (default tip)'), |
1602 (b'', b'clear-caches', True, b'clear revlog cache between calls'), | 1602 (b'', b'clear-caches', True, b'clear revlog cache between calls'), |
1603 ] | 1603 ] |
1604 + formatteropts, | 1604 + formatteropts, |
1665 d() # prewarm the data structure | 1665 d() # prewarm the data structure |
1666 timer(d, setup=setup) | 1666 timer(d, setup=setup) |
1667 fm.end() | 1667 fm.end() |
1668 | 1668 |
1669 | 1669 |
1670 @command(b'perf--startup', formatteropts) | 1670 @command(b'perf::startup|perfstartup', formatteropts) |
1671 def perfstartup(ui, repo, **opts): | 1671 def perfstartup(ui, repo, **opts): |
1672 opts = _byteskwargs(opts) | 1672 opts = _byteskwargs(opts) |
1673 timer, fm = gettimer(ui, opts) | 1673 timer, fm = gettimer(ui, opts) |
1674 | 1674 |
1675 def d(): | 1675 def d(): |
1683 | 1683 |
1684 timer(d) | 1684 timer(d) |
1685 fm.end() | 1685 fm.end() |
1686 | 1686 |
1687 | 1687 |
1688 @command(b'perf--parents', formatteropts) | 1688 @command(b'perf::parents|perfparents', formatteropts) |
1689 def perfparents(ui, repo, **opts): | 1689 def perfparents(ui, repo, **opts): |
1690 """benchmark the time necessary to fetch one changeset's parents. | 1690 """benchmark the time necessary to fetch one changeset's parents. |
1691 | 1691 |
1692 The fetch is done using the `node identifier`, traversing all object layers | 1692 The fetch is done using the `node identifier`, traversing all object layers |
1693 from the repository object. The first N revisions will be used for this | 1693 from the repository object. The first N revisions will be used for this |
1710 | 1710 |
1711 timer(d) | 1711 timer(d) |
1712 fm.end() | 1712 fm.end() |
1713 | 1713 |
1714 | 1714 |
1715 @command(b'perf--ctxfiles', formatteropts) | 1715 @command(b'perf::ctxfiles|perfctxfiles', formatteropts) |
1716 def perfctxfiles(ui, repo, x, **opts): | 1716 def perfctxfiles(ui, repo, x, **opts): |
1717 opts = _byteskwargs(opts) | 1717 opts = _byteskwargs(opts) |
1718 x = int(x) | 1718 x = int(x) |
1719 timer, fm = gettimer(ui, opts) | 1719 timer, fm = gettimer(ui, opts) |
1720 | 1720 |
1723 | 1723 |
1724 timer(d) | 1724 timer(d) |
1725 fm.end() | 1725 fm.end() |
1726 | 1726 |
1727 | 1727 |
1728 @command(b'perf--rawfiles', formatteropts) | 1728 @command(b'perf::rawfiles|perfrawfiles', formatteropts) |
1729 def perfrawfiles(ui, repo, x, **opts): | 1729 def perfrawfiles(ui, repo, x, **opts): |
1730 opts = _byteskwargs(opts) | 1730 opts = _byteskwargs(opts) |
1731 x = int(x) | 1731 x = int(x) |
1732 timer, fm = gettimer(ui, opts) | 1732 timer, fm = gettimer(ui, opts) |
1733 cl = repo.changelog | 1733 cl = repo.changelog |
1737 | 1737 |
1738 timer(d) | 1738 timer(d) |
1739 fm.end() | 1739 fm.end() |
1740 | 1740 |
1741 | 1741 |
1742 @command(b'perf--lookup', formatteropts) | 1742 @command(b'perf::lookup|perflookup', formatteropts) |
1743 def perflookup(ui, repo, rev, **opts): | 1743 def perflookup(ui, repo, rev, **opts): |
1744 opts = _byteskwargs(opts) | 1744 opts = _byteskwargs(opts) |
1745 timer, fm = gettimer(ui, opts) | 1745 timer, fm = gettimer(ui, opts) |
1746 timer(lambda: len(repo.lookup(rev))) | 1746 timer(lambda: len(repo.lookup(rev))) |
1747 fm.end() | 1747 fm.end() |
1748 | 1748 |
1749 | 1749 |
1750 @command( | 1750 @command( |
1751 b'perf--linelogedits', | 1751 b'perf::linelogedits|perflinelogedits', |
1752 [ | 1752 [ |
1753 (b'n', b'edits', 10000, b'number of edits'), | 1753 (b'n', b'edits', 10000, b'number of edits'), |
1754 (b'', b'max-hunk-lines', 10, b'max lines in a hunk'), | 1754 (b'', b'max-hunk-lines', 10, b'max lines in a hunk'), |
1755 ], | 1755 ], |
1756 norepo=True, | 1756 norepo=True, |
1784 timer, fm = gettimer(ui, opts) | 1784 timer, fm = gettimer(ui, opts) |
1785 timer(d) | 1785 timer(d) |
1786 fm.end() | 1786 fm.end() |
1787 | 1787 |
1788 | 1788 |
1789 @command(b'perf--revrange', formatteropts) | 1789 @command(b'perf::revrange|perfrevrange', formatteropts) |
1790 def perfrevrange(ui, repo, *specs, **opts): | 1790 def perfrevrange(ui, repo, *specs, **opts): |
1791 opts = _byteskwargs(opts) | 1791 opts = _byteskwargs(opts) |
1792 timer, fm = gettimer(ui, opts) | 1792 timer, fm = gettimer(ui, opts) |
1793 revrange = scmutil.revrange | 1793 revrange = scmutil.revrange |
1794 timer(lambda: len(revrange(repo, specs))) | 1794 timer(lambda: len(revrange(repo, specs))) |
1795 fm.end() | 1795 fm.end() |
1796 | 1796 |
1797 | 1797 |
1798 @command(b'perf--nodelookup', formatteropts) | 1798 @command(b'perf::nodelookup|perfnodelookup', formatteropts) |
1799 def perfnodelookup(ui, repo, rev, **opts): | 1799 def perfnodelookup(ui, repo, rev, **opts): |
1800 opts = _byteskwargs(opts) | 1800 opts = _byteskwargs(opts) |
1801 timer, fm = gettimer(ui, opts) | 1801 timer, fm = gettimer(ui, opts) |
1802 import mercurial.revlog | 1802 import mercurial.revlog |
1803 | 1803 |
1812 timer(d) | 1812 timer(d) |
1813 fm.end() | 1813 fm.end() |
1814 | 1814 |
1815 | 1815 |
1816 @command( | 1816 @command( |
1817 b'perf--log', | 1817 b'perf::log|perflog', |
1818 [(b'', b'rename', False, b'ask log to follow renames')] + formatteropts, | 1818 [(b'', b'rename', False, b'ask log to follow renames')] + formatteropts, |
1819 ) | 1819 ) |
1820 def perflog(ui, repo, rev=None, **opts): | 1820 def perflog(ui, repo, rev=None, **opts): |
1821 opts = _byteskwargs(opts) | 1821 opts = _byteskwargs(opts) |
1822 if rev is None: | 1822 if rev is None: |
1830 ) | 1830 ) |
1831 ui.popbuffer() | 1831 ui.popbuffer() |
1832 fm.end() | 1832 fm.end() |
1833 | 1833 |
1834 | 1834 |
1835 @command(b'perf--moonwalk', formatteropts) | 1835 @command(b'perf::moonwalk|perfmoonwalk', formatteropts) |
1836 def perfmoonwalk(ui, repo, **opts): | 1836 def perfmoonwalk(ui, repo, **opts): |
1837 """benchmark walking the changelog backwards | 1837 """benchmark walking the changelog backwards |
1838 | 1838 |
1839 This also loads the changelog data for each revision in the changelog. | 1839 This also loads the changelog data for each revision in the changelog. |
1840 """ | 1840 """ |
1849 timer(moonwalk) | 1849 timer(moonwalk) |
1850 fm.end() | 1850 fm.end() |
1851 | 1851 |
1852 | 1852 |
1853 @command( | 1853 @command( |
1854 b'perf--templating', | 1854 b'perf::templating|perftemplating', |
1855 [ | 1855 [ |
1856 (b'r', b'rev', [], b'revisions to run the template on'), | 1856 (b'r', b'rev', [], b'revisions to run the template on'), |
1857 ] | 1857 ] |
1858 + formatteropts, | 1858 + formatteropts, |
1859 ) | 1859 ) |
1939 fm.plain('%s: %s\n' % (l, stats[l])) | 1939 fm.plain('%s: %s\n' % (l, stats[l])) |
1940 fm.end() | 1940 fm.end() |
1941 | 1941 |
1942 | 1942 |
1943 @command( | 1943 @command( |
1944 b'perf--helper-mergecopies', | 1944 b'perf::helper-mergecopies|perfhelper-mergecopies', |
1945 formatteropts | 1945 formatteropts |
1946 + [ | 1946 + [ |
1947 (b'r', b'revs', [], b'restrict search to these revisions'), | 1947 (b'r', b'revs', [], b'restrict search to these revisions'), |
1948 (b'', b'timing', False, b'provides extra data (costly)'), | 1948 (b'', b'timing', False, b'provides extra data (costly)'), |
1949 (b'', b'stats', False, b'provides statistic about the measured data'), | 1949 (b'', b'stats', False, b'provides statistic about the measured data'), |
2122 entries.append(('totaltime', 'time for both parents')) | 2122 entries.append(('totaltime', 'time for both parents')) |
2123 _displaystats(ui, opts, entries, alldata) | 2123 _displaystats(ui, opts, entries, alldata) |
2124 | 2124 |
2125 | 2125 |
2126 @command( | 2126 @command( |
2127 b'perf--helper-pathcopies', | 2127 b'perf::helper-pathcopies|perfhelper-pathcopies', |
2128 formatteropts | 2128 formatteropts |
2129 + [ | 2129 + [ |
2130 (b'r', b'revs', [], b'restrict search to these revisions'), | 2130 (b'r', b'revs', [], b'restrict search to these revisions'), |
2131 (b'', b'timing', False, b'provides extra data (costly)'), | 2131 (b'', b'timing', False, b'provides extra data (costly)'), |
2132 (b'', b'stats', False, b'provides statistic about the measured data'), | 2132 (b'', b'stats', False, b'provides statistic about the measured data'), |
2261 entries.append(('nbrenames', 'renamed files')) | 2261 entries.append(('nbrenames', 'renamed files')) |
2262 entries.append(('time', 'time')) | 2262 entries.append(('time', 'time')) |
2263 _displaystats(ui, opts, entries, alldata) | 2263 _displaystats(ui, opts, entries, alldata) |
2264 | 2264 |
2265 | 2265 |
2266 @command(b'perf--cca', formatteropts) | 2266 @command(b'perf::cca|perfcca', formatteropts) |
2267 def perfcca(ui, repo, **opts): | 2267 def perfcca(ui, repo, **opts): |
2268 opts = _byteskwargs(opts) | 2268 opts = _byteskwargs(opts) |
2269 timer, fm = gettimer(ui, opts) | 2269 timer, fm = gettimer(ui, opts) |
2270 timer(lambda: scmutil.casecollisionauditor(ui, False, repo.dirstate)) | 2270 timer(lambda: scmutil.casecollisionauditor(ui, False, repo.dirstate)) |
2271 fm.end() | 2271 fm.end() |
2272 | 2272 |
2273 | 2273 |
2274 @command(b'perf--fncacheload', formatteropts) | 2274 @command(b'perf::fncacheload|perffncacheload', formatteropts) |
2275 def perffncacheload(ui, repo, **opts): | 2275 def perffncacheload(ui, repo, **opts): |
2276 opts = _byteskwargs(opts) | 2276 opts = _byteskwargs(opts) |
2277 timer, fm = gettimer(ui, opts) | 2277 timer, fm = gettimer(ui, opts) |
2278 s = repo.store | 2278 s = repo.store |
2279 | 2279 |
2282 | 2282 |
2283 timer(d) | 2283 timer(d) |
2284 fm.end() | 2284 fm.end() |
2285 | 2285 |
2286 | 2286 |
2287 @command(b'perf--fncachewrite', formatteropts) | 2287 @command(b'perf::fncachewrite|perffncachewrite', formatteropts) |
2288 def perffncachewrite(ui, repo, **opts): | 2288 def perffncachewrite(ui, repo, **opts): |
2289 opts = _byteskwargs(opts) | 2289 opts = _byteskwargs(opts) |
2290 timer, fm = gettimer(ui, opts) | 2290 timer, fm = gettimer(ui, opts) |
2291 s = repo.store | 2291 s = repo.store |
2292 lock = repo.lock() | 2292 lock = repo.lock() |
2302 tr.close() | 2302 tr.close() |
2303 lock.release() | 2303 lock.release() |
2304 fm.end() | 2304 fm.end() |
2305 | 2305 |
2306 | 2306 |
2307 @command(b'perf--fncacheencode', formatteropts) | 2307 @command(b'perf::fncacheencode|perffncacheencode', formatteropts) |
2308 def perffncacheencode(ui, repo, **opts): | 2308 def perffncacheencode(ui, repo, **opts): |
2309 opts = _byteskwargs(opts) | 2309 opts = _byteskwargs(opts) |
2310 timer, fm = gettimer(ui, opts) | 2310 timer, fm = gettimer(ui, opts) |
2311 s = repo.store | 2311 s = repo.store |
2312 s.fncache._load() | 2312 s.fncache._load() |
2346 | 2346 |
2347 return store.revision(mnode) | 2347 return store.revision(mnode) |
2348 | 2348 |
2349 | 2349 |
2350 @command( | 2350 @command( |
2351 b'perf--bdiff', | 2351 b'perf::bdiff|perfbdiff', |
2352 revlogopts | 2352 revlogopts |
2353 + formatteropts | 2353 + formatteropts |
2354 + [ | 2354 + [ |
2355 ( | 2355 ( |
2356 b'', | 2356 b'', |
2462 with ready: | 2462 with ready: |
2463 ready.notify_all() | 2463 ready.notify_all() |
2464 | 2464 |
2465 | 2465 |
2466 @command( | 2466 @command( |
2467 b'perf--unidiff', | 2467 b'perf::unidiff|perfunidiff', |
2468 revlogopts | 2468 revlogopts |
2469 + formatteropts | 2469 + formatteropts |
2470 + [ | 2470 + [ |
2471 ( | 2471 ( |
2472 b'', | 2472 b'', |
2541 timer, fm = gettimer(ui, opts) | 2541 timer, fm = gettimer(ui, opts) |
2542 timer(d) | 2542 timer(d) |
2543 fm.end() | 2543 fm.end() |
2544 | 2544 |
2545 | 2545 |
2546 @command(b'perf--diffwd', formatteropts) | 2546 @command(b'perf::diffwd|perfdiffwd', formatteropts) |
2547 def perfdiffwd(ui, repo, **opts): | 2547 def perfdiffwd(ui, repo, **opts): |
2548 """Profile diff of working directory changes""" | 2548 """Profile diff of working directory changes""" |
2549 opts = _byteskwargs(opts) | 2549 opts = _byteskwargs(opts) |
2550 timer, fm = gettimer(ui, opts) | 2550 timer, fm = gettimer(ui, opts) |
2551 options = { | 2551 options = { |
2566 title = b'diffopts: %s' % (diffopt and (b'-' + diffopt) or b'none') | 2566 title = b'diffopts: %s' % (diffopt and (b'-' + diffopt) or b'none') |
2567 timer(d, title=title) | 2567 timer(d, title=title) |
2568 fm.end() | 2568 fm.end() |
2569 | 2569 |
2570 | 2570 |
2571 @command(b'perf--revlogindex', revlogopts + formatteropts, b'-c|-m|FILE') | 2571 @command( |
2572 b'perf::revlogindex|perfrevlogindex', | |
2573 revlogopts + formatteropts, | |
2574 b'-c|-m|FILE', | |
2575 ) | |
2572 def perfrevlogindex(ui, repo, file_=None, **opts): | 2576 def perfrevlogindex(ui, repo, file_=None, **opts): |
2573 """Benchmark operations against a revlog index. | 2577 """Benchmark operations against a revlog index. |
2574 | 2578 |
2575 This tests constructing a revlog instance, reading index data, | 2579 This tests constructing a revlog instance, reading index data, |
2576 parsing index data, and performing various operations related to | 2580 parsing index data, and performing various operations related to |
2702 timer(fn, title=title) | 2706 timer(fn, title=title) |
2703 fm.end() | 2707 fm.end() |
2704 | 2708 |
2705 | 2709 |
2706 @command( | 2710 @command( |
2707 b'perf--revlogrevisions', | 2711 b'perf::revlogrevisions|perfrevlogrevisions', |
2708 revlogopts | 2712 revlogopts |
2709 + formatteropts | 2713 + formatteropts |
2710 + [ | 2714 + [ |
2711 (b'd', b'dist', 100, b'distance between the revisions'), | 2715 (b'd', b'dist', 100, b'distance between the revisions'), |
2712 (b's', b'startrev', 0, b'revision to start reading at'), | 2716 (b's', b'startrev', 0, b'revision to start reading at'), |
2752 timer(d) | 2756 timer(d) |
2753 fm.end() | 2757 fm.end() |
2754 | 2758 |
2755 | 2759 |
2756 @command( | 2760 @command( |
2757 b'perf--revlogwrite', | 2761 b'perf::revlogwrite|perfrevlogwrite', |
2758 revlogopts | 2762 revlogopts |
2759 + formatteropts | 2763 + formatteropts |
2760 + [ | 2764 + [ |
2761 (b's', b'startrev', 1000, b'revision to start writing at'), | 2765 (b's', b'startrev', 1000, b'revision to start writing at'), |
2762 (b'', b'stoprev', -1, b'last revision to write'), | 2766 (b'', b'stoprev', -1, b'last revision to write'), |
3045 finally: | 3049 finally: |
3046 shutil.rmtree(tmpdir, True) | 3050 shutil.rmtree(tmpdir, True) |
3047 | 3051 |
3048 | 3052 |
3049 @command( | 3053 @command( |
3050 b'perf--revlogchunks', | 3054 b'perf::revlogchunks|perfrevlogchunks', |
3051 revlogopts | 3055 revlogopts |
3052 + formatteropts | 3056 + formatteropts |
3053 + [ | 3057 + [ |
3054 (b'e', b'engines', b'', b'compression engines to use'), | 3058 (b'e', b'engines', b'', b'compression engines to use'), |
3055 (b's', b'startrev', 0, b'revision to start at'), | 3059 (b's', b'startrev', 0, b'revision to start at'), |
3174 timer(fn, title=title) | 3178 timer(fn, title=title) |
3175 fm.end() | 3179 fm.end() |
3176 | 3180 |
3177 | 3181 |
3178 @command( | 3182 @command( |
3179 b'perf--revlogrevision', | 3183 b'perf::revlogrevision|perfrevlogrevision', |
3180 revlogopts | 3184 revlogopts |
3181 + formatteropts | 3185 + formatteropts |
3182 + [(b'', b'cache', False, b'use caches instead of clearing')], | 3186 + [(b'', b'cache', False, b'use caches instead of clearing')], |
3183 b'-c|-m|FILE REV', | 3187 b'-c|-m|FILE REV', |
3184 ) | 3188 ) |
3317 timer(fn, title=title) | 3321 timer(fn, title=title) |
3318 fm.end() | 3322 fm.end() |
3319 | 3323 |
3320 | 3324 |
3321 @command( | 3325 @command( |
3322 b'perf--revset', | 3326 b'perf::revset|perfrevset', |
3323 [ | 3327 [ |
3324 (b'C', b'clear', False, b'clear volatile cache between each call.'), | 3328 (b'C', b'clear', False, b'clear volatile cache between each call.'), |
3325 (b'', b'contexts', False, b'obtain changectx for each revision'), | 3329 (b'', b'contexts', False, b'obtain changectx for each revision'), |
3326 ] | 3330 ] |
3327 + formatteropts, | 3331 + formatteropts, |
3350 timer(d) | 3354 timer(d) |
3351 fm.end() | 3355 fm.end() |
3352 | 3356 |
3353 | 3357 |
3354 @command( | 3358 @command( |
3355 b'perf--volatilesets', | 3359 b'perf::volatilesets|perfvolatilesets', |
3356 [ | 3360 [ |
3357 (b'', b'clear-obsstore', False, b'drop obsstore between each call.'), | 3361 (b'', b'clear-obsstore', False, b'drop obsstore between each call.'), |
3358 ] | 3362 ] |
3359 + formatteropts, | 3363 + formatteropts, |
3360 ) | 3364 ) |
3399 timer(getfiltered(name), title=name) | 3403 timer(getfiltered(name), title=name) |
3400 fm.end() | 3404 fm.end() |
3401 | 3405 |
3402 | 3406 |
3403 @command( | 3407 @command( |
3404 b'perf--branchmap', | 3408 b'perf::branchmap|perfbranchmap', |
3405 [ | 3409 [ |
3406 (b'f', b'full', False, b'Includes build time of subset'), | 3410 (b'f', b'full', False, b'Includes build time of subset'), |
3407 ( | 3411 ( |
3408 b'', | 3412 b'', |
3409 b'clear-revbranch', | 3413 b'clear-revbranch', |
3490 branchcachewrite.restore() | 3494 branchcachewrite.restore() |
3491 fm.end() | 3495 fm.end() |
3492 | 3496 |
3493 | 3497 |
3494 @command( | 3498 @command( |
3495 b'perf--branchmapupdate', | 3499 b'perf::branchmapupdate|perfbranchmapupdate', |
3496 [ | 3500 [ |
3497 (b'', b'base', [], b'subset of revision to start from'), | 3501 (b'', b'base', [], b'subset of revision to start from'), |
3498 (b'', b'target', [], b'subset of revision to end with'), | 3502 (b'', b'target', [], b'subset of revision to end with'), |
3499 (b'', b'clear-caches', False, b'clear cache between each runs'), | 3503 (b'', b'clear-caches', False, b'clear cache between each runs'), |
3500 ] | 3504 ] |
3600 repoview.filtertable.pop(b'__perf_branchmap_update_base', None) | 3604 repoview.filtertable.pop(b'__perf_branchmap_update_base', None) |
3601 repoview.filtertable.pop(b'__perf_branchmap_update_target', None) | 3605 repoview.filtertable.pop(b'__perf_branchmap_update_target', None) |
3602 | 3606 |
3603 | 3607 |
3604 @command( | 3608 @command( |
3605 b'perf--branchmapload', | 3609 b'perf::branchmapload|perfbranchmapload', |
3606 [ | 3610 [ |
3607 (b'f', b'filter', b'', b'Specify repoview filter'), | 3611 (b'f', b'filter', b'', b'Specify repoview filter'), |
3608 (b'', b'list', False, b'List brachmap filter caches'), | 3612 (b'', b'list', False, b'List brachmap filter caches'), |
3609 (b'', b'clear-revlogs', False, b'refresh changelog and manifest'), | 3613 (b'', b'clear-revlogs', False, b'refresh changelog and manifest'), |
3610 ] | 3614 ] |
3659 | 3663 |
3660 timer(bench, setup=setup) | 3664 timer(bench, setup=setup) |
3661 fm.end() | 3665 fm.end() |
3662 | 3666 |
3663 | 3667 |
3664 @command(b'perf--loadmarkers') | 3668 @command(b'perf::loadmarkers|perfloadmarkers') |
3665 def perfloadmarkers(ui, repo): | 3669 def perfloadmarkers(ui, repo): |
3666 """benchmark the time to parse the on-disk markers for a repo | 3670 """benchmark the time to parse the on-disk markers for a repo |
3667 | 3671 |
3668 Result is the number of markers in the repo.""" | 3672 Result is the number of markers in the repo.""" |
3669 timer, fm = gettimer(ui) | 3673 timer, fm = gettimer(ui) |
3671 timer(lambda: len(obsolete.obsstore(svfs))) | 3675 timer(lambda: len(obsolete.obsstore(svfs))) |
3672 fm.end() | 3676 fm.end() |
3673 | 3677 |
3674 | 3678 |
3675 @command( | 3679 @command( |
3676 b'perf--lrucachedict', | 3680 b'perf::lrucachedict|perflrucachedict', |
3677 formatteropts | 3681 formatteropts |
3678 + [ | 3682 + [ |
3679 (b'', b'costlimit', 0, b'maximum total cost of items in cache'), | 3683 (b'', b'costlimit', 0, b'maximum total cost of items in cache'), |
3680 (b'', b'mincost', 0, b'smallest cost of items in cache'), | 3684 (b'', b'mincost', 0, b'smallest cost of items in cache'), |
3681 (b'', b'maxcost', 100, b'maximum cost of items in cache'), | 3685 (b'', b'maxcost', 100, b'maximum cost of items in cache'), |
3827 timer(fn, title=title) | 3831 timer(fn, title=title) |
3828 fm.end() | 3832 fm.end() |
3829 | 3833 |
3830 | 3834 |
3831 @command( | 3835 @command( |
3832 b'perf--write', | 3836 b'perf::write|perfwrite', |
3833 formatteropts | 3837 formatteropts |
3834 + [ | 3838 + [ |
3835 (b'', b'write-method', b'write', b'ui write method'), | 3839 (b'', b'write-method', b'write', b'ui write method'), |
3836 (b'', b'nlines', 100, b'number of lines'), | 3840 (b'', b'nlines', 100, b'number of lines'), |
3837 (b'', b'nitems', 100, b'number of items (per line)'), | 3841 (b'', b'nitems', 100, b'number of items (per line)'), |
3890 | 3894 |
3891 extensions.wrapfunction(cmdutil, b'openrevlog', openrevlog) | 3895 extensions.wrapfunction(cmdutil, b'openrevlog', openrevlog) |
3892 | 3896 |
3893 | 3897 |
3894 @command( | 3898 @command( |
3895 b'perf--progress', | 3899 b'perf::progress|perfprogress', |
3896 formatteropts | 3900 formatteropts |
3897 + [ | 3901 + [ |
3898 (b'', b'topic', b'topic', b'topic for progress messages'), | 3902 (b'', b'topic', b'topic', b'topic for progress messages'), |
3899 (b'c', b'total', 1000000, b'total value we are progressing to'), | 3903 (b'c', b'total', 1000000, b'total value we are progressing to'), |
3900 ], | 3904 ], |