feat(profile): add basic counters

This commit is contained in:
Simon Cruanes 2022-08-18 20:56:17 -04:00
parent 27ccd367b2
commit 1b0d47a01d
No known key found for this signature in database
GPG key ID: EBFFF6F283F3A2B4
3 changed files with 27 additions and 0 deletions

View file

@ -59,6 +59,21 @@ module Make () : P.BACKEND = struct
pid tid ts name; pid tid ts name;
() ()
let emit_count_event ~name ~ts (cs : _ list) : unit =
let pid = Unix.getpid () in
let tid = Thread.id (Thread.self ()) in
emit_sep_ ();
Printf.fprintf oc
{json|{"pid": %d,"cat":"","tid": %d,"ts": %.2f,"name":"%s","ph":"C","args":{|json}
pid tid ts name;
List.iteri
(fun i (n, value) ->
if i > 0 then Printf.fprintf oc ",";
Printf.fprintf oc {json|"%s":%d|json} n value)
cs;
Printf.fprintf oc {json|}}|json};
()
let teardown () = teardown_ oc let teardown () = teardown_ oc
end end

View file

@ -5,6 +5,7 @@ module type BACKEND = sig
name:string -> start:float -> end_:float -> unit -> unit name:string -> start:float -> end_:float -> unit -> unit
val emit_instant_event : name:string -> ts:float -> unit -> unit val emit_instant_event : name:string -> ts:float -> unit -> unit
val emit_count_event : name:string -> ts:float -> (string * int) list -> unit
val teardown : unit -> unit val teardown : unit -> unit
end end
@ -36,6 +37,15 @@ let[@inline] instant name =
let now = B.get_ts () in let now = B.get_ts () in
B.emit_instant_event ~name ~ts:now () B.emit_instant_event ~name ~ts:now ()
let[@inline] count name cs =
if cs <> [] then (
match !out_ with
| None -> ()
| Some (module B) ->
let now = B.get_ts () in
B.emit_count_event ~name ~ts:now cs
)
(* slow path *) (* slow path *)
let[@inline never] exit_full_ (module B : BACKEND) name start = let[@inline never] exit_full_ (module B : BACKEND) name start =
let now = B.get_ts () in let now = B.get_ts () in

View file

@ -14,6 +14,7 @@ val exit : probe -> unit
val with_ : string -> (unit -> 'a) -> 'a val with_ : string -> (unit -> 'a) -> 'a
val with1 : string -> ('a -> 'b) -> 'a -> 'b val with1 : string -> ('a -> 'b) -> 'a -> 'b
val with2 : string -> ('a -> 'b -> 'c) -> 'a -> 'b -> 'c val with2 : string -> ('a -> 'b -> 'c) -> 'a -> 'b -> 'c
val count : string -> (string * int) list -> unit
module type BACKEND = sig module type BACKEND = sig
val get_ts : unit -> float val get_ts : unit -> float
@ -22,6 +23,7 @@ module type BACKEND = sig
name:string -> start:float -> end_:float -> unit -> unit name:string -> start:float -> end_:float -> unit -> unit
val emit_instant_event : name:string -> ts:float -> unit -> unit val emit_instant_event : name:string -> ts:float -> unit -> unit
val emit_count_event : name:string -> ts:float -> (string * int) list -> unit
val teardown : unit -> unit val teardown : unit -> unit
end end