diff mercurial/obsolete.py @ 24019:26fbf07482b2

_fm1readmarkers: generate list in C This moves perfloadmarkers from ! result: 63866 ! wall 0.239217 comb 0.250000 user 0.240000 sys 0.010000 (best of 42) to ! result: 63866 ! wall 0.218795 comb 0.210000 user 0.210000 sys 0.000000 (best of 46)
author Martin von Zweigbergk <martinvonz@google.com>
date Tue, 27 Jan 2015 09:22:59 -0500
parents 26d6a6a78c1d
children e0e6dd806b23
line wrap: on
line diff
--- a/mercurial/obsolete.py	Tue Jan 20 13:38:07 2015 -0500
+++ b/mercurial/obsolete.py	Tue Jan 27 09:22:59 2015 -0500
@@ -285,7 +285,7 @@
 _fm1metapair = 'BB'
 _fm1metapairsize = _calcsize('BB')
 
-def _fm1readmarkers(data, off):
+def _fm1purereadmarkers(data, off):
     # make some global constants local for performance
     noneflag = _fm1parentnone
     sha2flag = usingsha256
@@ -302,14 +302,6 @@
     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
@@ -404,6 +396,13 @@
         data.append(value)
     return ''.join(data)
 
+def _fm1readmarkers(data, off):
+    native = getattr(parsers, 'fm1readmarkers', None)
+    if not native:
+        return _fm1purereadmarkers(data, off)
+    stop = len(data) - _fm1fsize
+    return native(data, off, stop)
+
 # mapping to read/write various marker formats
 # <version> -> (decoder, encoder)
 formats = {_fm0version: (_fm0readmarkers, _fm0encodeonemarker),