[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