From a1f74c9e5a0436f59273c2204b95b9c9ec55a1d3 Mon Sep 17 00:00:00 2001 From: janusz Date: Sat, 3 Sep 2022 14:22:46 +0100 Subject: [PATCH] * Make the code do nothing if no listeners are hooked up. * Cleanup --- src/Compiler/Checking/CheckDeclarations.fs | 13 +-- src/Compiler/Driver/ParseAndCheckInputs.fs | 6 +- src/Compiler/Driver/fsc.fs | 29 +++-- src/Compiler/Facilities/BuildGraph.fs | 3 +- src/Compiler/Facilities/BuildGraph.fsi | 3 +- src/Compiler/Facilities/Logger.fs | 30 +++++- src/Compiler/Facilities/Logger.fsi | 21 +++- src/Compiler/Service/FSharpCheckerResults.fs | 5 +- src/Compiler/Service/IncrementalBuild.fs | 19 ++-- src/Compiler/Service/service.fs | 102 ++++++++---------- src/fsc/fscmain.fs | 8 +- .../CompilerServiceBenchmarks/Program.fs | 11 +- 12 files changed, 139 insertions(+), 111 deletions(-) diff --git a/src/Compiler/Checking/CheckDeclarations.fs b/src/Compiler/Checking/CheckDeclarations.fs index bbe0171e68e..f2e00c12928 100644 --- a/src/Compiler/Checking/CheckDeclarations.fs +++ b/src/Compiler/Checking/CheckDeclarations.fs @@ -5173,9 +5173,7 @@ let CheckOneImplFile let infoReader = InfoReader(g, amap) cancellable { - use act = Activity.activitySource.StartActivity("CheckOneSigFile") - act.AddTag("fileName", fileName) |> ignore - act.AddTag("qualifiedNameOfFile", qualNameOfFile.Text) |> ignore + use _ = Activity.instance.Start "CheckOneImplFile" [|"fileName", fileName; "qualifiedNameOfFile", qualNameOfFile.Text|] let cenv = cenv.Create (g, isScript, niceNameGen, amap, thisCcu, false, Option.isSome rootSigOpt, conditionalDefines, tcSink, (LightweightTcValForUsingInBuildMethodCall g), isInternalTestSpanStackReferring, @@ -5303,9 +5301,12 @@ let CheckOneImplFile /// Check an entire signature file let CheckOneSigFile (g, niceNameGen, amap, thisCcu, checkForErrors, conditionalDefines, tcSink, isInternalTestSpanStackReferring) tcEnv (ParsedSigFileInput (fileName = fileName; qualifiedNameOfFile = qualNameOfFile; modules = sigFileFrags)) = cancellable { - use act = Activity.activitySource.StartActivity("CheckOneSigFile") - act.AddTag("fileName", fileName) |> ignore - act.AddTag("qualifiedNameOfFile", qualNameOfFile.Text) |> ignore + use _ = + Activity.instance.Start "CheckOneSigFile" + [| + "fileName", fileName + "qualifiedNameOfFile", qualNameOfFile.Text + |] let cenv = cenv.Create diff --git a/src/Compiler/Driver/ParseAndCheckInputs.fs b/src/Compiler/Driver/ParseAndCheckInputs.fs index 183c9d47767..2a29b909826 100644 --- a/src/Compiler/Driver/ParseAndCheckInputs.fs +++ b/src/Compiler/Driver/ParseAndCheckInputs.fs @@ -22,7 +22,6 @@ open FSharp.Compiler.CompilerConfig open FSharp.Compiler.CompilerDiagnostics open FSharp.Compiler.CompilerImports open FSharp.Compiler.Diagnostics -open FSharp.Compiler.Diagnostics.Activity open FSharp.Compiler.DiagnosticsLogger open FSharp.Compiler.Features open FSharp.Compiler.IO @@ -1140,8 +1139,7 @@ let CheckOneInput cancellable { try - use tcOneInputActivity = activitySource.StartActivity("CheckOneInput") - tcOneInputActivity.AddTag("inputName", inp.FileName) |> ignore<_> + use _ = Activity.instance.Start "CheckOneInput" [|"inputName", inp.FileName|] CheckSimulateException tcConfig @@ -1344,7 +1342,7 @@ let CheckClosedInputSetFinish (declaredImpls: CheckedImplFile list, tcState) = tcState, declaredImpls, ccuContents let CheckClosedInputSet (ctok, checkForErrors, tcConfig, tcImports, tcGlobals, prefixPathOpt, tcState, inputs) = - use tcActivity = activitySource.StartActivity("CheckClosedInputSet") + use tcActivity = Activity.instance.StartNoTags("CheckClosedInputSet") // tcEnvAtEndOfLastFile is the environment required by fsi.exe when incrementally adding definitions let results, tcState = (tcState, inputs) diff --git a/src/Compiler/Driver/fsc.fs b/src/Compiler/Driver/fsc.fs index 54757f4f374..fde26ac3870 100644 --- a/src/Compiler/Driver/fsc.fs +++ b/src/Compiler/Driver/fsc.fs @@ -39,7 +39,6 @@ open FSharp.Compiler.CompilerGlobalState open FSharp.Compiler.CreateILModule open FSharp.Compiler.DependencyManager open FSharp.Compiler.Diagnostics -open FSharp.Compiler.Diagnostics.Activity open FSharp.Compiler.DiagnosticsLogger open FSharp.Compiler.IlxGen open FSharp.Compiler.InfoReader @@ -167,8 +166,7 @@ let TypeCheck inputs, exiter: Exiter ) = - use typecheckActivity = activitySource.StartActivity("typecheck_inputs") - typecheckActivity.AddTag("assemblyName", assemblyName) |> ignore + use _ = Activity.instance.Start "typecheck_inputs" [|"assemblyName", assemblyName|] try if isNil inputs then @@ -535,7 +533,7 @@ let main1 // Process command line, flags and collect filenames let sourceFiles = - use parseActivity = activitySource.StartActivity("determine_source_files") + use parseActivity = Activity.instance.StartNoTags("determine_source_files") // The ParseCompilerOptions function calls imperative function to process "real" args // Rather than start processing, just collect names, then process them. @@ -569,7 +567,7 @@ let main1 // If there's a problem building TcConfig, abort let tcConfig = - use createConfigActivity = activitySource.StartActivity("create_tc_config") + use createConfigActivity = Activity.instance.StartNoTags("create_tc_config") try TcConfig.Create(tcConfigB, validate = false) @@ -595,12 +593,12 @@ let main1 let foundationalTcConfigP = TcConfigProvider.Constant tcConfig let sysRes, otherRes, knownUnresolved = - use splitResolutionsActivity = activitySource.StartActivity("split_resolutions") + use splitResolutionsActivity = Activity.instance.StartNoTags("split_resolutions") TcAssemblyResolutions.SplitNonFoundationalResolutions(tcConfig) // Import basic assemblies let tcGlobals, frameworkTcImports = - use frameworkImportsActivity = activitySource.StartActivity("import_framework_references") + use frameworkImportsActivity = Activity.instance.StartNoTags("import_framework_references") TcImports.BuildFrameworkTcImports(foundationalTcConfigP, sysRes, otherRes) |> NodeCode.RunImmediateWithoutCancellation @@ -653,7 +651,7 @@ let main1 ReportTime tcConfig "Import non-system references" let tcImports = - use nonFrameworkImportsActivity = activitySource.StartActivity("import_non_framework_references") + use nonFrameworkImportsActivity = Activity.instance.StartNoTags("import_non_framework_references") TcImports.BuildNonFrameworkTcImports(tcConfigP, frameworkTcImports, otherRes, knownUnresolved, dependencyProvider) |> NodeCode.RunImmediateWithoutCancellation @@ -672,7 +670,7 @@ let main1 use unwindParsePhase = PushThreadBuildPhaseUntilUnwind BuildPhase.TypeCheck let tcEnv0, openDecls0 = - use initialTcEnvActivity = activitySource.StartActivity("get_initial_tc_env") + use initialTcEnvActivity = Activity.instance.StartNoTags("get_initial_tc_env") GetInitialTcEnv(assemblyName, rangeStartup, tcConfig, tcImports, tcGlobals) // Type check the inputs @@ -733,7 +731,7 @@ let main1OfAst inputs: ParsedInput list ) = - use main1AstActivity = activitySource.StartActivity("main1_of_ast") + use main1AstActivity = Activity.instance.StartNoTags("main1_of_ast") let tryGetMetadataSnapshot = (fun _ -> None) @@ -919,8 +917,7 @@ let main2 exiter: Exiter, ilSourceDocs)) = - use main2Activity = activitySource.StartActivity("main2") - + use main2Activity = Activity.instance.StartNoTags("main2") if tcConfig.typeCheckOnly then exiter.Exit 0 @@ -1029,7 +1026,7 @@ let main3 exiter: Exiter, ilSourceDocs)) = - use main3Activity = activitySource.StartActivity("main3") + use main3Activity = Activity.instance.StartNoTags("main3") // Encode the signature data ReportTime tcConfig "Encode Interface Data" let exportRemapping = MakeExportRemapping generatedCcu generatedCcu.Contents @@ -1125,7 +1122,7 @@ let main4 exiter: Exiter, ilSourceDocs)) = - use main4Activity = activitySource.StartActivity("main4") + use main4Activity = Activity.instance.StartNoTags("main4") match tcImportsCapture with | None -> () @@ -1229,7 +1226,7 @@ let main5 exiter: Exiter, ilSourceDocs)) = - use main5Activity = activitySource.StartActivity("main5") + use main5Activity = Activity.instance.StartNoTags("main5") use unwindBuildPhase = PushThreadBuildPhaseUntilUnwind BuildPhase.Output @@ -1262,7 +1259,7 @@ let main6 exiter: Exiter, ilSourceDocs)) = - use main6Activity = activitySource.StartActivity("main6") + use main6Activity = Activity.instance.StartNoTags("main6") ReportTime tcConfig "Write .NET Binary" diff --git a/src/Compiler/Facilities/BuildGraph.fs b/src/Compiler/Facilities/BuildGraph.fs index 6c5b828e332..ccc710b88c8 100644 --- a/src/Compiler/Facilities/BuildGraph.fs +++ b/src/Compiler/Facilities/BuildGraph.fs @@ -7,6 +7,7 @@ open System.Threading open System.Threading.Tasks open System.Diagnostics open System.Globalization +open FSharp.Compiler.Diagnostics.Activity open FSharp.Compiler.DiagnosticsLogger open Internal.Utilities.Library @@ -93,7 +94,7 @@ type NodeCodeBuilder() = member _.Combine(Node (p1): NodeCode, Node (p2): NodeCode<'T>) : NodeCode<'T> = Node(async.Combine(p1, p2)) [] - member _.Using(value: Activity, binder: Activity -> NodeCode<'U>) = + member _.Using(value: ActivityFacade, binder: ActivityFacade -> NodeCode<'U>) = Node( async { try diff --git a/src/Compiler/Facilities/BuildGraph.fsi b/src/Compiler/Facilities/BuildGraph.fsi index f292bbc7040..14c276d0f58 100644 --- a/src/Compiler/Facilities/BuildGraph.fsi +++ b/src/Compiler/Facilities/BuildGraph.fsi @@ -6,6 +6,7 @@ open System open System.Diagnostics open System.Threading open System.Threading.Tasks +open FSharp.Compiler.Diagnostics.Activity open FSharp.Compiler.DiagnosticsLogger open Internal.Utilities.Library @@ -48,7 +49,7 @@ type NodeCodeBuilder = /// that a proper generic 'use' could be implemented but has not currently been necessary) member Using: CompilationGlobalsScope * (CompilationGlobalsScope -> NodeCode<'T>) -> NodeCode<'T> - member Using: Activity * (Activity -> NodeCode<'T>) -> NodeCode<'T> + member Using: ActivityFacade * (ActivityFacade -> NodeCode<'T>) -> NodeCode<'T> /// Specifies code that can be run as part of the build graph. val node: NodeCodeBuilder diff --git a/src/Compiler/Facilities/Logger.fs b/src/Compiler/Facilities/Logger.fs index 3a62b996f86..76fd3f2d897 100644 --- a/src/Compiler/Facilities/Logger.fs +++ b/src/Compiler/Facilities/Logger.fs @@ -7,8 +7,34 @@ open System.Diagnostics open System.Diagnostics.Tracing module Activity = - let activitySourceName = "fsc" - let activitySource = new ActivitySource(activitySourceName) + + type ActivityFacade(activity : Activity option) = + member this.AddTag key (value : #obj) = match activity with | Some activity -> activity.AddTag(key, value) |> ignore | None -> () + member this.Perform action = match activity with | Some activity -> action activity | None -> () + member this.Dispose() = match activity with | Some activity -> activity.Dispose() | None -> () + interface IDisposable with + member this.Dispose() = this.Dispose() + + let start (source : ActivitySource) (activityName : string) (tags : (string * #obj) seq) = + let activity = source.StartActivity(activityName) |> Option.ofObj + let facade = new ActivityFacade(activity) + for key, value in tags do + facade.AddTag key value + facade + + let startNoTags (source : ActivitySource) (activityName : string) = start source activityName [] + + type ActivitySourceFacade(source : ActivitySource) = + member this.Start (name : string) (tags : (string * #obj) seq) = start source name tags + member this.StartNoTags name = startNoTags source name + member this.Name = source.Name + member this.Dispose() = source.Dispose() + interface IDisposable with + member this.Dispose() = this.Dispose() + + let private activitySourceName = "fsc" + let private activitySource = new ActivitySource(activitySourceName) + let instance = new ActivitySourceFacade(activitySource) type LogCompilerFunctionId = | Service_ParseAndCheckFileInProject = 1 diff --git a/src/Compiler/Facilities/Logger.fsi b/src/Compiler/Facilities/Logger.fsi index cbc990a3e5a..4af6a50dd46 100644 --- a/src/Compiler/Facilities/Logger.fsi +++ b/src/Compiler/Facilities/Logger.fsi @@ -5,9 +5,24 @@ namespace FSharp.Compiler.Diagnostics open System open System.Diagnostics -module Activity = - val activitySourceName: string - val activitySource: ActivitySource +module Activity = + + type ActivityFacade = + interface IDisposable + new : Activity option -> ActivityFacade + member AddTag : string -> #obj -> unit + member Perform : (Activity -> unit) -> unit + member Dispose : unit -> unit + + type ActivitySourceFacade = + interface IDisposable + new : ActivitySource -> ActivitySourceFacade + member Start : string -> (string * #obj) seq -> ActivityFacade + member StartNoTags : string -> ActivityFacade + member Name : string + member Dispose : unit -> unit + + val instance: ActivitySourceFacade type internal LogCompilerFunctionId = | Service_ParseAndCheckFileInProject = 1 diff --git a/src/Compiler/Service/FSharpCheckerResults.fs b/src/Compiler/Service/FSharpCheckerResults.fs index 810c9cdc179..9f6ab96c75b 100644 --- a/src/Compiler/Service/FSharpCheckerResults.fs +++ b/src/Compiler/Service/FSharpCheckerResults.fs @@ -2347,9 +2347,8 @@ module internal ParseAndCheckFile = let parseFile (sourceText: ISourceText, fileName, options: FSharpParsingOptions, userOpName: string, suggestNamesForErrors: bool) = Trace.TraceInformation("FCS: {0}.{1} ({2})", userOpName, "parseFile", fileName) - use act = Activity.activitySource.StartActivity("parseFile") - act.AddTag("fileName", fileName) |> ignore - + use act = Activity.instance.Start "parseFile" [|"fileName", fileName|] + let errHandler = ErrorHandler(true, fileName, options.DiagnosticOptions, sourceText, suggestNamesForErrors) diff --git a/src/Compiler/Service/IncrementalBuild.fs b/src/Compiler/Service/IncrementalBuild.fs index 0a661629702..3b3ff42a962 100644 --- a/src/Compiler/Service/IncrementalBuild.fs +++ b/src/Compiler/Service/IncrementalBuild.fs @@ -116,9 +116,12 @@ module IncrementalBuildSyntaxTree = let mutable weakCache: WeakReference<_> option = None let parse(sigNameOpt: QualifiedNameOfFile option) = - use act = Activity.activitySource.StartActivity("SyntaxTree.parse") - act.AddTag("fileName", source.FilePath) |> ignore - act.AddTag("buildPhase", BuildPhase.Parse) |> ignore + use act = + Activity.instance.Start "SyntaxTree.parse" + [| + "fileName", source.FilePath + "buildPhase", BuildPhase.Parse.ToString() + |] let diagnosticsLogger = CompilationDiagnosticLogger("Parse", tcConfig.diagnosticsOptions) // Return the disposable object that cleans up use _holder = new CompilationGlobalsScope(diagnosticsLogger, BuildPhase.Parse) @@ -126,7 +129,7 @@ module IncrementalBuildSyntaxTree = try IncrementalBuilderEventTesting.MRU.Add(IncrementalBuilderEventTesting.IBEParsed fileName) let canSkip = sigNameOpt.IsSome && FSharpImplFileSuffixes |> List.exists (FileSystemUtils.checkSuffix fileName) - act.AddTag("canSkip", canSkip) |> ignore + act.AddTag "canSkip" canSkip let input = if canSkip then ParsedInput.ImplFile( @@ -469,8 +472,7 @@ type BoundModel private (tcConfig: TcConfig, let! res = defaultTypeCheck () return res | Some syntaxTree -> - use act = Activity.activitySource.StartActivity("TypeCheck") - act.AddTag("fileName", syntaxTree.FileName) |> ignore + use _ = Activity.instance.Start "TypeCheck" [|"fileName", syntaxTree.FileName|] let sigNameOpt = if partialCheck then this.BackingSignature @@ -508,7 +510,7 @@ type BoundModel private (tcConfig: TcConfig, partialCheck) |> NodeCode.FromCancellable - use _ = Activity.activitySource.StartActivity("TypeCheck_BuildState") + use _ = Activity.instance.StartNoTags("TypeCheck_BuildState") Logger.LogBlockMessageStop fileName LogCompilerFunctionId.IncrementalBuild_TypeCheck fileChecked.Trigger fileName @@ -1045,8 +1047,7 @@ module IncrementalBuilderStateHelpers = let rec createFinalizeBoundModelGraphNode (initialState: IncrementalBuilderInitialState) (boundModels: ImmutableArray>.Builder) = GraphNode(node { - use act = Activity.activitySource.StartActivity("GetCheckResultsAndImplementationsForProject") - act.AddTag("projectOutFile", initialState.outfile) |> ignore + use _ = Activity.instance.Start "GetCheckResultsAndImplementationsForProject" [|"projectOutFile", initialState.outfile|] // Compute last bound model then get all the evaluated models. let! _ = boundModels[boundModels.Count - 1].GetOrComputeValue() let boundModels = diff --git a/src/Compiler/Service/service.fs b/src/Compiler/Service/service.fs index c265d06f69c..383913cc8fe 100644 --- a/src/Compiler/Service/service.fs +++ b/src/Compiler/Service/service.fs @@ -393,8 +393,7 @@ type BackgroundCompiler /// creates an incremental builder used by the command line compiler. let CreateOneIncrementalBuilder (options: FSharpProjectOptions, userOpName) = node { - use act = Activity.activitySource.StartActivity("CreateOneIncrementalBuilder") - act.AddTag("project", options.ProjectFileName) |> ignore + use _ = Activity.instance.Start "CreateOneIncrementalBuilder" [|"project", options.ProjectFileName|] Trace.TraceInformation("FCS: {0}.{1} ({2})", userOpName, "CreateOneIncrementalBuilder", options.ProjectFileName) let projectReferences = getProjectReferences options userOpName @@ -586,9 +585,7 @@ type BackgroundCompiler member _.ParseFile(fileName: string, sourceText: ISourceText, options: FSharpParsingOptions, cache: bool, userOpName: string) = async { - use act = Activity.activitySource.StartActivity("CompileToDynamicAssembly1") - act.AddTag("filename", fileName) |> ignore - act.AddTag("UserOpName", userOpName) |> ignore + use _ = Activity.instance.Start "CompileToDynamicAssembly1" [|"filename", fileName; "UserOpName", userOpName|] if cache then let hash = sourceText.GetHashCode() |> int64 @@ -775,9 +772,7 @@ type BackgroundCompiler /// Type-check the result obtained by parsing. Force the evaluation of the antecedent type checking context if needed. member bc.CheckFileInProject(parseResults: FSharpParseFileResults, fileName, fileVersion, sourceText: ISourceText, options, userOpName) = node { - use act = Activity.activitySource.StartActivity("Service_CheckFileInProject") - act.AddTag("project", options.ProjectFileName) |> ignore - act.AddTag("fileName", fileName) |> ignore + use _ = Activity.instance.Start "Service_CheckFileInProject" [|"project", options.ProjectFileName; "fileName", fileName|] let! builderOpt, creationDiags = getOrCreateBuilder (options, userOpName) match builderOpt with @@ -798,9 +793,7 @@ type BackgroundCompiler /// Parses and checks the source file and returns untyped AST and check results. member bc.ParseAndCheckFileInProject(fileName: string, fileVersion, sourceText: ISourceText, options: FSharpProjectOptions, userOpName) = node { - use act = Activity.activitySource.StartActivity("Service_ParseAndCheckFileInProject") - act.AddTag("project", options.ProjectFileName) |> ignore - act.AddTag("fileName", fileName) |> ignore + use _ = Activity.instance.Start "Service_ParseAndCheckFileInProject" [|"project", options.ProjectFileName; "fileName", fileName|] let strGuid = "_ProjectId=" + (options.ProjectId |> Option.defaultValue "null") Logger.LogBlockMessageStart (fileName + strGuid) LogCompilerFunctionId.Service_ParseAndCheckFileInProject @@ -1214,24 +1207,6 @@ type BackgroundCompiler static member ActualCheckFileCount = actualCheckFileCount -module Foo = - open FSharp.Compiler.Diagnostics.Activity - open OpenTelemetry.Trace - - let init () = - let tracerProvider = - Sdk.CreateTracerProviderBuilder() - .AddSource(activitySourceName) - .SetResourceBuilder(ResourceBuilder.CreateDefault().AddService(serviceName ="fsc", serviceVersion = "42.42.42.42")) - .AddOtlpExporter() - .AddZipkinExporter() - .Build() - - let forceCleanup() = - activitySource.Dispose() - tracerProvider.Dispose() - forceCleanup() - [] // There is typically only one instance of this type in an IDE process. type FSharpChecker @@ -1260,9 +1235,6 @@ type FSharpChecker enablePartialTypeChecking ) - // let _ = Foo.init() - // let _ = FSharp.Compiler.Diagnostics.Activity.activitySource.StartActivity("main") - static let globalInstance = lazy FSharpChecker.Create() // STATIC ROOT: FSharpLanguageServiceTestable.FSharpChecker.braceMatchCache. Most recently used cache for brace matching. Accessed on the @@ -1416,8 +1388,7 @@ type FSharpChecker let _userOpName = defaultArg userOpName "Unknown" async { - use act = Activity.activitySource.StartActivity("CompileToDynamicAssembly1") - act.AddTag("UserOpName", _userOpName) |> ignore + use _ = Activity.instance.Start "CompileToDynamicAssembly1" [|"UserOpName", _userOpName|] let ctok = CompilationThreadToken() CompileHelpers.setOutputStreams execute @@ -1460,9 +1431,7 @@ type FSharpChecker let _userOpName = defaultArg userOpName "Unknown" async { - use act = Activity.activitySource.StartActivity("CompileToDynamicAssembly2") - act.AddTag("Assembly", assemblyName) |> ignore - act.AddTag("UserOpName", _userOpName) |> ignore + use _ = Activity.instance.Start "CompileToDynamicAssembly2" [|"Assembly", assemblyName; "UserOpName", _userOpName|] let ctok = CompilationThreadToken() CompileHelpers.setOutputStreams execute @@ -1556,10 +1525,13 @@ type FSharpChecker ?userOpName: string ) = async { - use act = Activity.activitySource.StartActivity("CheckFileInProjectAllowingStaleCachedResults") - act.AddTag("Project", options.ProjectFileName) |> ignore - act.AddTag("filename", fileName) |> ignore - act.AddTag("UserOpName", userOpName) |> ignore + use _ = + Activity.instance.Start "CheckFileInProjectAllowingStaleCachedResults" + [| + "Project", options.ProjectFileName + "filename", fileName + "UserOpName", userOpName |> Option.defaultValue "" + |] let userOpName = defaultArg userOpName "Unknown" return! backgroundCompiler.CheckFileInProjectAllowingStaleCachedResults( @@ -1585,10 +1557,13 @@ type FSharpChecker ?userOpName: string ) = async { - use act = Activity.activitySource.StartActivity("CheckFileInProject") - act.AddTag("Project", options.ProjectFileName) |> ignore - act.AddTag("filename", fileName) |> ignore - act.AddTag("UserOpName", userOpName) |> ignore + use _ = + Activity.instance.Start "CheckFileInProject" + [| + "Project", options.ProjectFileName + "filename", fileName + "UserOpName", userOpName |> Option.defaultValue "" + |] let userOpName = defaultArg userOpName "Unknown" return! backgroundCompiler.CheckFileInProject(parseResults, fileName, fileVersion, sourceText, options, userOpName) @@ -1606,11 +1581,14 @@ type FSharpChecker ?userOpName: string ) = async { - use act = Activity.activitySource.StartActivity("ParseAndCheckFileInProject") - act.AddTag("Project", options.ProjectFileName) |> ignore - act.AddTag("filename", fileName) |> ignore - act.AddTag("UserOpName", userOpName) |> ignore let userOpName = defaultArg userOpName "Unknown" + use _ = + Activity.instance.Start "ParseAndCheckFileInProject" + [| + "Project", options.ProjectFileName + "filename", fileName + "UserOpName", userOpName + |] return! backgroundCompiler.ParseAndCheckFileInProject(fileName, fileVersion, sourceText, options, userOpName) |> Async.AwaitNodeCode @@ -1619,9 +1597,12 @@ type FSharpChecker member _.ParseAndCheckProject(options, ?userOpName: string) = async { let userOpName = defaultArg userOpName "Unknown" - use act = Activity.activitySource.StartActivity("ParseAndCheckProject") - act.AddTag("Project", options.ProjectFileName) |> ignore - act.AddTag("UserOpName", userOpName) |> ignore + use _ = + Activity.instance.Start "ParseAndCheckProject" + [| + "Project", options.ProjectFileName + "UserOpName", userOpName + |] return! backgroundCompiler.ParseAndCheckProject(options, userOpName) |> Async.AwaitNodeCode @@ -1638,9 +1619,12 @@ type FSharpChecker async { let canInvalidateProject = defaultArg canInvalidateProject true let userOpName = defaultArg userOpName "Unknown" - use act = Activity.activitySource.StartActivity("FindBackgroundReferencesInFile") - act.AddTag("Project", options.ProjectFileName) |> ignore - act.AddTag("UserOpName", userOpName) |> ignore + use _ = + Activity.instance.Start "FindBackgroundReferencesInFile" + [| + "Project", options.ProjectFileName + "UserOpName", userOpName + |] return! backgroundCompiler.FindReferencesInFile(fileName, options, symbol, canInvalidateProject, userOpName) |> Async.AwaitNodeCode @@ -1649,8 +1633,12 @@ type FSharpChecker member _.GetBackgroundSemanticClassificationForFile(fileName: string, options: FSharpProjectOptions, ?userOpName) = async { let userOpName = defaultArg userOpName "Unknown" - use act = Activity.activitySource.StartActivity("FindBackgroundReferencesInFile") - act.AddTag("Project", options.ProjectFileName) |> ignore + use _ = + Activity.instance.Start "FindBackgroundReferencesInFile" + [| + "Project", options.ProjectFileName + "UserOpName", userOpName + |] return! backgroundCompiler.GetSemanticClassificationForFile(fileName, options, userOpName) |> Async.AwaitNodeCode diff --git a/src/fsc/fscmain.fs b/src/fsc/fscmain.fs index 7e4d566398c..01097d20e74 100644 --- a/src/fsc/fscmain.fs +++ b/src/fsc/fscmain.fs @@ -13,7 +13,7 @@ open Internal.Utilities.Library.Extras open FSharp.Compiler.AbstractIL open FSharp.Compiler.AbstractIL.ILBinaryReader open FSharp.Compiler.CompilerConfig -open FSharp.Compiler.Diagnostics.Activity +open FSharp.Compiler.Diagnostics open FSharp.Compiler.Driver open FSharp.Compiler.DiagnosticsLogger open FSharp.Compiler.CodeAnalysis @@ -34,16 +34,16 @@ let main(argv) = // be null use tracerProvider = Sdk.CreateTracerProviderBuilder() - .AddSource(activitySourceName) + .AddSource(Activity.instance.Name) .SetResourceBuilder(ResourceBuilder.CreateDefault().AddService(serviceName ="fsc", serviceVersion = "42.42.42.42")) .AddOtlpExporter() .AddZipkinExporter() .Build(); - use mainActivity = activitySource.StartActivity("main") + use mainActivity = Activity.instance.StartNoTags "main" let forceCleanup() = mainActivity.Dispose() - activitySource.Dispose() + Activity.instance.Dispose() tracerProvider.Dispose() let compilerName = diff --git a/tests/benchmarks/FCSBenchmarks/CompilerServiceBenchmarks/Program.fs b/tests/benchmarks/FCSBenchmarks/CompilerServiceBenchmarks/Program.fs index 24d5d054eea..a544aebef0b 100644 --- a/tests/benchmarks/FCSBenchmarks/CompilerServiceBenchmarks/Program.fs +++ b/tests/benchmarks/FCSBenchmarks/CompilerServiceBenchmarks/Program.fs @@ -1,11 +1,12 @@ -open BenchmarkDotNet.Configs +open System +open BenchmarkDotNet.Configs open BenchmarkDotNet.Running open FSharp.Compiler.Benchmarks open OpenTelemetry open OpenTelemetry.Resources open OpenTelemetry.Trace -open FSharp.Compiler.Diagnostics.Activity +open FSharp.Compiler.Diagnostics [] let main args = @@ -16,16 +17,16 @@ let main args = // be null use tracerProvider = Sdk.CreateTracerProviderBuilder() - .AddSource(activitySourceName) + .AddSource(Activity.instance.Name) .SetResourceBuilder(ResourceBuilder.CreateDefault().AddService(serviceName ="program", serviceVersion = "42.42.42.44")) .AddOtlpExporter() .AddZipkinExporter() .Build(); - use mainActivity = activitySource.StartActivity("main") + use mainActivity = Activity.instance.StartNoTags("main") let forceCleanup() = mainActivity.Dispose() - activitySource.Dispose() + Activity.instance.Dispose() tracerProvider.Dispose() b.Setup()