src/Pure/Tools/profiling_report.scala
author Simon Wimmer <wimmers@in.tum.de>
Thu, 18 Apr 2024 17:53:14 +0200
changeset 80137 0c51e0a6bc37
parent 78592 fdfe9b91d96e
permissions -rw-r--r--
sketch & explore: recover from duplicate fixed variables in Isar proofs
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
64342
53fb4a19fb98 regular user tool;
wenzelm
parents: 64311
diff changeset
     1
/*  Title:      Pure/Tools/profiling_report.scala
64311
3d5e7719e878 proper isabelle tool in Scala;
wenzelm
parents:
diff changeset
     2
    Author:     Makarius
3d5e7719e878 proper isabelle tool in Scala;
wenzelm
parents:
diff changeset
     3
73835
5dae03d50db1 more formal ML profiling messages;
wenzelm
parents: 72763
diff changeset
     4
Report Poly/ML profiling information from session build database.
64311
3d5e7719e878 proper isabelle tool in Scala;
wenzelm
parents:
diff changeset
     5
*/
3d5e7719e878 proper isabelle tool in Scala;
wenzelm
parents:
diff changeset
     6
3d5e7719e878 proper isabelle tool in Scala;
wenzelm
parents:
diff changeset
     7
package isabelle
3d5e7719e878 proper isabelle tool in Scala;
wenzelm
parents:
diff changeset
     8
3d5e7719e878 proper isabelle tool in Scala;
wenzelm
parents:
diff changeset
     9
75393
87ebf5a50283 clarified formatting, for the sake of scala3;
wenzelm
parents: 74755
diff changeset
    10
object Profiling_Report {
73835
5dae03d50db1 more formal ML profiling messages;
wenzelm
parents: 72763
diff changeset
    11
  def profiling_report(
5dae03d50db1 more formal ML profiling messages;
wenzelm
parents: 72763
diff changeset
    12
    options: Options,
74712
bcca7e3bcd0d proper treatment of session build hierarchy;
wenzelm
parents: 73838
diff changeset
    13
    session: String,
73835
5dae03d50db1 more formal ML profiling messages;
wenzelm
parents: 72763
diff changeset
    14
    theories: List[String] = Nil,
5dae03d50db1 more formal ML profiling messages;
wenzelm
parents: 72763
diff changeset
    15
    clean_name: Boolean = false,
75393
87ebf5a50283 clarified formatting, for the sake of scala3;
wenzelm
parents: 74755
diff changeset
    16
    progress: Progress = new Progress
87ebf5a50283 clarified formatting, for the sake of scala3;
wenzelm
parents: 74755
diff changeset
    17
  ): Unit = {
78178
a177f71dc79f clarified modules;
wenzelm
parents: 77554
diff changeset
    18
    val store = Store(options)
64311
3d5e7719e878 proper isabelle tool in Scala;
wenzelm
parents:
diff changeset
    19
75779
5470c67bd772 clarified signature: prefer Export.Session_Context;
wenzelm
parents: 75778
diff changeset
    20
    using(Export.open_session_context0(store, session)) { session_context =>
75780
f49c4f160b84 clarified signature: find session_database within Session_Context.db_hierarchy;
wenzelm
parents: 75779
diff changeset
    21
      session_context.session_db().map(db => store.read_theories(db, session)) match {
75791
fb12433208aa tuned signature;
wenzelm
parents: 75780
diff changeset
    22
        case None => store.error_database(session)
73835
5dae03d50db1 more formal ML profiling messages;
wenzelm
parents: 72763
diff changeset
    23
        case Some(used_theories) =>
5dae03d50db1 more formal ML profiling messages;
wenzelm
parents: 72763
diff changeset
    24
          theories.filterNot(used_theories.toSet) match {
5dae03d50db1 more formal ML profiling messages;
wenzelm
parents: 72763
diff changeset
    25
            case Nil =>
5dae03d50db1 more formal ML profiling messages;
wenzelm
parents: 72763
diff changeset
    26
            case bad => error("Unknown theories " + commas_quote(bad))
5dae03d50db1 more formal ML profiling messages;
wenzelm
parents: 72763
diff changeset
    27
          }
5dae03d50db1 more formal ML profiling messages;
wenzelm
parents: 72763
diff changeset
    28
          val reports =
5dae03d50db1 more formal ML profiling messages;
wenzelm
parents: 72763
diff changeset
    29
            (for {
5dae03d50db1 more formal ML profiling messages;
wenzelm
parents: 72763
diff changeset
    30
              thy <- used_theories.iterator
5dae03d50db1 more formal ML profiling messages;
wenzelm
parents: 72763
diff changeset
    31
              if theories.isEmpty || theories.contains(thy)
78280
865b44cbaad1 clarified modules (amending 570f65953173);
wenzelm
parents: 78178
diff changeset
    32
              snapshot <- Build.read_theory(session_context.theory(thy)).iterator
78592
fdfe9b91d96e misc tuning: support "scalac -source 3.3";
wenzelm
parents: 78280
diff changeset
    33
              case (Protocol.ML_Profiling(report), _) <- snapshot.messages.iterator
73835
5dae03d50db1 more formal ML profiling messages;
wenzelm
parents: 72763
diff changeset
    34
            } yield if (clean_name) report.clean_name else report).toList
5dae03d50db1 more formal ML profiling messages;
wenzelm
parents: 72763
diff changeset
    35
5dae03d50db1 more formal ML profiling messages;
wenzelm
parents: 72763
diff changeset
    36
          for (report <- ML_Profiling.account(reports)) progress.echo(report.print)
5dae03d50db1 more formal ML profiling messages;
wenzelm
parents: 72763
diff changeset
    37
      }
75394
42267c650205 tuned formatting;
wenzelm
parents: 75393
diff changeset
    38
    }
64311
3d5e7719e878 proper isabelle tool in Scala;
wenzelm
parents:
diff changeset
    39
  }
3d5e7719e878 proper isabelle tool in Scala;
wenzelm
parents:
diff changeset
    40
3d5e7719e878 proper isabelle tool in Scala;
wenzelm
parents:
diff changeset
    41
3d5e7719e878 proper isabelle tool in Scala;
wenzelm
parents:
diff changeset
    42
  /* Isabelle tool wrapper */
3d5e7719e878 proper isabelle tool in Scala;
wenzelm
parents:
diff changeset
    43
3d5e7719e878 proper isabelle tool in Scala;
wenzelm
parents:
diff changeset
    44
  val isabelle_tool =
72763
3cc73d00553c added document antiquotation @{tool};
wenzelm
parents: 71686
diff changeset
    45
    Isabelle_Tool("profiling_report", "report Poly/ML profiling information from log files",
75393
87ebf5a50283 clarified formatting, for the sake of scala3;
wenzelm
parents: 74755
diff changeset
    46
      Scala_Project.here,
75394
42267c650205 tuned formatting;
wenzelm
parents: 75393
diff changeset
    47
      { args =>
42267c650205 tuned formatting;
wenzelm
parents: 75393
diff changeset
    48
        var theories: List[String] = Nil
42267c650205 tuned formatting;
wenzelm
parents: 75393
diff changeset
    49
        var clean_name = false
42267c650205 tuned formatting;
wenzelm
parents: 75393
diff changeset
    50
        var options = Options.init()
73835
5dae03d50db1 more formal ML profiling messages;
wenzelm
parents: 72763
diff changeset
    51
75394
42267c650205 tuned formatting;
wenzelm
parents: 75393
diff changeset
    52
        val getopts = Getopts("""
73835
5dae03d50db1 more formal ML profiling messages;
wenzelm
parents: 72763
diff changeset
    53
Usage: isabelle profiling_report [OPTIONS] SESSION
5dae03d50db1 more formal ML profiling messages;
wenzelm
parents: 72763
diff changeset
    54
5dae03d50db1 more formal ML profiling messages;
wenzelm
parents: 72763
diff changeset
    55
  Options are:
5dae03d50db1 more formal ML profiling messages;
wenzelm
parents: 72763
diff changeset
    56
    -T NAME      restrict to given theories (multiple options possible)
5dae03d50db1 more formal ML profiling messages;
wenzelm
parents: 72763
diff changeset
    57
    -c           clean function names
5dae03d50db1 more formal ML profiling messages;
wenzelm
parents: 72763
diff changeset
    58
    -o OPTION    override Isabelle system OPTION (via NAME=VAL or NAME)
64311
3d5e7719e878 proper isabelle tool in Scala;
wenzelm
parents:
diff changeset
    59
77554
4465d9dff448 clarified terminology of "session build database", while "build database" is the one underlying Build_Process;
wenzelm
parents: 76205
diff changeset
    60
  Report Poly/ML profiling from the sebuild database of the given session
73835
5dae03d50db1 more formal ML profiling messages;
wenzelm
parents: 72763
diff changeset
    61
  (without up-to-date check of sources).
5dae03d50db1 more formal ML profiling messages;
wenzelm
parents: 72763
diff changeset
    62
""",
5dae03d50db1 more formal ML profiling messages;
wenzelm
parents: 72763
diff changeset
    63
          "T:" -> (arg => theories = theories ::: List(arg)),
5dae03d50db1 more formal ML profiling messages;
wenzelm
parents: 72763
diff changeset
    64
          "c" -> (_ => clean_name = true),
5dae03d50db1 more formal ML profiling messages;
wenzelm
parents: 72763
diff changeset
    65
          "o:" -> (arg => options = options + arg))
5dae03d50db1 more formal ML profiling messages;
wenzelm
parents: 72763
diff changeset
    66
75394
42267c650205 tuned formatting;
wenzelm
parents: 75393
diff changeset
    67
        val more_args = getopts(args)
42267c650205 tuned formatting;
wenzelm
parents: 75393
diff changeset
    68
        val session_name =
42267c650205 tuned formatting;
wenzelm
parents: 75393
diff changeset
    69
          more_args match {
42267c650205 tuned formatting;
wenzelm
parents: 75393
diff changeset
    70
            case List(session_name) => session_name
42267c650205 tuned formatting;
wenzelm
parents: 75393
diff changeset
    71
            case _ => getopts.usage()
42267c650205 tuned formatting;
wenzelm
parents: 75393
diff changeset
    72
          }
73835
5dae03d50db1 more formal ML profiling messages;
wenzelm
parents: 72763
diff changeset
    73
75394
42267c650205 tuned formatting;
wenzelm
parents: 75393
diff changeset
    74
        val progress = new Console_Progress()
73835
5dae03d50db1 more formal ML profiling messages;
wenzelm
parents: 72763
diff changeset
    75
75394
42267c650205 tuned formatting;
wenzelm
parents: 75393
diff changeset
    76
        profiling_report(options, session_name, theories = theories,
42267c650205 tuned formatting;
wenzelm
parents: 75393
diff changeset
    77
          clean_name = clean_name, progress = progress)
42267c650205 tuned formatting;
wenzelm
parents: 75393
diff changeset
    78
      })
64311
3d5e7719e878 proper isabelle tool in Scala;
wenzelm
parents:
diff changeset
    79
}