ocaml/testsuite/tests/statmemprof/custom.ml

45 lines
1.2 KiB
OCaml

(* TEST *)
open Gc.Memprof
let bigstring_create sz =
Bigarray.Array1.create Bigarray.char Bigarray.c_layout sz
let keep = ref []
let test sampling_rate =
let size = 256 in
let iters = 100_000 in
let size_words = size / (Sys.word_size / 8) in
let alloc = ref 0 and collect = ref 0 and promote = ref 0 in
let tracker =
{ null_tracker with
alloc_minor = (fun info ->
if info.source <> Custom then None
else begin
alloc := !alloc + info.n_samples;
Some info.n_samples
end);
promote = (fun ns ->
promote := !promote + ns; None);
dealloc_minor = (fun ns ->
collect := !collect + ns) } in
start ~sampling_rate tracker;
for i = 1 to iters do
let str = Sys.opaque_identity bigstring_create size in
if i mod 10 = 0 then keep := str :: !keep
done;
keep := [];
Gc.full_major ();
stop ();
assert (!alloc = !promote + !collect);
let iters = float_of_int iters and size_words = float_of_int size_words in
(* see comballoc.ml for notes on precision *)
Printf.printf "%.2f %.1f\n"
((float_of_int !alloc /. iters) /. size_words)
((float_of_int !promote /. iters) /. size_words *. 10.)
let () =
[0.01; 0.5; 0.17] |> List.iter test