diff options
author | Martin Odersky <odersky@gmail.com> | 2014-01-25 13:03:12 +0100 |
---|---|---|
committer | Martin Odersky <odersky@gmail.com> | 2014-01-26 18:52:33 +0100 |
commit | 1c68b24b79735f88a34c3490df87cc143fa8b7af (patch) | |
tree | fe7dcf1304bf6bdfdfa4ffb297eaa999bfac8f09 /src/dotty/tools/dotc/util/Stats.scala | |
parent | 09199545d784ba36dee1899bda8a9c4ce448397c (diff) | |
download | dotty-1c68b24b79735f88a34c3490df87cc143fa8b7af.tar.gz dotty-1c68b24b79735f88a34c3490df87cc143fa8b7af.tar.bz2 dotty-1c68b24b79735f88a34c3490df87cc143fa8b7af.zip |
Statistics now also computes call counts of tracked operations.
Diffstat (limited to 'src/dotty/tools/dotc/util/Stats.scala')
-rw-r--r-- | src/dotty/tools/dotc/util/Stats.scala | 28 |
1 files changed, 23 insertions, 5 deletions
diff --git a/src/dotty/tools/dotc/util/Stats.scala b/src/dotty/tools/dotc/util/Stats.scala index 3d7628477..894c1eb04 100644 --- a/src/dotty/tools/dotc/util/Stats.scala +++ b/src/dotty/tools/dotc/util/Stats.scala @@ -2,6 +2,7 @@ package dotty.tools.dotc package util import core.Contexts._ +import collection.mutable object Stats { @@ -12,12 +13,25 @@ object Stats { @volatile private var stack: List[String] = Nil - def track[T](fn: String)(op: => T) = { - stack = fn :: stack - try op - finally stack = stack.tail + val hits = new mutable.HashMap[String, Int] { + override def default(key: String): Int = 0 } + def record(fn: String) = { + val name = if (fn.startsWith("member-")) "member" else fn + hits(name) += 1 + } + + private var monitored = false + + def track[T](fn: String)(op: => T) = + if (monitored) { + stack = fn :: stack + record(fn) + try op + finally stack = stack.tail + } else op + class HeartBeat extends Thread() { @volatile private[Stats] var continue = true @@ -41,8 +55,12 @@ object Stats { if (ctx.settings.Yheartbeat.value) { var hb = new HeartBeat() hb.start() + monitored = true try op - finally hb.continue = false + finally { + hb.continue = false + println(hits.toList.sortBy(_._2).map{ case (x, y) => s"$x -> $y" } mkString "\n") + } } else op } }
\ No newline at end of file |