Mercurial > public > mercurial-scm > hg
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 |