From d3b7d800ea37ea7baeab3d724a8ced578c7908fa Mon Sep 17 00:00:00 2001 From: Andrew Gallant Date: Thu, 30 May 2024 11:41:49 -0400 Subject: [PATCH] uv-resolver: fix perf regression We significantly regressed performance in some cases because we were cloning the resolver state one more time than we needed to. That doesn't sound like a lot, but in the case where there are no forks, it implies we were cloning the state for every `get_dependencies` called when we shouldn't have been cloning it at all. Avoiding the clone results in somewhat tortured code. This can probably be refactored by moving bits out to a helper routine, but that also seemed non-trivial. So we let this suffice for now. --- crates/uv-resolver/src/resolver/mod.rs | 33 ++++++++++++++++++++------ 1 file changed, 26 insertions(+), 7 deletions(-) diff --git a/crates/uv-resolver/src/resolver/mod.rs b/crates/uv-resolver/src/resolver/mod.rs index 6499d9f41..e0e31458a 100644 --- a/crates/uv-resolver/src/resolver/mod.rs +++ b/crates/uv-resolver/src/resolver/mod.rs @@ -464,15 +464,26 @@ impl ResolverState { state @@ -482,13 +493,17 @@ impl ResolverState + .any(|(dependency, _)| dependency == &package) => { if enabled!(Level::DEBUG) { prefetcher.log_tried_versions(); @@ -515,7 +530,11 @@ impl ResolverState