(******************************************************************************)
open Ata
+INCLUDE "utils.ml"
+let () = init_timer();;
-let l = ref [] ;;
-let time f x =
- let t1 = Unix.gettimeofday () in
- let r = f x in
- let t2 = Unix.gettimeofday () in
- let t = (1000. *. (t2 -. t1)) in
- l:= t::!l;
- Printf.eprintf " %fms\n%!" t ;
- r
-;;
-let total_time () = List.fold_left (+.) 0. !l;;
let enabled_gc = Gc.get()
let disabled_gc = { Gc.get() with
Gc.max_overhead = 1000000;
Gc.space_overhead = 100 }
+
+
+
+
let main v query_string output =
+
let _ = Tag.init (Tree.tag_pool v) in
Printf.eprintf "Parsing query : ";
let query = try
Options.parse_cmdline();;
-let v =
+let v =
if (Filename.check_suffix !Options.input_file ".srx")
then
begin
let fd = Unix.openfile str [ Unix.O_RDONLY ] 0o644 in
let in_c = Unix.in_channel_of_descr fd in
let _ = set_binary_mode_in in_c true in
+ let load_table () =
(let ms = input_line in_c in if ms <> magic_string then failwith "Invalid index file");
(let vs = input_line in_c in if vs <> version_string then failwith "Invalid version file");
let table : (Tag.t,(Ptset.Int.t*Ptset.Int.t*Ptset.Int.t*Ptset.Int.t)) Hashtbl.t =
(* The in_channel read a chunk of fd, so we might be after
the start of the XMLTree save file. Reset to the correct
position *)
- ignore(Unix.lseek fd (pos_in in_c) Unix.SEEK_SET);
- let tree = { doc = tree_load fd;
- ttable = ntable;}
- in close_in in_c;
- tree
+ ntable
+ in
+ let _ = Printf.eprintf "\nLoading tag table : " in
+ let ntable = time (load_table) () in
+ ignore(Unix.lseek fd (pos_in in_c) Unix.SEEK_SET);
+ let tree = { doc = tree_load fd;
+ ttable = ntable;}
+ in close_in in_c;
+ tree
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__ *)