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