[PATCH 1 of 2] reachableroots: bail if integer object cannot be allocated
Yuya Nishihara
yuya at tcha.org
Mon Aug 17 09:18:50 CDT 2015
On Fri, 14 Aug 2015 22:41:09 -0700, Pierre-Yves David wrote:
> On 08/14/2015 03:25 AM, Yuya Nishihara wrote:
> > # HG changeset patch
> > # User Yuya Nishihara <yuya at tcha.org>
> > # Date 1439523116 -32400
> > # Fri Aug 14 12:31:56 2015 +0900
> > # Node ID 949f27368952a03365a84ec81d1a6aefe4e8319a
> > # Parent 0b57b77f9b3ed5c1cc24ce95173c4f7e824df13f
> > reachableroots: bail if integer object cannot be allocated
> >
> > This patch also replaces Py_XDECREF() by Py_DECREF() because we known "val"
> > and "p" are not NULL.
> >
> > BTW, we can eliminate some of these allocation and error handling of int objects
> > if the internal "seen" array has more information. For example,
> >
> > enum { SEEN = 1, ROOT = 2, REACHABLE = 4 };
> > /* ... build ROOT mask from roots argument ... */
> > if (seen[revnum + 1] & ROOT) { /* instead of PySet_Contains(roots, val) */
> >
> > From my quick hack, it is 2x faster.
>
> Same logic probably apply for reachable. If we do not have to check the
> python set for content we can probably be faster.
Yes. I'll patchbomb them as two series because the series gets bigger than I
thought. The overall result is
revset #0: 0::tip
0) 0.004168
5) 0.001377
Regards,
More information about the Mercurial-devel
mailing list