The Inbox: Tools-ct.873.mcz

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
1 message Options
Reply | Threaded
Open this post in threaded view
|

The Inbox: Tools-ct.873.mcz

commits-2
A new version of Tools was added to project The Inbox:
http://source.squeak.org/inbox/Tools-ct.873.mcz

==================== Summary ====================

Name: Tools-ct.873
Author: ct
Time: 10 August 2019, 1:08:06.919412 am
UUID: 2929ef39-906f-2a40-a5b8-f41da1384c2e
Ancestors: Tools-mt.870

Refactor ProcessBrowser & test edge cases

Various shortcuts lead to an error message if no process/context was selected, before loading this commit. Same went for cancelling the messageTally dialog.

=============== Diff against Tools-mt.870 ===============

Item was changed:
  ----- Method: ProcessBrowser>>changePriority (in category 'process actions') -----
  changePriority
  | str newPriority nameAndRules |
+ selectedProcess ifNil: [^ self].
  nameAndRules := self nameAndRulesForSelectedProcess.
  nameAndRules third
  ifFalse: [self inform: 'Nope, won''t change priority of ' , nameAndRules first.
  ^ self].
  str := UIManager default
  request: 'New priority'
   initialAnswer: selectedProcess priority asString.
  newPriority := str asNumber asInteger.
  newPriority
  ifNil: [^ self].
  (newPriority < 1
  or: [newPriority > Processor highestPriority])
  ifTrue: [self inform: 'Bad priority'.
  ^ self].
  self class setProcess: selectedProcess toPriority: newPriority.
  self updateProcessList!

Item was changed:
  ----- Method: ProcessBrowser>>chasePointers (in category 'process actions') -----
  chasePointers
  | saved |
+ selectedProcess ifNil: [^ self].
- selectedProcess
- ifNil: [^ self].
  saved := selectedProcess.
  [selectedProcess := nil.
  (Smalltalk includesKey: #PointerFinder)
  ifTrue: [PointerFinder on: saved]
  ifFalse: [self inspectPointers]]
  ensure: [selectedProcess := saved]!

Item was changed:
  ----- Method: ProcessBrowser>>debugProcess (in category 'process actions') -----
  debugProcess
  | nameAndRules |
+ selectedProcess ifNil: [^ self].
  nameAndRules := self nameAndRulesForSelectedProcess.
  nameAndRules third
  ifFalse: [self inform: 'Nope, won''t debug ' , nameAndRules first.
  ^ self].
  self class debugProcess: selectedProcess.!

Item was changed:
  ----- Method: ProcessBrowser>>exploreContext (in category 'stack list') -----
  exploreContext
+ selectedContext ifNotNil: #explore!
- selectedContext explore!

Item was changed:
  ----- Method: ProcessBrowser>>exploreProcess (in category 'process list') -----
  exploreProcess
+ selectedProcess ifNotNil: #explore!
- selectedProcess explore!

Item was changed:
  ----- Method: ProcessBrowser>>exploreReceiver (in category 'stack list') -----
  exploreReceiver
+ selectedContext ifNotNil: [
+ selectedContext receiver explore]!
- selectedContext ifNotNil: [ selectedContext receiver explore ]!

Item was changed:
  ----- Method: ProcessBrowser>>inspectContext (in category 'stack list') -----
  inspectContext
+ selectedContext ifNotNil: #inspect!
- selectedContext inspect!

Item was changed:
  ----- Method: ProcessBrowser>>inspectPointers (in category 'process actions') -----
  inspectPointers
  | tc pointers |
+ selectedProcess ifNil: [^ self].
- selectedProcess ifNil: [^self].
  tc := thisContext.
+ pointers := PointerFinder
+ pointersTo: selectedProcess
+ except: {
+ self processList.
+ tc.
+ self}.
+ pointers isEmpty ifTrue: [^ self].
- pointers := PointerFinder pointersTo: selectedProcess
- except: {
- self processList.
- tc.
- self}.
- pointers isEmpty ifTrue: [^self].
  OrderedCollectionInspector
  openOn: pointers
  withEvalPane: false
  withLabel: 'Objects pointing to ' , selectedProcess browserPrintString!

Item was changed:
  ----- Method: ProcessBrowser>>inspectProcess (in category 'process list') -----
  inspectProcess
+ selectedProcess ifNotNil: #inspect!
- selectedProcess inspect!

Item was changed:
  ----- Method: ProcessBrowser>>inspectReceiver (in category 'stack list') -----
  inspectReceiver
+ selectedContext ifNotNil: [
+ selectedContext receiver inspect]!
- selectedContext
- ifNotNil: [selectedContext receiver inspect]!

Item was changed:
  ----- Method: ProcessBrowser>>messageTally (in category 'stack list') -----
  messageTally
  | secString secs |
+ selectedProcess ifNil: [^ self].
  secString := UIManager default request: 'Profile for how many seconds?' initialAnswer: '4'.
+ secString isEmptyOrNil ifTrue: [^ self].
  secs := secString asNumber asInteger.
+ (secs isNil or: [secs isZero])
- (secs isNil
- or: [secs isZero])
  ifTrue: [^ self].
  [ TimeProfileBrowser spyOnProcess: selectedProcess forMilliseconds: secs * 1000 ] forkAt: selectedProcess priority + 1.!

Item was changed:
  ----- Method: ProcessBrowser>>resumeProcess (in category 'process actions') -----
  resumeProcess
+ selectedProcess ifNil: [^ self].
- selectedProcess
- ifNil: [^ self].
  self class resumeProcess: selectedProcess.
  self updateProcessList!

Item was changed:
  ----- Method: ProcessBrowser>>signalSemaphore (in category 'process actions') -----
  signalSemaphore
+ selectedProcess ifNil: [^ self].
  (selectedProcess suspendingList isKindOf: Semaphore)
  ifFalse: [^ self].
  [selectedProcess suspendingList signal] fork.
  (Delay forMilliseconds: 300) wait.
  "Hate to make the UI wait, but it's convenient..."
  self updateProcessList!

Item was changed:
  ----- Method: ProcessBrowser>>suspendProcess (in category 'process actions') -----
  suspendProcess
  | nameAndRules |
+ selectedProcess ifNil: [^ self].
  selectedProcess isSuspended
  ifTrue: [^ self].
  nameAndRules := self nameAndRulesForSelectedProcess.
  nameAndRules second
  ifFalse: [self inform: 'Nope, won''t suspend ' , nameAndRules first.
  ^ self].
  self class suspendProcess: selectedProcess.
  self updateProcessList!

Item was changed:
  ----- Method: ProcessBrowser>>terminateProcess (in category 'process actions') -----
  terminateProcess
  | nameAndRules |
+ selectedProcess ifNil: [^ self].
  nameAndRules := self nameAndRulesForSelectedProcess.
  nameAndRules second
  ifFalse: [self inform: 'Nope, won''t kill ' , nameAndRules first.
  ^ self].
  self class terminateProcess: selectedProcess.
  self updateProcessList!