src/Tools/jEdit/src/timing_dockable.scala
author wenzelm
Fri, 12 Aug 2022 12:50:19 +0200
changeset 75816 91f02f224b80
parent 75393 87ebf5a50283
permissions -rw-r--r--
basic setup for document build panel;
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
51533
3f6280aedbcc dockable window for timing information;
wenzelm
parents:
diff changeset
     1
/*  Title:      Tools/jEdit/src/timing_dockable.scala
3f6280aedbcc dockable window for timing information;
wenzelm
parents:
diff changeset
     2
    Author:     Makarius
3f6280aedbcc dockable window for timing information;
wenzelm
parents:
diff changeset
     3
3f6280aedbcc dockable window for timing information;
wenzelm
parents:
diff changeset
     4
Dockable window for timing information.
3f6280aedbcc dockable window for timing information;
wenzelm
parents:
diff changeset
     5
*/
3f6280aedbcc dockable window for timing information;
wenzelm
parents:
diff changeset
     6
3f6280aedbcc dockable window for timing information;
wenzelm
parents:
diff changeset
     7
package isabelle.jedit
3f6280aedbcc dockable window for timing information;
wenzelm
parents:
diff changeset
     8
3f6280aedbcc dockable window for timing information;
wenzelm
parents:
diff changeset
     9
3f6280aedbcc dockable window for timing information;
wenzelm
parents:
diff changeset
    10
import isabelle._
3f6280aedbcc dockable window for timing information;
wenzelm
parents:
diff changeset
    11
53711
8ce7795256e1 improved FlowLayout for wrapping of components over multiple lines;
wenzelm
parents: 53177
diff changeset
    12
import scala.swing.{Label, ListView, Alignment, ScrollPane, Component, TextField}
51538
637e64effda2 proper input event handling;
wenzelm
parents: 51536
diff changeset
    13
import scala.swing.event.{MouseClicked, ValueChanged}
51533
3f6280aedbcc dockable window for timing information;
wenzelm
parents:
diff changeset
    14
51536
a1d324ef12d4 more specific Entry painting;
wenzelm
parents: 51534
diff changeset
    15
import java.awt.{BorderLayout, Graphics2D, Insets, Color}
51533
3f6280aedbcc dockable window for timing information;
wenzelm
parents:
diff changeset
    16
import javax.swing.{JList, BorderFactory}
3f6280aedbcc dockable window for timing information;
wenzelm
parents:
diff changeset
    17
import javax.swing.border.{BevelBorder, SoftBevelBorder}
3f6280aedbcc dockable window for timing information;
wenzelm
parents:
diff changeset
    18
3f6280aedbcc dockable window for timing information;
wenzelm
parents:
diff changeset
    19
import org.gjt.sp.jedit.{View, jEdit}
3f6280aedbcc dockable window for timing information;
wenzelm
parents:
diff changeset
    20
3f6280aedbcc dockable window for timing information;
wenzelm
parents:
diff changeset
    21
75393
87ebf5a50283 clarified formatting, for the sake of scala3;
wenzelm
parents: 73987
diff changeset
    22
class Timing_Dockable(view: View, position: String) extends Dockable(view, position) {
51533
3f6280aedbcc dockable window for timing information;
wenzelm
parents:
diff changeset
    23
  /* entry */
3f6280aedbcc dockable window for timing information;
wenzelm
parents:
diff changeset
    24
75393
87ebf5a50283 clarified formatting, for the sake of scala3;
wenzelm
parents: 73987
diff changeset
    25
  private object Entry {
87ebf5a50283 clarified formatting, for the sake of scala3;
wenzelm
parents: 73987
diff changeset
    26
    object Ordering extends scala.math.Ordering[Entry] {
51533
3f6280aedbcc dockable window for timing information;
wenzelm
parents:
diff changeset
    27
      def compare(entry1: Entry, entry2: Entry): Int =
3f6280aedbcc dockable window for timing information;
wenzelm
parents:
diff changeset
    28
        entry2.timing compare entry1.timing
3f6280aedbcc dockable window for timing information;
wenzelm
parents:
diff changeset
    29
    }
3f6280aedbcc dockable window for timing information;
wenzelm
parents:
diff changeset
    30
75393
87ebf5a50283 clarified formatting, for the sake of scala3;
wenzelm
parents: 73987
diff changeset
    31
    object Renderer_Component extends Label {
51533
3f6280aedbcc dockable window for timing information;
wenzelm
parents:
diff changeset
    32
      opaque = false
3f6280aedbcc dockable window for timing information;
wenzelm
parents:
diff changeset
    33
      xAlignment = Alignment.Leading
3f6280aedbcc dockable window for timing information;
wenzelm
parents:
diff changeset
    34
      border = BorderFactory.createEmptyBorder(2, 2, 2, 2)
51536
a1d324ef12d4 more specific Entry painting;
wenzelm
parents: 51534
diff changeset
    35
a1d324ef12d4 more specific Entry painting;
wenzelm
parents: 51534
diff changeset
    36
      var entry: Entry = null
75393
87ebf5a50283 clarified formatting, for the sake of scala3;
wenzelm
parents: 73987
diff changeset
    37
      override def paintComponent(gfx: Graphics2D): Unit = {
87ebf5a50283 clarified formatting, for the sake of scala3;
wenzelm
parents: 73987
diff changeset
    38
        def paint_rectangle(color: Color): Unit = {
51536
a1d324ef12d4 more specific Entry painting;
wenzelm
parents: 51534
diff changeset
    39
          val size = peer.getSize()
a1d324ef12d4 more specific Entry painting;
wenzelm
parents: 51534
diff changeset
    40
          val insets = border.getBorderInsets(peer)
a1d324ef12d4 more specific Entry painting;
wenzelm
parents: 51534
diff changeset
    41
          val x = insets.left
a1d324ef12d4 more specific Entry painting;
wenzelm
parents: 51534
diff changeset
    42
          val y = insets.top
a1d324ef12d4 more specific Entry painting;
wenzelm
parents: 51534
diff changeset
    43
          val w = size.width - x - insets.right
a1d324ef12d4 more specific Entry painting;
wenzelm
parents: 51534
diff changeset
    44
          val h = size.height - y - insets.bottom
a1d324ef12d4 more specific Entry painting;
wenzelm
parents: 51534
diff changeset
    45
          gfx.setColor(color)
a1d324ef12d4 more specific Entry painting;
wenzelm
parents: 51534
diff changeset
    46
          gfx.fillRect(x, y, w, h)
a1d324ef12d4 more specific Entry painting;
wenzelm
parents: 51534
diff changeset
    47
        }
a1d324ef12d4 more specific Entry painting;
wenzelm
parents: 51534
diff changeset
    48
a1d324ef12d4 more specific Entry painting;
wenzelm
parents: 51534
diff changeset
    49
        entry match {
a1d324ef12d4 more specific Entry painting;
wenzelm
parents: 51534
diff changeset
    50
          case theory_entry: Theory_Entry if theory_entry.current =>
a1d324ef12d4 more specific Entry painting;
wenzelm
parents: 51534
diff changeset
    51
            paint_rectangle(view.getTextArea.getPainter.getSelectionColor)
a1d324ef12d4 more specific Entry painting;
wenzelm
parents: 51534
diff changeset
    52
          case _: Command_Entry =>
a1d324ef12d4 more specific Entry painting;
wenzelm
parents: 51534
diff changeset
    53
            paint_rectangle(view.getTextArea.getPainter.getMultipleSelectionColor)
a1d324ef12d4 more specific Entry painting;
wenzelm
parents: 51534
diff changeset
    54
          case _ =>
a1d324ef12d4 more specific Entry painting;
wenzelm
parents: 51534
diff changeset
    55
        }
a1d324ef12d4 more specific Entry painting;
wenzelm
parents: 51534
diff changeset
    56
        super.paintComponent(gfx)
a1d324ef12d4 more specific Entry painting;
wenzelm
parents: 51534
diff changeset
    57
      }
51533
3f6280aedbcc dockable window for timing information;
wenzelm
parents:
diff changeset
    58
    }
3f6280aedbcc dockable window for timing information;
wenzelm
parents:
diff changeset
    59
75393
87ebf5a50283 clarified formatting, for the sake of scala3;
wenzelm
parents: 73987
diff changeset
    60
    class Renderer extends ListView.Renderer[Entry] {
87ebf5a50283 clarified formatting, for the sake of scala3;
wenzelm
parents: 73987
diff changeset
    61
      def componentFor(
87ebf5a50283 clarified formatting, for the sake of scala3;
wenzelm
parents: 73987
diff changeset
    62
        list: ListView[_ <: Timing_Dockable.this.Entry],
87ebf5a50283 clarified formatting, for the sake of scala3;
wenzelm
parents: 73987
diff changeset
    63
        isSelected: Boolean,
87ebf5a50283 clarified formatting, for the sake of scala3;
wenzelm
parents: 73987
diff changeset
    64
        focused: Boolean,
87ebf5a50283 clarified formatting, for the sake of scala3;
wenzelm
parents: 73987
diff changeset
    65
        entry: Entry, index: Int
87ebf5a50283 clarified formatting, for the sake of scala3;
wenzelm
parents: 73987
diff changeset
    66
      ): Component = {
51533
3f6280aedbcc dockable window for timing information;
wenzelm
parents:
diff changeset
    67
        val component = Renderer_Component
51536
a1d324ef12d4 more specific Entry painting;
wenzelm
parents: 51534
diff changeset
    68
        component.entry = entry
51534
123bd97fcea1 mixed theory/command entries;
wenzelm
parents: 51533
diff changeset
    69
        component.text = entry.print
51533
3f6280aedbcc dockable window for timing information;
wenzelm
parents:
diff changeset
    70
        component
3f6280aedbcc dockable window for timing information;
wenzelm
parents:
diff changeset
    71
      }
3f6280aedbcc dockable window for timing information;
wenzelm
parents:
diff changeset
    72
    }
3f6280aedbcc dockable window for timing information;
wenzelm
parents:
diff changeset
    73
  }
3f6280aedbcc dockable window for timing information;
wenzelm
parents:
diff changeset
    74
75393
87ebf5a50283 clarified formatting, for the sake of scala3;
wenzelm
parents: 73987
diff changeset
    75
  private abstract class Entry {
51534
123bd97fcea1 mixed theory/command entries;
wenzelm
parents: 51533
diff changeset
    76
    def timing: Double
123bd97fcea1 mixed theory/command entries;
wenzelm
parents: 51533
diff changeset
    77
    def print: String
73340
0ffcad1f6130 tuned --- fewer warnings;
wenzelm
parents: 72823
diff changeset
    78
    def follow(snapshot: Document.Snapshot): Unit
51534
123bd97fcea1 mixed theory/command entries;
wenzelm
parents: 51533
diff changeset
    79
  }
123bd97fcea1 mixed theory/command entries;
wenzelm
parents: 51533
diff changeset
    80
51536
a1d324ef12d4 more specific Entry painting;
wenzelm
parents: 51534
diff changeset
    81
  private case class Theory_Entry(name: Document.Node.Name, timing: Double, current: Boolean)
75393
87ebf5a50283 clarified formatting, for the sake of scala3;
wenzelm
parents: 73987
diff changeset
    82
  extends Entry {
59735
24bee1b11fce misc tuning and simplification;
wenzelm
parents: 59319
diff changeset
    83
    def print: String =
24bee1b11fce misc tuning and simplification;
wenzelm
parents: 59319
diff changeset
    84
      Time.print_seconds(timing) + "s theory " + quote(name.theory)
73340
0ffcad1f6130 tuned --- fewer warnings;
wenzelm
parents: 72823
diff changeset
    85
    def follow(snapshot: Document.Snapshot): Unit =
0ffcad1f6130 tuned --- fewer warnings;
wenzelm
parents: 72823
diff changeset
    86
      PIDE.editor.goto_file(true, view, name.node)
51534
123bd97fcea1 mixed theory/command entries;
wenzelm
parents: 51533
diff changeset
    87
  }
123bd97fcea1 mixed theory/command entries;
wenzelm
parents: 51533
diff changeset
    88
75393
87ebf5a50283 clarified formatting, for the sake of scala3;
wenzelm
parents: 73987
diff changeset
    89
  private case class Command_Entry(command: Command, timing: Double)
87ebf5a50283 clarified formatting, for the sake of scala3;
wenzelm
parents: 73987
diff changeset
    90
  extends Entry {
59735
24bee1b11fce misc tuning and simplification;
wenzelm
parents: 59319
diff changeset
    91
    def print: String =
24bee1b11fce misc tuning and simplification;
wenzelm
parents: 59319
diff changeset
    92
      "  " + Time.print_seconds(timing) + "s command " + quote(command.span.name)
73340
0ffcad1f6130 tuned --- fewer warnings;
wenzelm
parents: 72823
diff changeset
    93
    def follow(snapshot: Document.Snapshot): Unit =
0ffcad1f6130 tuned --- fewer warnings;
wenzelm
parents: 72823
diff changeset
    94
      PIDE.editor.hyperlink_command(true, snapshot, command.id).foreach(_.follow(view))
51533
3f6280aedbcc dockable window for timing information;
wenzelm
parents:
diff changeset
    95
  }
3f6280aedbcc dockable window for timing information;
wenzelm
parents:
diff changeset
    96
3f6280aedbcc dockable window for timing information;
wenzelm
parents:
diff changeset
    97
3f6280aedbcc dockable window for timing information;
wenzelm
parents:
diff changeset
    98
  /* timing view */
3f6280aedbcc dockable window for timing information;
wenzelm
parents:
diff changeset
    99
73361
wenzelm
parents: 73359
diff changeset
   100
  private val timing_view = new ListView(List.empty[Entry]) {
51533
3f6280aedbcc dockable window for timing information;
wenzelm
parents:
diff changeset
   101
    listenTo(mouse.clicks)
3f6280aedbcc dockable window for timing information;
wenzelm
parents:
diff changeset
   102
    reactions += {
3f6280aedbcc dockable window for timing information;
wenzelm
parents:
diff changeset
   103
      case MouseClicked(_, point, _, clicks, _) if clicks == 2 =>
3f6280aedbcc dockable window for timing information;
wenzelm
parents:
diff changeset
   104
        val index = peer.locationToIndex(point)
3f6280aedbcc dockable window for timing information;
wenzelm
parents:
diff changeset
   105
        if (index >= 0) listData(index).follow(PIDE.session.snapshot())
3f6280aedbcc dockable window for timing information;
wenzelm
parents:
diff changeset
   106
    }
3f6280aedbcc dockable window for timing information;
wenzelm
parents:
diff changeset
   107
  }
3f6280aedbcc dockable window for timing information;
wenzelm
parents:
diff changeset
   108
  timing_view.peer.setLayoutOrientation(JList.VERTICAL_WRAP)
3f6280aedbcc dockable window for timing information;
wenzelm
parents:
diff changeset
   109
  timing_view.peer.setVisibleRowCount(0)
3f6280aedbcc dockable window for timing information;
wenzelm
parents:
diff changeset
   110
  timing_view.selection.intervalMode = ListView.IntervalMode.Single
3f6280aedbcc dockable window for timing information;
wenzelm
parents:
diff changeset
   111
  timing_view.renderer = new Entry.Renderer
3f6280aedbcc dockable window for timing information;
wenzelm
parents:
diff changeset
   112
3f6280aedbcc dockable window for timing information;
wenzelm
parents:
diff changeset
   113
  set_content(new ScrollPane(timing_view))
3f6280aedbcc dockable window for timing information;
wenzelm
parents:
diff changeset
   114
3f6280aedbcc dockable window for timing information;
wenzelm
parents:
diff changeset
   115
3f6280aedbcc dockable window for timing information;
wenzelm
parents:
diff changeset
   116
  /* timing threshold */
3f6280aedbcc dockable window for timing information;
wenzelm
parents:
diff changeset
   117
3f6280aedbcc dockable window for timing information;
wenzelm
parents:
diff changeset
   118
  private var timing_threshold = PIDE.options.real("jedit_timing_threshold")
3f6280aedbcc dockable window for timing information;
wenzelm
parents:
diff changeset
   119
51549
37211c7c2894 tuned GUI;
wenzelm
parents: 51538
diff changeset
   120
  private val threshold_tooltip = "Threshold for timing display (seconds)"
37211c7c2894 tuned GUI;
wenzelm
parents: 51538
diff changeset
   121
37211c7c2894 tuned GUI;
wenzelm
parents: 51538
diff changeset
   122
  private val threshold_label = new Label("Threshold: ") {
37211c7c2894 tuned GUI;
wenzelm
parents: 51538
diff changeset
   123
    tooltip = threshold_tooltip
37211c7c2894 tuned GUI;
wenzelm
parents: 51538
diff changeset
   124
  }
51533
3f6280aedbcc dockable window for timing information;
wenzelm
parents:
diff changeset
   125
3f6280aedbcc dockable window for timing information;
wenzelm
parents:
diff changeset
   126
  private val threshold_value = new TextField(Time.print_seconds(timing_threshold)) {
3f6280aedbcc dockable window for timing information;
wenzelm
parents:
diff changeset
   127
    reactions += {
51538
637e64effda2 proper input event handling;
wenzelm
parents: 51536
diff changeset
   128
      case _: ValueChanged =>
51533
3f6280aedbcc dockable window for timing information;
wenzelm
parents:
diff changeset
   129
        text match {
63805
c272680df665 clarified modules;
wenzelm
parents: 60893
diff changeset
   130
          case Value.Double(x) if x >= 0.0 => timing_threshold = x
51533
3f6280aedbcc dockable window for timing information;
wenzelm
parents:
diff changeset
   131
          case _ =>
3f6280aedbcc dockable window for timing information;
wenzelm
parents:
diff changeset
   132
        }
3f6280aedbcc dockable window for timing information;
wenzelm
parents:
diff changeset
   133
        handle_update()
3f6280aedbcc dockable window for timing information;
wenzelm
parents:
diff changeset
   134
    }
51549
37211c7c2894 tuned GUI;
wenzelm
parents: 51538
diff changeset
   135
    tooltip = threshold_tooltip
51538
637e64effda2 proper input event handling;
wenzelm
parents: 51536
diff changeset
   136
    verifier = ((s: String) =>
63805
c272680df665 clarified modules;
wenzelm
parents: 60893
diff changeset
   137
      s match { case Value.Double(x) => x >= 0.0 case _ => false })
51533
3f6280aedbcc dockable window for timing information;
wenzelm
parents:
diff changeset
   138
  }
3f6280aedbcc dockable window for timing information;
wenzelm
parents:
diff changeset
   139
66206
2d2082db735a clarified defaults;
wenzelm
parents: 66205
diff changeset
   140
  private val controls = Wrap_Panel(List(threshold_label, threshold_value))
2d2082db735a clarified defaults;
wenzelm
parents: 66205
diff changeset
   141
51533
3f6280aedbcc dockable window for timing information;
wenzelm
parents:
diff changeset
   142
  add(controls.peer, BorderLayout.NORTH)
3f6280aedbcc dockable window for timing information;
wenzelm
parents:
diff changeset
   143
3f6280aedbcc dockable window for timing information;
wenzelm
parents:
diff changeset
   144
57612
990ffb84489b clarified module name: facilitate alternative GUI frameworks;
wenzelm
parents: 56715
diff changeset
   145
  /* component state -- owned by GUI thread */
51533
3f6280aedbcc dockable window for timing information;
wenzelm
parents:
diff changeset
   146
69863
9532d5b2e932 clarified signature: more general types;
wenzelm
parents: 68758
diff changeset
   147
  private var nodes_timing = Map.empty[Document.Node.Name, Document_Status.Overall_Timing]
51534
123bd97fcea1 mixed theory/command entries;
wenzelm
parents: 51533
diff changeset
   148
75393
87ebf5a50283 clarified formatting, for the sake of scala3;
wenzelm
parents: 73987
diff changeset
   149
  private def make_entries(): List[Entry] = {
57612
990ffb84489b clarified module name: facilitate alternative GUI frameworks;
wenzelm
parents: 56715
diff changeset
   150
    GUI_Thread.require {}
51534
123bd97fcea1 mixed theory/command entries;
wenzelm
parents: 51533
diff changeset
   151
123bd97fcea1 mixed theory/command entries;
wenzelm
parents: 51533
diff changeset
   152
    val name =
64882
c3b42ac0cf81 tuned signature;
wenzelm
parents: 64854
diff changeset
   153
      Document_View.get(view.getTextArea) match {
51534
123bd97fcea1 mixed theory/command entries;
wenzelm
parents: 51533
diff changeset
   154
        case None => Document.Node.Name.empty
52973
d5f7fa1498b7 tuned signature;
wenzelm
parents: 52888
diff changeset
   155
        case Some(doc_view) => doc_view.model.node_name
51534
123bd97fcea1 mixed theory/command entries;
wenzelm
parents: 51533
diff changeset
   156
      }
69863
9532d5b2e932 clarified signature: more general types;
wenzelm
parents: 68758
diff changeset
   157
    val timing = nodes_timing.getOrElse(name, Document_Status.Overall_Timing.empty)
51534
123bd97fcea1 mixed theory/command entries;
wenzelm
parents: 51533
diff changeset
   158
123bd97fcea1 mixed theory/command entries;
wenzelm
parents: 51533
diff changeset
   159
    val theories =
69863
9532d5b2e932 clarified signature: more general types;
wenzelm
parents: 68758
diff changeset
   160
      (for ((node_name, node_timing) <- nodes_timing.toList if node_timing.command_timings.nonEmpty)
51536
a1d324ef12d4 more specific Entry painting;
wenzelm
parents: 51534
diff changeset
   161
        yield Theory_Entry(node_name, node_timing.total, false)).sorted(Entry.Ordering)
51534
123bd97fcea1 mixed theory/command entries;
wenzelm
parents: 51533
diff changeset
   162
    val commands =
69863
9532d5b2e932 clarified signature: more general types;
wenzelm
parents: 68758
diff changeset
   163
      (for ((command, command_timing) <- timing.command_timings.toList)
51534
123bd97fcea1 mixed theory/command entries;
wenzelm
parents: 51533
diff changeset
   164
        yield Command_Entry(command, command_timing)).sorted(Entry.Ordering)
123bd97fcea1 mixed theory/command entries;
wenzelm
parents: 51533
diff changeset
   165
51536
a1d324ef12d4 more specific Entry painting;
wenzelm
parents: 51534
diff changeset
   166
    theories.flatMap(entry =>
a1d324ef12d4 more specific Entry painting;
wenzelm
parents: 51534
diff changeset
   167
      if (entry.name == name) entry.copy(current = true) :: commands
a1d324ef12d4 more specific Entry painting;
wenzelm
parents: 51534
diff changeset
   168
      else List(entry))
51534
123bd97fcea1 mixed theory/command entries;
wenzelm
parents: 51533
diff changeset
   169
  }
51533
3f6280aedbcc dockable window for timing information;
wenzelm
parents:
diff changeset
   170
75393
87ebf5a50283 clarified formatting, for the sake of scala3;
wenzelm
parents: 73987
diff changeset
   171
  private def handle_update(restriction: Option[Set[Document.Node.Name]] = None): Unit = {
57612
990ffb84489b clarified module name: facilitate alternative GUI frameworks;
wenzelm
parents: 56715
diff changeset
   172
    GUI_Thread.require {}
53177
dcac8d837b9c more uniform treatment of Swing_Thread context switch: prefer asynchronous Swing_Thread.later from actor;
wenzelm
parents: 52980
diff changeset
   173
dcac8d837b9c more uniform treatment of Swing_Thread context switch: prefer asynchronous Swing_Thread.later from actor;
wenzelm
parents: 52980
diff changeset
   174
    val snapshot = PIDE.session.snapshot()
51533
3f6280aedbcc dockable window for timing information;
wenzelm
parents:
diff changeset
   175
73358
78aa7846e91f tuned --- fewer warnings;
wenzelm
parents: 73340
diff changeset
   176
    val nodes_timing1 =
78aa7846e91f tuned --- fewer warnings;
wenzelm
parents: 73340
diff changeset
   177
      (restriction match {
72823
ab1a49ac456b tuned signature;
wenzelm
parents: 69864
diff changeset
   178
        case Some(names) => names.iterator.map(name => (name, snapshot.get_node(name)))
56372
fadb0fef09d7 more explicit iterator terminology, in accordance to Scala 2.8 library;
wenzelm
parents: 56208
diff changeset
   179
        case None => snapshot.version.nodes.iterator
73359
d8a0e996614b tuned --- fewer warnings;
wenzelm
parents: 73358
diff changeset
   180
      }).foldLeft(nodes_timing) {
d8a0e996614b tuned --- fewer warnings;
wenzelm
parents: 73358
diff changeset
   181
          case (timing1, (name, node)) =>
73358
78aa7846e91f tuned --- fewer warnings;
wenzelm
parents: 73340
diff changeset
   182
            if (PIDE.resources.session_base.loaded_theory(name)) timing1
78aa7846e91f tuned --- fewer warnings;
wenzelm
parents: 73340
diff changeset
   183
            else {
78aa7846e91f tuned --- fewer warnings;
wenzelm
parents: 73340
diff changeset
   184
              val node_timing =
78aa7846e91f tuned --- fewer warnings;
wenzelm
parents: 73340
diff changeset
   185
                Document_Status.Overall_Timing.make(
78aa7846e91f tuned --- fewer warnings;
wenzelm
parents: 73340
diff changeset
   186
                  snapshot.state, snapshot.version, node.commands, threshold = timing_threshold)
78aa7846e91f tuned --- fewer warnings;
wenzelm
parents: 73340
diff changeset
   187
              timing1 + (name -> node_timing)
78aa7846e91f tuned --- fewer warnings;
wenzelm
parents: 73340
diff changeset
   188
            }
73359
d8a0e996614b tuned --- fewer warnings;
wenzelm
parents: 73358
diff changeset
   189
        }
53177
dcac8d837b9c more uniform treatment of Swing_Thread context switch: prefer asynchronous Swing_Thread.later from actor;
wenzelm
parents: 52980
diff changeset
   190
    nodes_timing = nodes_timing1
51533
3f6280aedbcc dockable window for timing information;
wenzelm
parents:
diff changeset
   191
53177
dcac8d837b9c more uniform treatment of Swing_Thread context switch: prefer asynchronous Swing_Thread.later from actor;
wenzelm
parents: 52980
diff changeset
   192
    val entries = make_entries()
dcac8d837b9c more uniform treatment of Swing_Thread context switch: prefer asynchronous Swing_Thread.later from actor;
wenzelm
parents: 52980
diff changeset
   193
    if (timing_view.listData.toList != entries) timing_view.listData = entries
51533
3f6280aedbcc dockable window for timing information;
wenzelm
parents:
diff changeset
   194
  }
3f6280aedbcc dockable window for timing information;
wenzelm
parents:
diff changeset
   195
3f6280aedbcc dockable window for timing information;
wenzelm
parents:
diff changeset
   196
56715
52125652e82a clarified Session.Consumer, with Session.Outlet managed by dispatcher thread;
wenzelm
parents: 56662
diff changeset
   197
  /* main */
51533
3f6280aedbcc dockable window for timing information;
wenzelm
parents:
diff changeset
   198
56715
52125652e82a clarified Session.Consumer, with Session.Outlet managed by dispatcher thread;
wenzelm
parents: 56662
diff changeset
   199
  private val main =
52125652e82a clarified Session.Consumer, with Session.Outlet managed by dispatcher thread;
wenzelm
parents: 56662
diff changeset
   200
    Session.Consumer[Session.Commands_Changed](getClass.getName) {
52125652e82a clarified Session.Consumer, with Session.Outlet managed by dispatcher thread;
wenzelm
parents: 56662
diff changeset
   201
      case changed =>
57612
990ffb84489b clarified module name: facilitate alternative GUI frameworks;
wenzelm
parents: 56715
diff changeset
   202
        GUI_Thread.later { handle_update(Some(changed.nodes)) }
51533
3f6280aedbcc dockable window for timing information;
wenzelm
parents:
diff changeset
   203
    }
3f6280aedbcc dockable window for timing information;
wenzelm
parents:
diff changeset
   204
75393
87ebf5a50283 clarified formatting, for the sake of scala3;
wenzelm
parents: 73987
diff changeset
   205
  override def init(): Unit = {
56715
52125652e82a clarified Session.Consumer, with Session.Outlet managed by dispatcher thread;
wenzelm
parents: 56662
diff changeset
   206
    PIDE.session.commands_changed += main
51533
3f6280aedbcc dockable window for timing information;
wenzelm
parents:
diff changeset
   207
    handle_update()
3f6280aedbcc dockable window for timing information;
wenzelm
parents:
diff changeset
   208
  }
3f6280aedbcc dockable window for timing information;
wenzelm
parents:
diff changeset
   209
75393
87ebf5a50283 clarified formatting, for the sake of scala3;
wenzelm
parents: 73987
diff changeset
   210
  override def exit(): Unit = {
56715
52125652e82a clarified Session.Consumer, with Session.Outlet managed by dispatcher thread;
wenzelm
parents: 56662
diff changeset
   211
    PIDE.session.commands_changed -= main
51533
3f6280aedbcc dockable window for timing information;
wenzelm
parents:
diff changeset
   212
  }
3f6280aedbcc dockable window for timing information;
wenzelm
parents:
diff changeset
   213
}