# HG changeset patch # User wenzelm # Date 1355002899 -3600 # Node ID f2241b8d0db588bedd8e1e9b39ad8ad1970c89ff # Parent b233d426fa0bfa531c6f861e76398dd136234ef8# Parent 9131dadb2bf7e1bd26f3224596c5014801f34b1d merged diff -r b233d426fa0b -r f2241b8d0db5 Admin/component_repository/components.sha1 --- a/Admin/component_repository/components.sha1 Sat Dec 08 22:15:44 2012 +0100 +++ b/Admin/component_repository/components.sha1 Sat Dec 08 22:41:39 2012 +0100 @@ -18,6 +18,7 @@ 7b012f725ec1cc102dc259df178d511cc7890bba jedit_build-20120813.tar.gz 8e1d36f5071e3def2cb281f7fefe9f52352cb88f jedit_build-20120903.tar.gz 8fa0c67f59beba369ab836562eed4e56382f672a jedit_build-20121201.tar.gz +8122526f1fc362ddae1a328bdbc2152853186fee jfreechart-1.0.14.tar.gz 6c737137cc597fc920943783382e928ea79e3feb kodkodi-1.2.16.tar.gz 5f95c96bb99927f3a026050f85bd056f37a9189e kodkodi-1.5.2.tar.gz 1c8cb6a8f4cbeaedce2d6d1ba8fc7e2ab3663aeb polyml-5.4.1.tar.gz diff -r b233d426fa0b -r f2241b8d0db5 Admin/components/main --- a/Admin/components/main Sat Dec 08 22:15:44 2012 +0100 +++ b/Admin/components/main Sat Dec 08 22:41:39 2012 +0100 @@ -4,6 +4,7 @@ exec_process-1.0.3 jdk-7u9 jedit_build-20121201 +jfreechart-1.0.14 kodkodi-1.5.2 polyml-5.5.0 scala-2.9.2 diff -r b233d426fa0b -r f2241b8d0db5 src/Pure/System/session.scala --- a/src/Pure/System/session.scala Sat Dec 08 22:15:44 2012 +0100 +++ b/src/Pure/System/session.scala Sat Dec 08 22:41:39 2012 +0100 @@ -22,6 +22,7 @@ /* events */ //{{{ + case class Statistics(stats: Properties.T) case class Global_Options(options: Options) case object Caret_Focus case class Raw_Edits(edits: List[Document.Edit_Text]) @@ -58,6 +59,7 @@ /* pervasive event buses */ + val statistics = new Event_Bus[Session.Statistics] val global_options = new Event_Bus[Session.Global_Options] val caret_focus = new Event_Bus[Session.Caret_Focus.type] val raw_edits = new Event_Bus[Session.Raw_Edits] @@ -359,10 +361,10 @@ } case Markup.ML_Statistics(stats) if output.is_protocol => - java.lang.System.err.println(stats.toString) // FIXME + statistics.event(Session.Statistics(stats)) case _ if output.is_init => - phase = Session.Ready + phase = Session.Ready case Markup.Return_Code(rc) if output.is_exit => if (rc == 0) phase = Session.Inactive diff -r b233d426fa0b -r f2241b8d0db5 src/Tools/jEdit/lib/Tools/jedit --- a/src/Tools/jEdit/lib/Tools/jedit Sat Dec 08 22:15:44 2012 +0100 +++ b/src/Tools/jEdit/lib/Tools/jedit Sat Dec 08 22:41:39 2012 +0100 @@ -24,6 +24,7 @@ "src/jedit_main.scala" "src/jedit_options.scala" "src/jedit_thy_load.scala" + "src/monitor_dockable.scala" "src/output_dockable.scala" "src/plugin.scala" "src/pretty_text_area.scala" @@ -204,6 +205,12 @@ "$ISABELLE_JEDIT_BUILD_HOME/contrib/js.jar" ) +declare -a JFREECHART_JARS=() +for NAME in $JFREECHART_JAR_NAMES +do + JFREECHART_JARS["${#JFREECHART_JARS[@]}"]="$JFREECHART_HOME/lib/$NAME" +done + # target @@ -220,7 +227,7 @@ else if [ -n "$ISABELLE_JEDIT_BUILD_HOME" ]; then declare -a DEPS=( - "$JEDIT_JAR" "${JEDIT_JARS[@]}" + "$JEDIT_JAR" "${JEDIT_JARS[@]}" "${JFREECHART_JARS[@]}" "$PURE_JAR" "$GRAPHVIEW_JAR" "${SOURCES[@]}" "${RESOURCES[@]}" ) elif [ -e "$ISABELLE_HOME/Admin/build" ]; then @@ -276,8 +283,8 @@ cp -p -R -f "${JEDIT_JARS[@]}" dist/jars/. || failed ( - for JAR in "$JEDIT_JAR" "${JEDIT_JARS[@]}" "$PURE_JAR" "$GRAPHVIEW_JAR" \ - "$SCALA_HOME/lib/scala-compiler.jar" + for JAR in "$JEDIT_JAR" "${JEDIT_JARS[@]}" "${JFREECHART_JARS[@]}" "$PURE_JAR" \ + "$GRAPHVIEW_JAR" "$SCALA_HOME/lib/scala-compiler.jar" do CLASSPATH="$CLASSPATH:$JAR" done diff -r b233d426fa0b -r f2241b8d0db5 src/Tools/jEdit/src/Isabelle.props --- a/src/Tools/jEdit/src/Isabelle.props Sat Dec 08 22:15:44 2012 +0100 +++ b/src/Tools/jEdit/src/Isabelle.props Sat Dec 08 22:41:39 2012 +0100 @@ -28,26 +28,37 @@ #menu actions plugin.isabelle.jedit.Plugin.menu.label=Isabelle -plugin.isabelle.jedit.Plugin.menu=isabelle.theories-panel isabelle.output-panel isabelle.graphview-panel isabelle.raw-output-panel isabelle.protocol-panel isabelle.readme-panel isabelle.symbols-panel isabelle.syslog-panel -isabelle.theories-panel.label=Theories panel +plugin.isabelle.jedit.Plugin.menu= \ + isabelle.graphview-panel \ + isabelle.monitor-panel \ + isabelle.output-panel \ + isabelle.protocol-panel \ + isabelle.raw-output-panel \ + isabelle.readme-panel \ + isabelle.symbols-panel \ + isabelle.syslog-panel \ + isabelle.theories-panel +isabelle.graphview-panel.label=Graphview panel +isabelle.monitor-panel.label=Monitor panel isabelle.output-panel.label=Output panel -isabelle.graphview-panel.label=Graphview panel +isabelle.protocol-panel.label=Protocol panel isabelle.raw-output-panel.label=Raw Output panel -isabelle.protocol-panel.label=Protocol panel isabelle.readme-panel.label=README panel isabelle.symbols-panel.label=Symbols panel isabelle.syslog-panel.label=Syslog panel +isabelle.theories-panel.label=Theories panel #dockables -isabelle-theories.title=Theories +isabelle-graphview.title=Graphview +isabelle-info.title=Info +isabelle-monitor.title=Monitor isabelle-output.title=Output -isabelle-info.title=Info -isabelle-graphview.title=Graphview +isabelle-protocol.title=Protocol isabelle-raw-output.title=Raw Output -isabelle-protocol.title=Protocol isabelle-readme.title=README +isabelle-symbols.title=Symbols isabelle-syslog.title=Syslog -isabelle-symbols.title=Symbols +isabelle-theories.title=Theories #SideKick mode.isabelle-options.folding=sidekick diff -r b233d426fa0b -r f2241b8d0db5 src/Tools/jEdit/src/actions.xml --- a/src/Tools/jEdit/src/actions.xml Sat Dec 08 22:15:44 2012 +0100 +++ b/src/Tools/jEdit/src/actions.xml Sat Dec 08 22:41:39 2012 +0100 @@ -37,6 +37,11 @@ wm.addDockableWindow("isabelle-protocol"); + + + wm.addDockableWindow("isabelle-monitor"); + + wm.addDockableWindow("isabelle-symbols"); diff -r b233d426fa0b -r f2241b8d0db5 src/Tools/jEdit/src/dockables.xml --- a/src/Tools/jEdit/src/dockables.xml Sat Dec 08 22:15:44 2012 +0100 +++ b/src/Tools/jEdit/src/dockables.xml Sat Dec 08 22:41:39 2012 +0100 @@ -26,6 +26,9 @@ new isabelle.jedit.Protocol_Dockable(view, position); + + new isabelle.jedit.Monitor_Dockable(view, position); + new isabelle.jedit.Symbols_Dockable(view, position); diff -r b233d426fa0b -r f2241b8d0db5 src/Tools/jEdit/src/isabelle.scala --- a/src/Tools/jEdit/src/isabelle.scala Sat Dec 08 22:15:44 2012 +0100 +++ b/src/Tools/jEdit/src/isabelle.scala Sat Dec 08 22:41:39 2012 +0100 @@ -44,6 +44,12 @@ case _ => None } + def docked_monitor(view: View): Option[Monitor_Dockable] = + wm(view).getDockableWindow("isabelle-monitor") match { + case dockable: Monitor_Dockable => Some(dockable) + case _ => None + } + /* font size */ diff -r b233d426fa0b -r f2241b8d0db5 src/Tools/jEdit/src/monitor_dockable.scala --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/Tools/jEdit/src/monitor_dockable.scala Sat Dec 08 22:41:39 2012 +0100 @@ -0,0 +1,77 @@ +/* Title: Tools/jEdit/src/monitor_dockable.scala + Author: Makarius + +Monitor for runtime statistics. +*/ + +package isabelle.jedit + + +import isabelle._ + +import scala.actors.Actor._ +import scala.swing.{TextArea, ScrollPane, Component} + +import org.jfree.chart.{ChartFactory, ChartPanel} +import org.jfree.data.time.{Millisecond, TimeSeries, TimeSeriesCollection} + +import org.gjt.sp.jedit.View + + +class Monitor_Dockable(view: View, position: String) extends Dockable(view, position) +{ + /* properties */ // FIXME avoid hardwired stuff + + private val Now = new Properties.Double("now") + private val Size_Heap = new Properties.Double("size_heap") + + private val series = new TimeSeries("ML heap size", classOf[Millisecond]) + + + /* chart */ + + private val chart_panel = + { + val data = new TimeSeriesCollection(series) + val chart = ChartFactory.createTimeSeriesChart(null, "Time", "Value", data, true, true, false) + val plot = chart.getXYPlot() + + val x_axis = plot.getDomainAxis() + x_axis.setAutoRange(true) + x_axis.setFixedAutoRange(60000.0) + + val y_axis = plot.getRangeAxis() + y_axis.setAutoRange(true) + + new ChartPanel(chart) + } + set_content(chart_panel) + + + /* main actor */ + + private val main_actor = actor { + var t0: Option[Double] = None + loop { + react { + case Session.Statistics(stats) => + java.lang.System.err.println(stats) + stats match { + case Now(t1) => + if (t0.isEmpty) t0 = Some(t1) + val t = t1 - t0.get + stats match { + case Size_Heap(x) => series.add(new Millisecond(), x) // FIXME proper time point + case _ => + } + case _ => + } + case bad => java.lang.System.err.println("Monitor_Dockable: ignoring bad message " + bad) + } + } + } + + override def init() { PIDE.session.statistics += main_actor } + override def exit() { PIDE.session.statistics -= main_actor } +} +