eio/lib_ctf/unix/ctf_unix.ml
Thomas Leonard d8e91951e8 Split out Ctf_unix module
This helps avoid Eio getting a dependency on Unix.
Also, added `Ctf_unix.with_tracing` as a convenience function.
2021-12-02 14:37:13 +00:00

20 lines
668 B
OCaml

open Bigarray
let timestamper log_buffer ofs =
let ns = Mtime.to_uint64_ns @@ Mtime_clock.now () in
EndianBigstring.LittleEndian.set_int64 log_buffer ofs ns
let mmap_buffer ~size path =
let fd = Unix.(openfile path [O_RDWR; O_CREAT; O_TRUNC] 0o644) in
Unix.set_close_on_exec fd;
Unix.ftruncate fd size;
let ba = array1_of_genarray (Unix.map_file fd char c_layout true [| size |]) in
Unix.close fd;
ba
let with_tracing ?(size=0x100000) path fn =
let buffer = mmap_buffer ~size path in
let trace_config = Ctf.Control.make ~timestamper buffer in
Ctf.Control.start trace_config;
Fun.protect fn ~finally:(fun () -> Ctf.Control.stop trace_config)