mirror of
https://github.com/ocaml-multicore/eio.git
synced 2025-12-08 00:02:56 -05:00
This helps avoid Eio getting a dependency on Unix. Also, added `Ctf_unix.with_tracing` as a convenience function.
20 lines
668 B
OCaml
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)
|