39 lines
1.7 KiB
OCaml
39 lines
1.7 KiB
OCaml
(****************************************************************************)
|
|
(* *)
|
|
(* OCaml *)
|
|
(* *)
|
|
(* INRIA Rocquencourt *)
|
|
(* *)
|
|
(* Copyright 2006 Institut National de Recherche en Informatique et *)
|
|
(* en Automatique. All rights reserved. This file is distributed under *)
|
|
(* the terms of the GNU Library General Public License, with the special *)
|
|
(* exception on linking described in LICENSE at the top of the OCaml *)
|
|
(* source tree. *)
|
|
(* *)
|
|
(****************************************************************************)
|
|
|
|
module Debug = struct value mode _ = False; end;
|
|
|
|
value count =
|
|
let h = Hashtbl.create 1007 in
|
|
let () = at_exit (fun () ->
|
|
let assoc = Hashtbl.fold (fun k v a -> [ (k, v.val) :: a ]) h [] in
|
|
let out = open_out "camlp4_profiler.out" in
|
|
let () = Marshal.to_channel out assoc [] in
|
|
close_out out) in
|
|
fun s ->
|
|
try incr (Hashtbl.find h s)
|
|
with [ Not_found -> Hashtbl.add h s (ref 1) ];
|
|
|
|
value load = Marshal.from_channel;
|
|
|
|
value main () =
|
|
|
|
let profile = List.sort (fun (_, v1) (_, v2) -> compare v1 v2) (load stdin) in
|
|
|
|
List.iter
|
|
(fun (k, v) -> Format.printf "%-75s: %d@." k v)
|
|
profile;
|
|
|
|
if Sys.argv.(0) = "camlp4prof" then main () else ();
|