src/Pure/General/timing.scala
changeset 64084 bca58a11efde
parent 62587 e31bf8ed5397
child 64089 10d719dbb3ee
equal deleted inserted replaced
64083:fef1a0a59c12 64084:bca58a11efde
     1 /*  Title:      Pure/General/timing.scala
     1 /*  Title:      Pure/General/timing.scala
     2     Module:     PIDE
       
     3     Author:     Makarius
     2     Author:     Makarius
     4 
     3 
     5 Basic support for time measurement.
     4 Basic support for time measurement.
     6 */
     5 */
     7 
     6 
    34 
    33 
    35 sealed case class Timing(elapsed: Time, cpu: Time, gc: Time)
    34 sealed case class Timing(elapsed: Time, cpu: Time, gc: Time)
    36 {
    35 {
    37   def is_relevant: Boolean = elapsed.is_relevant || cpu.is_relevant || gc.is_relevant
    36   def is_relevant: Boolean = elapsed.is_relevant || cpu.is_relevant || gc.is_relevant
    38 
    37 
       
    38   def resources: Time = cpu + gc
       
    39 
       
    40   def factor: Option[Double] =
       
    41   {
       
    42     val t1 = elapsed.seconds
       
    43     val t2 = resources.seconds
       
    44     if (t1 >= 3.0 && t2 >= 3.0) Some(t2 / t1) else None
       
    45   }
       
    46 
    39   def + (t: Timing): Timing = Timing(elapsed + t.elapsed, cpu + t.cpu, gc + t.gc)
    47   def + (t: Timing): Timing = Timing(elapsed + t.elapsed, cpu + t.cpu, gc + t.gc)
    40 
    48 
    41   def message: String =
    49   def message: String =
    42     elapsed.message + " elapsed time, " + cpu.message + " cpu time, " + gc.message + " GC time"
    50     elapsed.message + " elapsed time, " + cpu.message + " cpu time, " + gc.message + " GC time"
    43 
    51 
    44   def resources: Time = cpu + gc
       
    45   def message_resources: String =
    52   def message_resources: String =
    46   {
    53   {
    47     val resources = cpu + gc
    54     val factor_text =
    48     val t1 = elapsed.seconds
    55       factor match {
    49     val t2 = resources.seconds
    56         case Some(f) => String.format(Locale.ROOT, ", factor %.2f", new java.lang.Double(f))
    50     val factor =
    57         case None => ""
    51       if (t1 >= 3.0 && t2 >= 3.0)
    58       }
    52         String.format(Locale.ROOT, ", factor %.2f", new java.lang.Double(t2 / t1))
    59     if (resources.seconds >= 3.0)
    53       else ""
    60       elapsed.message_hms + " elapsed time, " + resources.message_hms + " cpu time" + factor_text
    54     if (t2 >= 3.0)
       
    55       elapsed.message_hms + " elapsed time, " + resources.message_hms + " cpu time" + factor
       
    56     else
    61     else
    57       elapsed.message_hms + " elapsed time" + factor
    62       elapsed.message_hms + " elapsed time" + factor_text
    58   }
    63   }
    59 
    64 
    60   override def toString: String = message
    65   override def toString: String = message
    61 }
    66 }