aboutsummaryrefslogtreecommitdiff
path: root/src/dotty/tools/dotc/util/Stats.scala
diff options
context:
space:
mode:
authorMartin Odersky <odersky@gmail.com>2014-01-25 13:03:12 +0100
committerMartin Odersky <odersky@gmail.com>2014-01-26 18:52:33 +0100
commit1c68b24b79735f88a34c3490df87cc143fa8b7af (patch)
treefe7dcf1304bf6bdfdfa4ffb297eaa999bfac8f09 /src/dotty/tools/dotc/util/Stats.scala
parent09199545d784ba36dee1899bda8a9c4ce448397c (diff)
downloaddotty-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.scala28
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