[PATCH 4 of 5] revset: prefetch an attribute in _generatorset.__iter__
Pierre-Yves David
pierre-yves.david at ens-lyon.org
Fri Sep 19 17:33:57 CDT 2014
# HG changeset patch
# User Pierre-Yves David <pierre-yves.david at fb.com>
# Date 1411080765 25200
# Thu Sep 18 15:52:45 2014 -0700
# Node ID bfaab5271eb80fd282784864193e0d57a1ceef89
# Parent a2b305e889547516d7952ee8ecd67948cd8ff360
revset: prefetch an attribute in _generatorset.__iter__
Python's attribute lookup are expensible, lets do less of them.
This gives us a 7% speedup on this revset iteration (from 0.063403 to 0.059032)
diff --git a/mercurial/revset.py b/mercurial/revset.py
--- a/mercurial/revset.py
+++ b/mercurial/revset.py
@@ -2655,16 +2655,17 @@ class _generatorset(object):
#
# Getting ride of it would provide an about 15% speed up on this
# iteration.
i = 0
genlist = self._genlist
- consume = self._consumegen()
+ nextrev = self._consumegen().next
+ _len = len # cache global lookup
while True:
- if i < len(genlist):
+ if i < _len(genlist):
yield genlist[i]
else:
- yield consume.next()
+ yield nextrev()
i += 1
def _consumegen(self):
cache = self._cache
genlist = self._genlist.append
More information about the Mercurial-devel
mailing list