annotate tests/test-ancestor.py.out @ 42743:8c9a6adec67a

rust-discovery: using the children cache in add_missing The DAG range computation often needs to get back to very old revisions, and turns out to be disproportionately long, given that the end goal is to remove the descendents of the given missing revisons from the undecided set. The fast iteration capabilities available in the Rust case make it possible to avoid the DAG range entirely, at the cost of precomputing the children cache, and to simply iterate on children of the given missing revisions. This is a case where staying on the same side of the interface between the two languages has clear benefits. On discoveries with initial undecided sets small enough to bypass sampling entirely, the total cost of computing the children cache and the subsequent iteration becomes better than the Python + C counterpart, which relies on reachableroots2. For example, on a repo with more than one million revisions with an initial undecided set of 11 elements, we get these figures: Rust version with simple iteration addcommons: 57.287us first undecided computation: 184.278334ms first children cache computation: 131.056us addmissings iteration: 42.766us first addinfo total: 185.24 ms Python + C version first addcommons: 0.29 ms addcommons 0.21 ms first undecided computation 191.35 ms addmissings 45.75 ms first addinfo total: 237.77 ms On discoveries with large undecided sets, the initial price paid makes the first addinfo slower than the Python + C version, but that's more than compensated by the gain in sampling and subsequent iterations. Here's an extreme example with an undecided set of a million revisions: Rust version: first undecided computation: 293.842629ms first children cache computation: 407.911297ms addmissings iteration: 34.312869ms first addinfo total: 776.02 ms taking initial sample query 2: sampling time: 1318.38 ms query 2; still undecided: 1005013, sample size is: 200 addmissings: 143.062us Python + C version: first undecided computation 298.13 ms addmissings 80.13 ms first addinfo total: 399.62 ms taking initial sample query 2: sampling time: 3957.23 ms query 2; still undecided: 1005013, sample size is: 200 addmissings 52.88 ms Differential Revision: https://phab.mercurial-scm.org/D6428
author Georges Racinet <georges.racinet@octobus.net>
date Tue, 16 Apr 2019 01:16:39 +0200
parents d097dd0afc19
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
40959
d097dd0afc19 rust: translation of missingancestors
Georges Racinet <gracinet@anybox.fr>
parents: 39536
diff changeset
1 % removeancestorsfrom(), example 1
d097dd0afc19 rust: translation of missingancestors
Georges Racinet <gracinet@anybox.fr>
parents: 39536
diff changeset
2 remaining (sorted): [5, 6, 8, 9]
d097dd0afc19 rust: translation of missingancestors
Georges Racinet <gracinet@anybox.fr>
parents: 39536
diff changeset
3 % removeancestorsfrom(), example 2
d097dd0afc19 rust: translation of missingancestors
Georges Racinet <gracinet@anybox.fr>
parents: 39536
diff changeset
4 remaining (sorted): [11, 12, 13, 14]
d097dd0afc19 rust: translation of missingancestors
Georges Racinet <gracinet@anybox.fr>
parents: 39536
diff changeset
5 % removeancestorsfrom(), example 3
d097dd0afc19 rust: translation of missingancestors
Georges Racinet <gracinet@anybox.fr>
parents: 39536
diff changeset
6 remaining (sorted): [3, 5]
d097dd0afc19 rust: translation of missingancestors
Georges Racinet <gracinet@anybox.fr>
parents: 39536
diff changeset
7 % missingancestors(), example 1
d097dd0afc19 rust: translation of missingancestors
Georges Racinet <gracinet@anybox.fr>
parents: 39536
diff changeset
8 return [3, 7, 11]
d097dd0afc19 rust: translation of missingancestors
Georges Racinet <gracinet@anybox.fr>
parents: 39536
diff changeset
9 % missingancestors(), example 2
d097dd0afc19 rust: translation of missingancestors
Georges Racinet <gracinet@anybox.fr>
parents: 39536
diff changeset
10 return [5, 10]
d097dd0afc19 rust: translation of missingancestors
Georges Racinet <gracinet@anybox.fr>
parents: 39536
diff changeset
11 % missingancestors(), example 3
d097dd0afc19 rust: translation of missingancestors
Georges Racinet <gracinet@anybox.fr>
parents: 39536
diff changeset
12 return [3, 6, 9, 11]
d097dd0afc19 rust: translation of missingancestors
Georges Racinet <gracinet@anybox.fr>
parents: 39536
diff changeset
13 % removeancestorsfrom(), bigger graph
d097dd0afc19 rust: translation of missingancestors
Georges Racinet <gracinet@anybox.fr>
parents: 39536
diff changeset
14 Ok
18091
f7f8159caad3 ancestor: add lazy membership testing to lazyancestors
Siddharth Agarwal <sid0@fb.com>
parents: 18079
diff changeset
15 % lazy ancestor set for [], stoprev = 0, inclusive = False
23329
c6cd4b8b76f8 test-ancestor: test iteration for lazyancestors
Siddharth Agarwal <sid0@fb.com>
parents: 22355
diff changeset
16 membership: []
c6cd4b8b76f8 test-ancestor: test iteration for lazyancestors
Siddharth Agarwal <sid0@fb.com>
parents: 22355
diff changeset
17 iteration: []
18091
f7f8159caad3 ancestor: add lazy membership testing to lazyancestors
Siddharth Agarwal <sid0@fb.com>
parents: 18079
diff changeset
18 % lazy ancestor set for [11, 13], stoprev = 0, inclusive = False
23329
c6cd4b8b76f8 test-ancestor: test iteration for lazyancestors
Siddharth Agarwal <sid0@fb.com>
parents: 22355
diff changeset
19 membership: [7, 8, 3, 4, 1, 0]
39473
b6db2e80a9ce ancestors: actually iterate over ancestors in topological order (issue5979)
Boris Feld <boris.feld@octobus.net>
parents: 23331
diff changeset
20 iteration: [8, 7, 4, 3, 2, 1, 0]
22355
731b2a90983b test-ancestor: add a test for `ancestor` with ancestry within the initset
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 18091
diff changeset
21 % lazy ancestor set for [1, 3], stoprev = 0, inclusive = False
23329
c6cd4b8b76f8 test-ancestor: test iteration for lazyancestors
Siddharth Agarwal <sid0@fb.com>
parents: 22355
diff changeset
22 membership: [1, 0]
39473
b6db2e80a9ce ancestors: actually iterate over ancestors in topological order (issue5979)
Boris Feld <boris.feld@octobus.net>
parents: 23331
diff changeset
23 iteration: [1, 0]
18091
f7f8159caad3 ancestor: add lazy membership testing to lazyancestors
Siddharth Agarwal <sid0@fb.com>
parents: 18079
diff changeset
24 % lazy ancestor set for [11, 13], stoprev = 0, inclusive = True
23329
c6cd4b8b76f8 test-ancestor: test iteration for lazyancestors
Siddharth Agarwal <sid0@fb.com>
parents: 22355
diff changeset
25 membership: [11, 13, 7, 8, 3, 4, 1, 0]
39474
a60dae060bc8 ancestors: ensure a consistent order even in the "inclusive" case
Boris Feld <boris.feld@octobus.net>
parents: 39473
diff changeset
26 iteration: [13, 11, 8, 7, 4, 3, 2, 1, 0]
18091
f7f8159caad3 ancestor: add lazy membership testing to lazyancestors
Siddharth Agarwal <sid0@fb.com>
parents: 18079
diff changeset
27 % lazy ancestor set for [11, 13], stoprev = 6, inclusive = False
23329
c6cd4b8b76f8 test-ancestor: test iteration for lazyancestors
Siddharth Agarwal <sid0@fb.com>
parents: 22355
diff changeset
28 membership: [7, 8]
39473
b6db2e80a9ce ancestors: actually iterate over ancestors in topological order (issue5979)
Boris Feld <boris.feld@octobus.net>
parents: 23331
diff changeset
29 iteration: [8, 7]
18091
f7f8159caad3 ancestor: add lazy membership testing to lazyancestors
Siddharth Agarwal <sid0@fb.com>
parents: 18079
diff changeset
30 % lazy ancestor set for [11, 13], stoprev = 6, inclusive = True
23329
c6cd4b8b76f8 test-ancestor: test iteration for lazyancestors
Siddharth Agarwal <sid0@fb.com>
parents: 22355
diff changeset
31 membership: [11, 13, 7, 8]
39474
a60dae060bc8 ancestors: ensure a consistent order even in the "inclusive" case
Boris Feld <boris.feld@octobus.net>
parents: 39473
diff changeset
32 iteration: [13, 11, 8, 7]
39475
431068d7e9db ancestor: add test showing inconsistency between __iter__ and __contains__
Yuya Nishihara <yuya@tcha.org>
parents: 39474
diff changeset
33 % lazy ancestor set for [11, 13], stoprev = 11, inclusive = True
431068d7e9db ancestor: add test showing inconsistency between __iter__ and __contains__
Yuya Nishihara <yuya@tcha.org>
parents: 39474
diff changeset
34 membership: [11, 13]
431068d7e9db ancestor: add test showing inconsistency between __iter__ and __contains__
Yuya Nishihara <yuya@tcha.org>
parents: 39474
diff changeset
35 iteration: [13, 11]
431068d7e9db ancestor: add test showing inconsistency between __iter__ and __contains__
Yuya Nishihara <yuya@tcha.org>
parents: 39474
diff changeset
36 % lazy ancestor set for [11, 13], stoprev = 12, inclusive = True
39476
7eadc9407867 ancestor: filter out initial revisions lower than stoprev
Yuya Nishihara <yuya@tcha.org>
parents: 39475
diff changeset
37 membership: [13]
39475
431068d7e9db ancestor: add test showing inconsistency between __iter__ and __contains__
Yuya Nishihara <yuya@tcha.org>
parents: 39474
diff changeset
38 iteration: [13]
39536
bdb177923291 ancestor: optimize _lazyancestorsiter() for contiguous chains
Yuya Nishihara <yuya@tcha.org>
parents: 39476
diff changeset
39 % lazy ancestor set for [10, 1], stoprev = 0, inclusive = True
bdb177923291 ancestor: optimize _lazyancestorsiter() for contiguous chains
Yuya Nishihara <yuya@tcha.org>
parents: 39476
diff changeset
40 membership: [2, 10, 4, 5, 0, 1]
bdb177923291 ancestor: optimize _lazyancestorsiter() for contiguous chains
Yuya Nishihara <yuya@tcha.org>
parents: 39476
diff changeset
41 iteration: [10, 5, 4, 2, 1, 0]