diff options
author | Martin Odersky <odersky@gmail.com> | 2013-10-01 14:21:27 +0200 |
---|---|---|
committer | Martin Odersky <odersky@gmail.com> | 2013-10-01 14:21:27 +0200 |
commit | f039fa7fa2544998426764bd05ea8f18179eb0bd (patch) | |
tree | 6f5431d1824702284d16e581eb620a849a1c2f91 /src/dotty/tools/dotc/util | |
parent | b733e929b60fd1b5a3fc961fd23e720679ce09d3 (diff) | |
download | dotty-f039fa7fa2544998426764bd05ea8f18179eb0bd.tar.gz dotty-f039fa7fa2544998426764bd05ea8f18179eb0bd.tar.bz2 dotty-f039fa7fa2544998426764bd05ea8f18179eb0bd.zip |
Added option -Yheartbeat
… which shows snapshot of the callstack of tracked operations at fixed intervals.
Diffstat (limited to 'src/dotty/tools/dotc/util')
-rw-r--r-- | src/dotty/tools/dotc/util/Stats.scala | 43 |
1 files changed, 42 insertions, 1 deletions
diff --git a/src/dotty/tools/dotc/util/Stats.scala b/src/dotty/tools/dotc/util/Stats.scala index 68884fdbc..3aa6eb9b9 100644 --- a/src/dotty/tools/dotc/util/Stats.scala +++ b/src/dotty/tools/dotc/util/Stats.scala @@ -1,7 +1,48 @@ -package dotty.tools.dotc.util +package dotty.tools.dotc +package util + +import core.Contexts._ object Stats { final val enabled = true + /** The period in ms in which stack snapshots are displayed */ + final val HeartBeatPeriod = 250 + + @volatile private var stack: List[String] = Nil + + def track[T](fn: String)(op: => T) = { + stack = fn :: stack + try op + finally stack = stack.tail + } + + class HeartBeat extends Thread() { + @volatile private[Stats] var continue = true + + private def printStack(stack: List[String]): Unit = stack match { + case str :: rest => + printStack(rest) + print(s"-> $str ") + case Nil => + println() + print("|") + } + + override final def run() { + Thread.sleep(HeartBeatPeriod) + printStack(stack) + if (continue) run() + } + } + + def monitorHeartBeat[T](op: => T)(implicit ctx: Context) = { + if (ctx.settings.Yheartbeat.value) { + var hb = new HeartBeat() + hb.start() + try op + finally hb.continue = false + } else op + } }
\ No newline at end of file |