Source file timer.ml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
open! Core

type 'timeable_event t = { time : 'a. 'timeable_event -> f:(unit -> 'a) -> 'a }

let create ~start_timer ~stop_timer =
  let time event ~f =
    let timer = start_timer event in
    let result = f () in
    stop_timer timer;
    result
  in
  { time }
;;

type event =
  [ `Graph_application
  | `Preprocess
  | `Gather
  ]
[@@deriving to_string]

type event_timer = event t

let timer : event_timer ref = ref { time = (fun _ ~f -> f ()) }
let set_timer ~timer:new_timer = timer := new_timer
let timer () = !timer