7 let buff = Buffer.create 40 in
10 [ Buffer.contents buff ]
14 let ss = Buffer.contents buff in
18 Buffer.add_char buff c;
29 let pid = Unix.getpid() in
30 let cin = open_in (Printf.sprintf "/proc/%i/status" pid) in
31 let h = Hashtbl.create 17 in
34 let s = input_line cin in
35 Scanf.sscanf s "%s@: %s@\n" (fun k v ->
36 Hashtbl.replace h k v)
45 let get_status s = Hashtbl.find (status()) s
47 let pr_mem_status fmt h =
48 Format.fprintf fmt "[";
50 let v = Hashtbl.find h k in
51 Format.fprintf fmt "%s: %s " k v
52 ) [ "VmStk"; "VmRSS"; "VmPeak" ];
53 Format.fprintf fmt "]"
57 let time f ?(count=1) ?(msg="") x =
58 if not !Config.verbose then f x
62 let oldmem = System.status () in
63 let t1 = Unix.gettimeofday () in
65 let t2 = Unix.gettimeofday () in
66 let newmem = System.status () in
67 let t = (1000. *. (t2 -. t1)) in
68 Logger.verbose Format.err_formatter "@[%s: [" msg;
69 if (count != 1) then Logger.verbose Format.err_formatter "run %i/%i, " i count;
71 Format.pp_open_vbox Format.err_formatter (2 + String.length msg);
74 "@\n| Time: %fms@\n| Memory before: %a@\n| Memory after: %a@\n]@]@]@\n" t System.pr_mem_status oldmem System.pr_mem_status newmem;