src/Pure/General/timing.scala
author haftmann
Sun, 01 Jan 2012 15:44:15 +0100
changeset 46128 53e7cc599f58
parent 45674 eb65c9d17e2f
child 46768 46acd255810d
permissions -rw-r--r--
interaction of set operations for execution and membership predicate

/*  Title:      Pure/General/timing.scala
    Author:     Makarius

Basic support for time measurement.
*/

package isabelle


object Timing
{
  def timeit[A](message: String)(e: => A) =
  {
    val start = java.lang.System.currentTimeMillis()
    val result = Exn.capture(e)
    val stop = java.lang.System.currentTimeMillis()
    java.lang.System.err.println(
      (if (message == null || message.isEmpty) "" else message + ": ") +
        Time.ms(stop - start).message + " elapsed time")
    Exn.release(result)
  }
}

class Timing(val elapsed: Time, val cpu: Time, val gc: Time)
{
  def message: String =
    elapsed.message + " elapsed time, " + cpu.message + " cpu time, " + gc.message + " GC time"
  override def toString = message
}