Mercurial > hg
comparison contrib/perf.py @ 41439:7eb7637e34bf
perf: support looking up multiple revisions
The nodemap code has optimisations around the number of lookup we actually made.
As a result, being able to specify multiple revisions to look up is important
when measuring performances. One can now specify full revspecs with the --rev
arguments.
author | Boris Feld <boris.feld@octobus.net> |
---|---|
date | Mon, 28 Jan 2019 03:20:31 -0500 |
parents | e9891c734bf8 |
children | c9ff93889550 |
comparison
equal
deleted
inserted
replaced
41438:e9891c734bf8 | 41439:7eb7637e34bf |
---|---|
1012 | 1012 |
1013 timer(runone, setup=setupone, title=b"load") | 1013 timer(runone, setup=setupone, title=b"load") |
1014 fm.end() | 1014 fm.end() |
1015 | 1015 |
1016 @command(b'perfindex', [ | 1016 @command(b'perfindex', [ |
1017 (b'', b'rev', b'', b'revision to be looked up (default tip)'), | 1017 (b'', b'rev', [], b'revision to be looked up (default tip)'), |
1018 (b'', b'no-lookup', None, b'do not revision lookup post creation'), | 1018 (b'', b'no-lookup', None, b'do not revision lookup post creation'), |
1019 ] + formatteropts) | 1019 ] + formatteropts) |
1020 def perfindex(ui, repo, **opts): | 1020 def perfindex(ui, repo, **opts): |
1021 """benchmark index creation time followed by a lookup | 1021 """benchmark index creation time followed by a lookup |
1022 | 1022 |
1023 The default is to look `tip` up. Depending on the index implementation, | 1023 The default is to look `tip` up. Depending on the index implementation, |
1024 the revision looked up can matters. For example, an implementation | 1024 the revision looked up can matters. For example, an implementation |
1025 scanning the index will have a faster lookup time for `--rev tip` than for | 1025 scanning the index will have a faster lookup time for `--rev tip` than for |
1026 `--rev 0`. | 1026 `--rev 0`. The number of looked up revisions and their order can also |
1027 matters. | |
1028 | |
1029 Example of useful set to test: | |
1030 * tip | |
1031 * 0 | |
1032 * -10: | |
1033 * :10 | |
1034 * -10: + :10 | |
1035 * :10: + -10: | |
1036 * -10000: | |
1037 * -10000: + 0 | |
1027 | 1038 |
1028 It is not currently possible to check for lookup of a missing node.""" | 1039 It is not currently possible to check for lookup of a missing node.""" |
1029 import mercurial.revlog | 1040 import mercurial.revlog |
1030 opts = _byteskwargs(opts) | 1041 opts = _byteskwargs(opts) |
1031 timer, fm = gettimer(ui, opts) | 1042 timer, fm = gettimer(ui, opts) |
1032 mercurial.revlog._prereadsize = 2**24 # disable lazy parser in old hg | 1043 mercurial.revlog._prereadsize = 2**24 # disable lazy parser in old hg |
1033 if opts[b'no_lookup']: | 1044 if opts[b'no_lookup']: |
1034 n = None | 1045 if opts['rev']: |
1035 elif opts[b'rev'] is None: | 1046 raise error.Abort('--no-lookup and --rev are mutually exclusive') |
1036 n = repo[b"tip"].node() | 1047 nodes = [] |
1048 elif not opts[b'rev']: | |
1049 nodes = [repo[b"tip"].node()] | |
1037 else: | 1050 else: |
1038 rev = scmutil.revsingle(repo, opts[b'rev']) | 1051 revs = scmutil.revrange(repo, opts[b'rev']) |
1039 n = repo[rev].node() | 1052 cl = repo.changelog |
1053 nodes = [cl.node(r) for r in revs] | |
1040 | 1054 |
1041 unfi = repo.unfiltered() | 1055 unfi = repo.unfiltered() |
1042 # find the filecache func directly | 1056 # find the filecache func directly |
1043 # This avoid polluting the benchmark with the filecache logic | 1057 # This avoid polluting the benchmark with the filecache logic |
1044 makecl = unfi.__class__.changelog.func | 1058 makecl = unfi.__class__.changelog.func |
1045 def setup(): | 1059 def setup(): |
1046 # probably not necessary, but for good measure | 1060 # probably not necessary, but for good measure |
1047 clearchangelog(unfi) | 1061 clearchangelog(unfi) |
1048 def d(): | 1062 def d(): |
1049 cl = makecl(unfi) | 1063 cl = makecl(unfi) |
1050 if n is not None: | 1064 for n in nodes: |
1051 cl.rev(n) | 1065 cl.rev(n) |
1052 timer(d, setup=setup) | 1066 timer(d, setup=setup) |
1053 fm.end() | 1067 fm.end() |
1054 | 1068 |
1055 @command(b'perfstartup', formatteropts) | 1069 @command(b'perfstartup', formatteropts) |