.
authorclaus
Thu, 03 Aug 1995 03:38:05 +0200
changeset 109 c23841df3616
parent 108 a936f81cc162
child 110 570a38362ae1
.
BrowserView.st
BrwsrView.st
Launcher.st
MemMonitor.st
MemoryMonitor.st
ProcMonitor.st
ProcessMonitor.st
--- a/BrowserView.st	Sun Jul 23 05:19:48 1995 +0200
+++ b/BrowserView.st	Thu Aug 03 03:38:05 1995 +0200
@@ -29,7 +29,7 @@
 COPYRIGHT (c) 1989 by Claus Gittinger
 	     All Rights Reserved
 
-$Header: /cvs/stx/stx/libtool/BrowserView.st,v 1.12 1995-07-23 03:18:32 claus Exp $
+$Header: /cvs/stx/stx/libtool/BrowserView.st,v 1.13 1995-08-03 01:37:22 claus Exp $
 '!
 
 !BrowserView class methodsFor:'documentation'!
@@ -50,7 +50,7 @@
 
 version
 "
-$Header: /cvs/stx/stx/libtool/BrowserView.st,v 1.12 1995-07-23 03:18:32 claus Exp $
+$Header: /cvs/stx/stx/libtool/BrowserView.st,v 1.13 1995-08-03 01:37:22 claus Exp $
 "
 !
 
@@ -5081,7 +5081,7 @@
     ((values size == 1) 
     or:[classes size == 1 and:[classes first == UndefinedObject]]) ifTrue:[
 	values size == 1 ifTrue:[value := values first].
-	(value isNumber or:[value isKindOf:String]) ifTrue:[
+	(value isNumber or:[value isString]) ifTrue:[
 	    msg := msg , 'is always the same:\\      ' , 
 			 value class name , ' (' , value storeString , ')'.
 	] ifFalse:[
--- a/BrwsrView.st	Sun Jul 23 05:19:48 1995 +0200
+++ b/BrwsrView.st	Thu Aug 03 03:38:05 1995 +0200
@@ -29,7 +29,7 @@
 COPYRIGHT (c) 1989 by Claus Gittinger
 	     All Rights Reserved
 
-$Header: /cvs/stx/stx/libtool/Attic/BrwsrView.st,v 1.12 1995-07-23 03:18:32 claus Exp $
+$Header: /cvs/stx/stx/libtool/Attic/BrwsrView.st,v 1.13 1995-08-03 01:37:22 claus Exp $
 '!
 
 !BrowserView class methodsFor:'documentation'!
@@ -50,7 +50,7 @@
 
 version
 "
-$Header: /cvs/stx/stx/libtool/Attic/BrwsrView.st,v 1.12 1995-07-23 03:18:32 claus Exp $
+$Header: /cvs/stx/stx/libtool/Attic/BrwsrView.st,v 1.13 1995-08-03 01:37:22 claus Exp $
 "
 !
 
@@ -5081,7 +5081,7 @@
     ((values size == 1) 
     or:[classes size == 1 and:[classes first == UndefinedObject]]) ifTrue:[
 	values size == 1 ifTrue:[value := values first].
-	(value isNumber or:[value isKindOf:String]) ifTrue:[
+	(value isNumber or:[value isString]) ifTrue:[
 	    msg := msg , 'is always the same:\\      ' , 
 			 value class name , ' (' , value storeString , ')'.
 	] ifFalse:[
--- a/Launcher.st	Sun Jul 23 05:19:48 1995 +0200
+++ b/Launcher.st	Thu Aug 03 03:38:05 1995 +0200
@@ -37,7 +37,7 @@
 
 version
 "
-$Header: /cvs/stx/stx/libtool/Launcher.st,v 1.19 1995-07-23 03:19:33 claus Exp $
+$Header: /cvs/stx/stx/libtool/Launcher.st,v 1.20 1995-08-03 01:37:59 claus Exp $
 "
 !
 
@@ -1020,7 +1020,7 @@
     macroTextView origin:0.0@0.6 corner:1.0@1.0.
     y := box yPosition.
 
-    box addAbortButton; addOkButton.
+    box "addAbortButton;" addOkButton.
     macroTextView topInset:(l preferredExtent y).
     macroTextView bottomInset:(box preferredExtent y - y).
 
--- a/MemMonitor.st	Sun Jul 23 05:19:48 1995 +0200
+++ b/MemMonitor.st	Thu Aug 03 03:38:05 1995 +0200
@@ -25,7 +25,7 @@
  COPYRIGHT (c) 1991 by Claus Gittinger
 	      All Rights Reserved
 
-$Header: /cvs/stx/stx/libtool/Attic/MemMonitor.st,v 1.17 1995-07-23 03:19:24 claus Exp $
+$Header: /cvs/stx/stx/libtool/Attic/MemMonitor.st,v 1.18 1995-08-03 01:37:52 claus Exp $
 '!
 
 !MemoryMonitor class methodsFor:'documentation'!
@@ -46,7 +46,7 @@
 
 version
 "
-$Header: /cvs/stx/stx/libtool/Attic/MemMonitor.st,v 1.17 1995-07-23 03:19:24 claus Exp $
+$Header: /cvs/stx/stx/libtool/Attic/MemMonitor.st,v 1.18 1995-08-03 01:37:52 claus Exp $
 "
 !
 
@@ -75,6 +75,8 @@
 
 	I       incremental GC state
 
+	weak    number of weak objects
+
 	rem     size of rememberedSet
 
 	minsc:  percent of newspace remaining after scavenge (worst case)
@@ -100,7 +102,7 @@
 !MemoryMonitor class methodsFor:'defaults'!
 
 defaultExtent
-    ^ (200 @ 250)
+    ^ (200 @ 280)
 !
 
 defaultLabel
@@ -120,14 +122,15 @@
 updateDisplay
     "update picture; trigger next update"
 
-    |total oldSpaceUsed newSpaceUsed freeMem 
+    |total oldSpaceUsed newSpaceUsed freeMem oldSpaceSize
      gWidth shift scaleChange margin mustWait|
 
     shown ifTrue:[
 	oldSpaceUsed := ObjectMemory oldSpaceUsed + ObjectMemory symSpaceUsed.
 	newSpaceUsed := ObjectMemory newSpaceUsed.
-	freeMem := ObjectMemory freeListSpace.
-	total := oldSpaceUsed + newSpaceUsed.
+	freeMem := ObjectMemory freeListSpace + (ObjectMemory oldSpaceSize - ObjectMemory oldSpaceUsed).
+	oldSpaceSize := ObjectMemory oldSpaceSize + ObjectMemory symSpaceSize.
+	total := oldSpaceSize + ObjectMemory newSpaceSize.
 
 	scaleChange := false.
 
@@ -140,7 +143,7 @@
 	    scaleChange := true
 	].
 
-	oldData at:updateIndex put:oldSpaceUsed.
+	oldData at:updateIndex put:oldSpaceSize. "/ oldSpaceUsed.
 	newData at:updateIndex put:newSpaceUsed.
 	freeData at:updateIndex put:freeMem.
 	updateIndex := updateIndex + 1.
@@ -181,7 +184,7 @@
 
 	self updateLineX:(updateIndex - 1 + org - 1)
 		   total:total 
-		   old:oldSpaceUsed 
+		   old:oldSpaceSize "/ oldSpaceUsed
 		   new:newSpaceUsed 
 		   free:freeMem.
 
@@ -250,25 +253,24 @@
     ]
 !
 
-updateLineX:x total:total old:oldSpaceUsed new:newSpaceUsed free:freeMem
-    |hNew hOld hFree y1 y2|
+updateLineX:x total:total old:oldSpaceSize new:newSpaceUsed free:freeMem
+    |hNew hOld hFree y1 y2 y3|
 
     hNew := (newSpaceUsed * scale) asInteger.
-    hOld := (oldSpaceUsed * scale) // 2.
-    hFree := (freeMem * scale) asInteger.
+    hOld := (oldSpaceSize * scale) // 2.
+    hFree := (freeMem * scale) // 2.
 
     y1 := height - 1.
+
     y2 := y1 - hOld.
     self paint:oldColor.
     self displayLineFromX:x y:y1 toX:x y:y2.
 
-    y1 := y2.
-    y2 := y1 - hFree.
+    y3 := y1 - hFree.
     self paint:freeColor.
-    self displayLineFromX:x y:y1 toX:x y:y2.
+    self displayLineFromX:x y:y1 toX:x y:y3.
 
-    y1 := y2.
-    y2 := y1 - hNew.
+    y1 := y2 - hNew.
     self paint:newColor.
     self displayLineFromX:x y:y1 toX:x y:y2.
 !
@@ -287,6 +289,7 @@
 	t       current tenure age
 	I       IGC state
 	rem     remembered set size
+	lrem    lifo remembered set size
 	count of scavenges
 	last scavenge survivor rate
     "
@@ -309,7 +312,7 @@
     fontHeight := font height + font descent.
     half := height // 2 + font descent.
 
-    y := half - (fontHeight * 4).
+    y := half - (fontHeight * 5).
 
     total ~~ prevTotal ifTrue:[
 	((total - freeMem) < minTotal) ifTrue:[
@@ -374,9 +377,17 @@
     self displayOpaqueString:s x:0 y:y.
 
     y := y + fontHeight.
+    s := 'weak: ' , (ObjectMemory numberOfWeakObjects printStringLeftPaddedTo:4).
+    self displayOpaqueString:s x:0 y:y.
+
+    y := y + fontHeight.
     s := 'rem: ' , (ObjectMemory rememberedSetSize printStringLeftPaddedTo:5).
     self displayOpaqueString:s x:0 y:y.
 
+    y := y + fontHeight.
+    s := 'lrem: ' , (ObjectMemory lifoRememberedSetSize printStringLeftPaddedTo:4 ifLarger:['****']).
+    self displayOpaqueString:s x:0 y:y.
+
 "/ does no longer make sense to show ....
 "/    y := y + fontHeight.
 "/    ObjectMemory runsSingleOldSpace ifTrue:[
@@ -482,6 +493,7 @@
 	labels :=    #(
 			'scavenge'
 			'tenure'
+			'incremental collect'
 			'-'
 			'cleanup memory'
 			'-'
@@ -490,6 +502,7 @@
 	selectors := #(
 			scavenge
 			tenure
+			incrementalCollect
 			nil
 			cleanupMemory
 			nil
@@ -565,7 +578,7 @@
     viewBackground := Black.
 
     device hasColors ifTrue:[
-	newColor := Color yellow.
+	newColor := Color orange. "/ yellow.
 	freeColor := Color green.
 	oldColor := Color white.
     ] ifFalse:[
@@ -628,6 +641,12 @@
     ObjectMemory markAndSweep
 !
 
+incrementalCollect
+    [
+	[ObjectMemory gcStep] whileFalse:[(Delay forMilliseconds:1) wait]
+    ] forkAt:Processor highestPriority
+!
+
 backgroundCollect
     [ObjectMemory incrementalGC] forkAt:5 
 ! !
--- a/MemoryMonitor.st	Sun Jul 23 05:19:48 1995 +0200
+++ b/MemoryMonitor.st	Thu Aug 03 03:38:05 1995 +0200
@@ -25,7 +25,7 @@
  COPYRIGHT (c) 1991 by Claus Gittinger
 	      All Rights Reserved
 
-$Header: /cvs/stx/stx/libtool/MemoryMonitor.st,v 1.17 1995-07-23 03:19:24 claus Exp $
+$Header: /cvs/stx/stx/libtool/MemoryMonitor.st,v 1.18 1995-08-03 01:37:52 claus Exp $
 '!
 
 !MemoryMonitor class methodsFor:'documentation'!
@@ -46,7 +46,7 @@
 
 version
 "
-$Header: /cvs/stx/stx/libtool/MemoryMonitor.st,v 1.17 1995-07-23 03:19:24 claus Exp $
+$Header: /cvs/stx/stx/libtool/MemoryMonitor.st,v 1.18 1995-08-03 01:37:52 claus Exp $
 "
 !
 
@@ -75,6 +75,8 @@
 
 	I       incremental GC state
 
+	weak    number of weak objects
+
 	rem     size of rememberedSet
 
 	minsc:  percent of newspace remaining after scavenge (worst case)
@@ -100,7 +102,7 @@
 !MemoryMonitor class methodsFor:'defaults'!
 
 defaultExtent
-    ^ (200 @ 250)
+    ^ (200 @ 280)
 !
 
 defaultLabel
@@ -120,14 +122,15 @@
 updateDisplay
     "update picture; trigger next update"
 
-    |total oldSpaceUsed newSpaceUsed freeMem 
+    |total oldSpaceUsed newSpaceUsed freeMem oldSpaceSize
      gWidth shift scaleChange margin mustWait|
 
     shown ifTrue:[
 	oldSpaceUsed := ObjectMemory oldSpaceUsed + ObjectMemory symSpaceUsed.
 	newSpaceUsed := ObjectMemory newSpaceUsed.
-	freeMem := ObjectMemory freeListSpace.
-	total := oldSpaceUsed + newSpaceUsed.
+	freeMem := ObjectMemory freeListSpace + (ObjectMemory oldSpaceSize - ObjectMemory oldSpaceUsed).
+	oldSpaceSize := ObjectMemory oldSpaceSize + ObjectMemory symSpaceSize.
+	total := oldSpaceSize + ObjectMemory newSpaceSize.
 
 	scaleChange := false.
 
@@ -140,7 +143,7 @@
 	    scaleChange := true
 	].
 
-	oldData at:updateIndex put:oldSpaceUsed.
+	oldData at:updateIndex put:oldSpaceSize. "/ oldSpaceUsed.
 	newData at:updateIndex put:newSpaceUsed.
 	freeData at:updateIndex put:freeMem.
 	updateIndex := updateIndex + 1.
@@ -181,7 +184,7 @@
 
 	self updateLineX:(updateIndex - 1 + org - 1)
 		   total:total 
-		   old:oldSpaceUsed 
+		   old:oldSpaceSize "/ oldSpaceUsed
 		   new:newSpaceUsed 
 		   free:freeMem.
 
@@ -250,25 +253,24 @@
     ]
 !
 
-updateLineX:x total:total old:oldSpaceUsed new:newSpaceUsed free:freeMem
-    |hNew hOld hFree y1 y2|
+updateLineX:x total:total old:oldSpaceSize new:newSpaceUsed free:freeMem
+    |hNew hOld hFree y1 y2 y3|
 
     hNew := (newSpaceUsed * scale) asInteger.
-    hOld := (oldSpaceUsed * scale) // 2.
-    hFree := (freeMem * scale) asInteger.
+    hOld := (oldSpaceSize * scale) // 2.
+    hFree := (freeMem * scale) // 2.
 
     y1 := height - 1.
+
     y2 := y1 - hOld.
     self paint:oldColor.
     self displayLineFromX:x y:y1 toX:x y:y2.
 
-    y1 := y2.
-    y2 := y1 - hFree.
+    y3 := y1 - hFree.
     self paint:freeColor.
-    self displayLineFromX:x y:y1 toX:x y:y2.
+    self displayLineFromX:x y:y1 toX:x y:y3.
 
-    y1 := y2.
-    y2 := y1 - hNew.
+    y1 := y2 - hNew.
     self paint:newColor.
     self displayLineFromX:x y:y1 toX:x y:y2.
 !
@@ -287,6 +289,7 @@
 	t       current tenure age
 	I       IGC state
 	rem     remembered set size
+	lrem    lifo remembered set size
 	count of scavenges
 	last scavenge survivor rate
     "
@@ -309,7 +312,7 @@
     fontHeight := font height + font descent.
     half := height // 2 + font descent.
 
-    y := half - (fontHeight * 4).
+    y := half - (fontHeight * 5).
 
     total ~~ prevTotal ifTrue:[
 	((total - freeMem) < minTotal) ifTrue:[
@@ -374,9 +377,17 @@
     self displayOpaqueString:s x:0 y:y.
 
     y := y + fontHeight.
+    s := 'weak: ' , (ObjectMemory numberOfWeakObjects printStringLeftPaddedTo:4).
+    self displayOpaqueString:s x:0 y:y.
+
+    y := y + fontHeight.
     s := 'rem: ' , (ObjectMemory rememberedSetSize printStringLeftPaddedTo:5).
     self displayOpaqueString:s x:0 y:y.
 
+    y := y + fontHeight.
+    s := 'lrem: ' , (ObjectMemory lifoRememberedSetSize printStringLeftPaddedTo:4 ifLarger:['****']).
+    self displayOpaqueString:s x:0 y:y.
+
 "/ does no longer make sense to show ....
 "/    y := y + fontHeight.
 "/    ObjectMemory runsSingleOldSpace ifTrue:[
@@ -482,6 +493,7 @@
 	labels :=    #(
 			'scavenge'
 			'tenure'
+			'incremental collect'
 			'-'
 			'cleanup memory'
 			'-'
@@ -490,6 +502,7 @@
 	selectors := #(
 			scavenge
 			tenure
+			incrementalCollect
 			nil
 			cleanupMemory
 			nil
@@ -565,7 +578,7 @@
     viewBackground := Black.
 
     device hasColors ifTrue:[
-	newColor := Color yellow.
+	newColor := Color orange. "/ yellow.
 	freeColor := Color green.
 	oldColor := Color white.
     ] ifFalse:[
@@ -628,6 +641,12 @@
     ObjectMemory markAndSweep
 !
 
+incrementalCollect
+    [
+	[ObjectMemory gcStep] whileFalse:[(Delay forMilliseconds:1) wait]
+    ] forkAt:Processor highestPriority
+!
+
 backgroundCollect
     [ObjectMemory incrementalGC] forkAt:5 
 ! !
--- a/ProcMonitor.st	Sun Jul 23 05:19:48 1995 +0200
+++ b/ProcMonitor.st	Thu Aug 03 03:38:05 1995 +0200
@@ -15,7 +15,7 @@
 SimpleView subclass:#ProcessMonitor
 	 instanceVariableNames:'listView processes listUpdateDelay updateDelay updateBlock
 		listUpdateBlock updateProcess hideDead runColor suspendedColor
-		waitColor cpuUsages'
+		waitColor cpuUsages showDetail'
 	 classVariableNames:''
 	 poolDictionaries:''
 	 category:'Interface-Tools'
@@ -39,7 +39,7 @@
 
 version
 "
-$Header: /cvs/stx/stx/libtool/Attic/ProcMonitor.st,v 1.17 1995-07-03 02:37:45 claus Exp $
+$Header: /cvs/stx/stx/libtool/Attic/ProcMonitor.st,v 1.18 1995-08-03 01:38:05 claus Exp $
 "
 !
 
@@ -106,7 +106,9 @@
 !ProcessMonitor methodsFor:'drawing'!
 
 titleLine
-"/  ^ 'id   name                         cpu state    prio   usedStack  totalStack'.
+    showDetail ifTrue:[
+    ^ 'id   name                           state    prio   usedStack  totalStack    current segment     switches'.
+    ].
     ^ 'id   name                           state    prio   usedStack  totalStack'.
 !
 
@@ -116,7 +118,7 @@
     |newList|
 
     shown ifTrue:[
-	(Smalltalk at:#SystemDebugging ifAbsent:[false]) ifTrue:[
+	showDetail ifTrue:[
 	    newList := Process allInstances.
 	] ifFalse:[
 	    newList := ProcessorScheduler knownProcesses asOrderedCollection.
@@ -195,7 +197,7 @@
 			line := line , (aProcess priority printStringLeftPaddedTo:3).
 			line := line , (aProcess usedStackSize printStringLeftPaddedTo:11).
 			line := line , (aProcess totalStackSize printStringLeftPaddedTo:10).
-			(Smalltalk at:#SystemDebugging ifAbsent:[false]) ifTrue:[
+			showDetail ifTrue:[
 			    line := line , '(' , aProcess numberOfStackSegments printString , ')'.
 			    con := aProcess suspendedContext.
 			    con isNil ifTrue:[
@@ -259,6 +261,7 @@
     super initialize.
 
     hideDead := true.
+    showDetail := Smalltalk at:#SystemDebugging ifAbsent:false.
 
     v := ScrollableView for:SelectionInListView in:self.
     v origin:0.0@0.0 corner:1.0@1.0.
@@ -436,50 +439,50 @@
 processMenu
     |labels selectors m|
 
-    labels := resources array:#(
-"/ hideDead functionality no longer needed; 
-"/ since ProcSched knownProcesses only returns living ones
-"/
-"/                         '\c hide dead'
-"/                         '-'
-			 'inspect' 
-			 'debug'  
-			 '-'  
-			 'resume'  
-			 'suspend'  
-			 'stop'  
-			 'abort'
-			 'terminate'
-			 '-'  
-			 'raise prio'  
-			 'lower prio'  
-			).
-    selectors := #(
-"/                         hideDead:
-"/                         nil
-			 inspectProcess  
-			 debugProcess  
-			 nil  
-			 resumeProcess  
-			 suspendProcess  
-			 stopProcess  
-			 abortProcess
-			 terminateProcess
-			 nil  
-			 raisePrio
-			 lowerPrio
-			).
-
-    updateProcess isNil ifTrue:[
-	labels := (resources array:#('update' '-')) , labels.
-	selectors := #(updateView nil) , selectors
+    device ctrlDown ifTrue:[
+	labels :=    #(
+			'\c detail'
+		      ).
+	selectors := #(
+			detail
+		      ).
+    ] ifFalse:[
+	labels := resources array:#(
+			     'inspect' 
+			     'debug'  
+			     '-'  
+			     'resume'  
+			     'suspend'  
+			     'stop'  
+			     'abort'
+			     'terminate'
+			     '-'  
+			     'raise prio'  
+			     'lower prio'  
+			    ).
+	selectors := #(
+			     inspectProcess  
+			     debugProcess  
+			     nil  
+			     resumeProcess  
+			     suspendProcess  
+			     stopProcess  
+			     abortProcess
+			     terminateProcess
+			     nil  
+			     raisePrio
+			     lowerPrio
+			    ).
+	updateProcess isNil ifTrue:[
+	    labels := (resources array:#('update' '-')) , labels.
+	    selectors := #(updateView nil) , selectors
+	].
     ].
 
     m := PopUpMenu labels:labels
 		   selectors:selectors.
 
-"/    m checkToggleAt:#hideDead: put:hideDead.
-
+    m checkToggleAt:#detail put:showDetail.
     ^ m
 !
 
@@ -509,6 +512,11 @@
     self selectedProcessesDo:[:p |
        p priority:(p priority - 1)
     ]
+!
+
+detail
+    showDetail := showDetail not.
+    self updateView
 ! !
 
 !ProcessMonitor methodsFor:'destroying'!
--- a/ProcessMonitor.st	Sun Jul 23 05:19:48 1995 +0200
+++ b/ProcessMonitor.st	Thu Aug 03 03:38:05 1995 +0200
@@ -15,7 +15,7 @@
 SimpleView subclass:#ProcessMonitor
 	 instanceVariableNames:'listView processes listUpdateDelay updateDelay updateBlock
 		listUpdateBlock updateProcess hideDead runColor suspendedColor
-		waitColor cpuUsages'
+		waitColor cpuUsages showDetail'
 	 classVariableNames:''
 	 poolDictionaries:''
 	 category:'Interface-Tools'
@@ -39,7 +39,7 @@
 
 version
 "
-$Header: /cvs/stx/stx/libtool/ProcessMonitor.st,v 1.17 1995-07-03 02:37:45 claus Exp $
+$Header: /cvs/stx/stx/libtool/ProcessMonitor.st,v 1.18 1995-08-03 01:38:05 claus Exp $
 "
 !
 
@@ -106,7 +106,9 @@
 !ProcessMonitor methodsFor:'drawing'!
 
 titleLine
-"/  ^ 'id   name                         cpu state    prio   usedStack  totalStack'.
+    showDetail ifTrue:[
+    ^ 'id   name                           state    prio   usedStack  totalStack    current segment     switches'.
+    ].
     ^ 'id   name                           state    prio   usedStack  totalStack'.
 !
 
@@ -116,7 +118,7 @@
     |newList|
 
     shown ifTrue:[
-	(Smalltalk at:#SystemDebugging ifAbsent:[false]) ifTrue:[
+	showDetail ifTrue:[
 	    newList := Process allInstances.
 	] ifFalse:[
 	    newList := ProcessorScheduler knownProcesses asOrderedCollection.
@@ -195,7 +197,7 @@
 			line := line , (aProcess priority printStringLeftPaddedTo:3).
 			line := line , (aProcess usedStackSize printStringLeftPaddedTo:11).
 			line := line , (aProcess totalStackSize printStringLeftPaddedTo:10).
-			(Smalltalk at:#SystemDebugging ifAbsent:[false]) ifTrue:[
+			showDetail ifTrue:[
 			    line := line , '(' , aProcess numberOfStackSegments printString , ')'.
 			    con := aProcess suspendedContext.
 			    con isNil ifTrue:[
@@ -259,6 +261,7 @@
     super initialize.
 
     hideDead := true.
+    showDetail := Smalltalk at:#SystemDebugging ifAbsent:false.
 
     v := ScrollableView for:SelectionInListView in:self.
     v origin:0.0@0.0 corner:1.0@1.0.
@@ -436,50 +439,50 @@
 processMenu
     |labels selectors m|
 
-    labels := resources array:#(
-"/ hideDead functionality no longer needed; 
-"/ since ProcSched knownProcesses only returns living ones
-"/
-"/                         '\c hide dead'
-"/                         '-'
-			 'inspect' 
-			 'debug'  
-			 '-'  
-			 'resume'  
-			 'suspend'  
-			 'stop'  
-			 'abort'
-			 'terminate'
-			 '-'  
-			 'raise prio'  
-			 'lower prio'  
-			).
-    selectors := #(
-"/                         hideDead:
-"/                         nil
-			 inspectProcess  
-			 debugProcess  
-			 nil  
-			 resumeProcess  
-			 suspendProcess  
-			 stopProcess  
-			 abortProcess
-			 terminateProcess
-			 nil  
-			 raisePrio
-			 lowerPrio
-			).
-
-    updateProcess isNil ifTrue:[
-	labels := (resources array:#('update' '-')) , labels.
-	selectors := #(updateView nil) , selectors
+    device ctrlDown ifTrue:[
+	labels :=    #(
+			'\c detail'
+		      ).
+	selectors := #(
+			detail
+		      ).
+    ] ifFalse:[
+	labels := resources array:#(
+			     'inspect' 
+			     'debug'  
+			     '-'  
+			     'resume'  
+			     'suspend'  
+			     'stop'  
+			     'abort'
+			     'terminate'
+			     '-'  
+			     'raise prio'  
+			     'lower prio'  
+			    ).
+	selectors := #(
+			     inspectProcess  
+			     debugProcess  
+			     nil  
+			     resumeProcess  
+			     suspendProcess  
+			     stopProcess  
+			     abortProcess
+			     terminateProcess
+			     nil  
+			     raisePrio
+			     lowerPrio
+			    ).
+	updateProcess isNil ifTrue:[
+	    labels := (resources array:#('update' '-')) , labels.
+	    selectors := #(updateView nil) , selectors
+	].
     ].
 
     m := PopUpMenu labels:labels
 		   selectors:selectors.
 
-"/    m checkToggleAt:#hideDead: put:hideDead.
-
+    m checkToggleAt:#detail put:showDetail.
     ^ m
 !
 
@@ -509,6 +512,11 @@
     self selectedProcessesDo:[:p |
        p priority:(p priority - 1)
     ]
+!
+
+detail
+    showDetail := showDetail not.
+    self updateView
 ! !
 
 !ProcessMonitor methodsFor:'destroying'!