MessageTally.st
author Claus Gittinger <cg@exept.de>
Sat, 09 Dec 1995 15:44:23 +0100
changeset 119 1a9c5a761edf
parent 98 123d948aacd1
child 120 950e4628d657
permissions -rw-r--r--
checkin from browser
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
0
470788421600 Initial revision
claus
parents:
diff changeset
     1
"
21
c521be54a8e6 *** empty log message ***
claus
parents: 17
diff changeset
     2
 COPYRIGHT (c) 1995 by Claus Gittinger
c521be54a8e6 *** empty log message ***
claus
parents: 17
diff changeset
     3
	      All Rights Reserved
0
470788421600 Initial revision
claus
parents:
diff changeset
     4
470788421600 Initial revision
claus
parents:
diff changeset
     5
 This software is furnished under a license and may be used
470788421600 Initial revision
claus
parents:
diff changeset
     6
 only in accordance with the terms of that license and with the
470788421600 Initial revision
claus
parents:
diff changeset
     7
 inclusion of the above copyright notice.   This software may not
470788421600 Initial revision
claus
parents:
diff changeset
     8
 be provided or otherwise made available to, or used by, any
470788421600 Initial revision
claus
parents:
diff changeset
     9
 other person.  No title to or ownership of the software is
470788421600 Initial revision
claus
parents:
diff changeset
    10
 hereby transferred.
470788421600 Initial revision
claus
parents:
diff changeset
    11
"
470788421600 Initial revision
claus
parents:
diff changeset
    12
119
1a9c5a761edf checkin from browser
Claus Gittinger <cg@exept.de>
parents: 98
diff changeset
    13
!Object subclass:#MessageTally
21
c521be54a8e6 *** empty log message ***
claus
parents: 17
diff changeset
    14
	 instanceVariableNames:'process tree ntally theBlock spyInterval'
c521be54a8e6 *** empty log message ***
claus
parents: 17
diff changeset
    15
	 classVariableNames:''
c521be54a8e6 *** empty log message ***
claus
parents: 17
diff changeset
    16
	 poolDictionaries:''
24
10e1150b1f4b *** empty log message ***
claus
parents: 21
diff changeset
    17
	 category:'System-Debugging-Support'
0
470788421600 Initial revision
claus
parents:
diff changeset
    18
!
470788421600 Initial revision
claus
parents:
diff changeset
    19
9
f5b6ab00bdf6 *** empty log message ***
claus
parents: 5
diff changeset
    20
!MessageTally class methodsFor:'documentation'!
f5b6ab00bdf6 *** empty log message ***
claus
parents: 5
diff changeset
    21
88
070ba8eb911e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 68
diff changeset
    22
copyright
070ba8eb911e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 68
diff changeset
    23
"
070ba8eb911e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 68
diff changeset
    24
 COPYRIGHT (c) 1995 by Claus Gittinger
070ba8eb911e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 68
diff changeset
    25
	      All Rights Reserved
070ba8eb911e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 68
diff changeset
    26
070ba8eb911e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 68
diff changeset
    27
 This software is furnished under a license and may be used
070ba8eb911e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 68
diff changeset
    28
 only in accordance with the terms of that license and with the
070ba8eb911e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 68
diff changeset
    29
 inclusion of the above copyright notice.   This software may not
070ba8eb911e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 68
diff changeset
    30
 be provided or otherwise made available to, or used by, any
070ba8eb911e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 68
diff changeset
    31
 other person.  No title to or ownership of the software is
070ba8eb911e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 68
diff changeset
    32
 hereby transferred.
070ba8eb911e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 68
diff changeset
    33
"
9
f5b6ab00bdf6 *** empty log message ***
claus
parents: 5
diff changeset
    34
!
f5b6ab00bdf6 *** empty log message ***
claus
parents: 5
diff changeset
    35
f5b6ab00bdf6 *** empty log message ***
claus
parents: 5
diff changeset
    36
documentation
f5b6ab00bdf6 *** empty log message ***
claus
parents: 5
diff changeset
    37
"
f5b6ab00bdf6 *** empty log message ***
claus
parents: 5
diff changeset
    38
    MessageTally allows profiling excution of a block; 
f5b6ab00bdf6 *** empty log message ***
claus
parents: 5
diff changeset
    39
    statistic of method evaluation is output on Transcript.
f5b6ab00bdf6 *** empty log message ***
claus
parents: 5
diff changeset
    40
    To get statistic, use 'MessageTally spyOn:aBlock'.
f5b6ab00bdf6 *** empty log message ***
claus
parents: 5
diff changeset
    41
f5b6ab00bdf6 *** empty log message ***
claus
parents: 5
diff changeset
    42
    example:
21
c521be54a8e6 *** empty log message ***
claus
parents: 17
diff changeset
    43
	MessageTally spyOn:[
c521be54a8e6 *** empty log message ***
claus
parents: 17
diff changeset
    44
	    (ByteArray uninitalizedNew:1000) sort
c521be54a8e6 *** empty log message ***
claus
parents: 17
diff changeset
    45
	]
c521be54a8e6 *** empty log message ***
claus
parents: 17
diff changeset
    46
c521be54a8e6 *** empty log message ***
claus
parents: 17
diff changeset
    47
    By default, probing is done every 10ms (i.e. the execution of the block is 
c521be54a8e6 *** empty log message ***
claus
parents: 17
diff changeset
    48
    interrupted every 10ms, and the context chain analyzed).
c521be54a8e6 *** empty log message ***
claus
parents: 17
diff changeset
    49
    For better resolution, use smaller clock ticks (if your OperatingSystem
c521be54a8e6 *** empty log message ***
claus
parents: 17
diff changeset
    50
    supports it). Try spyDetailedOn:aBlock, which tries to measure things
c521be54a8e6 *** empty log message ***
claus
parents: 17
diff changeset
    51
    every 1ms. (Notice, that some OS's only provide a resolution of less than
c521be54a8e6 *** empty log message ***
claus
parents: 17
diff changeset
    52
    that time interval)
c521be54a8e6 *** empty log message ***
claus
parents: 17
diff changeset
    53
"
c521be54a8e6 *** empty log message ***
claus
parents: 17
diff changeset
    54
!
c521be54a8e6 *** empty log message ***
claus
parents: 17
diff changeset
    55
c521be54a8e6 *** empty log message ***
claus
parents: 17
diff changeset
    56
examples
9
f5b6ab00bdf6 *** empty log message ***
claus
parents: 5
diff changeset
    57
"
21
c521be54a8e6 *** empty log message ***
claus
parents: 17
diff changeset
    58
     MessageTally spyOn:[ #(6 5 4 3 2 1) sort ]
c521be54a8e6 *** empty log message ***
claus
parents: 17
diff changeset
    59
     MessageTally spyOn:[100 timesRepeat:[#(6 5 4 3 2 1) sort] ]
c521be54a8e6 *** empty log message ***
claus
parents: 17
diff changeset
    60
     MessageTally spyOn:[1000 timesRepeat:[#(6 5 4 3 2 1) sort] ]
c521be54a8e6 *** empty log message ***
claus
parents: 17
diff changeset
    61
     MessageTally spyOn:[10000 timesRepeat:[#(6 5 4 3 2 1) sort] ]
c521be54a8e6 *** empty log message ***
claus
parents: 17
diff changeset
    62
     MessageTally spyOn:[100000 timesRepeat:[#(6 5 4 3 2 1) sort] ]
c521be54a8e6 *** empty log message ***
claus
parents: 17
diff changeset
    63
     MessageTally spyOn:[500000 timesRepeat:[#(6 5 4 3 2 1) sort] ]
c521be54a8e6 *** empty log message ***
claus
parents: 17
diff changeset
    64
     MessageTally spyDetailedOn:[500000 timesRepeat:[#(6 5 4 3 2 1) sort] ]
c521be54a8e6 *** empty log message ***
claus
parents: 17
diff changeset
    65
     Time millisecondsToRun:[500000 timesRepeat:[#(6 5 4 3 2 1) sort] ]
c521be54a8e6 *** empty log message ***
claus
parents: 17
diff changeset
    66
c521be54a8e6 *** empty log message ***
claus
parents: 17
diff changeset
    67
     MessageTally spyOn:[SystemBrowser open ]
c521be54a8e6 *** empty log message ***
claus
parents: 17
diff changeset
    68
     MessageTally spyDetailedOn:[SystemBrowser open ]
c521be54a8e6 *** empty log message ***
claus
parents: 17
diff changeset
    69
"
9
f5b6ab00bdf6 *** empty log message ***
claus
parents: 5
diff changeset
    70
! !
0
470788421600 Initial revision
claus
parents:
diff changeset
    71
470788421600 Initial revision
claus
parents:
diff changeset
    72
!MessageTally class methodsFor:'instance creation'!
470788421600 Initial revision
claus
parents:
diff changeset
    73
88
070ba8eb911e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 68
diff changeset
    74
spyDetailedOn:aBlock
070ba8eb911e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 68
diff changeset
    75
    "evaluate aBlock and output time statistic on the Transcript.
070ba8eb911e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 68
diff changeset
    76
     Tick is 1ms."
070ba8eb911e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 68
diff changeset
    77
070ba8eb911e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 68
diff changeset
    78
    ^ self spyOn:aBlock interval:1
070ba8eb911e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 68
diff changeset
    79
!
070ba8eb911e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 68
diff changeset
    80
070ba8eb911e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 68
diff changeset
    81
spyOn:aBlock
070ba8eb911e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 68
diff changeset
    82
    "evaluate aBlock and output time statistic on the Transcript.
070ba8eb911e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 68
diff changeset
    83
     Tick is 10ms."
070ba8eb911e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 68
diff changeset
    84
070ba8eb911e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 68
diff changeset
    85
    ^ self spyOn:aBlock interval:10
070ba8eb911e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 68
diff changeset
    86
!
070ba8eb911e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 68
diff changeset
    87
21
c521be54a8e6 *** empty log message ***
claus
parents: 17
diff changeset
    88
spyOn:aBlock interval:ms
0
470788421600 Initial revision
claus
parents:
diff changeset
    89
    "evaluate aBlock and output time statistic on Transcript"
470788421600 Initial revision
claus
parents:
diff changeset
    90
21
c521be54a8e6 *** empty log message ***
claus
parents: 17
diff changeset
    91
    |runTime aTally nTally|
0
470788421600 Initial revision
claus
parents:
diff changeset
    92
470788421600 Initial revision
claus
parents:
diff changeset
    93
    aTally := self new.
21
c521be54a8e6 *** empty log message ***
claus
parents: 17
diff changeset
    94
    runTime := aTally spyOn:aBlock interval:ms.
c521be54a8e6 *** empty log message ***
claus
parents: 17
diff changeset
    95
c521be54a8e6 *** empty log message ***
claus
parents: 17
diff changeset
    96
    aTally tree isNil ifTrue:[
24
10e1150b1f4b *** empty log message ***
claus
parents: 21
diff changeset
    97
	Transcript cr.
10e1150b1f4b *** empty log message ***
claus
parents: 21
diff changeset
    98
	Transcript showCr:'TALLY: No probes - execution time too short;'.
10e1150b1f4b *** empty log message ***
claus
parents: 21
diff changeset
    99
	Transcript showCr:'TALLY: retry using: spyOn:[n timesRepeat:[...]]'.
21
c521be54a8e6 *** empty log message ***
claus
parents: 17
diff changeset
   100
    ] ifFalse:[
24
10e1150b1f4b *** empty log message ***
claus
parents: 21
diff changeset
   101
	"/ aTally tree inspect.
10e1150b1f4b *** empty log message ***
claus
parents: 21
diff changeset
   102
	nTally := aTally nTally.
10e1150b1f4b *** empty log message ***
claus
parents: 21
diff changeset
   103
	Transcript cr.
10e1150b1f4b *** empty log message ***
claus
parents: 21
diff changeset
   104
	Transcript showCr:('total execution time: '
10e1150b1f4b *** empty log message ***
claus
parents: 21
diff changeset
   105
			   , runTime printString , ' ms '
10e1150b1f4b *** empty log message ***
claus
parents: 21
diff changeset
   106
			   , '(' , nTally printString , ' probes ;'
10e1150b1f4b *** empty log message ***
claus
parents: 21
diff changeset
   107
			   , ' error >= ' 
10e1150b1f4b *** empty log message ***
claus
parents: 21
diff changeset
   108
			   , (1000 // nTally / 10.0) printString
10e1150b1f4b *** empty log message ***
claus
parents: 21
diff changeset
   109
			   , '%)').
10e1150b1f4b *** empty log message ***
claus
parents: 21
diff changeset
   110
	Transcript cr.
10e1150b1f4b *** empty log message ***
claus
parents: 21
diff changeset
   111
	aTally tree printOn:Transcript.
10e1150b1f4b *** empty log message ***
claus
parents: 21
diff changeset
   112
	Transcript cr.
10e1150b1f4b *** empty log message ***
claus
parents: 21
diff changeset
   113
	Transcript cr.
0
470788421600 Initial revision
claus
parents:
diff changeset
   114
24
10e1150b1f4b *** empty log message ***
claus
parents: 21
diff changeset
   115
	Transcript showCr:'leafs of calling tree:'.
10e1150b1f4b *** empty log message ***
claus
parents: 21
diff changeset
   116
	Transcript cr.
10e1150b1f4b *** empty log message ***
claus
parents: 21
diff changeset
   117
	aTally tree printLeafsOn:Transcript.
10e1150b1f4b *** empty log message ***
claus
parents: 21
diff changeset
   118
	Transcript cr.
21
c521be54a8e6 *** empty log message ***
claus
parents: 17
diff changeset
   119
24
10e1150b1f4b *** empty log message ***
claus
parents: 21
diff changeset
   120
	"
10e1150b1f4b *** empty log message ***
claus
parents: 21
diff changeset
   121
	aTally statistics.
10e1150b1f4b *** empty log message ***
claus
parents: 21
diff changeset
   122
	"
21
c521be54a8e6 *** empty log message ***
claus
parents: 17
diff changeset
   123
    ].
c521be54a8e6 *** empty log message ***
claus
parents: 17
diff changeset
   124
c521be54a8e6 *** empty log message ***
claus
parents: 17
diff changeset
   125
    "
c521be54a8e6 *** empty log message ***
claus
parents: 17
diff changeset
   126
     MessageTally spyOn:[ #(6 5 4 3 2 1) sort ]
c521be54a8e6 *** empty log message ***
claus
parents: 17
diff changeset
   127
     MessageTally spyOn:[100 timesRepeat:[#(6 5 4 3 2 1) sort] ]
c521be54a8e6 *** empty log message ***
claus
parents: 17
diff changeset
   128
     MessageTally spyOn:[1000 timesRepeat:[#(6 5 4 3 2 1) sort] ]
c521be54a8e6 *** empty log message ***
claus
parents: 17
diff changeset
   129
     MessageTally spyOn:[10000 timesRepeat:[#(6 5 4 3 2 1) sort] ]
c521be54a8e6 *** empty log message ***
claus
parents: 17
diff changeset
   130
     MessageTally spyOn:[100000 timesRepeat:[#(6 5 4 3 2 1) sort] ]
c521be54a8e6 *** empty log message ***
claus
parents: 17
diff changeset
   131
     MessageTally spyOn:[500000 timesRepeat:[#(6 5 4 3 2 1) sort] ]
c521be54a8e6 *** empty log message ***
claus
parents: 17
diff changeset
   132
     MessageTally spyOn:[SystemBrowser open ]
c521be54a8e6 *** empty log message ***
claus
parents: 17
diff changeset
   133
     MessageTally spyDetailedOn:[SystemBrowser open ]
c521be54a8e6 *** empty log message ***
claus
parents: 17
diff changeset
   134
     Time millisecondsToRun:[500000 timesRepeat:[#(6 5 4 3 2 1) sort] ]
c521be54a8e6 *** empty log message ***
claus
parents: 17
diff changeset
   135
    "
88
070ba8eb911e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 68
diff changeset
   136
! !
070ba8eb911e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 68
diff changeset
   137
070ba8eb911e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 68
diff changeset
   138
!MessageTally methodsFor:'accessing'!
070ba8eb911e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 68
diff changeset
   139
070ba8eb911e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 68
diff changeset
   140
nTally 
070ba8eb911e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 68
diff changeset
   141
    ^ ntally 
0
470788421600 Initial revision
claus
parents:
diff changeset
   142
!
470788421600 Initial revision
claus
parents:
diff changeset
   143
88
070ba8eb911e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 68
diff changeset
   144
tree
070ba8eb911e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 68
diff changeset
   145
    ^ tree
0
470788421600 Initial revision
claus
parents:
diff changeset
   146
! !
470788421600 Initial revision
claus
parents:
diff changeset
   147
470788421600 Initial revision
claus
parents:
diff changeset
   148
!MessageTally methodsFor:'private'!
470788421600 Initial revision
claus
parents:
diff changeset
   149
21
c521be54a8e6 *** empty log message ***
claus
parents: 17
diff changeset
   150
execute
c521be54a8e6 *** empty log message ***
claus
parents: 17
diff changeset
   151
    theBlock value
c521be54a8e6 *** empty log message ***
claus
parents: 17
diff changeset
   152
! !
0
470788421600 Initial revision
claus
parents:
diff changeset
   153
21
c521be54a8e6 *** empty log message ***
claus
parents: 17
diff changeset
   154
!MessageTally methodsFor:'probes'!
c521be54a8e6 *** empty log message ***
claus
parents: 17
diff changeset
   155
c521be54a8e6 *** empty log message ***
claus
parents: 17
diff changeset
   156
count:aContext
c521be54a8e6 *** empty log message ***
claus
parents: 17
diff changeset
   157
    |con chain info atEnd sender home|
0
470788421600 Initial revision
claus
parents:
diff changeset
   158
21
c521be54a8e6 *** empty log message ***
claus
parents: 17
diff changeset
   159
    con := aContext.
c521be54a8e6 *** empty log message ***
claus
parents: 17
diff changeset
   160
    con isNil ifTrue:[^ self].
0
470788421600 Initial revision
claus
parents:
diff changeset
   161
21
c521be54a8e6 *** empty log message ***
claus
parents: 17
diff changeset
   162
    ntally := ntally + 1.
c521be54a8e6 *** empty log message ***
claus
parents: 17
diff changeset
   163
    "walk up above the interrupt context"
c521be54a8e6 *** empty log message ***
claus
parents: 17
diff changeset
   164
c521be54a8e6 *** empty log message ***
claus
parents: 17
diff changeset
   165
    [con receiver == Processor] whileTrue:[
c521be54a8e6 *** empty log message ***
claus
parents: 17
diff changeset
   166
	con := con sender
0
470788421600 Initial revision
claus
parents:
diff changeset
   167
    ].
470788421600 Initial revision
claus
parents:
diff changeset
   168
21
c521be54a8e6 *** empty log message ***
claus
parents: 17
diff changeset
   169
    "got it - collect info from contexts"
c521be54a8e6 *** empty log message ***
claus
parents: 17
diff changeset
   170
c521be54a8e6 *** empty log message ***
claus
parents: 17
diff changeset
   171
    "walk up"
c521be54a8e6 *** empty log message ***
claus
parents: 17
diff changeset
   172
c521be54a8e6 *** empty log message ***
claus
parents: 17
diff changeset
   173
    con isNil ifTrue:[^ self].
c521be54a8e6 *** empty log message ***
claus
parents: 17
diff changeset
   174
c521be54a8e6 *** empty log message ***
claus
parents: 17
diff changeset
   175
    atEnd := false.
0
470788421600 Initial revision
claus
parents:
diff changeset
   176
21
c521be54a8e6 *** empty log message ***
claus
parents: 17
diff changeset
   177
    [atEnd] whileFalse:[
c521be54a8e6 *** empty log message ***
claus
parents: 17
diff changeset
   178
	con isNil ifTrue:[
c521be54a8e6 *** empty log message ***
claus
parents: 17
diff changeset
   179
	    atEnd := true
c521be54a8e6 *** empty log message ***
claus
parents: 17
diff changeset
   180
	] ifFalse:[
c521be54a8e6 *** empty log message ***
claus
parents: 17
diff changeset
   181
	    sender := con sender.
c521be54a8e6 *** empty log message ***
claus
parents: 17
diff changeset
   182
	    sender isNil ifTrue:[
c521be54a8e6 *** empty log message ***
claus
parents: 17
diff changeset
   183
		atEnd := true
c521be54a8e6 *** empty log message ***
claus
parents: 17
diff changeset
   184
	    ] ifFalse:[
c521be54a8e6 *** empty log message ***
claus
parents: 17
diff changeset
   185
		((sender receiver == self) and:[sender selector == #execute]) ifTrue:[
c521be54a8e6 *** empty log message ***
claus
parents: 17
diff changeset
   186
		    atEnd := true
36
claus
parents: 24
diff changeset
   187
"/                ] ifFalse:[
claus
parents: 24
diff changeset
   188
"/                    (sender isMemberOf:BlockContext) ifTrue:[
claus
parents: 24
diff changeset
   189
"/                        sender sender selector == #execute ifTrue:[
claus
parents: 24
diff changeset
   190
"/                            atEnd := true
claus
parents: 24
diff changeset
   191
"/                        ]
claus
parents: 24
diff changeset
   192
"/                    ]
21
c521be54a8e6 *** empty log message ***
claus
parents: 17
diff changeset
   193
		]
c521be54a8e6 *** empty log message ***
claus
parents: 17
diff changeset
   194
	    ]
c521be54a8e6 *** empty log message ***
claus
parents: 17
diff changeset
   195
	].
c521be54a8e6 *** empty log message ***
claus
parents: 17
diff changeset
   196
	atEnd ifFalse:[
c521be54a8e6 *** empty log message ***
claus
parents: 17
diff changeset
   197
	    info := CallChain new.
c521be54a8e6 *** empty log message ***
claus
parents: 17
diff changeset
   198
	    (con isMemberOf:BlockContext) ifTrue:[
c521be54a8e6 *** empty log message ***
claus
parents: 17
diff changeset
   199
		home := con methodHome.
c521be54a8e6 *** empty log message ***
claus
parents: 17
diff changeset
   200
		home isNil ifTrue:[
c521be54a8e6 *** empty log message ***
claus
parents: 17
diff changeset
   201
		    info receiver:UndefinedObject
c521be54a8e6 *** empty log message ***
claus
parents: 17
diff changeset
   202
			 selector:'optimized'
c521be54a8e6 *** empty log message ***
claus
parents: 17
diff changeset
   203
			    class:UndefinedObject.
c521be54a8e6 *** empty log message ***
claus
parents: 17
diff changeset
   204
		] ifFalse:[
c521be54a8e6 *** empty log message ***
claus
parents: 17
diff changeset
   205
		    info receiver:home receiver class
c521be54a8e6 *** empty log message ***
claus
parents: 17
diff changeset
   206
			 selector:home selector
c521be54a8e6 *** empty log message ***
claus
parents: 17
diff changeset
   207
			    class:con methodClass.
c521be54a8e6 *** empty log message ***
claus
parents: 17
diff changeset
   208
		].
36
claus
parents: 24
diff changeset
   209
		info isBlock:true.
21
c521be54a8e6 *** empty log message ***
claus
parents: 17
diff changeset
   210
	    ] ifFalse:[
c521be54a8e6 *** empty log message ***
claus
parents: 17
diff changeset
   211
		info receiver:con receiver class
c521be54a8e6 *** empty log message ***
claus
parents: 17
diff changeset
   212
		     selector:con selector
c521be54a8e6 *** empty log message ***
claus
parents: 17
diff changeset
   213
			class:con methodClass.
c521be54a8e6 *** empty log message ***
claus
parents: 17
diff changeset
   214
	    ].
c521be54a8e6 *** empty log message ***
claus
parents: 17
diff changeset
   215
	    info rest:chain.
c521be54a8e6 *** empty log message ***
claus
parents: 17
diff changeset
   216
	    chain := info.
c521be54a8e6 *** empty log message ***
claus
parents: 17
diff changeset
   217
	    con := sender
c521be54a8e6 *** empty log message ***
claus
parents: 17
diff changeset
   218
	]
c521be54a8e6 *** empty log message ***
claus
parents: 17
diff changeset
   219
    ].
c521be54a8e6 *** empty log message ***
claus
parents: 17
diff changeset
   220
    "add chain to the tree"
c521be54a8e6 *** empty log message ***
claus
parents: 17
diff changeset
   221
c521be54a8e6 *** empty log message ***
claus
parents: 17
diff changeset
   222
    chain isNil ifTrue:[^ self].
c521be54a8e6 *** empty log message ***
claus
parents: 17
diff changeset
   223
c521be54a8e6 *** empty log message ***
claus
parents: 17
diff changeset
   224
    tree isNil ifTrue:[
c521be54a8e6 *** empty log message ***
claus
parents: 17
diff changeset
   225
	tree := ProfileTree new.
36
claus
parents: 24
diff changeset
   226
	tree receiver:MessageTally 
claus
parents: 24
diff changeset
   227
	     selector:#execute 
claus
parents: 24
diff changeset
   228
		class:MessageTally .
0
470788421600 Initial revision
claus
parents:
diff changeset
   229
    ].
470788421600 Initial revision
claus
parents:
diff changeset
   230
21
c521be54a8e6 *** empty log message ***
claus
parents: 17
diff changeset
   231
    tree addChain:chain
c521be54a8e6 *** empty log message ***
claus
parents: 17
diff changeset
   232
! !
0
470788421600 Initial revision
claus
parents:
diff changeset
   233
88
070ba8eb911e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 68
diff changeset
   234
!MessageTally methodsFor:'setup'!
070ba8eb911e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 68
diff changeset
   235
070ba8eb911e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 68
diff changeset
   236
spyOn:aBlock interval:ms
070ba8eb911e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 68
diff changeset
   237
    "spy on execution time"
070ba8eb911e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 68
diff changeset
   238
070ba8eb911e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 68
diff changeset
   239
    |startTime endTime running delay|
070ba8eb911e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 68
diff changeset
   240
070ba8eb911e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 68
diff changeset
   241
    theBlock := aBlock.
070ba8eb911e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 68
diff changeset
   242
070ba8eb911e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 68
diff changeset
   243
    Processor activeProcess withPriority:23 do:[
070ba8eb911e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 68
diff changeset
   244
	process := [
070ba8eb911e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 68
diff changeset
   245
			[
070ba8eb911e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 68
diff changeset
   246
			    self execute
070ba8eb911e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 68
diff changeset
   247
			] valueNowOrOnUnwindDo:[
070ba8eb911e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 68
diff changeset
   248
			    running := false.
070ba8eb911e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 68
diff changeset
   249
			    theBlock := nil.
070ba8eb911e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 68
diff changeset
   250
			]
070ba8eb911e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 68
diff changeset
   251
		   ] newProcess.
070ba8eb911e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 68
diff changeset
   252
070ba8eb911e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 68
diff changeset
   253
	Processor activeProcess withPriority:24 do:[
070ba8eb911e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 68
diff changeset
   254
	    startTime := OperatingSystem getMillisecondTime.
070ba8eb911e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 68
diff changeset
   255
	    delay := (Delay forMilliseconds:ms).
070ba8eb911e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 68
diff changeset
   256
070ba8eb911e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 68
diff changeset
   257
	    ntally := 0.
070ba8eb911e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 68
diff changeset
   258
	    running := true.
070ba8eb911e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 68
diff changeset
   259
	    process resume.
070ba8eb911e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 68
diff changeset
   260
070ba8eb911e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 68
diff changeset
   261
	    [running] whileTrue:[
070ba8eb911e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 68
diff changeset
   262
		delay wait.
070ba8eb911e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 68
diff changeset
   263
		self count:process suspendedContext
070ba8eb911e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 68
diff changeset
   264
	    ].
070ba8eb911e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 68
diff changeset
   265
070ba8eb911e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 68
diff changeset
   266
	    endTime := OperatingSystem getMillisecondTime.
070ba8eb911e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 68
diff changeset
   267
	].    
070ba8eb911e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 68
diff changeset
   268
    ].    
070ba8eb911e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 68
diff changeset
   269
070ba8eb911e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 68
diff changeset
   270
    tree notNil ifTrue:[tree computePercentage:ntally].
070ba8eb911e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 68
diff changeset
   271
    ^ endTime - startTime
070ba8eb911e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 68
diff changeset
   272
! !
070ba8eb911e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 68
diff changeset
   273
98
123d948aacd1 version at the end
Claus Gittinger <cg@exept.de>
parents: 88
diff changeset
   274
!MessageTally class methodsFor:'documentation'!
123d948aacd1 version at the end
Claus Gittinger <cg@exept.de>
parents: 88
diff changeset
   275
123d948aacd1 version at the end
Claus Gittinger <cg@exept.de>
parents: 88
diff changeset
   276
version
119
1a9c5a761edf checkin from browser
Claus Gittinger <cg@exept.de>
parents: 98
diff changeset
   277
    ^ '$Header: /cvs/stx/stx/libbasic3/MessageTally.st,v 1.16 1995-12-09 14:43:06 cg Exp $'
98
123d948aacd1 version at the end
Claus Gittinger <cg@exept.de>
parents: 88
diff changeset
   278
! !