Skip to content

Commit

Permalink
* Make the code do nothing if no listeners are hooked up.
Browse files Browse the repository at this point in the history
* Cleanup
  • Loading branch information
safesparrow committed Sep 3, 2022
1 parent f8170b8 commit a1f74c9
Show file tree
Hide file tree
Showing 12 changed files with 139 additions and 111 deletions.
13 changes: 7 additions & 6 deletions src/Compiler/Checking/CheckDeclarations.fs
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand Down Expand Up @@ -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
Expand Down
6 changes: 2 additions & 4 deletions src/Compiler/Driver/ParseAndCheckInputs.fs
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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

Expand Down Expand Up @@ -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)
Expand Down
29 changes: 13 additions & 16 deletions src/Compiler/Driver/fsc.fs
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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
Expand Down Expand Up @@ -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.
Expand Down Expand Up @@ -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)
Expand All @@ -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

Expand Down Expand Up @@ -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

Expand All @@ -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
Expand Down Expand Up @@ -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)

Expand Down Expand Up @@ -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
Expand Down Expand Up @@ -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
Expand Down Expand Up @@ -1125,7 +1122,7 @@ let main4
exiter: Exiter,
ilSourceDocs))
=
use main4Activity = activitySource.StartActivity("main4")
use main4Activity = Activity.instance.StartNoTags("main4")

match tcImportsCapture with
| None -> ()
Expand Down Expand Up @@ -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

Expand Down Expand Up @@ -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"

Expand Down
3 changes: 2 additions & 1 deletion src/Compiler/Facilities/BuildGraph.fs
Original file line number Diff line number Diff line change
Expand Up @@ -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

Expand Down Expand Up @@ -93,7 +94,7 @@ type NodeCodeBuilder() =
member _.Combine(Node (p1): NodeCode<unit>, Node (p2): NodeCode<'T>) : NodeCode<'T> = Node(async.Combine(p1, p2))

[<DebuggerHidden; DebuggerStepThrough>]
member _.Using(value: Activity, binder: Activity -> NodeCode<'U>) =
member _.Using(value: ActivityFacade, binder: ActivityFacade -> NodeCode<'U>) =
Node(
async {
try
Expand Down
3 changes: 2 additions & 1 deletion src/Compiler/Facilities/BuildGraph.fsi
Original file line number Diff line number Diff line change
Expand Up @@ -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

Expand Down Expand Up @@ -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
Expand Down
30 changes: 28 additions & 2 deletions src/Compiler/Facilities/Logger.fs
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
21 changes: 18 additions & 3 deletions src/Compiler/Facilities/Logger.fsi
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
5 changes: 2 additions & 3 deletions src/Compiler/Service/FSharpCheckerResults.fs
Original file line number Diff line number Diff line change
Expand Up @@ -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)

Expand Down
19 changes: 10 additions & 9 deletions src/Compiler/Service/IncrementalBuild.fs
Original file line number Diff line number Diff line change
Expand Up @@ -116,17 +116,20 @@ 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)

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(
Expand Down Expand Up @@ -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
Expand Down Expand Up @@ -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
Expand Down Expand Up @@ -1045,8 +1047,7 @@ module IncrementalBuilderStateHelpers =

let rec createFinalizeBoundModelGraphNode (initialState: IncrementalBuilderInitialState) (boundModels: ImmutableArray<GraphNode<BoundModel>>.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 =
Expand Down
Loading

0 comments on commit a1f74c9

Please sign in to comment.