comparison mercurial/manifest.py @ 24226:b992769dd1be

manifest: use custom C implementation of lazymanifest This version is actually lazy, unlike the pure-python version. The latter could stand to be optimized if anyone actually wants to use it seriously. I put no work into it. Before any of my related changes on mozilla-central: perfmanifest tip ! wall 0.268805 comb 0.260000 user 0.260000 sys 0.000000 (best of 37) perftags ! result: 162 ! wall 0.007099 comb 0.000000 user 0.000000 sys 0.000000 (best of 401) perfstatus ! wall 0.415680 comb 0.420000 user 0.260000 sys 0.160000 (best of 24) hgperf export tip ! wall 0.142118 comb 0.140000 user 0.140000 sys 0.000000 (best of 67) after all of my changes on mozilla-central: ./hg: perfmanifest tip ! wall 0.232640 comb 0.230000 user 0.220000 sys 0.010000 (best of 43) perftags ! result: 162 ! wall 0.007057 comb 0.010000 user 0.000000 sys 0.010000 (best of 395) perfstatus ! wall 0.415503 comb 0.420000 user 0.280000 sys 0.140000 (best of 24) hgperf export tip ! wall 0.025096 comb 0.030000 user 0.030000 sys 0.000000 (best of 102) so it's no real change in performance on perf{manifest,tags,status}, but is a huge win on 'hgperf export tip'. There's a little performance work that could still be done here: fastdelta() could be done significantly more intelligently by using the internal state of the lazymanifest type in C, but that seems like good future work.
author Augie Fackler <augie@google.com>
date Fri, 06 Mar 2015 21:29:47 -0500
parents 3e5c4af69808
children 22d560fe1516
comparison
equal deleted inserted replaced
24225:3e5c4af69808 24226:b992769dd1be
85 _hex = revlog.hex 85 _hex = revlog.hex
86 # if this is changed to support newlines in filenames, 86 # if this is changed to support newlines in filenames,
87 # be sure to check the templates/ dir again (especially *-raw.tmpl) 87 # be sure to check the templates/ dir again (especially *-raw.tmpl)
88 return ''.join("%s\0%s%s\n" % ( 88 return ''.join("%s\0%s%s\n" % (
89 f, _hex(n[:20]), flag) for f, n, flag in fl) 89 f, _hex(n[:20]), flag) for f, n, flag in fl)
90
91 try:
92 _lazymanifest = parsers.lazymanifest
93 except AttributeError:
94 pass
90 95
91 class manifestdict(object): 96 class manifestdict(object):
92 def __init__(self, data=''): 97 def __init__(self, data=''):
93 self._lm = _lazymanifest(data) 98 self._lm = _lazymanifest(data)
94 99