| author | wenzelm | 
| Tue, 18 Jul 2023 12:19:12 +0200 | |
| changeset 78389 | 41e8ae87184d | 
| parent 78330 | 1a69d3a3e3aa | 
| child 78414 | 406d34a8a67a | 
| permissions | -rw-r--r-- | 
| 78315 | 1 | /* Title: Pure/Tools/profiling_report.scala | 
| 2 | Author: Makarius | |
| 78314 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 3 | |
| 78315 | 4 | Build sessions for profiling of ML heap content. | 
| 78314 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 5 | */ | 
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 6 | |
| 78315 | 7 | package isabelle | 
| 78314 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 8 | |
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 9 | |
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 10 | import java.util.Locale | 
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 11 | |
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 12 | |
| 78315 | 13 | object Profiling {
 | 
| 78314 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 14 | /* percentage: precision in permille */ | 
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 15 | |
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 16 | def percentage(a: Long, b: Long): Percentage = | 
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 17 | new Percentage(if (b == 0L) 0 else ((a.toDouble / b.toDouble) * 1000.0).round.toInt) | 
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 18 | |
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 19 | def percentage(a: Int, b: Int): Percentage = percentage(a.toLong, b.toLong) | 
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 20 | |
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 21 | def percentage_space(a: Space, b: Space): Percentage = percentage(a.bytes, b.bytes) | 
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 22 | |
| 78315 | 23 |   final class Percentage private[Profiling](val permille: Int) extends AnyVal {
 | 
| 78314 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 24 | def percent: Double = permille.toDouble / 10 | 
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 25 | |
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 26 | override def toString: String = (permille / 10).toString + "." + (permille % 10).toString + "%" | 
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 27 | } | 
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 28 | |
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 29 | |
| 78328 
007b04dc6f96
clarified session_statistics: removed somewhat pointless per-theory statistics;
 wenzelm parents: 
78315diff
changeset | 30 | /* session statistics */ | 
| 78314 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 31 | |
| 78328 
007b04dc6f96
clarified session_statistics: removed somewhat pointless per-theory statistics;
 wenzelm parents: 
78315diff
changeset | 32 | sealed case class Session_Statistics( | 
| 
007b04dc6f96
clarified session_statistics: removed somewhat pointless per-theory statistics;
 wenzelm parents: 
78315diff
changeset | 33 | theories: Int = 0, | 
| 78314 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 34 | locales: Int = 0, | 
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 35 | locale_thms: Int = 0, | 
| 78328 
007b04dc6f96
clarified session_statistics: removed somewhat pointless per-theory statistics;
 wenzelm parents: 
78315diff
changeset | 36 | global_thms: Int = 0, | 
| 78314 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 37 | sizeof_thys_id: Space = Space.zero, | 
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 38 | sizeof_thms_id: Space = Space.zero, | 
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 39 | sizeof_terms: Space = Space.zero, | 
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 40 | sizeof_types: Space = Space.zero, | 
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 41 | sizeof_spaces: Space = Space.zero) | 
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 42 | |
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 43 |   object Statistics {
 | 
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 44 | private val encode_args: XML.Encode.T[List[String]] = | 
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 45 | (args: List[String]) => | 
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 46 |         { import XML.Encode._; list(string)(args) }
 | 
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 47 | |
| 78328 
007b04dc6f96
clarified session_statistics: removed somewhat pointless per-theory statistics;
 wenzelm parents: 
78315diff
changeset | 48 | private val decode_result: XML.Decode.T[Session_Statistics] = | 
| 78314 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 49 | (body: XML.Body) => | 
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 50 |         {
 | 
| 78328 
007b04dc6f96
clarified session_statistics: removed somewhat pointless per-theory statistics;
 wenzelm parents: 
78315diff
changeset | 51 |           val (a, (b, (c, (d, (e, (f, (g, (h, i)))))))) = {
 | 
| 78314 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 52 | import XML.Decode._ | 
| 78328 
007b04dc6f96
clarified session_statistics: removed somewhat pointless per-theory statistics;
 wenzelm parents: 
78315diff
changeset | 53 | pair(int, pair(int, pair(int, pair(int, | 
| 
007b04dc6f96
clarified session_statistics: removed somewhat pointless per-theory statistics;
 wenzelm parents: 
78315diff
changeset | 54 | pair(long, pair(long, pair(long, pair(long, long))))))))(body) | 
| 78314 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 55 | } | 
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 56 | Session_Statistics( | 
| 78328 
007b04dc6f96
clarified session_statistics: removed somewhat pointless per-theory statistics;
 wenzelm parents: 
78315diff
changeset | 57 | theories = a, | 
| 
007b04dc6f96
clarified session_statistics: removed somewhat pointless per-theory statistics;
 wenzelm parents: 
78315diff
changeset | 58 | locales = b, | 
| 
007b04dc6f96
clarified session_statistics: removed somewhat pointless per-theory statistics;
 wenzelm parents: 
78315diff
changeset | 59 | locale_thms = c, | 
| 
007b04dc6f96
clarified session_statistics: removed somewhat pointless per-theory statistics;
 wenzelm parents: 
78315diff
changeset | 60 | global_thms = d, | 
| 
007b04dc6f96
clarified session_statistics: removed somewhat pointless per-theory statistics;
 wenzelm parents: 
78315diff
changeset | 61 | sizeof_thys_id = Space.bytes(e), | 
| 
007b04dc6f96
clarified session_statistics: removed somewhat pointless per-theory statistics;
 wenzelm parents: 
78315diff
changeset | 62 | sizeof_thms_id = Space.bytes(f), | 
| 
007b04dc6f96
clarified session_statistics: removed somewhat pointless per-theory statistics;
 wenzelm parents: 
78315diff
changeset | 63 | sizeof_terms = Space.bytes(g), | 
| 
007b04dc6f96
clarified session_statistics: removed somewhat pointless per-theory statistics;
 wenzelm parents: 
78315diff
changeset | 64 | sizeof_types = Space.bytes(h), | 
| 
007b04dc6f96
clarified session_statistics: removed somewhat pointless per-theory statistics;
 wenzelm parents: 
78315diff
changeset | 65 | sizeof_spaces = Space.bytes(i)) | 
| 78314 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 66 | } | 
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 67 | |
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 68 | def make( | 
| 78315 | 69 | store: Store, | 
| 70 | session_background: Sessions.Background, | |
| 78328 
007b04dc6f96
clarified session_statistics: removed somewhat pointless per-theory statistics;
 wenzelm parents: 
78315diff
changeset | 71 | parent: Option[Statistics] = None | 
| 78314 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 72 |     ): Statistics = {
 | 
| 78315 | 73 | val session_base = session_background.base | 
| 78314 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 74 | val session_name = session_base.session_name | 
| 78315 | 75 | val sessions_structure = session_background.sessions_structure | 
| 78314 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 76 | |
| 78328 
007b04dc6f96
clarified session_statistics: removed somewhat pointless per-theory statistics;
 wenzelm parents: 
78315diff
changeset | 77 |       val session = {
 | 
| 
007b04dc6f96
clarified session_statistics: removed somewhat pointless per-theory statistics;
 wenzelm parents: 
78315diff
changeset | 78 | val args = session_base.used_theories.map(p => p._1.theory) | 
| 78314 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 79 | val eval_args = | 
| 78315 | 80 |           List("--eval", "use_thy " + ML_Syntax.print_string_bytes("~~/src/Tools/Profiling"))
 | 
| 81 |         Isabelle_System.with_tmp_dir("profiling") { dir =>
 | |
| 82 |           val put_env = List("ISABELLE_PROFILING" -> dir.implode)
 | |
| 78314 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 83 |           File.write(dir + Path.explode("args.yxml"), YXML.string_of_body(encode_args(args)))
 | 
| 78315 | 84 | val session_heaps = | 
| 85 | ML_Process.session_heaps(store, session_background, logic = session_name) | |
| 86 | ML_Process(store.options, session_background, session_heaps, args = eval_args, | |
| 78314 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 87 | env = Isabelle_System.settings(put_env)).result().check | 
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 88 |           decode_result(YXML.parse_body(File.read(dir + Path.explode("result.yxml"))))
 | 
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 89 | } | 
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 90 | } | 
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 91 | |
| 78328 
007b04dc6f96
clarified session_statistics: removed somewhat pointless per-theory statistics;
 wenzelm parents: 
78315diff
changeset | 92 | new Statistics(parent = parent, session = session_name, | 
| 
007b04dc6f96
clarified session_statistics: removed somewhat pointless per-theory statistics;
 wenzelm parents: 
78315diff
changeset | 93 | theories = session.theories, | 
| 
007b04dc6f96
clarified session_statistics: removed somewhat pointless per-theory statistics;
 wenzelm parents: 
78315diff
changeset | 94 | locales = session.locales, | 
| 
007b04dc6f96
clarified session_statistics: removed somewhat pointless per-theory statistics;
 wenzelm parents: 
78315diff
changeset | 95 | locale_thms = session.locale_thms, | 
| 
007b04dc6f96
clarified session_statistics: removed somewhat pointless per-theory statistics;
 wenzelm parents: 
78315diff
changeset | 96 | global_thms = session.global_thms, | 
| 78314 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 97 | heap_size = Space.bytes(store.the_heap(session_name).file.length), | 
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 98 | thys_id_size = session.sizeof_thys_id, | 
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 99 | thms_id_size = session.sizeof_thms_id, | 
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 100 | terms_size = session.sizeof_terms, | 
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 101 | types_size = session.sizeof_types, | 
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 102 | spaces_size = session.sizeof_spaces) | 
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 103 | } | 
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 104 | |
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 105 | val empty: Statistics = new Statistics() | 
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 106 | |
| 78328 
007b04dc6f96
clarified session_statistics: removed somewhat pointless per-theory statistics;
 wenzelm parents: 
78315diff
changeset | 107 | val header0: List[String] = | 
| 
007b04dc6f96
clarified session_statistics: removed somewhat pointless per-theory statistics;
 wenzelm parents: 
78315diff
changeset | 108 | List( | 
| 
007b04dc6f96
clarified session_statistics: removed somewhat pointless per-theory statistics;
 wenzelm parents: 
78315diff
changeset | 109 | "theories", | 
| 
007b04dc6f96
clarified session_statistics: removed somewhat pointless per-theory statistics;
 wenzelm parents: 
78315diff
changeset | 110 | "locales", | 
| 
007b04dc6f96
clarified session_statistics: removed somewhat pointless per-theory statistics;
 wenzelm parents: 
78315diff
changeset | 111 | "locale_thms", | 
| 
007b04dc6f96
clarified session_statistics: removed somewhat pointless per-theory statistics;
 wenzelm parents: 
78315diff
changeset | 112 | "global_thms", | 
| 78329 | 113 | "locale_thms%", | 
| 114 | "global_thms%", | |
| 78328 
007b04dc6f96
clarified session_statistics: removed somewhat pointless per-theory statistics;
 wenzelm parents: 
78315diff
changeset | 115 | "heap_size", | 
| 78329 | 116 | "thys_id_size%", | 
| 117 | "thms_id_size%", | |
| 118 | "terms_size%", | |
| 119 | "types_size%", | |
| 120 | "spaces_size%") | |
| 78328 
007b04dc6f96
clarified session_statistics: removed somewhat pointless per-theory statistics;
 wenzelm parents: 
78315diff
changeset | 121 | |
| 78330 | 122 | def header: List[String] = | 
| 123 | "session" :: header0.flatMap(a => List(a, "\u2211" + a)) | |
| 78314 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 124 | } | 
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 125 | |
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 126 | final class Statistics private( | 
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 127 | val parent: Option[Statistics] = None, | 
| 78328 
007b04dc6f96
clarified session_statistics: removed somewhat pointless per-theory statistics;
 wenzelm parents: 
78315diff
changeset | 128 | val session: String = "", | 
| 
007b04dc6f96
clarified session_statistics: removed somewhat pointless per-theory statistics;
 wenzelm parents: 
78315diff
changeset | 129 | val theories: Int = 0, | 
| 
007b04dc6f96
clarified session_statistics: removed somewhat pointless per-theory statistics;
 wenzelm parents: 
78315diff
changeset | 130 | val locales: Int = 0, | 
| 
007b04dc6f96
clarified session_statistics: removed somewhat pointless per-theory statistics;
 wenzelm parents: 
78315diff
changeset | 131 | val locale_thms: Int = 0, | 
| 
007b04dc6f96
clarified session_statistics: removed somewhat pointless per-theory statistics;
 wenzelm parents: 
78315diff
changeset | 132 | val global_thms: Int = 0, | 
| 78314 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 133 | val heap_size: Space = Space.zero, | 
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 134 | val thys_id_size: Space = Space.zero, | 
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 135 | val thms_id_size: Space = Space.zero, | 
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 136 | val terms_size: Space = Space.zero, | 
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 137 | val types_size: Space = Space.zero, | 
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 138 | val spaces_size: Space = Space.zero | 
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 139 |   ) {
 | 
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 140 | private def size_percentage(space: Space): Percentage = | 
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 141 | percentage_space(space, heap_size) | 
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 142 | |
| 78328 
007b04dc6f96
clarified session_statistics: removed somewhat pointless per-theory statistics;
 wenzelm parents: 
78315diff
changeset | 143 | private def thms_percentage(thms: Int): Percentage = | 
| 
007b04dc6f96
clarified session_statistics: removed somewhat pointless per-theory statistics;
 wenzelm parents: 
78315diff
changeset | 144 | percentage(thms, locale_thms + global_thms) | 
| 78314 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 145 | |
| 78330 | 146 | val fields0: List[Any] = | 
| 78328 
007b04dc6f96
clarified session_statistics: removed somewhat pointless per-theory statistics;
 wenzelm parents: 
78315diff
changeset | 147 | List( | 
| 
007b04dc6f96
clarified session_statistics: removed somewhat pointless per-theory statistics;
 wenzelm parents: 
78315diff
changeset | 148 | theories, | 
| 
007b04dc6f96
clarified session_statistics: removed somewhat pointless per-theory statistics;
 wenzelm parents: 
78315diff
changeset | 149 | locales, | 
| 
007b04dc6f96
clarified session_statistics: removed somewhat pointless per-theory statistics;
 wenzelm parents: 
78315diff
changeset | 150 | locale_thms, | 
| 
007b04dc6f96
clarified session_statistics: removed somewhat pointless per-theory statistics;
 wenzelm parents: 
78315diff
changeset | 151 | global_thms, | 
| 
007b04dc6f96
clarified session_statistics: removed somewhat pointless per-theory statistics;
 wenzelm parents: 
78315diff
changeset | 152 | thms_percentage(locale_thms).toString, | 
| 
007b04dc6f96
clarified session_statistics: removed somewhat pointless per-theory statistics;
 wenzelm parents: 
78315diff
changeset | 153 | thms_percentage(global_thms).toString, | 
| 
007b04dc6f96
clarified session_statistics: removed somewhat pointless per-theory statistics;
 wenzelm parents: 
78315diff
changeset | 154 | heap_size.print, | 
| 
007b04dc6f96
clarified session_statistics: removed somewhat pointless per-theory statistics;
 wenzelm parents: 
78315diff
changeset | 155 | size_percentage(thys_id_size).toString, | 
| 
007b04dc6f96
clarified session_statistics: removed somewhat pointless per-theory statistics;
 wenzelm parents: 
78315diff
changeset | 156 | size_percentage(thms_id_size).toString, | 
| 
007b04dc6f96
clarified session_statistics: removed somewhat pointless per-theory statistics;
 wenzelm parents: 
78315diff
changeset | 157 | size_percentage(terms_size).toString, | 
| 
007b04dc6f96
clarified session_statistics: removed somewhat pointless per-theory statistics;
 wenzelm parents: 
78315diff
changeset | 158 | size_percentage(types_size).toString, | 
| 
007b04dc6f96
clarified session_statistics: removed somewhat pointless per-theory statistics;
 wenzelm parents: 
78315diff
changeset | 159 | size_percentage(spaces_size).toString) | 
| 
007b04dc6f96
clarified session_statistics: removed somewhat pointless per-theory statistics;
 wenzelm parents: 
78315diff
changeset | 160 | |
| 78330 | 161 | def fields: List[Any] = | 
| 162 |       session :: fields0.zipWithIndex.flatMap({ case (a, i) => List(a, cumulative.fields0(i)) })
 | |
| 78314 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 163 | |
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 164 | lazy val cumulative: Statistics = | 
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 165 |       parent match {
 | 
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 166 | case None => this | 
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 167 | case Some(other) => | 
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 168 | new Statistics(parent = None, | 
| 78328 
007b04dc6f96
clarified session_statistics: removed somewhat pointless per-theory statistics;
 wenzelm parents: 
78315diff
changeset | 169 | session = session, | 
| 
007b04dc6f96
clarified session_statistics: removed somewhat pointless per-theory statistics;
 wenzelm parents: 
78315diff
changeset | 170 | theories = other.cumulative.theories + theories, | 
| 
007b04dc6f96
clarified session_statistics: removed somewhat pointless per-theory statistics;
 wenzelm parents: 
78315diff
changeset | 171 | locales = other.cumulative.locales + locales, | 
| 
007b04dc6f96
clarified session_statistics: removed somewhat pointless per-theory statistics;
 wenzelm parents: 
78315diff
changeset | 172 | locale_thms = other.cumulative.locale_thms + locale_thms, | 
| 
007b04dc6f96
clarified session_statistics: removed somewhat pointless per-theory statistics;
 wenzelm parents: 
78315diff
changeset | 173 | global_thms = other.cumulative.global_thms + global_thms, | 
| 78314 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 174 | heap_size = other.cumulative.heap_size + heap_size, | 
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 175 | thys_id_size = other.cumulative.thys_id_size + thys_id_size, | 
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 176 | thms_id_size = other.cumulative.thms_id_size + thms_id_size, | 
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 177 | terms_size = other.cumulative.terms_size + terms_size, | 
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 178 | types_size = other.cumulative.types_size + types_size, | 
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 179 | spaces_size = other.cumulative.spaces_size + spaces_size) | 
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 180 | } | 
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 181 | |
| 78328 
007b04dc6f96
clarified session_statistics: removed somewhat pointless per-theory statistics;
 wenzelm parents: 
78315diff
changeset | 182 |     override def toString: String = "Statistics(" + session + ")"
 | 
| 78314 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 183 | } | 
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 184 | |
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 185 | |
| 78315 | 186 | /* profiling results */ | 
| 78314 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 187 | |
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 188 |   sealed case class Results(build_results: Build.Results, sessions: List[Statistics]) {
 | 
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 189 | def output( | 
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 190 | output_dir: Path = default_output_dir, | 
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 191 | progress: Progress = new Progress | 
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 192 |     ): Unit = {
 | 
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 193 |       progress.echo("Output directory " + output_dir.absolute)
 | 
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 194 | Isabelle_System.make_directory(output_dir) | 
| 78328 
007b04dc6f96
clarified session_statistics: removed somewhat pointless per-theory statistics;
 wenzelm parents: 
78315diff
changeset | 195 | val csv_records = for (session <- sessions) yield CSV.Record(session.fields:_*) | 
| 
007b04dc6f96
clarified session_statistics: removed somewhat pointless per-theory statistics;
 wenzelm parents: 
78315diff
changeset | 196 |       CSV.File("sessions", Statistics.header, csv_records).write(output_dir)
 | 
| 78314 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 197 | } | 
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 198 | } | 
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 199 | |
| 78315 | 200 | def profiling( | 
| 78314 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 201 | options: Options, | 
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 202 | selection: Sessions.Selection = Sessions.Selection.empty, | 
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 203 | progress: Progress = new Progress, | 
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 204 | dirs: List[Path] = Nil, | 
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 205 | select_dirs: List[Path] = Nil, | 
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 206 | numa_shuffling: Boolean = false, | 
| 78328 
007b04dc6f96
clarified session_statistics: removed somewhat pointless per-theory statistics;
 wenzelm parents: 
78315diff
changeset | 207 | max_jobs: Int = 1 | 
| 78314 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 208 |   ): Results = {
 | 
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 209 | /* sessions structure */ | 
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 210 | |
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 211 | val sessions_dirs = dirs ::: select_dirs | 
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 212 | |
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 213 | val sessions_structure = | 
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 214 | Sessions.load_structure(options, dirs = dirs, select_dirs = select_dirs) | 
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 215 | |
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 216 | val selected_sessions = sessions_structure.imports_selection(selection) | 
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 217 | val cumulative_sessions = sessions_structure.build_requirements(selected_sessions) | 
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 218 | |
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 219 | val sessions_selection = Sessions.Selection(sessions = selected_sessions) | 
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 220 | |
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 221 | |
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 222 | /* build session */ | 
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 223 | |
| 78315 | 224 | val store = Store(options) | 
| 78314 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 225 | |
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 226 | def build( | 
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 227 | selection: Sessions.Selection, | 
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 228 | build_heap: Boolean = false, | 
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 229 | clean_build: Boolean = false | 
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 230 |     ): Build.Results = {
 | 
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 231 | val results = | 
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 232 | Build.build(options, progress = progress, | 
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 233 | selection = selection, build_heap = build_heap, clean_build = clean_build, | 
| 78315 | 234 | dirs = sessions_dirs, numa_shuffling = numa_shuffling, max_jobs = max_jobs) | 
| 78314 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 235 | |
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 236 |       if (results.ok) results else error("Build failed")
 | 
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 237 | } | 
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 238 | |
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 239 | |
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 240 | /* session builds and profiling */ | 
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 241 | |
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 242 |     progress.echo("Build session requirements:")
 | 
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 243 | build(sessions_selection.copy(requirements = true), build_heap = true) | 
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 244 |     progress.echo("DONE")
 | 
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 245 | |
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 246 |     progress.echo("Build sessions:")
 | 
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 247 | val build_results = build(sessions_selection, build_heap = true, clean_build = true) | 
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 248 |     progress.echo("DONE")
 | 
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 249 | |
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 250 |     val sessions = {
 | 
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 251 | var seen = Map.empty[String, Statistics] | 
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 252 | for (session_name <- cumulative_sessions) | 
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 253 |       yield {
 | 
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 254 |         progress.echo("Profiling " + session_name + " ...")
 | 
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 255 | val parent = | 
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 256 |           for {
 | 
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 257 | info <- sessions_structure.get(session_name) | 
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 258 | parent_name <- info.parent | 
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 259 | parent_stats <- seen.get(parent_name) | 
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 260 | } yield parent_stats | 
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 261 | val stats = | 
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 262 | Statistics.make(store, | 
| 78315 | 263 | build_results.deps.background(session_name), | 
| 78328 
007b04dc6f96
clarified session_statistics: removed somewhat pointless per-theory statistics;
 wenzelm parents: 
78315diff
changeset | 264 | parent = parent) | 
| 78314 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 265 | seen += (session_name -> stats) | 
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 266 | stats | 
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 267 | } | 
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 268 | } | 
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 269 |     progress.echo("DONE")
 | 
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 270 | |
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 271 | Results(build_results, sessions) | 
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 272 | } | 
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 273 | |
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 274 | |
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 275 | /* Isabelle tool wrapper */ | 
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 276 | |
| 78315 | 277 |   val default_output_dir: Path = Path.explode("profiling")
 | 
| 78314 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 278 | |
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 279 | val isabelle_tool = | 
| 78315 | 280 |     Isabelle_Tool("profiling", "build sessions for profiling of ML heap content",
 | 
| 78314 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 281 |       Scala_Project.here, { args =>
 | 
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 282 | var base_sessions: List[String] = Nil | 
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 283 | var select_dirs: List[Path] = Nil | 
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 284 | var numa_shuffling = false | 
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 285 | var output_dir = default_output_dir | 
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 286 | var exclude_session_groups: List[String] = Nil | 
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 287 | var all_sessions = false | 
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 288 | var dirs: List[Path] = Nil | 
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 289 | var session_groups: List[String] = Nil | 
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 290 | var max_jobs = 1 | 
| 78315 | 291 | var options = Options.init(specs = Options.Spec.ISABELLE_BUILD_OPTIONS) | 
| 78314 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 292 | var verbose = false | 
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 293 | var exclude_sessions: List[String] = Nil | 
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 294 | |
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 295 |         val getopts = Getopts("""
 | 
| 78315 | 296 | Usage: isabelle profiling [OPTIONS] [SESSIONS ...] | 
| 78314 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 297 | |
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 298 | Options are: | 
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 299 | -B NAME include session NAME and all descendants | 
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 300 | -D DIR include session directory and select its sessions | 
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 301 | -N cyclic shuffling of NUMA CPU nodes (performance tuning) | 
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 302 | -O DIR output directory (default: """ + default_output_dir + """) | 
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 303 | -X NAME exclude sessions from group NAME and all descendants | 
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 304 | -a select all sessions | 
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 305 | -d DIR include session directory | 
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 306 | -g NAME select session group NAME | 
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 307 | -j INT maximum number of parallel jobs (default 1) | 
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 308 | -o OPTION override Isabelle system OPTION (via NAME=VAL or NAME) | 
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 309 | -v verbose | 
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 310 | -x NAME exclude session NAME and all descendants | 
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 311 | |
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 312 | Build specified sessions, with options similar to "isabelle build" and | 
| 78315 | 313 | implicit modifications for profiling of ML heap content.""", | 
| 78314 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 314 | "B:" -> (arg => base_sessions = base_sessions ::: List(arg)), | 
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 315 | "D:" -> (arg => select_dirs = select_dirs ::: List(Path.explode(arg))), | 
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 316 | "N" -> (_ => numa_shuffling = true), | 
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 317 | "O:" -> (arg => output_dir = Path.explode(arg)), | 
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 318 | "X:" -> (arg => exclude_session_groups = exclude_session_groups ::: List(arg)), | 
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 319 | "a" -> (_ => all_sessions = true), | 
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 320 | "d:" -> (arg => dirs = dirs ::: List(Path.explode(arg))), | 
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 321 | "g:" -> (arg => session_groups = session_groups ::: List(arg)), | 
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 322 | "j:" -> (arg => max_jobs = Value.Int.parse(arg)), | 
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 323 | "o:" -> (arg => options = options + arg), | 
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 324 | "v" -> (_ => verbose = true), | 
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 325 | "x:" -> (arg => exclude_sessions = exclude_sessions ::: List(arg))) | 
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 326 | |
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 327 | val sessions = getopts(args) | 
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 328 | |
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 329 | val progress = new Console_Progress(verbose = verbose) | 
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 330 | |
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 331 | val results = | 
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 332 |           progress.interrupt_handler {
 | 
| 78315 | 333 | profiling(options, | 
| 78314 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 334 | selection = Sessions.Selection( | 
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 335 | all_sessions = all_sessions, | 
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 336 | base_sessions = base_sessions, | 
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 337 | exclude_session_groups = exclude_session_groups, | 
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 338 | exclude_sessions = exclude_sessions, | 
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 339 | session_groups = session_groups, | 
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 340 | sessions = sessions), | 
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 341 | progress = progress, | 
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 342 | dirs = dirs, | 
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 343 | select_dirs = select_dirs, | 
| 78315 | 344 | numa_shuffling = Host.numa_check(progress, numa_shuffling), | 
| 78328 
007b04dc6f96
clarified session_statistics: removed somewhat pointless per-theory statistics;
 wenzelm parents: 
78315diff
changeset | 345 | max_jobs = max_jobs) | 
| 78314 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 346 | } | 
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 347 | |
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 348 | results.output(output_dir = output_dir.absolute, progress = progress) | 
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 349 | }) | 
| 
1588bec693c2
copy/rename files from private autocorres version e45b9b680d3e;
 wenzelm parents: diff
changeset | 350 | } |