X-Git-Url: http://git.nguyen.vg/gitweb/?a=blobdiff_plain;f=utils.ml;h=ce999327138f38ca963f02fbb78613a36b2c16ed;hb=cfd834dcdee634387ad2354f1382eeb9d816be45;hp=cfa6c8e859caec5368a65c27ec09ccd147e47e0a;hpb=f0557f21878be17ddc75b1bc8f4f86da68c8e604;p=SXSI%2Fxpathcomp.git diff --git a/utils.ml b/utils.ml index cfa6c8e..ce99932 100644 --- a/utils.ml +++ b/utils.ml @@ -46,4 +46,42 @@ DEFINE MED_H_SIZE = PRIME5 DEFINE BIG_H_SIZE = PRIME8 + +let read_procmem () = + let pid = Unix.getpid() in + let cin = open_in (Printf.sprintf "/proc/%i/status" pid) in + let pattern = "VmRSS" in + let matchline s = let l = String.length pattern in + if (String.length s) < l then false + else let s' = String.sub s 0 l in + (s' = pattern) + in + let rec loop () = + let s = input_line cin in + if matchline s then s + else loop () + in + let s = try loop() with _ -> "Could not read mem!" + in + close_in cin; + s +;; + +let l = ref [] ;; +let init_timer() = l := [];; +let time f x = + let s1 = read_procmem() in + let t1 = Unix.gettimeofday () in + let r = f x in + let s2 = read_procmem() in + let t2 = Unix.gettimeofday () in + let t = (1000. *. (t2 -. t1)) in + l:= t::!l; + Printf.eprintf " %fms\n%!" t ; + Printf.eprintf "Mem use before: %s\n%!" s1; + Printf.eprintf "Mem use after: %s\n\n\n%!" s2; + r +;; +let total_time () = List.fold_left (+.) 0. !l;; + END (* IFNDEF UTILS__ML__ *)