Mercurial > hg-stable
changeset 24018:26d6a6a78c1d
obsolete: use parsers.fm1readmarker if it exists for a ~38% perf win
This moves perfloadmarkers on my linux workstation (63494 markers from
mpm, crew, and myself) performance from
! wall 0.357657 comb 0.360000 user 0.350000 sys 0.010000 (best of 28)
to
! wall 0.222345 comb 0.220000 user 0.210000 sys 0.010000 (best of 41)
which is a pretty good improvement.
On my BSD machine, which is ancient and slow, before:
! wall 3.584964 comb 3.578125 user 3.539062 sys 0.039062 (best of 3)
after:
! wall 2.267974 comb 2.265625 user 2.195312 sys 0.070312 (best of 5)
I feel like we could do better by moving the whole generator function
into C, but I didn't want to tackle that right away.
author | Augie Fackler <augie@google.com> |
---|---|
date | Tue, 20 Jan 2015 13:38:07 -0500 |
parents | 72c9b5ae7278 |
children | 26fbf07482b2 |
files | mercurial/obsolete.py |
diffstat | 1 files changed, 10 insertions(+), 1 deletions(-) [+] |
line wrap: on
line diff
--- a/mercurial/obsolete.py Fri Jan 23 15:11:25 2015 -0500 +++ b/mercurial/obsolete.py Tue Jan 20 13:38:07 2015 -0500 @@ -68,7 +68,7 @@ """ import struct -import util, base85, node +import util, base85, node, parsers import phases from i18n import _ @@ -301,6 +301,15 @@ # Loop on markers stop = len(data) - _fm1fsize ufixed = util.unpacker(_fm1fixed) + + fast = getattr(parsers, 'fm1readmarker', None) + if fast is not None: + while off <= stop: + ret = fast(data, off) + yield ret[1:] + off += ret[0] + return + while off <= stop: # read fixed part o1 = off + fsize