[PATCH] phases: really fix native phase computation

Augie Fackler raf at durin42.com
Fri Jun 12 15:56:47 CDT 2015


This is queued, thanks.

> On Jun 11, 2015, at 04:47, Pierre-Yves David <pierre-yves.david at ens-lyon.org> wrote:
> 
> # HG changeset patch
> # User Pierre-Yves David <pierre-yves.david at fb.com>
> # Date 1433989576 25200
> #      Wed Jun 10 19:26:16 2015 -0700
> # Node ID d90a36f8c2ef3491391ffd811b082def3c85158c
> # Parent  19717d3c8f941fdd92725ef1723f39edd981e543
> phases: really fix native phase computation
> 
> For some reason (probably rebase issue, leprechaun or badly resolved .rej)
> 1635579f9baf contains only half of the emailed patches and do not fix the bug.
> This patch adds the other half and enable the sweet native computation for real.
> 
> As expected this provide massive speedup along the board.
> 
> revset #0: not public()
>   plain         first
> 0) 0.011960      0.010523
> 1) 0.000465   3% 0.000492   4%
> 
> revset #1: (tip~1000::) - public()
>   plain         first
> 0) 0.025700      0.025169
> 1) 0.002864  11% 0.001899   7%
> 
> revset #2: not public() and branch("default")
>   plain         first
> 0) 0.022842      0.020863
> 1) 0.011418  49% 0.010948   52%
> 
> However, it has a less impact (even bad) on first result time in simple
> situation.  This comes from the overhead of building the set and filtering it.
> This is especially true on my Mercurial repository (used here) where about 1/3
> of the changesets are non public and hidden. This could be mitigated by a
> caching of the set and a better usage of smartset in '_notpublic'. (But this
> won't happen in this patch because the win is massive everywhere else).
> 
> revset #0: not public()
>   last
> 0) 0.000081
> 1) 0.000493 x6.1 <-- bad impact
> 
> revset #1: (tip~1000::) - public()
>   last
> 0) 0.013966
> 1) 0.002737  19%
> 
> revset #2: not public() and branch("default")
>   last
> 0) 0.011021
> 1) 0.011038
> 
> The effect mostly disappear when the number of non-public changesets is small
> and/or the repo get bigger. Result for Mozilla central:
> 
> Mozilla
> 
> revset #0: not public()
>   plain         first         last
> 0) 0.092787      0.084094      0.000080
> 1) 0.000054   0% 0.000083   0% 0.000083
> 
> revset #1: (tip~1000::) - public()
>   plain         first         last
> 0) 0.215607      0.183996      0.124962
> 1) 0.031620  14% 0.006616   3% 0.031168  24%
> 
> revset #2: not public() and branch("default")
>   plain         first         last
> 0) 0.092626      0.082687      0.000162
> 1) 0.000139   0% 0.000165   0% 0.000167
> 
> diff --git a/mercurial/phases.py b/mercurial/phases.py
> --- a/mercurial/phases.py
> +++ b/mercurial/phases.py
> @@ -176,11 +176,11 @@ class phasecache(object):
>     def _getphaserevsnative(self, repo):
>         repo = repo.unfiltered()
>         nativeroots = []
>         for phase in trackedphases:
>             nativeroots.append(map(repo.changelog.rev, self.phaseroots[phase]))
> -        return repo.changelog.computephasesmapsets(nativeroots)
> +        return repo.changelog.computephases(nativeroots)
> 
>     def _computephaserevspure(self, repo):
>         repo = repo.unfiltered()
>         revs = [public] * len(repo.changelog)
>         self._phaserevs = revs
> _______________________________________________
> Mercurial-devel mailing list
> Mercurial-devel at selenic.com
> https://selenic.com/mailman/listinfo/mercurial-devel



More information about the Mercurial-devel mailing list