All Downloads are FREE. Search and download functionalities are using the official Maven repository.

ch.epfl.scala.debugadapter.internal.TimeUtils.scala Maven / Gradle / Ivy

package ch.epfl.scala.debugadapter.internal

import scala.concurrent.duration.Duration
import java.util.concurrent.TimeUnit
import ch.epfl.scala.debugadapter.Logger

private[debugadapter] object TimeUtils {
  def logTime[T](logger: Logger, msg: String)(f: => T): T = {
    val (duration, result) = timed(f)
    logger.info(s"$msg in ${prettyPrint(duration)}")
    result
  }

  def timed[T](f: => T): (Duration, T) = {
    val start = System.currentTimeMillis
    val result = f
    val duration =
      Duration(System.currentTimeMillis - start, TimeUnit.MILLISECONDS)
    (duration, result)
  }

  def prettyPrint(duration: Duration): String = {
    def plural(n: Long, word: String): String =
      if (n == 1) s"1 $word" else s"$n ${word}s"

    duration match {
      case duration if duration.toSeconds == 0 =>
        plural(duration.toMillis, "millisecond")
      case duration if duration.toMinutes == 0 =>
        plural(duration.toSeconds, "second")
      case duration if duration.toHours == 0 =>
        plural(duration.toMinutes, "minute")
      case duration if duration.toDays == 0 => plural(duration.toHours, "hour")
      case duration if duration.toDays < 30 => plural(duration.toDays, "day")
      case duration if duration.toDays >= 30 && duration.toDays <= 365 =>
        plural(duration.toDays / 30, "month")
      case duration if duration.toDays > 365 =>
        plural(duration.toDays / 365, "year")
      case _ => duration.toString()
    }
  }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy