Skip to content

Commit

Permalink
Auto merge of #5118 - Eh2406:more_rc, r=alexcrichton
Browse files Browse the repository at this point in the history
use more Rc in the part of resolver that gets cloned a lot

In a test on #4810 (comment)
Before we got to 1700000 ticks in ~(82 to 97) sec
After we got to 1700000 ticks in ~(63 to 67) sec
  • Loading branch information
bors committed Mar 4, 2018
2 parents adadfab + af60861 commit cd230ad
Showing 1 changed file with 6 additions and 4 deletions.
10 changes: 6 additions & 4 deletions src/cargo/core/resolver/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -344,7 +344,7 @@ struct Context {
warnings: RcList<String>,
}

type Activations = HashMap<String, HashMap<SourceId, Vec<Summary>>>;
type Activations = HashMap<String, HashMap<SourceId, Rc<Vec<Summary>>>>;

/// Builds the list of all packages required to build the first argument.
pub fn resolve(summaries: &[(Summary, Method)],
Expand Down Expand Up @@ -1287,15 +1287,17 @@ impl Context {
.entry(id.name().to_string())
.or_insert_with(HashMap::new)
.entry(id.source_id().clone())
.or_insert_with(Vec::new);
.or_insert_with(||Rc::new(Vec::new()));
if !prev.iter().any(|c| c == summary) {
self.resolve_graph.push(GraphNode::Add(id.clone()));
if let Some(link) = summary.links() {
ensure!(self.links.insert(link.to_owned(), id.clone()).is_none(),
"Attempting to resolve a with more then one crate with the links={}. \n\
This will not build as is. Consider rebuilding the .lock file.", link);
}
prev.push(summary.clone());
let mut inner: Vec<_> = (**prev).clone();
inner.push(summary.clone());
*prev = Rc::new(inner);
return Ok(false)
}
debug!("checking if {} is already activated", summary.package_id());
Expand Down Expand Up @@ -1463,7 +1465,7 @@ fn check_cycles(resolve: &Resolve, activations: &Activations)
-> CargoResult<()> {
let summaries: HashMap<&PackageId, &Summary> = activations.values()
.flat_map(|v| v.values())
.flat_map(|v| v)
.flat_map(|v| v.iter())
.map(|s| (s.package_id(), s))
.collect();

Expand Down

0 comments on commit cd230ad

Please sign in to comment.