Mercurial > hg
comparison tests/test-parseindex.t @ 51406:f8bf1a8e9181
phases: keep internal state as rev-num instead of node-id
Node-id are expensive to work with, dealing with revision is much simple and
faster.
The fact we still used node-id here shows how few effort have been put into
making the phase logic fast. We tend to no longer use node-id internally for
about ten years.
This has a large impact of repository with many draft roots. For example this
Mozilla-try copy have ½ Million draft roots and `perf::unbundle` see a
significant improvement.
### data-env-vars.name = mozilla-try-2023-03-22-zstd-sparse-revlog
# benchmark.name = hg.perf.perf-unbundle
# bin-env-vars.hg.flavor = no-rust
# bin-env-vars.hg.py-re2-module = default
# benchmark.variants.issue6528 = disabled
# benchmark.variants.revs = last-1
before:: 1.746791 seconds
after:: 1.278379 seconds (-26.82%)
# benchmark.variants.revs = last-10
before:: 3.145774 seconds
after:: 2.103735 seconds (-33.13%)
# benchmark.variants.revs = last-100
before:: 3.487635 seconds
after:: 2.446749 seconds (-29.85%)
# benchmark.variants.revs = last-1000
before:: 5.007568 seconds
after:: 3.989923 seconds (-20.32%)
author | Pierre-Yves David <pierre-yves.david@octobus.net> |
---|---|
date | Tue, 20 Feb 2024 21:40:13 +0100 |
parents | dcaa2df1f688 |
children |
comparison
equal
deleted
inserted
replaced
51405:12881244e48a | 51406:f8bf1a8e9181 |
---|---|
185 > cl = changelog.changelog(vfs.vfs(pycompat.fsencode(sys.argv[1]))) | 185 > cl = changelog.changelog(vfs.vfs(pycompat.fsencode(sys.argv[1]))) |
186 > n0, n1 = cl.node(0), cl.node(1) | 186 > n0, n1 = cl.node(0), cl.node(1) |
187 > ops = [ | 187 > ops = [ |
188 > ('reachableroots', | 188 > ('reachableroots', |
189 > lambda: cl.index.reachableroots2(0, [1], [0], False)), | 189 > lambda: cl.index.reachableroots2(0, [1], [0], False)), |
190 > ('compute_phases_map_sets', lambda: cl.computephases({1: {cl.node(0)}})), | 190 > ('compute_phases_map_sets', lambda: cl.computephases({1: {0}})), |
191 > ('index_headrevs', lambda: cl.headrevs()), | 191 > ('index_headrevs', lambda: cl.headrevs()), |
192 > ('find_gca_candidates', lambda: cl.commonancestorsheads(n0, n1)), | 192 > ('find_gca_candidates', lambda: cl.commonancestorsheads(n0, n1)), |
193 > ('find_deepest', lambda: cl.ancestor(n0, n1)), | 193 > ('find_deepest', lambda: cl.ancestor(n0, n1)), |
194 > ] | 194 > ] |
195 > for l, f in ops: | 195 > for l, f in ops: |