ProcessMonitor.st
author claus
Fri, 28 Oct 1994 04:31:16 +0100
changeset 49 6fe62433cfa3
parent 45 950b84ba89e6
child 52 7b48409ae088
permissions -rw-r--r--
*** empty log message ***
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
19
4cde336c0794 Initial revision
claus
parents:
diff changeset
     1
StandardSystemView subclass:#ProcessMonitor
45
950b84ba89e6 *** empty log message ***
claus
parents: 19
diff changeset
     2
	 instanceVariableNames:'listView processes listUpdateDelay updateDelay 
950b84ba89e6 *** empty log message ***
claus
parents: 19
diff changeset
     3
				updateBlock listUpdateBlock updateProcess hideDead
950b84ba89e6 *** empty log message ***
claus
parents: 19
diff changeset
     4
				runColor suspendedColor waitColor'
950b84ba89e6 *** empty log message ***
claus
parents: 19
diff changeset
     5
	 classVariableNames:''
950b84ba89e6 *** empty log message ***
claus
parents: 19
diff changeset
     6
	 poolDictionaries:''
950b84ba89e6 *** empty log message ***
claus
parents: 19
diff changeset
     7
	 category:'Interface-Tools'
19
4cde336c0794 Initial revision
claus
parents:
diff changeset
     8
!
4cde336c0794 Initial revision
claus
parents:
diff changeset
     9
4cde336c0794 Initial revision
claus
parents:
diff changeset
    10
!ProcessMonitor class methodsFor:'startup'!
4cde336c0794 Initial revision
claus
parents:
diff changeset
    11
45
950b84ba89e6 *** empty log message ***
claus
parents: 19
diff changeset
    12
open
19
4cde336c0794 Initial revision
claus
parents:
diff changeset
    13
    |m|
4cde336c0794 Initial revision
claus
parents:
diff changeset
    14
4cde336c0794 Initial revision
claus
parents:
diff changeset
    15
    m := self new.
4cde336c0794 Initial revision
claus
parents:
diff changeset
    16
    m label:'Process Monitor'.
4cde336c0794 Initial revision
claus
parents:
diff changeset
    17
    m icon:(Form fromFile:'PMonitor.icon' resolution:100).
4cde336c0794 Initial revision
claus
parents:
diff changeset
    18
    m minExtent:(100 @ 100).
4cde336c0794 Initial revision
claus
parents:
diff changeset
    19
4cde336c0794 Initial revision
claus
parents:
diff changeset
    20
    m open.
4cde336c0794 Initial revision
claus
parents:
diff changeset
    21
    ^ m
4cde336c0794 Initial revision
claus
parents:
diff changeset
    22
45
950b84ba89e6 *** empty log message ***
claus
parents: 19
diff changeset
    23
    "
950b84ba89e6 *** empty log message ***
claus
parents: 19
diff changeset
    24
     ProcessMonitor open
950b84ba89e6 *** empty log message ***
claus
parents: 19
diff changeset
    25
    "
19
4cde336c0794 Initial revision
claus
parents:
diff changeset
    26
! !
4cde336c0794 Initial revision
claus
parents:
diff changeset
    27
4cde336c0794 Initial revision
claus
parents:
diff changeset
    28
!ProcessMonitor methodsFor:'initialization'!
4cde336c0794 Initial revision
claus
parents:
diff changeset
    29
4cde336c0794 Initial revision
claus
parents:
diff changeset
    30
initialize
45
950b84ba89e6 *** empty log message ***
claus
parents: 19
diff changeset
    31
    |v menu|
19
4cde336c0794 Initial revision
claus
parents:
diff changeset
    32
4cde336c0794 Initial revision
claus
parents:
diff changeset
    33
    super initialize.
4cde336c0794 Initial revision
claus
parents:
diff changeset
    34
45
950b84ba89e6 *** empty log message ***
claus
parents: 19
diff changeset
    35
    hideDead := true.
950b84ba89e6 *** empty log message ***
claus
parents: 19
diff changeset
    36
950b84ba89e6 *** empty log message ***
claus
parents: 19
diff changeset
    37
    self extent:(font widthOf:'name/id                       state     prio   usedStack  maxStack')
950b84ba89e6 *** empty log message ***
claus
parents: 19
diff changeset
    38
		+ 40 @
950b84ba89e6 *** empty log message ***
claus
parents: 19
diff changeset
    39
		100.
19
4cde336c0794 Initial revision
claus
parents:
diff changeset
    40
4cde336c0794 Initial revision
claus
parents:
diff changeset
    41
    v := ScrollableView for:SelectionInListView in:self.
4cde336c0794 Initial revision
claus
parents:
diff changeset
    42
    v origin:0.0@0.0 corner:1.0@1.0.
4cde336c0794 Initial revision
claus
parents:
diff changeset
    43
    listView := v scrolledView.
4cde336c0794 Initial revision
claus
parents:
diff changeset
    44
    listView font:font.
45
950b84ba89e6 *** empty log message ***
claus
parents: 19
diff changeset
    45
    menu := (PopUpMenu 
950b84ba89e6 *** empty log message ***
claus
parents: 19
diff changeset
    46
		labels:#(
950b84ba89e6 *** empty log message ***
claus
parents: 19
diff changeset
    47
"/ hideDead functionality no longer needed; 
950b84ba89e6 *** empty log message ***
claus
parents: 19
diff changeset
    48
"/ since ProcSched knownProcesses only returns living ones
950b84ba89e6 *** empty log message ***
claus
parents: 19
diff changeset
    49
"/
950b84ba89e6 *** empty log message ***
claus
parents: 19
diff changeset
    50
"/                         '\c hide dead'
950b84ba89e6 *** empty log message ***
claus
parents: 19
diff changeset
    51
"/                         '-'
950b84ba89e6 *** empty log message ***
claus
parents: 19
diff changeset
    52
			 'inspect' 
950b84ba89e6 *** empty log message ***
claus
parents: 19
diff changeset
    53
			 'debug'  
950b84ba89e6 *** empty log message ***
claus
parents: 19
diff changeset
    54
			 '-'  
950b84ba89e6 *** empty log message ***
claus
parents: 19
diff changeset
    55
			 'resume'  
950b84ba89e6 *** empty log message ***
claus
parents: 19
diff changeset
    56
			 'suspend'  
950b84ba89e6 *** empty log message ***
claus
parents: 19
diff changeset
    57
			 'terminate'
950b84ba89e6 *** empty log message ***
claus
parents: 19
diff changeset
    58
			 '-'  
950b84ba89e6 *** empty log message ***
claus
parents: 19
diff changeset
    59
			 'raise prio'  
950b84ba89e6 *** empty log message ***
claus
parents: 19
diff changeset
    60
			 'lower prio'  
950b84ba89e6 *** empty log message ***
claus
parents: 19
diff changeset
    61
			)
950b84ba89e6 *** empty log message ***
claus
parents: 19
diff changeset
    62
	     selectors:#(
950b84ba89e6 *** empty log message ***
claus
parents: 19
diff changeset
    63
"/                         hideDead:
950b84ba89e6 *** empty log message ***
claus
parents: 19
diff changeset
    64
"/                         nil
950b84ba89e6 *** empty log message ***
claus
parents: 19
diff changeset
    65
			 inspectProcess  
950b84ba89e6 *** empty log message ***
claus
parents: 19
diff changeset
    66
			 debugProcess  
950b84ba89e6 *** empty log message ***
claus
parents: 19
diff changeset
    67
			 nil  
950b84ba89e6 *** empty log message ***
claus
parents: 19
diff changeset
    68
			 resumeProcess  
950b84ba89e6 *** empty log message ***
claus
parents: 19
diff changeset
    69
			 suspendProcess  
950b84ba89e6 *** empty log message ***
claus
parents: 19
diff changeset
    70
			 terminateProcess
950b84ba89e6 *** empty log message ***
claus
parents: 19
diff changeset
    71
			 nil  
950b84ba89e6 *** empty log message ***
claus
parents: 19
diff changeset
    72
			 raisePrio
950b84ba89e6 *** empty log message ***
claus
parents: 19
diff changeset
    73
			 lowerPrio
950b84ba89e6 *** empty log message ***
claus
parents: 19
diff changeset
    74
			)
950b84ba89e6 *** empty log message ***
claus
parents: 19
diff changeset
    75
		receiver:self
950b84ba89e6 *** empty log message ***
claus
parents: 19
diff changeset
    76
		     for:listView).
950b84ba89e6 *** empty log message ***
claus
parents: 19
diff changeset
    77
"/    menu checkToggleAt:#hideDead: put:hideDead.
950b84ba89e6 *** empty log message ***
claus
parents: 19
diff changeset
    78
    listView middleButtonMenu:menu. 
950b84ba89e6 *** empty log message ***
claus
parents: 19
diff changeset
    79
19
4cde336c0794 Initial revision
claus
parents:
diff changeset
    80
    listView multipleSelectOk:true.
4cde336c0794 Initial revision
claus
parents:
diff changeset
    81
    listView keyboardHandler:self.
4cde336c0794 Initial revision
claus
parents:
diff changeset
    82
4cde336c0794 Initial revision
claus
parents:
diff changeset
    83
    updateDelay := 0.5.
4cde336c0794 Initial revision
claus
parents:
diff changeset
    84
    listUpdateDelay := 5.
45
950b84ba89e6 *** empty log message ***
claus
parents: 19
diff changeset
    85
950b84ba89e6 *** empty log message ***
claus
parents: 19
diff changeset
    86
    "/ true 
950b84ba89e6 *** empty log message ***
claus
parents: 19
diff changeset
    87
    ProcessorScheduler isPureEventDriven
950b84ba89e6 *** empty log message ***
claus
parents: 19
diff changeset
    88
    ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 19
diff changeset
    89
	updateBlock := [self updateStatus].
950b84ba89e6 *** empty log message ***
claus
parents: 19
diff changeset
    90
	listUpdateBlock := [self updateList].
19
4cde336c0794 Initial revision
claus
parents:
diff changeset
    91
    ].
45
950b84ba89e6 *** empty log message ***
claus
parents: 19
diff changeset
    92
19
4cde336c0794 Initial revision
claus
parents:
diff changeset
    93
    device hasColors ifTrue:[
45
950b84ba89e6 *** empty log message ***
claus
parents: 19
diff changeset
    94
	runColor := Color green.
950b84ba89e6 *** empty log message ***
claus
parents: 19
diff changeset
    95
	suspendedColor := Color yellow.
950b84ba89e6 *** empty log message ***
claus
parents: 19
diff changeset
    96
	waitColor := Color red.
19
4cde336c0794 Initial revision
claus
parents:
diff changeset
    97
    ] ifFalse:[
45
950b84ba89e6 *** empty log message ***
claus
parents: 19
diff changeset
    98
	runColor := suspendedColor := waitColor := Color black
19
4cde336c0794 Initial revision
claus
parents:
diff changeset
    99
    ]
4cde336c0794 Initial revision
claus
parents:
diff changeset
   100
45
950b84ba89e6 *** empty log message ***
claus
parents: 19
diff changeset
   101
    "
950b84ba89e6 *** empty log message ***
claus
parents: 19
diff changeset
   102
     ProcessMonitor open
950b84ba89e6 *** empty log message ***
claus
parents: 19
diff changeset
   103
    "
19
4cde336c0794 Initial revision
claus
parents:
diff changeset
   104
!
4cde336c0794 Initial revision
claus
parents:
diff changeset
   105
4cde336c0794 Initial revision
claus
parents:
diff changeset
   106
realize
4cde336c0794 Initial revision
claus
parents:
diff changeset
   107
    super realize.
45
950b84ba89e6 *** empty log message ***
claus
parents: 19
diff changeset
   108
19
4cde336c0794 Initial revision
claus
parents:
diff changeset
   109
    updateBlock notNil ifTrue:[
45
950b84ba89e6 *** empty log message ***
claus
parents: 19
diff changeset
   110
	Processor addTimedBlock:updateBlock afterSeconds:updateDelay.
950b84ba89e6 *** empty log message ***
claus
parents: 19
diff changeset
   111
	Processor addTimedBlock:listUpdateBlock afterSeconds:listUpdateDelay.
19
4cde336c0794 Initial revision
claus
parents:
diff changeset
   112
    ] ifFalse:[
45
950b84ba89e6 *** empty log message ***
claus
parents: 19
diff changeset
   113
	updateProcess := [
950b84ba89e6 *** empty log message ***
claus
parents: 19
diff changeset
   114
	    "
950b84ba89e6 *** empty log message ***
claus
parents: 19
diff changeset
   115
	     every half second, the status is updated.
950b84ba89e6 *** empty log message ***
claus
parents: 19
diff changeset
   116
	     every 5 seconds, the list of processes is
950b84ba89e6 *** empty log message ***
claus
parents: 19
diff changeset
   117
	     built up again
950b84ba89e6 *** empty log message ***
claus
parents: 19
diff changeset
   118
	    "
950b84ba89e6 *** empty log message ***
claus
parents: 19
diff changeset
   119
	    [true] whileTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 19
diff changeset
   120
		1 to:9 do:[:i |
950b84ba89e6 *** empty log message ***
claus
parents: 19
diff changeset
   121
		    (Delay forSeconds:0.5) wait.
950b84ba89e6 *** empty log message ***
claus
parents: 19
diff changeset
   122
		    self updateStatus.
950b84ba89e6 *** empty log message ***
claus
parents: 19
diff changeset
   123
		].
950b84ba89e6 *** empty log message ***
claus
parents: 19
diff changeset
   124
		(Delay forSeconds:0.5) wait.
950b84ba89e6 *** empty log message ***
claus
parents: 19
diff changeset
   125
		self updateList.
950b84ba89e6 *** empty log message ***
claus
parents: 19
diff changeset
   126
	    ]
950b84ba89e6 *** empty log message ***
claus
parents: 19
diff changeset
   127
	]  forkAt:(Processor userSchedulingPriority + 1).
950b84ba89e6 *** empty log message ***
claus
parents: 19
diff changeset
   128
	updateProcess name:'process update'.
950b84ba89e6 *** empty log message ***
claus
parents: 19
diff changeset
   129
	"
950b84ba89e6 *** empty log message ***
claus
parents: 19
diff changeset
   130
	 raise my own priority
950b84ba89e6 *** empty log message ***
claus
parents: 19
diff changeset
   131
	"
950b84ba89e6 *** empty log message ***
claus
parents: 19
diff changeset
   132
	Processor activeProcess priority:(Processor userSchedulingPriority + 2)
19
4cde336c0794 Initial revision
claus
parents:
diff changeset
   133
    ].
45
950b84ba89e6 *** empty log message ***
claus
parents: 19
diff changeset
   134
    waitColor := waitColor on:device.
950b84ba89e6 *** empty log message ***
claus
parents: 19
diff changeset
   135
    runColor := runColor on:device.
19
4cde336c0794 Initial revision
claus
parents:
diff changeset
   136
    suspendedColor := suspendedColor on:device.
45
950b84ba89e6 *** empty log message ***
claus
parents: 19
diff changeset
   137
!
950b84ba89e6 *** empty log message ***
claus
parents: 19
diff changeset
   138
950b84ba89e6 *** empty log message ***
claus
parents: 19
diff changeset
   139
mapped
950b84ba89e6 *** empty log message ***
claus
parents: 19
diff changeset
   140
    super mapped.
950b84ba89e6 *** empty log message ***
claus
parents: 19
diff changeset
   141
    self updateStatus.
950b84ba89e6 *** empty log message ***
claus
parents: 19
diff changeset
   142
    self updateList.
19
4cde336c0794 Initial revision
claus
parents:
diff changeset
   143
! !
4cde336c0794 Initial revision
claus
parents:
diff changeset
   144
4cde336c0794 Initial revision
claus
parents:
diff changeset
   145
!ProcessMonitor methodsFor:'destroying'!
4cde336c0794 Initial revision
claus
parents:
diff changeset
   146
4cde336c0794 Initial revision
claus
parents:
diff changeset
   147
destroy
4cde336c0794 Initial revision
claus
parents:
diff changeset
   148
    updateBlock notNil ifTrue:[
45
950b84ba89e6 *** empty log message ***
claus
parents: 19
diff changeset
   149
	Processor removeTimedBlock:updateBlock.
950b84ba89e6 *** empty log message ***
claus
parents: 19
diff changeset
   150
	Processor removeTimedBlock:listUpdateBlock.
19
4cde336c0794 Initial revision
claus
parents:
diff changeset
   151
    ] ifFalse:[
45
950b84ba89e6 *** empty log message ***
claus
parents: 19
diff changeset
   152
	updateProcess terminate
19
4cde336c0794 Initial revision
claus
parents:
diff changeset
   153
    ].
4cde336c0794 Initial revision
claus
parents:
diff changeset
   154
    super destroy
4cde336c0794 Initial revision
claus
parents:
diff changeset
   155
! !
4cde336c0794 Initial revision
claus
parents:
diff changeset
   156
45
950b84ba89e6 *** empty log message ***
claus
parents: 19
diff changeset
   157
!ProcessMonitor methodsFor:'private'!
950b84ba89e6 *** empty log message ***
claus
parents: 19
diff changeset
   158
950b84ba89e6 *** empty log message ***
claus
parents: 19
diff changeset
   159
selectedProcessesDo:aBlock
950b84ba89e6 *** empty log message ***
claus
parents: 19
diff changeset
   160
    |p nr sel|
950b84ba89e6 *** empty log message ***
claus
parents: 19
diff changeset
   161
950b84ba89e6 *** empty log message ***
claus
parents: 19
diff changeset
   162
    sel := listView selection.
950b84ba89e6 *** empty log message ***
claus
parents: 19
diff changeset
   163
    sel isNil ifTrue:[^ self].
950b84ba89e6 *** empty log message ***
claus
parents: 19
diff changeset
   164
    (sel isKindOf:Collection) ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 19
diff changeset
   165
	sel do:[:n |
950b84ba89e6 *** empty log message ***
claus
parents: 19
diff changeset
   166
	    nr := n - 2.   "for headlines"
950b84ba89e6 *** empty log message ***
claus
parents: 19
diff changeset
   167
	    nr notNil ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 19
diff changeset
   168
		nr > 0 ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 19
diff changeset
   169
		    p := processes at:nr.
950b84ba89e6 *** empty log message ***
claus
parents: 19
diff changeset
   170
		    p notNil ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 19
diff changeset
   171
		       aBlock value:p
950b84ba89e6 *** empty log message ***
claus
parents: 19
diff changeset
   172
		    ]
950b84ba89e6 *** empty log message ***
claus
parents: 19
diff changeset
   173
		]
950b84ba89e6 *** empty log message ***
claus
parents: 19
diff changeset
   174
	    ]
950b84ba89e6 *** empty log message ***
claus
parents: 19
diff changeset
   175
	]
950b84ba89e6 *** empty log message ***
claus
parents: 19
diff changeset
   176
    ] ifFalse:[
950b84ba89e6 *** empty log message ***
claus
parents: 19
diff changeset
   177
	nr := sel - 2.     "for headlines"
950b84ba89e6 *** empty log message ***
claus
parents: 19
diff changeset
   178
	nr notNil ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 19
diff changeset
   179
	    nr > 0 ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 19
diff changeset
   180
		p := processes at:nr.
950b84ba89e6 *** empty log message ***
claus
parents: 19
diff changeset
   181
		p notNil ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 19
diff changeset
   182
		   aBlock value:p
950b84ba89e6 *** empty log message ***
claus
parents: 19
diff changeset
   183
		]
950b84ba89e6 *** empty log message ***
claus
parents: 19
diff changeset
   184
	    ]
950b84ba89e6 *** empty log message ***
claus
parents: 19
diff changeset
   185
	]
950b84ba89e6 *** empty log message ***
claus
parents: 19
diff changeset
   186
    ].
950b84ba89e6 *** empty log message ***
claus
parents: 19
diff changeset
   187
! !
950b84ba89e6 *** empty log message ***
claus
parents: 19
diff changeset
   188
19
4cde336c0794 Initial revision
claus
parents:
diff changeset
   189
!ProcessMonitor methodsFor:'menu actions'!
4cde336c0794 Initial revision
claus
parents:
diff changeset
   190
45
950b84ba89e6 *** empty log message ***
claus
parents: 19
diff changeset
   191
hideDead:aBoolean
950b84ba89e6 *** empty log message ***
claus
parents: 19
diff changeset
   192
    hideDead := aBoolean
19
4cde336c0794 Initial revision
claus
parents:
diff changeset
   193
!
4cde336c0794 Initial revision
claus
parents:
diff changeset
   194
4cde336c0794 Initial revision
claus
parents:
diff changeset
   195
debugProcess
4cde336c0794 Initial revision
claus
parents:
diff changeset
   196
    self selectedProcessesDo:[:p |
4cde336c0794 Initial revision
claus
parents:
diff changeset
   197
       Debugger openOn:p
4cde336c0794 Initial revision
claus
parents:
diff changeset
   198
    ]
4cde336c0794 Initial revision
claus
parents:
diff changeset
   199
! 
4cde336c0794 Initial revision
claus
parents:
diff changeset
   200
4cde336c0794 Initial revision
claus
parents:
diff changeset
   201
inspectProcess
4cde336c0794 Initial revision
claus
parents:
diff changeset
   202
    self selectedProcessesDo:[:p |
4cde336c0794 Initial revision
claus
parents:
diff changeset
   203
       p inspect
4cde336c0794 Initial revision
claus
parents:
diff changeset
   204
    ]
4cde336c0794 Initial revision
claus
parents:
diff changeset
   205
! 
4cde336c0794 Initial revision
claus
parents:
diff changeset
   206
4cde336c0794 Initial revision
claus
parents:
diff changeset
   207
terminateProcess
4cde336c0794 Initial revision
claus
parents:
diff changeset
   208
    self selectedProcessesDo:[:p |
4cde336c0794 Initial revision
claus
parents:
diff changeset
   209
       p terminate
4cde336c0794 Initial revision
claus
parents:
diff changeset
   210
    ]
4cde336c0794 Initial revision
claus
parents:
diff changeset
   211
! 
4cde336c0794 Initial revision
claus
parents:
diff changeset
   212
4cde336c0794 Initial revision
claus
parents:
diff changeset
   213
resumeProcess
4cde336c0794 Initial revision
claus
parents:
diff changeset
   214
    self selectedProcessesDo:[:p |
4cde336c0794 Initial revision
claus
parents:
diff changeset
   215
       p resume
4cde336c0794 Initial revision
claus
parents:
diff changeset
   216
    ]
4cde336c0794 Initial revision
claus
parents:
diff changeset
   217
! 
4cde336c0794 Initial revision
claus
parents:
diff changeset
   218
4cde336c0794 Initial revision
claus
parents:
diff changeset
   219
suspendProcess
4cde336c0794 Initial revision
claus
parents:
diff changeset
   220
    self selectedProcessesDo:[:p |
4cde336c0794 Initial revision
claus
parents:
diff changeset
   221
       p suspend
4cde336c0794 Initial revision
claus
parents:
diff changeset
   222
    ]
45
950b84ba89e6 *** empty log message ***
claus
parents: 19
diff changeset
   223
! 
950b84ba89e6 *** empty log message ***
claus
parents: 19
diff changeset
   224
950b84ba89e6 *** empty log message ***
claus
parents: 19
diff changeset
   225
raisePrio
950b84ba89e6 *** empty log message ***
claus
parents: 19
diff changeset
   226
    self selectedProcessesDo:[:p |
950b84ba89e6 *** empty log message ***
claus
parents: 19
diff changeset
   227
       p priority:(p priority + 1)
950b84ba89e6 *** empty log message ***
claus
parents: 19
diff changeset
   228
    ]
950b84ba89e6 *** empty log message ***
claus
parents: 19
diff changeset
   229
! 
950b84ba89e6 *** empty log message ***
claus
parents: 19
diff changeset
   230
950b84ba89e6 *** empty log message ***
claus
parents: 19
diff changeset
   231
lowerPrio
950b84ba89e6 *** empty log message ***
claus
parents: 19
diff changeset
   232
    self selectedProcessesDo:[:p |
950b84ba89e6 *** empty log message ***
claus
parents: 19
diff changeset
   233
       p priority:(p priority - 1)
950b84ba89e6 *** empty log message ***
claus
parents: 19
diff changeset
   234
    ]
19
4cde336c0794 Initial revision
claus
parents:
diff changeset
   235
! !
4cde336c0794 Initial revision
claus
parents:
diff changeset
   236
4cde336c0794 Initial revision
claus
parents:
diff changeset
   237
!ProcessMonitor methodsFor:'events'!
4cde336c0794 Initial revision
claus
parents:
diff changeset
   238
4cde336c0794 Initial revision
claus
parents:
diff changeset
   239
canHandle:key
4cde336c0794 Initial revision
claus
parents:
diff changeset
   240
    ^ key == #InspectIt
4cde336c0794 Initial revision
claus
parents:
diff changeset
   241
!
4cde336c0794 Initial revision
claus
parents:
diff changeset
   242
4cde336c0794 Initial revision
claus
parents:
diff changeset
   243
keyPress:key x:x y:y
4cde336c0794 Initial revision
claus
parents:
diff changeset
   244
    key == #InspectIt ifTrue:[
45
950b84ba89e6 *** empty log message ***
claus
parents: 19
diff changeset
   245
	^ self inspectProcess.
19
4cde336c0794 Initial revision
claus
parents:
diff changeset
   246
    ].
4cde336c0794 Initial revision
claus
parents:
diff changeset
   247
    ^ super keyPress:key x:x y:y
4cde336c0794 Initial revision
claus
parents:
diff changeset
   248
! !
4cde336c0794 Initial revision
claus
parents:
diff changeset
   249
4cde336c0794 Initial revision
claus
parents:
diff changeset
   250
!ProcessMonitor methodsFor:'drawing'!
4cde336c0794 Initial revision
claus
parents:
diff changeset
   251
4cde336c0794 Initial revision
claus
parents:
diff changeset
   252
updateList
4cde336c0794 Initial revision
claus
parents:
diff changeset
   253
    "update list of processes"
4cde336c0794 Initial revision
claus
parents:
diff changeset
   254
4cde336c0794 Initial revision
claus
parents:
diff changeset
   255
    |newList|
4cde336c0794 Initial revision
claus
parents:
diff changeset
   256
45
950b84ba89e6 *** empty log message ***
claus
parents: 19
diff changeset
   257
    shown ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 19
diff changeset
   258
	(Smalltalk at:#SystemDebugging ifAbsent:[false]) ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 19
diff changeset
   259
	    newList := Process allInstances.
950b84ba89e6 *** empty log message ***
claus
parents: 19
diff changeset
   260
	] ifFalse:[
950b84ba89e6 *** empty log message ***
claus
parents: 19
diff changeset
   261
	    newList := ProcessorScheduler knownProcesses asOrderedCollection.
950b84ba89e6 *** empty log message ***
claus
parents: 19
diff changeset
   262
	].
950b84ba89e6 *** empty log message ***
claus
parents: 19
diff changeset
   263
950b84ba89e6 *** empty log message ***
claus
parents: 19
diff changeset
   264
	"sort by id - take care of nil ids of dead processes"
950b84ba89e6 *** empty log message ***
claus
parents: 19
diff changeset
   265
	newList sort:[:p1 :p2 |
950b84ba89e6 *** empty log message ***
claus
parents: 19
diff changeset
   266
			 |id1 id2|
19
4cde336c0794 Initial revision
claus
parents:
diff changeset
   267
45
950b84ba89e6 *** empty log message ***
claus
parents: 19
diff changeset
   268
			 (p1 isNil or:[(id1 := p1 id) isNil])
950b84ba89e6 *** empty log message ***
claus
parents: 19
diff changeset
   269
			     ifTrue:[true]
950b84ba89e6 *** empty log message ***
claus
parents: 19
diff changeset
   270
			     ifFalse:[
950b84ba89e6 *** empty log message ***
claus
parents: 19
diff changeset
   271
				 (p2 isNil or:[(id2 := p2 id) isNil])
950b84ba89e6 *** empty log message ***
claus
parents: 19
diff changeset
   272
				     ifTrue:[false]
950b84ba89e6 *** empty log message ***
claus
parents: 19
diff changeset
   273
				     ifFalse:[id1 < id2]
950b84ba89e6 *** empty log message ***
claus
parents: 19
diff changeset
   274
			 ]
950b84ba89e6 *** empty log message ***
claus
parents: 19
diff changeset
   275
		     ].
950b84ba89e6 *** empty log message ***
claus
parents: 19
diff changeset
   276
	newList ~= processes ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 19
diff changeset
   277
	    processes := WeakArray withAll:newList.
950b84ba89e6 *** empty log message ***
claus
parents: 19
diff changeset
   278
	    self updateStatus
950b84ba89e6 *** empty log message ***
claus
parents: 19
diff changeset
   279
	].
19
4cde336c0794 Initial revision
claus
parents:
diff changeset
   280
    ].
4cde336c0794 Initial revision
claus
parents:
diff changeset
   281
    updateBlock notNil ifTrue:[
45
950b84ba89e6 *** empty log message ***
claus
parents: 19
diff changeset
   282
	Processor addTimedBlock:listUpdateBlock afterSeconds:listUpdateDelay
19
4cde336c0794 Initial revision
claus
parents:
diff changeset
   283
    ].
4cde336c0794 Initial revision
claus
parents:
diff changeset
   284
!
4cde336c0794 Initial revision
claus
parents:
diff changeset
   285
4cde336c0794 Initial revision
claus
parents:
diff changeset
   286
updateStatus
4cde336c0794 Initial revision
claus
parents:
diff changeset
   287
    "update status display of processes"
4cde336c0794 Initial revision
claus
parents:
diff changeset
   288
49
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
   289
    |oldList list line dIndex con interrupted|
19
4cde336c0794 Initial revision
claus
parents:
diff changeset
   290
45
950b84ba89e6 *** empty log message ***
claus
parents: 19
diff changeset
   291
    shown ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 19
diff changeset
   292
	oldList := listView list.
950b84ba89e6 *** empty log message ***
claus
parents: 19
diff changeset
   293
	processes notNil ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 19
diff changeset
   294
	    list := OrderedCollection new.
49
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
   295
	    list add:'id   name                     state    prio   usedStack  totalStack'.
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
   296
	    list add:'-------------------------------------------------------------------'.
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
   297
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
   298
	    interrupted := Processor interruptedProcess.
19
4cde336c0794 Initial revision
claus
parents:
diff changeset
   299
45
950b84ba89e6 *** empty log message ***
claus
parents: 19
diff changeset
   300
	    dIndex := 1.
950b84ba89e6 *** empty log message ***
claus
parents: 19
diff changeset
   301
	    1 to:processes size do:[:index |
49
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
   302
		|aProcess nm st|
19
4cde336c0794 Initial revision
claus
parents:
diff changeset
   303
45
950b84ba89e6 *** empty log message ***
claus
parents: 19
diff changeset
   304
		aProcess := processes at:index.
950b84ba89e6 *** empty log message ***
claus
parents: 19
diff changeset
   305
		aProcess notNil ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 19
diff changeset
   306
		    (aProcess id notNil or:[hideDead not]) ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 19
diff changeset
   307
			line := aProcess id printStringPaddedTo:5.
950b84ba89e6 *** empty log message ***
claus
parents: 19
diff changeset
   308
			(nm := aProcess name) isNil ifFalse:[
950b84ba89e6 *** empty log message ***
claus
parents: 19
diff changeset
   309
			    nm := nm printString
950b84ba89e6 *** empty log message ***
claus
parents: 19
diff changeset
   310
			] ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 19
diff changeset
   311
			    nm := ' '
950b84ba89e6 *** empty log message ***
claus
parents: 19
diff changeset
   312
			].
49
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
   313
			nm size >= 24 ifTrue:[
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
   314
			    nm := (nm copyTo:23) , ' '
45
950b84ba89e6 *** empty log message ***
claus
parents: 19
diff changeset
   315
			] ifFalse:[
49
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
   316
			    nm := (nm printStringPaddedTo:24).
45
950b84ba89e6 *** empty log message ***
claus
parents: 19
diff changeset
   317
			].
950b84ba89e6 *** empty log message ***
claus
parents: 19
diff changeset
   318
			line := line , nm.
49
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
   319
			st := aProcess state.
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
   320
			(st == #run
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
   321
			 and:[aProcess == interrupted]) ifTrue:[
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
   322
			    line := line , '*' , (st printStringPaddedTo:9).
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
   323
			] ifFalse:[
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
   324
			    line := line , ' ' , (st printStringPaddedTo:9).
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
   325
			].
45
950b84ba89e6 *** empty log message ***
claus
parents: 19
diff changeset
   326
			line := line , (aProcess priority printStringLeftPaddedTo:3).
950b84ba89e6 *** empty log message ***
claus
parents: 19
diff changeset
   327
			line := line , (aProcess usedStackSize printStringLeftPaddedTo:11).
950b84ba89e6 *** empty log message ***
claus
parents: 19
diff changeset
   328
			line := line , (aProcess totalStackSize printStringLeftPaddedTo:10).
49
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
   329
			line := line , '(' , aProcess numberOfStackSegments printString , ')'.
45
950b84ba89e6 *** empty log message ***
claus
parents: 19
diff changeset
   330
			(Smalltalk at:#SystemDebugging ifAbsent:[false]) ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 19
diff changeset
   331
			    con := aProcess suspendedContext.
950b84ba89e6 *** empty log message ***
claus
parents: 19
diff changeset
   332
			    con isNil ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 19
diff changeset
   333
				aProcess == Processor activeProcess ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 19
diff changeset
   334
				    con := thisContext
950b84ba89e6 *** empty log message ***
claus
parents: 19
diff changeset
   335
				]
950b84ba89e6 *** empty log message ***
claus
parents: 19
diff changeset
   336
			    ].
950b84ba89e6 *** empty log message ***
claus
parents: 19
diff changeset
   337
			    con notNil ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 19
diff changeset
   338
				line := line , '    '.
950b84ba89e6 *** empty log message ***
claus
parents: 19
diff changeset
   339
				line := line , ((ObjectMemory addressOf:con) printStringRadix:16).
950b84ba89e6 *** empty log message ***
claus
parents: 19
diff changeset
   340
				line := line , ' .. '.
950b84ba89e6 *** empty log message ***
claus
parents: 19
diff changeset
   341
				[con sender notNil] whileTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 19
diff changeset
   342
				    con := con sender
950b84ba89e6 *** empty log message ***
claus
parents: 19
diff changeset
   343
				].
950b84ba89e6 *** empty log message ***
claus
parents: 19
diff changeset
   344
				line := line , ((ObjectMemory addressOf:con) printStringRadix:16).
950b84ba89e6 *** empty log message ***
claus
parents: 19
diff changeset
   345
			    ]
950b84ba89e6 *** empty log message ***
claus
parents: 19
diff changeset
   346
			].
950b84ba89e6 *** empty log message ***
claus
parents: 19
diff changeset
   347
			list add:line.
950b84ba89e6 *** empty log message ***
claus
parents: 19
diff changeset
   348
			processes at:dIndex put:aProcess.
950b84ba89e6 *** empty log message ***
claus
parents: 19
diff changeset
   349
			dIndex := dIndex + 1
950b84ba89e6 *** empty log message ***
claus
parents: 19
diff changeset
   350
		    ]
950b84ba89e6 *** empty log message ***
claus
parents: 19
diff changeset
   351
		].
950b84ba89e6 *** empty log message ***
claus
parents: 19
diff changeset
   352
	    ].
950b84ba89e6 *** empty log message ***
claus
parents: 19
diff changeset
   353
	    dIndex to:processes size do:[:index |
950b84ba89e6 *** empty log message ***
claus
parents: 19
diff changeset
   354
		processes at:index put:nil
950b84ba89e6 *** empty log message ***
claus
parents: 19
diff changeset
   355
	    ]
950b84ba89e6 *** empty log message ***
claus
parents: 19
diff changeset
   356
	].
950b84ba89e6 *** empty log message ***
claus
parents: 19
diff changeset
   357
	list ~= oldList ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 19
diff changeset
   358
	    "avoid flicker"
950b84ba89e6 *** empty log message ***
claus
parents: 19
diff changeset
   359
	    oldList size == list size ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 19
diff changeset
   360
		list keysAndValuesDo:[:idx :entry |
950b84ba89e6 *** empty log message ***
claus
parents: 19
diff changeset
   361
		    (oldList at:idx) ~= entry ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 19
diff changeset
   362
			listView at:idx put:entry
950b84ba89e6 *** empty log message ***
claus
parents: 19
diff changeset
   363
		    ]
950b84ba89e6 *** empty log message ***
claus
parents: 19
diff changeset
   364
		]
950b84ba89e6 *** empty log message ***
claus
parents: 19
diff changeset
   365
	    ] ifFalse:[
950b84ba89e6 *** empty log message ***
claus
parents: 19
diff changeset
   366
		listView setList:list.
49
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
   367
		"the first two entries cannot be selected"
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
   368
		listView attributeAt:1 put:#disabled.
6fe62433cfa3 *** empty log message ***
claus
parents: 45
diff changeset
   369
		listView attributeAt:2 put:#disabled.
45
950b84ba89e6 *** empty log message ***
claus
parents: 19
diff changeset
   370
	    ]
950b84ba89e6 *** empty log message ***
claus
parents: 19
diff changeset
   371
	].
19
4cde336c0794 Initial revision
claus
parents:
diff changeset
   372
    ].
4cde336c0794 Initial revision
claus
parents:
diff changeset
   373
    updateBlock notNil ifTrue:[
45
950b84ba89e6 *** empty log message ***
claus
parents: 19
diff changeset
   374
	Processor addTimedBlock:updateBlock afterSeconds:updateDelay
19
4cde336c0794 Initial revision
claus
parents:
diff changeset
   375
    ]
4cde336c0794 Initial revision
claus
parents:
diff changeset
   376
! !