src/Pure/Tools/profiling_report.scala
changeset 75394 42267c650205
parent 75393 87ebf5a50283
child 75737 288c4d4042cc
equal deleted inserted replaced
75393:87ebf5a50283 75394:42267c650205
    15     clean_name: Boolean = false,
    15     clean_name: Boolean = false,
    16     progress: Progress = new Progress
    16     progress: Progress = new Progress
    17   ): Unit = {
    17   ): Unit = {
    18     val store = Sessions.store(options)
    18     val store = Sessions.store(options)
    19 
    19 
    20     using(store.open_database_context())(db_context => {
    20     using(store.open_database_context()) { db_context =>
    21       val result =
    21       val result =
    22         db_context.input_database(session)((db, name) => Some(store.read_theories(db, name)))
    22         db_context.input_database(session)((db, name) => Some(store.read_theories(db, name)))
    23       result match {
    23       result match {
    24         case None => error("Missing build database for session " + quote(session))
    24         case None => error("Missing build database for session " + quote(session))
    25         case Some(used_theories) =>
    25         case Some(used_theories) =>
    36               (Protocol.ML_Profiling(report), _) <- snapshot.messages.iterator
    36               (Protocol.ML_Profiling(report), _) <- snapshot.messages.iterator
    37             } yield if (clean_name) report.clean_name else report).toList
    37             } yield if (clean_name) report.clean_name else report).toList
    38 
    38 
    39           for (report <- ML_Profiling.account(reports)) progress.echo(report.print)
    39           for (report <- ML_Profiling.account(reports)) progress.echo(report.print)
    40       }
    40       }
    41     })
    41     }
    42   }
    42   }
    43 
    43 
    44 
    44 
    45   /* Isabelle tool wrapper */
    45   /* Isabelle tool wrapper */
    46 
    46 
    47   val isabelle_tool =
    47   val isabelle_tool =
    48     Isabelle_Tool("profiling_report", "report Poly/ML profiling information from log files",
    48     Isabelle_Tool("profiling_report", "report Poly/ML profiling information from log files",
    49       Scala_Project.here,
    49       Scala_Project.here,
    50       args => {
    50       { args =>
    51       var theories: List[String] = Nil
    51         var theories: List[String] = Nil
    52       var clean_name = false
    52         var clean_name = false
    53       var options = Options.init()
    53         var options = Options.init()
    54 
    54 
    55       val getopts =
    55         val getopts = Getopts("""
    56         Getopts("""
       
    57 Usage: isabelle profiling_report [OPTIONS] SESSION
    56 Usage: isabelle profiling_report [OPTIONS] SESSION
    58 
    57 
    59   Options are:
    58   Options are:
    60     -T NAME      restrict to given theories (multiple options possible)
    59     -T NAME      restrict to given theories (multiple options possible)
    61     -c           clean function names
    60     -c           clean function names
    66 """,
    65 """,
    67           "T:" -> (arg => theories = theories ::: List(arg)),
    66           "T:" -> (arg => theories = theories ::: List(arg)),
    68           "c" -> (_ => clean_name = true),
    67           "c" -> (_ => clean_name = true),
    69           "o:" -> (arg => options = options + arg))
    68           "o:" -> (arg => options = options + arg))
    70 
    69 
    71       val more_args = getopts(args)
    70         val more_args = getopts(args)
    72       val session_name =
    71         val session_name =
    73         more_args match {
    72           more_args match {
    74           case List(session_name) => session_name
    73             case List(session_name) => session_name
    75           case _ => getopts.usage()
    74             case _ => getopts.usage()
    76         }
    75           }
    77 
    76 
    78       val progress = new Console_Progress()
    77         val progress = new Console_Progress()
    79 
    78 
    80       profiling_report(options, session_name, theories = theories,
    79         profiling_report(options, session_name, theories = theories,
    81         clean_name = clean_name, progress = progress)
    80           clean_name = clean_name, progress = progress)
    82     })
    81       })
    83 }
    82 }