[PATCH 3 of 5] revset: avoid in loop lookup in _generatorset._consumegen
Augie Fackler
raf at durin42.com
Wed Sep 24 10:29:13 CDT 2014
On Fri, Sep 19, 2014 at 03:33:56PM -0700, Pierre-Yves David wrote:
> # HG changeset patch
> # User Pierre-Yves David <pierre-yves.david at fb.com>
> # Date 1398902208 25200
> # Wed Apr 30 16:56:48 2014 -0700
> # Node ID a2b305e889547516d7952ee8ecd67948cd8ff360
> # Parent a38a9240a0c57afe2f4939f41a63382ef76b92fc
> revset: avoid in loop lookup in _generatorset._consumegen
>
> Python lookup are slow, let do all lookup outside of the for loop.
Queued first three. In 4 and 5, I think you mean "expensive" and not
"expensible".
>
> This provide a small but still significant speedup:
>
> revset #0: 0::
> 0) wall 0.063258 comb 0.060000 user 0.060000 sys 0.000000 (best of 100)
> 1) wall 0.057776 comb 0.050000 user 0.050000 sys 0.000000 (best of 100)
>
> diff --git a/mercurial/revset.py b/mercurial/revset.py
> --- a/mercurial/revset.py
> +++ b/mercurial/revset.py
> @@ -2664,13 +2664,15 @@ class _generatorset(object):
> else:
> yield consume.next()
> i += 1
>
> def _consumegen(self):
> + cache = self._cache
> + genlist = self._genlist.append
> for item in self._gen:
> - self._cache[item] = True
> - self._genlist.append(item)
> + cache[item] = True
> + genlist(item)
> yield item
> self._finished = True
>
> def set(self):
> return self
> _______________________________________________
> Mercurial-devel mailing list
> Mercurial-devel at selenic.com
> http://selenic.com/mailman/listinfo/mercurial-devel
More information about the Mercurial-devel
mailing list