diff --git a/FSharpBuild.Directory.Build.props b/FSharpBuild.Directory.Build.props index 3d0ccc3d95c..52012f23731 100644 --- a/FSharpBuild.Directory.Build.props +++ b/FSharpBuild.Directory.Build.props @@ -25,6 +25,7 @@ 4.4.0 1182;0025;$(WarningsAsErrors) $(OtherFlags) --nowarn:3384 + $(OtherFlags) --times --nowarn:75 diff --git a/src/Compiler/Driver/CompilerOptions.fs b/src/Compiler/Driver/CompilerOptions.fs index 7bbecb8916b..7d428fe914c 100644 --- a/src/Compiler/Driver/CompilerOptions.fs +++ b/src/Compiler/Driver/CompilerOptions.fs @@ -5,6 +5,7 @@ module internal FSharp.Compiler.CompilerOptions open System +open System.Diagnostics open System.IO open Internal.Utilities.Library open Internal.Utilities.Library.Extras @@ -2241,8 +2242,8 @@ let PrintWholeAssemblyImplementation (tcConfig: TcConfig) outfile header expr = // ReportTime //---------------------------------------------------------------------------- -let mutable tPrev = None -let mutable nPrev = None +let mutable tPrev: (DateTime * DateTime * float * int[]) option = None +let mutable nPrev: string option = None let ReportTime (tcConfig: TcConfig) descr = @@ -2278,29 +2279,41 @@ let ReportTime (tcConfig: TcConfig) descr = if (tcConfig.showTimes || verbose) then // Note that timing calls are relatively expensive on the startup path so we don't // make this call unless showTimes has been turned on. - let timeNow = - System.Diagnostics.Process.GetCurrentProcess().UserProcessorTime.TotalSeconds - + let p = Process.GetCurrentProcess() + let utNow = p.UserProcessorTime.TotalSeconds + let tNow = DateTime.Now let maxGen = GC.MaxGeneration let gcNow = [| for i in 0..maxGen -> GC.CollectionCount i |] - let ptime = System.Diagnostics.Process.GetCurrentProcess() - let wsNow = ptime.WorkingSet64 / 1000000L - - match tPrev, nPrev with - | Some (timePrev, gcPrev: int[]), Some prevDescr -> - let spanGC = [| for i in 0..maxGen -> GC.CollectionCount i - gcPrev[i] |] - dprintf "TIME: %4.1f Delta: %4.1f Mem: %3d" timeNow (timeNow - timePrev) wsNow - - dprintf - " G0: %3d G1: %2d G2: %2d [%s]\n" - spanGC[Operators.min 0 maxGen] - spanGC[Operators.min 1 maxGen] - spanGC[Operators.min 2 maxGen] - prevDescr - - | _ -> () - - tPrev <- Some(timeNow, gcNow) + let wsNow = p.WorkingSet64 / 1000000L + + let tStart = + match tPrev, nPrev with + | Some (tStart, tPrev, utPrev, gcPrev), Some prevDescr -> + let spanGC = [| for i in 0..maxGen -> GC.CollectionCount i - gcPrev[i] |] + let t = tNow - tStart + let tDelta = tNow - tPrev + let utDelta = utNow - utPrev + + printf + "Real: %4.1f Realdelta: %4.1f Cpu: %4.1f Cpudelta: %4.1f Mem: %3d" + t.TotalSeconds + tDelta.TotalSeconds + utNow + utDelta + wsNow + + printfn + " G0: %3d G1: %2d G2: %2d [%s]" + spanGC[Operators.min 0 maxGen] + spanGC[Operators.min 1 maxGen] + spanGC[Operators.min 2 maxGen] + prevDescr + + tStart + + | _ -> DateTime.Now + + tPrev <- Some(tStart, tNow, utNow, gcNow) nPrev <- Some descr diff --git a/src/Compiler/FSharp.Compiler.Service.fsproj b/src/Compiler/FSharp.Compiler.Service.fsproj index 5f53b8b610d..2efe648a3be 100644 --- a/src/Compiler/FSharp.Compiler.Service.fsproj +++ b/src/Compiler/FSharp.Compiler.Service.fsproj @@ -14,7 +14,7 @@ true $(DefineConstants);COMPILER $(DefineConstants);USE_SHIPPED_FSCORE - $(OtherFlags) --extraoptimizationloops:1 --times + $(OtherFlags) --extraoptimizationloops:1 $(OtherFlags) --warnon:1182 diff --git a/src/Compiler/Utilities/illib.fs b/src/Compiler/Utilities/illib.fs index eb86fce0030..6eab1b08508 100644 --- a/src/Compiler/Utilities/illib.fs +++ b/src/Compiler/Utilities/illib.fs @@ -104,7 +104,7 @@ module internal PervasiveAutoOpens = t) | Some t -> t - printf "ilwrite: TIME %10.3f (total) %10.3f (delta) - %s\n" (t - first) (t - prev) descr + printf " ilwrite: Cpu %4.1f (total) %4.1f (delta) - %s\n" (t - first) (t - prev) descr tPrev <- Some t let foldOn p f z x = f z (p x) diff --git a/src/fsc/App.config b/src/fsc/App.config index eb256128200..c1a8dd9b745 100644 --- a/src/fsc/App.config +++ b/src/fsc/App.config @@ -11,4 +11,4 @@ - \ No newline at end of file + diff --git a/tests/fsharpqa/Source/CompilerOptions/fsc/times/env.lst b/tests/fsharpqa/Source/CompilerOptions/fsc/times/env.lst deleted file mode 100644 index a66f99f264f..00000000000 --- a/tests/fsharpqa/Source/CompilerOptions/fsc/times/env.lst +++ /dev/null @@ -1,13 +0,0 @@ -# Functional: the option does what it is meant to do - SOURCE=times01.fs COMPILE_ONLY=1 SCFLAGS="--times" - SOURCE=times01.fs COMPILE_ONLY=1 TAILFLAGS="--times" - -# Last one wins... - SOURCE=times01.fs COMPILE_ONLY=1 SCFLAGS="--times --times" - -# Option is case sentitive - -# Mispelled options - -# Missing argument - SOURCE=error_04.fs COMPILE_ONLY=1 TAILFLAGS="--times:0" diff --git a/tests/fsharpqa/Source/CompilerOptions/fsc/times/error_01.fs b/tests/fsharpqa/Source/CompilerOptions/fsc/times/error_01.fs deleted file mode 100644 index 3df58150e86..00000000000 --- a/tests/fsharpqa/Source/CompilerOptions/fsc/times/error_01.fs +++ /dev/null @@ -1,4 +0,0 @@ -// #Regression #NoMT #CompilerOptions -//Unrecognized option: '--Times' -#light -exit 0 diff --git a/tests/fsharpqa/Source/CompilerOptions/fsc/times/error_02.fs b/tests/fsharpqa/Source/CompilerOptions/fsc/times/error_02.fs deleted file mode 100644 index 7232ba1d293..00000000000 --- a/tests/fsharpqa/Source/CompilerOptions/fsc/times/error_02.fs +++ /dev/null @@ -1,4 +0,0 @@ -// #Regression #NoMT #CompilerOptions -//Unrecognized option: '--times-' -#light -exit 0 diff --git a/tests/fsharpqa/Source/CompilerOptions/fsc/times/error_04.fs b/tests/fsharpqa/Source/CompilerOptions/fsc/times/error_04.fs deleted file mode 100644 index 01735176c60..00000000000 --- a/tests/fsharpqa/Source/CompilerOptions/fsc/times/error_04.fs +++ /dev/null @@ -1,5 +0,0 @@ -// #Regression #NoMT #CompilerOptions -//Unrecognized option: '--times' -// See FSHARP1.0:2850 (IMO, this is a bug!) -#light -exit 0 diff --git a/tests/fsharpqa/Source/CompilerOptions/fsc/times/times01.fs b/tests/fsharpqa/Source/CompilerOptions/fsc/times/times01.fs deleted file mode 100644 index 63a3663ff4d..00000000000 --- a/tests/fsharpqa/Source/CompilerOptions/fsc/times/times01.fs +++ /dev/null @@ -1,50 +0,0 @@ -// #NoMT #CompilerOptions -#light - -namespace N - module M = - let f x = () - f 10 - -namespace N2 - module M2 = - let f2 x = () - f2 10 - - module M3 = - exit 0 - -//TIME:.+Delta:.+Mem:.+G0:.+G1:.+G2:.+\[Import mscorlib and FSharp.Core.dll\] -//TIME:.+Delta:.+Mem:.+G0:.+G1:.+G2:.+\[Parse inputs\] -//TIME:.+Delta:.+Mem:.+G0:.+G1:.+G2:.+\[Import non-system references\] -//TIME:.+Delta:.+Mem:.+G0:.+G1:.+G2:.+\[Typecheck\] -//TIME:.+Delta:.+Mem:.+G0:.+G1:.+G2:.+\[Typechecked\] -//TIME:.+Delta:.+Mem:.+G0:.+G1:.+G2:.+\[Write XML docs\] -//TIME:.+Delta:.+Mem:.+G0:.+G1:.+G2:.+\[Encode Interface Data\] -//TIME:.+Delta:.+Mem:.+G0:.+G1:.+G2:.+\[TAST -> IL\] -//ilwrite: TIME.+Write Started -//ilwrite: TIME.+Module Generation Preparation -//ilwrite: TIME.+Module Generation Pass 1 -//ilwrite: TIME.+Module Generation Pass 2 -//ilwrite: TIME.+Module Generation Pass 3 -//ilwrite: TIME.+Module Generation Pass 4 -//ilwrite: TIME.+Finalize Module Generation Results -//ilwrite: TIME.+Generated Tables and Code -//ilwrite: TIME.+Layout Header of Tables -//ilwrite: TIME.+Build String/Blob Address Tables -//ilwrite: TIME.+Sort Tables -//ilwrite: TIME.+Write Header of tablebuf -//ilwrite: TIME.+Write Tables to tablebuf -//ilwrite: TIME.+Layout Metadata -//ilwrite: TIME.+Write Metadata Header -//ilwrite: TIME.+Write Metadata Tables -//ilwrite: TIME.+Write Metadata Strings -//ilwrite: TIME.+Write Metadata User Strings -//ilwrite: TIME.+Write Blob Stream -//ilwrite: TIME.+Fixup Metadata -//ilwrite: TIME.+Generated IL and metadata -//ilwrite: TIME.+Layout image -//ilwrite: TIME.+Writing Image -//ilwrite: TIME.+Finalize PDB -//ilwrite: TIME.+Signing Image -//TIME:.+Delta:.+Mem:.+G0:.+G1:.+G2:.+\[Write .NET Binary\] diff --git a/tests/fsharpqa/Source/CompilerOptions/fsi/times/asargument.fsx b/tests/fsharpqa/Source/CompilerOptions/fsi/times/asargument.fsx deleted file mode 100644 index a06a2fa3adb..00000000000 --- a/tests/fsharpqa/Source/CompilerOptions/fsi/times/asargument.fsx +++ /dev/null @@ -1,4 +0,0 @@ -// #NoMT #CompilerOptions -// -#light -exit 0 diff --git a/tests/fsharpqa/Source/CompilerOptions/fsi/times/env.lst b/tests/fsharpqa/Source/CompilerOptions/fsi/times/env.lst deleted file mode 100644 index 2f1494e0696..00000000000 --- a/tests/fsharpqa/Source/CompilerOptions/fsi/times/env.lst +++ /dev/null @@ -1,13 +0,0 @@ -# As argument, after -- - SOURCE=asargument.fsx COMPILE_ONLY=1 TAILFLAGS="-- --times" FSIMODE=EXEC - -# Last one wins... - SOURCE=times01.fs COMPILE_ONLY=1 SCFLAGS="--times --times" FSIMODE=PIPE - -# Mispelled options - SOURCE=error_02.fs SCFLAGS="--times-" FSIMODE=EXEC - SOURCE=error_03.fs SCFLAGS="--times+" FSIMODE=EXEC - -# Missing argument - SOURCE=error_04.fs TAILFLAGS="--times:0" FSIMODE=EXEC - diff --git a/tests/fsharpqa/Source/CompilerOptions/fsi/times/error_02.fs b/tests/fsharpqa/Source/CompilerOptions/fsi/times/error_02.fs deleted file mode 100644 index 7232ba1d293..00000000000 --- a/tests/fsharpqa/Source/CompilerOptions/fsi/times/error_02.fs +++ /dev/null @@ -1,4 +0,0 @@ -// #Regression #NoMT #CompilerOptions -//Unrecognized option: '--times-' -#light -exit 0 diff --git a/tests/fsharpqa/Source/CompilerOptions/fsi/times/error_03.fs b/tests/fsharpqa/Source/CompilerOptions/fsi/times/error_03.fs deleted file mode 100644 index 40b5dfee963..00000000000 --- a/tests/fsharpqa/Source/CompilerOptions/fsi/times/error_03.fs +++ /dev/null @@ -1,4 +0,0 @@ -// #Regression #NoMT #CompilerOptions -//Unrecognized option: '--times\+' -#light -exit 0 diff --git a/tests/fsharpqa/Source/CompilerOptions/fsi/times/error_04.fs b/tests/fsharpqa/Source/CompilerOptions/fsi/times/error_04.fs deleted file mode 100644 index 01735176c60..00000000000 --- a/tests/fsharpqa/Source/CompilerOptions/fsi/times/error_04.fs +++ /dev/null @@ -1,5 +0,0 @@ -// #Regression #NoMT #CompilerOptions -//Unrecognized option: '--times' -// See FSHARP1.0:2850 (IMO, this is a bug!) -#light -exit 0 diff --git a/tests/fsharpqa/Source/CompilerOptions/fsi/times/times01.fs b/tests/fsharpqa/Source/CompilerOptions/fsi/times/times01.fs deleted file mode 100644 index e30ea7ad563..00000000000 --- a/tests/fsharpqa/Source/CompilerOptions/fsi/times/times01.fs +++ /dev/null @@ -1,4 +0,0 @@ -// #NoMT #CompilerOptions -//TIME.+Optimizations - -exit 0;; diff --git a/tests/fsharpqa/Source/test.lst b/tests/fsharpqa/Source/test.lst index 0932c7a1f49..31eac0a00f9 100644 --- a/tests/fsharpqa/Source/test.lst +++ b/tests/fsharpqa/Source/test.lst @@ -29,7 +29,6 @@ CompilerOptions01,NoMT,NoHostedCompiler CompilerOptions\fsc\staticlink CompilerOptions01,NoMT CompilerOptions\fsc\subsystemversion CompilerOptions01,NoMT CompilerOptions\fsc\tailcalls CompilerOptions01,NoMT CompilerOptions\fsc\target -CompilerOptions01,NoMT,NoHostedCompiler CompilerOptions\fsc\times CompilerOptions01,NoMT,NoHostedCompiler CompilerOptions\fsc\tokenize CompilerOptions01,NoMT CompilerOptions\fsc\responsefile CompilerOptions01,NoMT,help CompilerOptions\fsi\help @@ -37,7 +36,6 @@ CompilerOptions01,NoMT CompilerOptions\fsi\highentropyva CompilerOptions01,NoMT CompilerOptions\fsi\langversion CompilerOptions01,NoMT CompilerOptions\fsi\nologo CompilerOptions01,NoMT CompilerOptions\fsi\subsystemversion -CompilerOptions01,NoMT CompilerOptions\fsi\times CompilerOptions02,NoMT CompilerOptions\fsi\exename CompilerOptions01,NoMT,Determinism CompilerOptions\fsc\determinism