mirror of https://github.com/golang/go.git
internal/lsp/cache: only clone metadata if something changed
We with immutable metadata, we don't need to clone if nothing was invalidated. Benchmark (didChange in k8s): 65ms->45ms For golang/go#45686 Change-Id: I6b5e764c53a35784fd8c7b43bc26361f4ee8d928 Reviewed-on: https://go-review.googlesource.com/c/tools/+/340853 Run-TryBot: Robert Findley <rfindley@google.com> Reviewed-by: Alan Donovan <adonovan@google.com> gopls-CI: kokoro <noreply+kokoro@google.com> TryBot-Result: Gopher Robot <gobot@golang.org>
This commit is contained in:
parent
4ba3d2217f
commit
dffd6452c0
|
|
@ -2016,8 +2016,15 @@ func (s *snapshot) clone(ctx, bgCtx context.Context, changes map[span.URI]*fileC
|
|||
}
|
||||
}
|
||||
|
||||
result.meta = s.meta.Clone(metadataUpdates)
|
||||
result.workspacePackages = computeWorkspacePackages(result.meta)
|
||||
if len(metadataUpdates) > 0 {
|
||||
result.meta = s.meta.Clone(metadataUpdates)
|
||||
result.workspacePackages = computeWorkspacePackages(result.meta)
|
||||
} else {
|
||||
// No metadata changes. Since metadata is only updated by cloning, it is
|
||||
// safe to re-use the existing metadata here.
|
||||
result.meta = s.meta
|
||||
result.workspacePackages = s.workspacePackages
|
||||
}
|
||||
|
||||
// Inherit all of the go.mod-related handles.
|
||||
for _, v := range result.modTidyHandles {
|
||||
|
|
|
|||
Loading…
Reference in New Issue