From 8ba86c1671d0b3b1ec862b915f41b2f83b6fb5c3 Mon Sep 17 00:00:00 2001 From: Jimmy Byrd Date: Mon, 17 Feb 2025 22:27:03 -0500 Subject: [PATCH] Fix slow graph binlog (#226) * chore: add spelling * fix: slow binlog writes for graph based builds --- .vscode/settings.json | 2 ++ src/Ionide.ProjInfo/Library.fs | 26 ++++++++------------------ test/Ionide.ProjInfo.Tests/Tests.fs | 8 ++++---- 3 files changed, 14 insertions(+), 22 deletions(-) diff --git a/.vscode/settings.json b/.vscode/settings.json index f4483ebc..d1ff15b5 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -14,6 +14,8 @@ "cSpell.words": [ "binlog", "inheritdoc", + "Ionide", + "msbuild", "tfms", "vswhere", "xbuild" diff --git a/src/Ionide.ProjInfo/Library.fs b/src/Ionide.ProjInfo/Library.fs index d0e491bd..b8bf4d59 100644 --- a/src/Ionide.ProjInfo/Library.fs +++ b/src/Ionide.ProjInfo/Library.fs @@ -532,7 +532,7 @@ module ProjectLoader = let pi = project.CreateProjectInstance() getTfm pi isLegacyFrameworkProj - let createLoggers (paths: string seq) (binaryLogs: BinaryLogGeneration) (sw: StringWriter) = + let createLoggers (path: string) (binaryLogs: BinaryLogGeneration) (sw: StringWriter) = let swLogger = stringWriterLogger (sw) let msBuildLogger = msBuildToLogProvider () @@ -541,24 +541,14 @@ module ProjectLoader = let logFileName = Path.ChangeExtension(projectFileName, ".binlog") Path.Combine(dir.FullName, logFileName) - match binaryLogs with - | BinaryLogGeneration.Off -> [ + [ swLogger msBuildLogger - ] - | BinaryLogGeneration.Within dir -> - let loggers = - paths - |> Seq.map (fun path -> - let logPath = logFilePath (dir, path) - Microsoft.Build.Logging.BinaryLogger(Parameters = logPath) :> ILogger - ) + match binaryLogs with + | BinaryLogGeneration.Off -> () + | BinaryLogGeneration.Within dir -> Microsoft.Build.Logging.BinaryLogger(Parameters = logFilePath (dir, path)) :> ILogger - [ - swLogger - msBuildLogger - yield! loggers - ] + ] let getGlobalProps (tfm: string option) (globalProperties: (string * string) list) (propsSetFromParentCollection: Set) = [ @@ -655,7 +645,7 @@ module ProjectLoader = let project = findOrCreateMatchingProject path projectCollection globalProperties use sw = new StringWriter() - let loggers = createLoggers [ path ] binaryLogs sw + let loggers = createLoggers path binaryLogs sw let pi = project.CreateProjectInstance() let designTimeTargets = designTimeBuildTargets isLegacyFrameworkProjFile @@ -1224,7 +1214,7 @@ type WorkspaceLoaderViaProjectGraph private (toolsPath, ?globalProperties: (stri let bm = BuildManager.DefaultBuildManager use sw = new StringWriter() - let loggers = ProjectLoader.createLoggers allKnownNames binaryLogs sw + let loggers = ProjectLoader.createLoggers "graph-build" binaryLogs sw let buildParameters = BuildParameters(Loggers = loggers) buildParameters.ProjectLoadSettings <- diff --git a/test/Ionide.ProjInfo.Tests/Tests.fs b/test/Ionide.ProjInfo.Tests/Tests.fs index 81e6f971..0b9a2c18 100644 --- a/test/Ionide.ProjInfo.Tests/Tests.fs +++ b/test/Ionide.ProjInfo.Tests/Tests.fs @@ -1577,7 +1577,7 @@ let testFCSmapManyProjCheckCaching = Expect.equal distinctOptionsCount projectsInLayers.Length "Mapping should reuse instances of FSharpProjectOptions and only create one per project" ) -let testSample2WithBinLog toolsPath workspaceLoader (workspaceFactory: ToolsPath -> IWorkspaceLoader) = +let testSample2WithBinLog binLogFile toolsPath workspaceLoader (workspaceFactory: ToolsPath -> IWorkspaceLoader) = testCase |> withLog (sprintf "can load sample2 with bin log - %s" workspaceLoader) @@ -1630,7 +1630,7 @@ let testSample2WithBinLog toolsPath workspaceLoader (workspaceFactory: ToolsPath let blPath = projDir - / "n1.binlog" + / binLogFile let blExists = File.Exists blPath @@ -2364,8 +2364,8 @@ let tests toolsPath = loadProjfileFromDiskTests toolsPath "WorkspaceLoaderViaProjectGraph" WorkspaceLoaderViaProjectGraph.Create //Binlog test - testSample2WithBinLog toolsPath "WorkspaceLoader" WorkspaceLoader.Create - testSample2WithBinLog toolsPath "WorkspaceLoaderViaProjectGraph" WorkspaceLoaderViaProjectGraph.Create + testSample2WithBinLog "n1.binlog" toolsPath "WorkspaceLoader" WorkspaceLoader.Create + testSample2WithBinLog "graph-build.binlog" toolsPath "WorkspaceLoaderViaProjectGraph" WorkspaceLoaderViaProjectGraph.Create test "can get runtimes" { let runtimes = SdkDiscovery.runtimes (