summaryrefslogtreecommitdiff
path: root/src/scaladoc/scala/tools/nsc/doc/html/page/diagram/DiagramStats.scala
blob: 12c609af496ab4ab115cf43c3b5e2d22fb977d21 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
/**
 * @author Vlad Ureche
 */
package scala.tools.nsc.doc
package html.page.diagram

object DiagramStats {

  class TimeTracker(title: String) {
    var totalTime: Long = 0l
    var maxTime: Long = 0l
    var instances: Int = 0

    def addTime(ms: Long) = {
      if (maxTime < ms)
        maxTime = ms
      totalTime += ms
      instances += 1
    }

    def printStats(print: String => Unit) = {
      if (instances == 0)
        print(title + ": no stats gathered")
      else {
        print("  " + title)
        print("  " + "=" * title.length)
        print("    count:        " + instances + " items")
        print("    total time:   " + totalTime + " ms")
        print("    average time: " + (totalTime/instances) + " ms")
        print("    maximum time: " + maxTime + " ms")
        print("")
      }
    }
  }

  private[this] val filterTrack = new TimeTracker("diagrams model filtering")
  private[this] val modelTrack = new TimeTracker("diagrams model generation")
  private[this] val dotGenTrack = new TimeTracker("dot diagram generation")
  private[this] val dotRunTrack = new TimeTracker("dot process running")
  private[this] val svgTrack = new TimeTracker("svg processing")
  private[this] var brokenImages = 0
  private[this] var fixedImages = 0

  def printStats(settings: Settings) = {
    if (settings.docDiagramsDebug) {
      settings.printMsg("\nDiagram generation running time breakdown:\n")
      filterTrack.printStats(settings.printMsg)
      modelTrack.printStats(settings.printMsg)
      dotGenTrack.printStats(settings.printMsg)
      dotRunTrack.printStats(settings.printMsg)
      svgTrack.printStats(settings.printMsg)
      println("  Broken images: " + brokenImages)
      println("  Fixed images: " + fixedImages)
      println("")
    }
  }

  def addFilterTime(ms: Long) = filterTrack.addTime(ms)
  def addModelTime(ms: Long) = modelTrack.addTime(ms)
  def addDotGenerationTime(ms: Long) = dotGenTrack.addTime(ms)
  def addDotRunningTime(ms: Long) = dotRunTrack.addTime(ms)
  def addSvgTime(ms: Long) = svgTrack.addTime(ms)

  def addBrokenImage(): Unit = brokenImages += 1
  def addFixedImage(): Unit = fixedImages += 1
}