[PATCH] phases: really fix native phase computation
Augie Fackler
raf at durin42.com
Fri Jun 12 20:56:47 UTC 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