src/Pure/System/program_progress.scala
changeset 81392 92aa6f7b470c
parent 79873 6c19c29ddcbe
equal deleted inserted replaced
81391:365b9aac4363 81392:92aa6f7b470c
    18 
    18 
    19     val start_time: Time = Time.now()
    19     val start_time: Time = Time.now()
    20     private var stop_time: Option[Time] = None
    20     private var stop_time: Option[Time] = None
    21     def stop_now(): Unit = synchronized { stop_time = Some(Time.now()) }
    21     def stop_now(): Unit = synchronized { stop_time = Some(Time.now()) }
    22 
    22 
    23     def output(): (Command.Results, XML.Body) = synchronized {
    23     def output(): (Command.Results, XML.Elem) = synchronized {
    24       val output_text = output_buffer.toString
    24       val output_text = output_buffer.toString
    25       val elapsed_time = stop_time.map(t => t - start_time)
    25       val elapsed_time = stop_time.map(t => t - start_time)
    26 
    26 
    27       val message_prefix = heading + " "
    27       val message_prefix = heading + " "
    28       val message_suffix =
    28       val message_suffix =
    43             List(XML.Elem(Markup(Markup.WRITELN, Markup.Serial(i)), XML.string(title))) :::
    43             List(XML.Elem(Markup(Markup.WRITELN, Markup.Serial(i)), XML.string(title))) :::
    44             XML.string(message_suffix)
    44             XML.string(message_suffix)
    45           (results, message)
    45           (results, message)
    46         }
    46         }
    47 
    47 
    48       (results, List(XML.elem(Markup.TRACING_MESSAGE, message)))
    48       (results, XML.elem(Markup.TRACING_MESSAGE, message))
    49     }
    49     }
    50   }
    50   }
    51 }
    51 }
    52 
    52 
    53 abstract class Program_Progress(
    53 abstract class Program_Progress(
    56   override val verbose: Boolean = false
    56   override val verbose: Boolean = false
    57 ) extends Progress {
    57 ) extends Progress {
    58   private var _finished_programs: List[Program_Progress.Program] = Nil
    58   private var _finished_programs: List[Program_Progress.Program] = Nil
    59   private var _running_program: Option[Program_Progress.Program] = None
    59   private var _running_program: Option[Program_Progress.Program] = None
    60 
    60 
    61   def output(): (Command.Results, XML.Body) = synchronized {
    61   def output(): (Command.Results, List[XML.Elem]) = synchronized {
    62     val programs = (_running_program.toList ::: _finished_programs).reverse
    62     val programs = (_running_program.toList ::: _finished_programs).reverse
    63     val programs_output = programs.map(_.output())
    63     val programs_output = programs.map(_.output())
    64     val results = Command.Results.merge(programs_output.map(_._1))
    64     val results = Command.Results.merge(programs_output.map(_._1))
    65     val body = Library.separate(Pretty.Separator, programs_output.map(_._2)).flatten
    65     (results, programs_output.map(_._2))
    66     (results, body)
       
    67   }
    66   }
    68 
    67 
    69   private def start_program(heading: String, title: String): Unit = synchronized {
    68   private def start_program(heading: String, title: String): Unit = synchronized {
    70     _running_program = Some(new Program_Progress.Program(heading, title))
    69     _running_program = Some(new Program_Progress.Program(heading, title))
    71   }
    70   }