File: timeit.sml

package info (click to toggle)
mlton 20100608-2
  • links: PTS
  • area: main
  • in suites: squeeze
  • size: 34,980 kB
  • ctags: 69,089
  • sloc: ansic: 18,421; lisp: 2,879; makefile: 1,570; sh: 1,325; pascal: 256; asm: 97
file content (30 lines) | stat: -rw-r--r-- 940 bytes parent folder | download | duplicates (7)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
(* timeit.sml
 * 2004 Matthew Fluet (mfluet@acm.org)
 *  Ported to MLton threads.
 *)

structure TimeIt : TIMEIT =
   struct
      val timeitFlg = true

      fun timeit (name: string) (f: 'a -> 'b) (a: 'a) : 'b =
         if timeitFlg 
            then let
                    val start = Time.now ()
                    fun done () =
                       let
                          val finish = Time.now ()
                          val diff = Time.-(finish, start)
                       in
                          Debug.sayDebug 
                          ([], fn () =>
                           concat [name, ": ",
                                   LargeInt.toString (Time.toMilliseconds diff),
                                   " ms"])
                       end
                 in
                    (f a before done ())
                    handle e => (done (); raise e)
                 end
            else f a
   end