50 lines
1.9 KiB
Text
50 lines
1.9 KiB
Text
/-
|
||
Copyright (c) 2019 Sebastian Ullrich. All rights reserved.
|
||
Released under Apache 2.0 license as described in the file LICENSE.
|
||
Author: Sebastian Ullrich
|
||
-/
|
||
prelude
|
||
import Init.Data.OfScientific
|
||
import Lean.Data.Options
|
||
|
||
namespace Lean
|
||
|
||
register_builtin_option profiler : Bool := {
|
||
defValue := false
|
||
group := "profiler"
|
||
descr := "show exclusive execution times of various Lean components
|
||
|
||
See also `trace.profiler` for an alternative profiling system with structured output."
|
||
}
|
||
|
||
register_builtin_option profiler.threshold : Nat := {
|
||
defValue := 100
|
||
group := "profiler"
|
||
descr := "threshold in milliseconds, profiling times under threshold will not be reported individually"
|
||
}
|
||
|
||
@[export lean_get_profiler]
|
||
private def get_profiler (o : Options) : Bool :=
|
||
profiler.get o
|
||
|
||
@[export lean_get_profiler_threshold]
|
||
def profiler.threshold.getSecs (o : Options) : Float :=
|
||
(profiler.threshold.get o).toFloat / 1000
|
||
|
||
/-- Print and accumulate run time of `act` when option `profiler` is set to `true`. -/
|
||
@[extern "lean_profileit"]
|
||
def profileit {α : Type} (category : @& String) (opts : @& Options) (fn : Unit → α) (decl := Name.anonymous) : α := fn ()
|
||
|
||
unsafe def profileitIOUnsafe {ε α : Type} (category : String) (opts : Options) (act : EIO ε α) (decl := Name.anonymous) : EIO ε α :=
|
||
match profileit (decl := decl) category opts fun _ => unsafeEIO act with
|
||
| Except.ok a => pure a
|
||
| Except.error e => throw e
|
||
|
||
@[implemented_by profileitIOUnsafe]
|
||
def profileitIO {ε α : Type} (category : String) (opts : Options) (act : EIO ε α) (decl := Name.anonymous) : EIO ε α := act
|
||
|
||
-- impossible to infer `ε`
|
||
def profileitM {m : Type → Type} (ε : Type) [MonadFunctorT (EIO ε) m] {α : Type} (category : String) (opts : Options) (act : m α) (decl := Name.anonymous) : m α :=
|
||
monadMap (fun {β} => profileitIO (ε := ε) (α := β) (decl := decl) category opts) act
|
||
|
||
end Lean
|