D5942: rust: less set lookups in AncestorsIterator
gracinet (Georges Racinet)
phabricator at mercurial-scm.org
Tue Feb 12 12:02:05 UTC 2019
gracinet created this revision.
Herald added subscribers: mercurial-devel, kevincox, durin42.
Herald added a reviewer: hg-reviewers.
REVISION SUMMARY
This uses the boolean return of `HashSet::insert()` to factor
pairs of contains()/insert() into a single insert()
On the mozilla-central repository (450k changesets), I get about a bit more
than 10% better medians in perfancestors (taking the mean of three runs)
Best run for parent changeset:
! wall 0.106474 comb 0.110000 user 0.110000 sys 0.000000 (median of 93)
Best run fot this changeset:
! wall 0.093191 comb 0.090000 user 0.090000 sys 0.000000 (median of 100)
REPOSITORY
rHG Mercurial
REVISION DETAIL
https://phab.mercurial-scm.org/D5942
AFFECTED FILES
rust/hg-core/src/ancestors.rs
CHANGE DETAILS
diff --git a/rust/hg-core/src/ancestors.rs b/rust/hg-core/src/ancestors.rs
--- a/rust/hg-core/src/ancestors.rs
+++ b/rust/hg-core/src/ancestors.rs
@@ -79,8 +79,7 @@
#[inline]
fn conditionally_push_rev(&mut self, rev: Revision) {
- if self.stoprev <= rev && !self.seen.contains(&rev) {
- self.seen.insert(rev);
+ if self.stoprev <= rev && self.seen.insert(rev) {
self.visit.push(rev);
}
}
@@ -154,11 +153,10 @@
Ok(ps) => ps,
Err(e) => return Some(Err(e)),
};
- if p1 < self.stoprev || self.seen.contains(&p1) {
+ if p1 < self.stoprev || !self.seen.insert(p1) {
self.visit.pop();
} else {
*(self.visit.peek_mut().unwrap()) = p1;
- self.seen.insert(p1);
};
self.conditionally_push_rev(p2);
To: gracinet, #hg-reviewers
Cc: durin42, kevincox, mercurial-devel
More information about the Mercurial-devel
mailing list