MessageTally.st
author Claus Gittinger <cg@exept.de>
Thu, 05 Mar 2020 11:17:28 +0100
changeset 4561 eace75531554
parent 4433 0db54b55fc65
permissions -rw-r--r--
#UI_ENHANCEMENT by cg class: SourceCodeManagerUtilities changed: #compareClassWithRepository:askForRevision: typos: genitive of class is class's - not classes.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
4096
5535543c5db8 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 4013
diff changeset
     1
"{ Encoding: utf8 }"
5535543c5db8 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 4013
diff changeset
     2
0
470788421600 Initial revision
claus
parents:
diff changeset
     3
"
21
c521be54a8e6 *** empty log message ***
claus
parents: 17
diff changeset
     4
 COPYRIGHT (c) 1995 by Claus Gittinger
c521be54a8e6 *** empty log message ***
claus
parents: 17
diff changeset
     5
	      All Rights Reserved
0
470788421600 Initial revision
claus
parents:
diff changeset
     6
470788421600 Initial revision
claus
parents:
diff changeset
     7
 This software is furnished under a license and may be used
470788421600 Initial revision
claus
parents:
diff changeset
     8
 only in accordance with the terms of that license and with the
470788421600 Initial revision
claus
parents:
diff changeset
     9
 inclusion of the above copyright notice.   This software may not
470788421600 Initial revision
claus
parents:
diff changeset
    10
 be provided or otherwise made available to, or used by, any
470788421600 Initial revision
claus
parents:
diff changeset
    11
 other person.  No title to or ownership of the software is
470788421600 Initial revision
claus
parents:
diff changeset
    12
 hereby transferred.
470788421600 Initial revision
claus
parents:
diff changeset
    13
"
957
54dade11e57f *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 770
diff changeset
    14
"{ Package: 'stx:libbasic3' }"
54dade11e57f *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 770
diff changeset
    15
4013
50bc8d72e5b9 #DOCUMENTATION by stefan
Stefan Vogel <sv@exept.de>
parents: 2970
diff changeset
    16
"{ NameSpace: Smalltalk }"
50bc8d72e5b9 #DOCUMENTATION by stefan
Stefan Vogel <sv@exept.de>
parents: 2970
diff changeset
    17
120
950e4628d657 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 119
diff changeset
    18
Object subclass:#MessageTally
571
58e603e1ce24 made all print stuff instance methods;
Claus Gittinger <cg@exept.de>
parents: 570
diff changeset
    19
	instanceVariableNames:'tree probes ntally theBlock spyInterval executing startTime
58e603e1ce24 made all print stuff instance methods;
Claus Gittinger <cg@exept.de>
parents: 570
diff changeset
    20
		endTime'
236
7f570e0a0a75 documentation
Claus Gittinger <cg@exept.de>
parents: 120
diff changeset
    21
	classVariableNames:''
7f570e0a0a75 documentation
Claus Gittinger <cg@exept.de>
parents: 120
diff changeset
    22
	poolDictionaries:''
7f570e0a0a75 documentation
Claus Gittinger <cg@exept.de>
parents: 120
diff changeset
    23
	category:'System-Debugging-Support'
0
470788421600 Initial revision
claus
parents:
diff changeset
    24
!
470788421600 Initial revision
claus
parents:
diff changeset
    25
9
f5b6ab00bdf6 *** empty log message ***
claus
parents: 5
diff changeset
    26
!MessageTally class methodsFor:'documentation'!
f5b6ab00bdf6 *** empty log message ***
claus
parents: 5
diff changeset
    27
88
070ba8eb911e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 68
diff changeset
    28
copyright
070ba8eb911e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 68
diff changeset
    29
"
070ba8eb911e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 68
diff changeset
    30
 COPYRIGHT (c) 1995 by Claus Gittinger
070ba8eb911e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 68
diff changeset
    31
	      All Rights Reserved
070ba8eb911e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 68
diff changeset
    32
070ba8eb911e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 68
diff changeset
    33
 This software is furnished under a license and may be used
070ba8eb911e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 68
diff changeset
    34
 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
    35
 inclusion of the above copyright notice.   This software may not
070ba8eb911e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 68
diff changeset
    36
 be provided or otherwise made available to, or used by, any
070ba8eb911e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 68
diff changeset
    37
 other person.  No title to or ownership of the software is
070ba8eb911e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 68
diff changeset
    38
 hereby transferred.
070ba8eb911e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 68
diff changeset
    39
"
9
f5b6ab00bdf6 *** empty log message ***
claus
parents: 5
diff changeset
    40
!
f5b6ab00bdf6 *** empty log message ***
claus
parents: 5
diff changeset
    41
f5b6ab00bdf6 *** empty log message ***
claus
parents: 5
diff changeset
    42
documentation
f5b6ab00bdf6 *** empty log message ***
claus
parents: 5
diff changeset
    43
"
f5b6ab00bdf6 *** empty log message ***
claus
parents: 5
diff changeset
    44
    MessageTally allows profiling excution of a block; 
f5b6ab00bdf6 *** empty log message ***
claus
parents: 5
diff changeset
    45
    statistic of method evaluation is output on Transcript.
f5b6ab00bdf6 *** empty log message ***
claus
parents: 5
diff changeset
    46
    To get statistic, use 'MessageTally spyOn:aBlock'.
f5b6ab00bdf6 *** empty log message ***
claus
parents: 5
diff changeset
    47
21
c521be54a8e6 *** empty log message ***
claus
parents: 17
diff changeset
    48
    By default, probing is done every 10ms (i.e. the execution of the block is 
c521be54a8e6 *** empty log message ***
claus
parents: 17
diff changeset
    49
    interrupted every 10ms, and the context chain analyzed).
260
bd12742cab04 commentary
Claus Gittinger <cg@exept.de>
parents: 259
diff changeset
    50
21
c521be54a8e6 *** empty log message ***
claus
parents: 17
diff changeset
    51
    For better resolution, use smaller clock ticks (if your OperatingSystem
260
bd12742cab04 commentary
Claus Gittinger <cg@exept.de>
parents: 259
diff changeset
    52
    supports it). Try 'spyDetailedOn:aBlock', which tries to measure things
bd12742cab04 commentary
Claus Gittinger <cg@exept.de>
parents: 259
diff changeset
    53
    every 1ms. 
bd12742cab04 commentary
Claus Gittinger <cg@exept.de>
parents: 259
diff changeset
    54
    (Notice, that some OS's do not provide this timer resolution,
bd12742cab04 commentary
Claus Gittinger <cg@exept.de>
parents: 259
diff changeset
    55
     so measuring may be less accurate.)
bd12742cab04 commentary
Claus Gittinger <cg@exept.de>
parents: 259
diff changeset
    56
bd12742cab04 commentary
Claus Gittinger <cg@exept.de>
parents: 259
diff changeset
    57
    For good results, make certain that the measured block runs for some
bd12742cab04 commentary
Claus Gittinger <cg@exept.de>
parents: 259
diff changeset
    58
    time (say 5 seconds) - add a timesRepeat-loop around it if required.
236
7f570e0a0a75 documentation
Claus Gittinger <cg@exept.de>
parents: 120
diff changeset
    59
561
4c7d7e58cc8a better printOut & comment.
Claus Gittinger <cg@exept.de>
parents: 559
diff changeset
    60
    The displayed information is:
4c7d7e58cc8a better printOut & comment.
Claus Gittinger <cg@exept.de>
parents: 559
diff changeset
    61
        - the calling tree augmented with total and leaf times.
4c7d7e58cc8a better printOut & comment.
Claus Gittinger <cg@exept.de>
parents: 559
diff changeset
    62
          the leaf time is the time spent in the method itself;
4c7d7e58cc8a better printOut & comment.
Claus Gittinger <cg@exept.de>
parents: 559
diff changeset
    63
          the total time is the time spent in the method and all of its called
4c7d7e58cc8a better printOut & comment.
Claus Gittinger <cg@exept.de>
parents: 559
diff changeset
    64
          methods.
4c7d7e58cc8a better printOut & comment.
Claus Gittinger <cg@exept.de>
parents: 559
diff changeset
    65
4c7d7e58cc8a better printOut & comment.
Claus Gittinger <cg@exept.de>
parents: 559
diff changeset
    66
        - the leaf methods by receiver
4c7d7e58cc8a better printOut & comment.
Claus Gittinger <cg@exept.de>
parents: 559
diff changeset
    67
          this lists the leaf nodes only, sorted by time spent there.
4c7d7e58cc8a better printOut & comment.
Claus Gittinger <cg@exept.de>
parents: 559
diff changeset
    68
          Here, method invocations for different receiver types are
4c7d7e58cc8a better printOut & comment.
Claus Gittinger <cg@exept.de>
parents: 559
diff changeset
    69
          listed separately.
4c7d7e58cc8a better printOut & comment.
Claus Gittinger <cg@exept.de>
parents: 559
diff changeset
    70
4c7d7e58cc8a better printOut & comment.
Claus Gittinger <cg@exept.de>
parents: 559
diff changeset
    71
        - the leaf methods
4c7d7e58cc8a better printOut & comment.
Claus Gittinger <cg@exept.de>
parents: 559
diff changeset
    72
          this lists the leaf nodes only, sorted by time spent there.
4c7d7e58cc8a better printOut & comment.
Claus Gittinger <cg@exept.de>
parents: 559
diff changeset
    73
          Here, method invocations for different receiver types are
4c7d7e58cc8a better printOut & comment.
Claus Gittinger <cg@exept.de>
parents: 559
diff changeset
    74
          summed up separately.
4c7d7e58cc8a better printOut & comment.
Claus Gittinger <cg@exept.de>
parents: 559
diff changeset
    75
594
Claus Gittinger <cg@exept.de>
parents: 589
diff changeset
    76
    The last list (leaf methods) is propably the most interesting;
Claus Gittinger <cg@exept.de>
parents: 589
diff changeset
    77
    if you are only interested in that (or the calling hierarchy is too
565
01241f73a7a0 dont increment tally for ignored contexts.
Claus Gittinger <cg@exept.de>
parents: 564
diff changeset
    78
    deep for the list to be useful or the amount of data to be handled
01241f73a7a0 dont increment tally for ignored contexts.
Claus Gittinger <cg@exept.de>
parents: 564
diff changeset
    79
    correctly), use a leaf-spy with:
01241f73a7a0 dont increment tally for ignored contexts.
Claus Gittinger <cg@exept.de>
parents: 564
diff changeset
    80
        MessageTally spyLeafOn:aBlock
01241f73a7a0 dont increment tally for ignored contexts.
Claus Gittinger <cg@exept.de>
parents: 564
diff changeset
    81
    This only accumulates statistics about methods where the cpu time
01241f73a7a0 dont increment tally for ignored contexts.
Claus Gittinger <cg@exept.de>
parents: 564
diff changeset
    82
    is actually spent (not collecing hierarchy information).
01241f73a7a0 dont increment tally for ignored contexts.
Claus Gittinger <cg@exept.de>
parents: 564
diff changeset
    83
561
4c7d7e58cc8a better printOut & comment.
Claus Gittinger <cg@exept.de>
parents: 559
diff changeset
    84
236
7f570e0a0a75 documentation
Claus Gittinger <cg@exept.de>
parents: 120
diff changeset
    85
    [author:]
7f570e0a0a75 documentation
Claus Gittinger <cg@exept.de>
parents: 120
diff changeset
    86
        Claus Gittinger
260
bd12742cab04 commentary
Claus Gittinger <cg@exept.de>
parents: 259
diff changeset
    87
bd12742cab04 commentary
Claus Gittinger <cg@exept.de>
parents: 259
diff changeset
    88
    [see also:]
261
2fb596a13d0c commentary
Claus Gittinger <cg@exept.de>
parents: 260
diff changeset
    89
        CallChain ProfileTree
2fb596a13d0c commentary
Claus Gittinger <cg@exept.de>
parents: 260
diff changeset
    90
        MessageTracer
21
c521be54a8e6 *** empty log message ***
claus
parents: 17
diff changeset
    91
"
c521be54a8e6 *** empty log message ***
claus
parents: 17
diff changeset
    92
!
c521be54a8e6 *** empty log message ***
claus
parents: 17
diff changeset
    93
c521be54a8e6 *** empty log message ***
claus
parents: 17
diff changeset
    94
examples
9
f5b6ab00bdf6 *** empty log message ***
claus
parents: 5
diff changeset
    95
"
565
01241f73a7a0 dont increment tally for ignored contexts.
Claus Gittinger <cg@exept.de>
parents: 564
diff changeset
    96
  the block must execute for a while;
01241f73a7a0 dont increment tally for ignored contexts.
Claus Gittinger <cg@exept.de>
parents: 564
diff changeset
    97
  otherwise, no probes (and therefore no statistics) can
01241f73a7a0 dont increment tally for ignored contexts.
Claus Gittinger <cg@exept.de>
parents: 564
diff changeset
    98
  be gathered:
244
42acac0f7b8c examples
Claus Gittinger <cg@exept.de>
parents: 236
diff changeset
    99
                                                                        [exBegin]
4013
50bc8d72e5b9 #DOCUMENTATION by stefan
Stefan Vogel <sv@exept.de>
parents: 2970
diff changeset
   100
     MessageTally spyOn:[ #(6 5 4 3 2 1) copy sort ]
244
42acac0f7b8c examples
Claus Gittinger <cg@exept.de>
parents: 236
diff changeset
   101
                                                                        [exEnd]
42acac0f7b8c examples
Claus Gittinger <cg@exept.de>
parents: 236
diff changeset
   102
42acac0f7b8c examples
Claus Gittinger <cg@exept.de>
parents: 236
diff changeset
   103
565
01241f73a7a0 dont increment tally for ignored contexts.
Claus Gittinger <cg@exept.de>
parents: 564
diff changeset
   104
  if required, execute the block in a loop;
01241f73a7a0 dont increment tally for ignored contexts.
Claus Gittinger <cg@exept.de>
parents: 564
diff changeset
   105
  however, for the example below, a larger repeat count
01241f73a7a0 dont increment tally for ignored contexts.
Claus Gittinger <cg@exept.de>
parents: 564
diff changeset
   106
  is required, for a reasonable measurement:
244
42acac0f7b8c examples
Claus Gittinger <cg@exept.de>
parents: 236
diff changeset
   107
                                                                        [exBegin]
259
eb2d1a3e3b52 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 256
diff changeset
   108
     MessageTally spyOn:[
4013
50bc8d72e5b9 #DOCUMENTATION by stefan
Stefan Vogel <sv@exept.de>
parents: 2970
diff changeset
   109
        10000 timesRepeat:[ #(6 5 4 3 2 1) copy sort] 
259
eb2d1a3e3b52 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 256
diff changeset
   110
     ]
244
42acac0f7b8c examples
Claus Gittinger <cg@exept.de>
parents: 236
diff changeset
   111
                                                                        [exEnd]
42acac0f7b8c examples
Claus Gittinger <cg@exept.de>
parents: 236
diff changeset
   112
42acac0f7b8c examples
Claus Gittinger <cg@exept.de>
parents: 236
diff changeset
   113
4096
5535543c5db8 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 4013
diff changeset
   114
  that's better:
244
42acac0f7b8c examples
Claus Gittinger <cg@exept.de>
parents: 236
diff changeset
   115
                                                                        [exBegin]
259
eb2d1a3e3b52 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 256
diff changeset
   116
     MessageTally spyOn:[
4013
50bc8d72e5b9 #DOCUMENTATION by stefan
Stefan Vogel <sv@exept.de>
parents: 2970
diff changeset
   117
        100000 timesRepeat:[ #(6 5 4 3 2 1) copy sort] 
259
eb2d1a3e3b52 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 256
diff changeset
   118
     ]
244
42acac0f7b8c examples
Claus Gittinger <cg@exept.de>
parents: 236
diff changeset
   119
                                                                        [exEnd]
42acac0f7b8c examples
Claus Gittinger <cg@exept.de>
parents: 236
diff changeset
   120
42acac0f7b8c examples
Claus Gittinger <cg@exept.de>
parents: 236
diff changeset
   121
4096
5535543c5db8 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 4013
diff changeset
   122
  that's much better
244
42acac0f7b8c examples
Claus Gittinger <cg@exept.de>
parents: 236
diff changeset
   123
                                                                        [exBegin]
259
eb2d1a3e3b52 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 256
diff changeset
   124
     MessageTally spyOn:[
4013
50bc8d72e5b9 #DOCUMENTATION by stefan
Stefan Vogel <sv@exept.de>
parents: 2970
diff changeset
   125
        500000 timesRepeat:[#(6 5 4 3 2 1) copy sort] 
259
eb2d1a3e3b52 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 256
diff changeset
   126
     ]
244
42acac0f7b8c examples
Claus Gittinger <cg@exept.de>
parents: 236
diff changeset
   127
                                                                        [exEnd]
42acac0f7b8c examples
Claus Gittinger <cg@exept.de>
parents: 236
diff changeset
   128
42acac0f7b8c examples
Claus Gittinger <cg@exept.de>
parents: 236
diff changeset
   129
565
01241f73a7a0 dont increment tally for ignored contexts.
Claus Gittinger <cg@exept.de>
parents: 564
diff changeset
   130
  a smaller probing tick also helps:
244
42acac0f7b8c examples
Claus Gittinger <cg@exept.de>
parents: 236
diff changeset
   131
                                                                        [exBegin]
259
eb2d1a3e3b52 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 256
diff changeset
   132
     MessageTally spyDetailedOn:[
570
9c3efb856ee6 allow spy output to be sent to some stream
Claus Gittinger <cg@exept.de>
parents: 567
diff changeset
   133
        500000 timesRepeat:[(10 to:1 by:-1) asArray reverse] 
259
eb2d1a3e3b52 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 256
diff changeset
   134
     ]
244
42acac0f7b8c examples
Claus Gittinger <cg@exept.de>
parents: 236
diff changeset
   135
                                                                        [exEnd]
42acac0f7b8c examples
Claus Gittinger <cg@exept.de>
parents: 236
diff changeset
   136
21
c521be54a8e6 *** empty log message ***
claus
parents: 17
diff changeset
   137
565
01241f73a7a0 dont increment tally for ignored contexts.
Claus Gittinger <cg@exept.de>
parents: 564
diff changeset
   138
  as usual, measurements add some extra overhead;
01241f73a7a0 dont increment tally for ignored contexts.
Claus Gittinger <cg@exept.de>
parents: 564
diff changeset
   139
  compare the above time to the time given by:
244
42acac0f7b8c examples
Claus Gittinger <cg@exept.de>
parents: 236
diff changeset
   140
                                                                        [exBegin]
565
01241f73a7a0 dont increment tally for ignored contexts.
Claus Gittinger <cg@exept.de>
parents: 564
diff changeset
   141
     Transcript showCR:(
01241f73a7a0 dont increment tally for ignored contexts.
Claus Gittinger <cg@exept.de>
parents: 564
diff changeset
   142
         Time millisecondsToRun:[
4013
50bc8d72e5b9 #DOCUMENTATION by stefan
Stefan Vogel <sv@exept.de>
parents: 2970
diff changeset
   143
            500000 timesRepeat:[#(6 5 4 3 2 1) copy sort] 
565
01241f73a7a0 dont increment tally for ignored contexts.
Claus Gittinger <cg@exept.de>
parents: 564
diff changeset
   144
         ]
01241f73a7a0 dont increment tally for ignored contexts.
Claus Gittinger <cg@exept.de>
parents: 564
diff changeset
   145
     )
01241f73a7a0 dont increment tally for ignored contexts.
Claus Gittinger <cg@exept.de>
parents: 564
diff changeset
   146
                                                                        [exEnd]
01241f73a7a0 dont increment tally for ignored contexts.
Claus Gittinger <cg@exept.de>
parents: 564
diff changeset
   147
  probing the leafs only may help to reduce the overhead
01241f73a7a0 dont increment tally for ignored contexts.
Claus Gittinger <cg@exept.de>
parents: 564
diff changeset
   148
  a bit:
01241f73a7a0 dont increment tally for ignored contexts.
Claus Gittinger <cg@exept.de>
parents: 564
diff changeset
   149
                                                                        [exBegin]
01241f73a7a0 dont increment tally for ignored contexts.
Claus Gittinger <cg@exept.de>
parents: 564
diff changeset
   150
     MessageTally spyLeafDetailedOn:[
4013
50bc8d72e5b9 #DOCUMENTATION by stefan
Stefan Vogel <sv@exept.de>
parents: 2970
diff changeset
   151
        500000 timesRepeat:[#(6 5 4 3 2 1) copy sort] 
259
eb2d1a3e3b52 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 256
diff changeset
   152
     ]
244
42acac0f7b8c examples
Claus Gittinger <cg@exept.de>
parents: 236
diff changeset
   153
                                                                        [exEnd]
42acac0f7b8c examples
Claus Gittinger <cg@exept.de>
parents: 236
diff changeset
   154
42acac0f7b8c examples
Claus Gittinger <cg@exept.de>
parents: 236
diff changeset
   155
565
01241f73a7a0 dont increment tally for ignored contexts.
Claus Gittinger <cg@exept.de>
parents: 564
diff changeset
   156
01241f73a7a0 dont increment tally for ignored contexts.
Claus Gittinger <cg@exept.de>
parents: 564
diff changeset
   157
244
42acac0f7b8c examples
Claus Gittinger <cg@exept.de>
parents: 236
diff changeset
   158
                                                                        [exBegin]
21
c521be54a8e6 *** empty log message ***
claus
parents: 17
diff changeset
   159
     MessageTally spyOn:[SystemBrowser open ]
244
42acac0f7b8c examples
Claus Gittinger <cg@exept.de>
parents: 236
diff changeset
   160
                                                                        [exEnd]
42acac0f7b8c examples
Claus Gittinger <cg@exept.de>
parents: 236
diff changeset
   161
42acac0f7b8c examples
Claus Gittinger <cg@exept.de>
parents: 236
diff changeset
   162
42acac0f7b8c examples
Claus Gittinger <cg@exept.de>
parents: 236
diff changeset
   163
                                                                        [exBegin]
21
c521be54a8e6 *** empty log message ***
claus
parents: 17
diff changeset
   164
     MessageTally spyDetailedOn:[SystemBrowser open ]
244
42acac0f7b8c examples
Claus Gittinger <cg@exept.de>
parents: 236
diff changeset
   165
                                                                        [exEnd]
21
c521be54a8e6 *** empty log message ***
claus
parents: 17
diff changeset
   166
"
9
f5b6ab00bdf6 *** empty log message ***
claus
parents: 5
diff changeset
   167
! !
0
470788421600 Initial revision
claus
parents:
diff changeset
   168
2970
Claus Gittinger <cg@exept.de>
parents: 2932
diff changeset
   169
!MessageTally class methodsFor:'constants'!
Claus Gittinger <cg@exept.de>
parents: 2932
diff changeset
   170
Claus Gittinger <cg@exept.de>
parents: 2932
diff changeset
   171
detailedSamplingIntervalMS
Claus Gittinger <cg@exept.de>
parents: 2932
diff changeset
   172
    ^ 1
Claus Gittinger <cg@exept.de>
parents: 2932
diff changeset
   173
!
Claus Gittinger <cg@exept.de>
parents: 2932
diff changeset
   174
Claus Gittinger <cg@exept.de>
parents: 2932
diff changeset
   175
normalSamplingIntervalMS
Claus Gittinger <cg@exept.de>
parents: 2932
diff changeset
   176
    ^ 10
Claus Gittinger <cg@exept.de>
parents: 2932
diff changeset
   177
! !
Claus Gittinger <cg@exept.de>
parents: 2932
diff changeset
   178
1280
f08fe6cf6348 category
Claus Gittinger <cg@exept.de>
parents: 1152
diff changeset
   179
!MessageTally class methodsFor:'spying-private'!
564
d549f0b9c2f2 tallied block now executes under thisProcess;
Claus Gittinger <cg@exept.de>
parents: 561
diff changeset
   180
570
9c3efb856ee6 allow spy output to be sent to some stream
Claus Gittinger <cg@exept.de>
parents: 567
diff changeset
   181
spyLeafOn:aBlock interval:ms to:outStream
2970
Claus Gittinger <cg@exept.de>
parents: 2932
diff changeset
   182
    "evaluate aBlock and output leaf method statistics on outStream.
Claus Gittinger <cg@exept.de>
parents: 2932
diff changeset
   183
     Return the value from aBlock."
564
d549f0b9c2f2 tallied block now executes under thisProcess;
Claus Gittinger <cg@exept.de>
parents: 561
diff changeset
   184
2970
Claus Gittinger <cg@exept.de>
parents: 2932
diff changeset
   185
    |aTally retVal|
564
d549f0b9c2f2 tallied block now executes under thisProcess;
Claus Gittinger <cg@exept.de>
parents: 561
diff changeset
   186
d549f0b9c2f2 tallied block now executes under thisProcess;
Claus Gittinger <cg@exept.de>
parents: 561
diff changeset
   187
    aTally := self new.
d549f0b9c2f2 tallied block now executes under thisProcess;
Claus Gittinger <cg@exept.de>
parents: 561
diff changeset
   188
571
58e603e1ce24 made all print stuff instance methods;
Claus Gittinger <cg@exept.de>
parents: 570
diff changeset
   189
    [
58e603e1ce24 made all print stuff instance methods;
Claus Gittinger <cg@exept.de>
parents: 570
diff changeset
   190
        [
2970
Claus Gittinger <cg@exept.de>
parents: 2932
diff changeset
   191
            retVal := aTally spyLeafOn:aBlock interval:ms.
1152
b1f95f16a0a4 Use #ifCurtailed: instead of #valueOnUnwindDo:
Stefan Vogel <sv@exept.de>
parents: 1139
diff changeset
   192
        ] ifCurtailed:[
571
58e603e1ce24 made all print stuff instance methods;
Claus Gittinger <cg@exept.de>
parents: 570
diff changeset
   193
            outStream nextPutLine:'TALLY: block returned'.
58e603e1ce24 made all print stuff instance methods;
Claus Gittinger <cg@exept.de>
parents: 570
diff changeset
   194
        ]
1139
56861678ff27 #valueNowOrOnUnwindDo: -> #ensure:
Claus Gittinger <cg@exept.de>
parents: 963
diff changeset
   195
    ] ensure:[
571
58e603e1ce24 made all print stuff instance methods;
Claus Gittinger <cg@exept.de>
parents: 570
diff changeset
   196
        aTally printLeafStatisticOn:outStream
564
d549f0b9c2f2 tallied block now executes under thisProcess;
Claus Gittinger <cg@exept.de>
parents: 561
diff changeset
   197
    ].
2970
Claus Gittinger <cg@exept.de>
parents: 2932
diff changeset
   198
    ^ retVal
564
d549f0b9c2f2 tallied block now executes under thisProcess;
Claus Gittinger <cg@exept.de>
parents: 561
diff changeset
   199
571
58e603e1ce24 made all print stuff instance methods;
Claus Gittinger <cg@exept.de>
parents: 570
diff changeset
   200
    "Modified: 22.3.1997 / 16:50:47 / cg"
88
070ba8eb911e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 68
diff changeset
   201
!
070ba8eb911e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 68
diff changeset
   202
570
9c3efb856ee6 allow spy output to be sent to some stream
Claus Gittinger <cg@exept.de>
parents: 567
diff changeset
   203
spyOn:aBlock interval:ms to:outStream
2970
Claus Gittinger <cg@exept.de>
parents: 2932
diff changeset
   204
    "evaluate aBlock and output full statistics on outstream.
Claus Gittinger <cg@exept.de>
parents: 2932
diff changeset
   205
     Return the value from aBlock."
0
470788421600 Initial revision
claus
parents:
diff changeset
   206
2249
b832323d4c13 changed:
Claus Gittinger <cg@exept.de>
parents: 1439
diff changeset
   207
    |aTally retVal|
0
470788421600 Initial revision
claus
parents:
diff changeset
   208
470788421600 Initial revision
claus
parents:
diff changeset
   209
    aTally := self new.
21
c521be54a8e6 *** empty log message ***
claus
parents: 17
diff changeset
   210
571
58e603e1ce24 made all print stuff instance methods;
Claus Gittinger <cg@exept.de>
parents: 570
diff changeset
   211
    [
58e603e1ce24 made all print stuff instance methods;
Claus Gittinger <cg@exept.de>
parents: 570
diff changeset
   212
        [
2249
b832323d4c13 changed:
Claus Gittinger <cg@exept.de>
parents: 1439
diff changeset
   213
            retVal := aTally spyOn:aBlock interval:ms.
1152
b1f95f16a0a4 Use #ifCurtailed: instead of #valueOnUnwindDo:
Stefan Vogel <sv@exept.de>
parents: 1139
diff changeset
   214
        ] ifCurtailed:[
571
58e603e1ce24 made all print stuff instance methods;
Claus Gittinger <cg@exept.de>
parents: 570
diff changeset
   215
            outStream nextPutLine:'TALLY: block returned'.
58e603e1ce24 made all print stuff instance methods;
Claus Gittinger <cg@exept.de>
parents: 570
diff changeset
   216
        ]
1139
56861678ff27 #valueNowOrOnUnwindDo: -> #ensure:
Claus Gittinger <cg@exept.de>
parents: 963
diff changeset
   217
    ] ensure:[
571
58e603e1ce24 made all print stuff instance methods;
Claus Gittinger <cg@exept.de>
parents: 570
diff changeset
   218
        aTally printFullStatisticOn:outStream
564
d549f0b9c2f2 tallied block now executes under thisProcess;
Claus Gittinger <cg@exept.de>
parents: 561
diff changeset
   219
    ].
2249
b832323d4c13 changed:
Claus Gittinger <cg@exept.de>
parents: 1439
diff changeset
   220
    ^ retVal
564
d549f0b9c2f2 tallied block now executes under thisProcess;
Claus Gittinger <cg@exept.de>
parents: 561
diff changeset
   221
571
58e603e1ce24 made all print stuff instance methods;
Claus Gittinger <cg@exept.de>
parents: 570
diff changeset
   222
    "Modified: 22.3.1997 / 16:54:36 / cg"
564
d549f0b9c2f2 tallied block now executes under thisProcess;
Claus Gittinger <cg@exept.de>
parents: 561
diff changeset
   223
! !
d549f0b9c2f2 tallied block now executes under thisProcess;
Claus Gittinger <cg@exept.de>
parents: 561
diff changeset
   224
1280
f08fe6cf6348 category
Claus Gittinger <cg@exept.de>
parents: 1152
diff changeset
   225
!MessageTally class methodsFor:'spying-public interface'!
570
9c3efb856ee6 allow spy output to be sent to some stream
Claus Gittinger <cg@exept.de>
parents: 567
diff changeset
   226
9c3efb856ee6 allow spy output to be sent to some stream
Claus Gittinger <cg@exept.de>
parents: 567
diff changeset
   227
spyDetailedOn:aBlock
9c3efb856ee6 allow spy output to be sent to some stream
Claus Gittinger <cg@exept.de>
parents: 567
diff changeset
   228
    "evaluate aBlock and output full statistics on the Transcript.
9c3efb856ee6 allow spy output to be sent to some stream
Claus Gittinger <cg@exept.de>
parents: 567
diff changeset
   229
     The Tick is 1ms for more detailed measurement.
1376
7feb7011cdc2 Fix typos
Stefan Vogel <sv@exept.de>
parents: 1280
diff changeset
   230
     Notice: not all architectures support such a small timer interval."
570
9c3efb856ee6 allow spy output to be sent to some stream
Claus Gittinger <cg@exept.de>
parents: 567
diff changeset
   231
2970
Claus Gittinger <cg@exept.de>
parents: 2932
diff changeset
   232
    ^ self spyOn:aBlock interval:(self detailedSamplingIntervalMS) to:Transcript
570
9c3efb856ee6 allow spy output to be sent to some stream
Claus Gittinger <cg@exept.de>
parents: 567
diff changeset
   233
9c3efb856ee6 allow spy output to be sent to some stream
Claus Gittinger <cg@exept.de>
parents: 567
diff changeset
   234
    "Modified: 22.3.1997 / 16:26:39 / cg"
9c3efb856ee6 allow spy output to be sent to some stream
Claus Gittinger <cg@exept.de>
parents: 567
diff changeset
   235
!
9c3efb856ee6 allow spy output to be sent to some stream
Claus Gittinger <cg@exept.de>
parents: 567
diff changeset
   236
9c3efb856ee6 allow spy output to be sent to some stream
Claus Gittinger <cg@exept.de>
parents: 567
diff changeset
   237
spyLeafDetailedOn:aBlock
9c3efb856ee6 allow spy output to be sent to some stream
Claus Gittinger <cg@exept.de>
parents: 567
diff changeset
   238
    "evaluate aBlock and output leaf method statistics on the Transcript.
9c3efb856ee6 allow spy output to be sent to some stream
Claus Gittinger <cg@exept.de>
parents: 567
diff changeset
   239
     The Tick is 1ms for more detailed measurement.
1376
7feb7011cdc2 Fix typos
Stefan Vogel <sv@exept.de>
parents: 1280
diff changeset
   240
     Notice: not all architectures support such a small timer interval."
570
9c3efb856ee6 allow spy output to be sent to some stream
Claus Gittinger <cg@exept.de>
parents: 567
diff changeset
   241
2970
Claus Gittinger <cg@exept.de>
parents: 2932
diff changeset
   242
    ^ self spyLeafOn:aBlock interval:(self detailedSamplingIntervalMS) to:Transcript
564
d549f0b9c2f2 tallied block now executes under thisProcess;
Claus Gittinger <cg@exept.de>
parents: 561
diff changeset
   243
570
9c3efb856ee6 allow spy output to be sent to some stream
Claus Gittinger <cg@exept.de>
parents: 567
diff changeset
   244
    "Created: 20.3.1997 / 20:41:53 / cg"
9c3efb856ee6 allow spy output to be sent to some stream
Claus Gittinger <cg@exept.de>
parents: 567
diff changeset
   245
    "Modified: 22.3.1997 / 16:26:47 / cg"
9c3efb856ee6 allow spy output to be sent to some stream
Claus Gittinger <cg@exept.de>
parents: 567
diff changeset
   246
!
9c3efb856ee6 allow spy output to be sent to some stream
Claus Gittinger <cg@exept.de>
parents: 567
diff changeset
   247
9c3efb856ee6 allow spy output to be sent to some stream
Claus Gittinger <cg@exept.de>
parents: 567
diff changeset
   248
spyLeafOn:aBlock
9c3efb856ee6 allow spy output to be sent to some stream
Claus Gittinger <cg@exept.de>
parents: 567
diff changeset
   249
    "evaluate aBlock and output leaf method statistics on the Transcript.
9c3efb856ee6 allow spy output to be sent to some stream
Claus Gittinger <cg@exept.de>
parents: 567
diff changeset
   250
     The Tick is 10ms for less detailed measurements."
9c3efb856ee6 allow spy output to be sent to some stream
Claus Gittinger <cg@exept.de>
parents: 567
diff changeset
   251
2970
Claus Gittinger <cg@exept.de>
parents: 2932
diff changeset
   252
    ^ self spyLeafOn:aBlock interval:(self normalSamplingIntervalMS) to:Transcript
564
d549f0b9c2f2 tallied block now executes under thisProcess;
Claus Gittinger <cg@exept.de>
parents: 561
diff changeset
   253
570
9c3efb856ee6 allow spy output to be sent to some stream
Claus Gittinger <cg@exept.de>
parents: 567
diff changeset
   254
    "Created: 20.3.1997 / 20:41:40 / cg"
9c3efb856ee6 allow spy output to be sent to some stream
Claus Gittinger <cg@exept.de>
parents: 567
diff changeset
   255
    "Modified: 22.3.1997 / 16:26:49 / cg"
9c3efb856ee6 allow spy output to be sent to some stream
Claus Gittinger <cg@exept.de>
parents: 567
diff changeset
   256
!
9c3efb856ee6 allow spy output to be sent to some stream
Claus Gittinger <cg@exept.de>
parents: 567
diff changeset
   257
9c3efb856ee6 allow spy output to be sent to some stream
Claus Gittinger <cg@exept.de>
parents: 567
diff changeset
   258
spyOn:aBlock
9c3efb856ee6 allow spy output to be sent to some stream
Claus Gittinger <cg@exept.de>
parents: 567
diff changeset
   259
    "evaluate aBlock and output full statistics on the Transcript.
9c3efb856ee6 allow spy output to be sent to some stream
Claus Gittinger <cg@exept.de>
parents: 567
diff changeset
   260
     The Tick is 10ms for less detailed measurements."
9c3efb856ee6 allow spy output to be sent to some stream
Claus Gittinger <cg@exept.de>
parents: 567
diff changeset
   261
2970
Claus Gittinger <cg@exept.de>
parents: 2932
diff changeset
   262
    ^ self spyOn:aBlock interval:(self normalSamplingIntervalMS) to:Transcript
570
9c3efb856ee6 allow spy output to be sent to some stream
Claus Gittinger <cg@exept.de>
parents: 567
diff changeset
   263
9c3efb856ee6 allow spy output to be sent to some stream
Claus Gittinger <cg@exept.de>
parents: 567
diff changeset
   264
    "Modified: 22.3.1997 / 16:26:51 / cg"
88
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
070ba8eb911e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 68
diff changeset
   267
!MessageTally methodsFor:'accessing'!
070ba8eb911e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 68
diff changeset
   268
571
58e603e1ce24 made all print stuff instance methods;
Claus Gittinger <cg@exept.de>
parents: 570
diff changeset
   269
endTime
58e603e1ce24 made all print stuff instance methods;
Claus Gittinger <cg@exept.de>
parents: 570
diff changeset
   270
    "return the endTime of the run"
58e603e1ce24 made all print stuff instance methods;
Claus Gittinger <cg@exept.de>
parents: 570
diff changeset
   271
58e603e1ce24 made all print stuff instance methods;
Claus Gittinger <cg@exept.de>
parents: 570
diff changeset
   272
    ^ endTime
58e603e1ce24 made all print stuff instance methods;
Claus Gittinger <cg@exept.de>
parents: 570
diff changeset
   273
58e603e1ce24 made all print stuff instance methods;
Claus Gittinger <cg@exept.de>
parents: 570
diff changeset
   274
    "Modified: 18.5.1996 / 18:47:47 / cg"
58e603e1ce24 made all print stuff instance methods;
Claus Gittinger <cg@exept.de>
parents: 570
diff changeset
   275
    "Created: 22.3.1997 / 16:44:29 / cg"
58e603e1ce24 made all print stuff instance methods;
Claus Gittinger <cg@exept.de>
parents: 570
diff changeset
   276
!
58e603e1ce24 made all print stuff instance methods;
Claus Gittinger <cg@exept.de>
parents: 570
diff changeset
   277
88
070ba8eb911e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 68
diff changeset
   278
nTally 
260
bd12742cab04 commentary
Claus Gittinger <cg@exept.de>
parents: 259
diff changeset
   279
    "return the number of accumulated probes"
bd12742cab04 commentary
Claus Gittinger <cg@exept.de>
parents: 259
diff changeset
   280
bd12742cab04 commentary
Claus Gittinger <cg@exept.de>
parents: 259
diff changeset
   281
    ^ ntally
bd12742cab04 commentary
Claus Gittinger <cg@exept.de>
parents: 259
diff changeset
   282
bd12742cab04 commentary
Claus Gittinger <cg@exept.de>
parents: 259
diff changeset
   283
    "Modified: 18.5.1996 / 18:47:47 / cg"
0
470788421600 Initial revision
claus
parents:
diff changeset
   284
!
470788421600 Initial revision
claus
parents:
diff changeset
   285
564
d549f0b9c2f2 tallied block now executes under thisProcess;
Claus Gittinger <cg@exept.de>
parents: 561
diff changeset
   286
probes
d549f0b9c2f2 tallied block now executes under thisProcess;
Claus Gittinger <cg@exept.de>
parents: 561
diff changeset
   287
    "return the accumulated collection of flat probes"
d549f0b9c2f2 tallied block now executes under thisProcess;
Claus Gittinger <cg@exept.de>
parents: 561
diff changeset
   288
d549f0b9c2f2 tallied block now executes under thisProcess;
Claus Gittinger <cg@exept.de>
parents: 561
diff changeset
   289
    ^ probes
d549f0b9c2f2 tallied block now executes under thisProcess;
Claus Gittinger <cg@exept.de>
parents: 561
diff changeset
   290
d549f0b9c2f2 tallied block now executes under thisProcess;
Claus Gittinger <cg@exept.de>
parents: 561
diff changeset
   291
    "Modified: 18.5.1996 / 18:47:57 / cg"
d549f0b9c2f2 tallied block now executes under thisProcess;
Claus Gittinger <cg@exept.de>
parents: 561
diff changeset
   292
    "Created: 20.3.1997 / 20:54:19 / cg"
d549f0b9c2f2 tallied block now executes under thisProcess;
Claus Gittinger <cg@exept.de>
parents: 561
diff changeset
   293
!
d549f0b9c2f2 tallied block now executes under thisProcess;
Claus Gittinger <cg@exept.de>
parents: 561
diff changeset
   294
571
58e603e1ce24 made all print stuff instance methods;
Claus Gittinger <cg@exept.de>
parents: 570
diff changeset
   295
startTime
58e603e1ce24 made all print stuff instance methods;
Claus Gittinger <cg@exept.de>
parents: 570
diff changeset
   296
    "return the startTime of the run"
58e603e1ce24 made all print stuff instance methods;
Claus Gittinger <cg@exept.de>
parents: 570
diff changeset
   297
58e603e1ce24 made all print stuff instance methods;
Claus Gittinger <cg@exept.de>
parents: 570
diff changeset
   298
    ^ startTime
58e603e1ce24 made all print stuff instance methods;
Claus Gittinger <cg@exept.de>
parents: 570
diff changeset
   299
58e603e1ce24 made all print stuff instance methods;
Claus Gittinger <cg@exept.de>
parents: 570
diff changeset
   300
    "Modified: 18.5.1996 / 18:47:47 / cg"
58e603e1ce24 made all print stuff instance methods;
Claus Gittinger <cg@exept.de>
parents: 570
diff changeset
   301
    "Created: 22.3.1997 / 16:44:33 / cg"
58e603e1ce24 made all print stuff instance methods;
Claus Gittinger <cg@exept.de>
parents: 570
diff changeset
   302
!
58e603e1ce24 made all print stuff instance methods;
Claus Gittinger <cg@exept.de>
parents: 570
diff changeset
   303
88
070ba8eb911e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 68
diff changeset
   304
tree
260
bd12742cab04 commentary
Claus Gittinger <cg@exept.de>
parents: 259
diff changeset
   305
    "return the accumulated calling tree"
bd12742cab04 commentary
Claus Gittinger <cg@exept.de>
parents: 259
diff changeset
   306
88
070ba8eb911e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 68
diff changeset
   307
    ^ tree
260
bd12742cab04 commentary
Claus Gittinger <cg@exept.de>
parents: 259
diff changeset
   308
bd12742cab04 commentary
Claus Gittinger <cg@exept.de>
parents: 259
diff changeset
   309
    "Modified: 18.5.1996 / 18:47:57 / cg"
0
470788421600 Initial revision
claus
parents:
diff changeset
   310
! !
470788421600 Initial revision
claus
parents:
diff changeset
   311
963
a4fb4b9f7e72 category change
Claus Gittinger <cg@exept.de>
parents: 957
diff changeset
   312
!MessageTally methodsFor:'printing & storing'!
564
d549f0b9c2f2 tallied block now executes under thisProcess;
Claus Gittinger <cg@exept.de>
parents: 561
diff changeset
   313
d549f0b9c2f2 tallied block now executes under thisProcess;
Claus Gittinger <cg@exept.de>
parents: 561
diff changeset
   314
printFlatMethodLeafsOn:aStream
d549f0b9c2f2 tallied block now executes under thisProcess;
Claus Gittinger <cg@exept.de>
parents: 561
diff changeset
   315
    "print all flat method leafNodes statistics on aStream"
d549f0b9c2f2 tallied block now executes under thisProcess;
Claus Gittinger <cg@exept.de>
parents: 561
diff changeset
   316
d549f0b9c2f2 tallied block now executes under thisProcess;
Claus Gittinger <cg@exept.de>
parents: 561
diff changeset
   317
    |leafNodes|
d549f0b9c2f2 tallied block now executes under thisProcess;
Claus Gittinger <cg@exept.de>
parents: 561
diff changeset
   318
567
180b5d0da74b combine multiple invocations of the same method
Claus Gittinger <cg@exept.de>
parents: 565
diff changeset
   319
    leafNodes := OrderedCollection new.
180b5d0da74b combine multiple invocations of the same method
Claus Gittinger <cg@exept.de>
parents: 565
diff changeset
   320
    probes do:[:aProbe | aProbe addMethodLeafNodesTo:leafNodes].
180b5d0da74b combine multiple invocations of the same method
Claus Gittinger <cg@exept.de>
parents: 565
diff changeset
   321
    leafNodes := leafNodes asSortedCollection:[:a :b |
564
d549f0b9c2f2 tallied block now executes under thisProcess;
Claus Gittinger <cg@exept.de>
parents: 561
diff changeset
   322
                                        a leafTally < b leafTally].
d549f0b9c2f2 tallied block now executes under thisProcess;
Claus Gittinger <cg@exept.de>
parents: 561
diff changeset
   323
    leafNodes do:[:aNode |
d549f0b9c2f2 tallied block now executes under thisProcess;
Claus Gittinger <cg@exept.de>
parents: 561
diff changeset
   324
        aNode leafTally ~= 0 ifTrue:[
d549f0b9c2f2 tallied block now executes under thisProcess;
Claus Gittinger <cg@exept.de>
parents: 561
diff changeset
   325
            aNode printSingleMethodLeafOn:aStream.
d549f0b9c2f2 tallied block now executes under thisProcess;
Claus Gittinger <cg@exept.de>
parents: 561
diff changeset
   326
            aStream cr.
d549f0b9c2f2 tallied block now executes under thisProcess;
Claus Gittinger <cg@exept.de>
parents: 561
diff changeset
   327
        ]
d549f0b9c2f2 tallied block now executes under thisProcess;
Claus Gittinger <cg@exept.de>
parents: 561
diff changeset
   328
    ].
d549f0b9c2f2 tallied block now executes under thisProcess;
Claus Gittinger <cg@exept.de>
parents: 561
diff changeset
   329
d549f0b9c2f2 tallied block now executes under thisProcess;
Claus Gittinger <cg@exept.de>
parents: 561
diff changeset
   330
    "Created: 20.3.1997 / 20:56:13 / cg"
567
180b5d0da74b combine multiple invocations of the same method
Claus Gittinger <cg@exept.de>
parents: 565
diff changeset
   331
    "Modified: 21.3.1997 / 10:18:31 / cg"
571
58e603e1ce24 made all print stuff instance methods;
Claus Gittinger <cg@exept.de>
parents: 570
diff changeset
   332
!
58e603e1ce24 made all print stuff instance methods;
Claus Gittinger <cg@exept.de>
parents: 570
diff changeset
   333
58e603e1ce24 made all print stuff instance methods;
Claus Gittinger <cg@exept.de>
parents: 570
diff changeset
   334
printFullStatisticOn:outStream
58e603e1ce24 made all print stuff instance methods;
Claus Gittinger <cg@exept.de>
parents: 570
diff changeset
   335
    "output full statistics on outstream"
58e603e1ce24 made all print stuff instance methods;
Claus Gittinger <cg@exept.de>
parents: 570
diff changeset
   336
589
d2112d37ce36 removed unused variable
Claus Gittinger <cg@exept.de>
parents: 573
diff changeset
   337
    |runTime err|
571
58e603e1ce24 made all print stuff instance methods;
Claus Gittinger <cg@exept.de>
parents: 570
diff changeset
   338
58e603e1ce24 made all print stuff instance methods;
Claus Gittinger <cg@exept.de>
parents: 570
diff changeset
   339
    ntally == 0 ifTrue:[
58e603e1ce24 made all print stuff instance methods;
Claus Gittinger <cg@exept.de>
parents: 570
diff changeset
   340
        self printNoProbesOn:outStream.
58e603e1ce24 made all print stuff instance methods;
Claus Gittinger <cg@exept.de>
parents: 570
diff changeset
   341
        ^ self
58e603e1ce24 made all print stuff instance methods;
Claus Gittinger <cg@exept.de>
parents: 570
diff changeset
   342
    ].
58e603e1ce24 made all print stuff instance methods;
Claus Gittinger <cg@exept.de>
parents: 570
diff changeset
   343
58e603e1ce24 made all print stuff instance methods;
Claus Gittinger <cg@exept.de>
parents: 570
diff changeset
   344
    tree computePercentage:ntally.
58e603e1ce24 made all print stuff instance methods;
Claus Gittinger <cg@exept.de>
parents: 570
diff changeset
   345
58e603e1ce24 made all print stuff instance methods;
Claus Gittinger <cg@exept.de>
parents: 570
diff changeset
   346
    runTime := endTime - startTime.
58e603e1ce24 made all print stuff instance methods;
Claus Gittinger <cg@exept.de>
parents: 570
diff changeset
   347
58e603e1ce24 made all print stuff instance methods;
Claus Gittinger <cg@exept.de>
parents: 570
diff changeset
   348
    outStream cr.
58e603e1ce24 made all print stuff instance methods;
Claus Gittinger <cg@exept.de>
parents: 570
diff changeset
   349
    err := (1000 // ntally / 10.0).
58e603e1ce24 made all print stuff instance methods;
Claus Gittinger <cg@exept.de>
parents: 570
diff changeset
   350
    err > 0 ifTrue:[
58e603e1ce24 made all print stuff instance methods;
Claus Gittinger <cg@exept.de>
parents: 570
diff changeset
   351
        outStream nextPutLine:('total execution time: '
58e603e1ce24 made all print stuff instance methods;
Claus Gittinger <cg@exept.de>
parents: 570
diff changeset
   352
                           , runTime printString , ' ms '
58e603e1ce24 made all print stuff instance methods;
Claus Gittinger <cg@exept.de>
parents: 570
diff changeset
   353
                           , '(' , ntally printString , ' probes ;'
770
2edabfe333f1 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 594
diff changeset
   354
                           , ' error ' 
571
58e603e1ce24 made all print stuff instance methods;
Claus Gittinger <cg@exept.de>
parents: 570
diff changeset
   355
                           , (1000 // ntally / 10.0) printString
58e603e1ce24 made all print stuff instance methods;
Claus Gittinger <cg@exept.de>
parents: 570
diff changeset
   356
                           , '%)'
58e603e1ce24 made all print stuff instance methods;
Claus Gittinger <cg@exept.de>
parents: 570
diff changeset
   357
                          ).
58e603e1ce24 made all print stuff instance methods;
Claus Gittinger <cg@exept.de>
parents: 570
diff changeset
   358
    ] ifFalse:[
58e603e1ce24 made all print stuff instance methods;
Claus Gittinger <cg@exept.de>
parents: 570
diff changeset
   359
        outStream nextPutLine:('total execution time: '
58e603e1ce24 made all print stuff instance methods;
Claus Gittinger <cg@exept.de>
parents: 570
diff changeset
   360
                           , runTime printString , ' ms '
58e603e1ce24 made all print stuff instance methods;
Claus Gittinger <cg@exept.de>
parents: 570
diff changeset
   361
                           , '(' , ntally printString , ' probes)'
58e603e1ce24 made all print stuff instance methods;
Claus Gittinger <cg@exept.de>
parents: 570
diff changeset
   362
                          ).
58e603e1ce24 made all print stuff instance methods;
Claus Gittinger <cg@exept.de>
parents: 570
diff changeset
   363
    ].
58e603e1ce24 made all print stuff instance methods;
Claus Gittinger <cg@exept.de>
parents: 570
diff changeset
   364
58e603e1ce24 made all print stuff instance methods;
Claus Gittinger <cg@exept.de>
parents: 570
diff changeset
   365
    outStream cr.
58e603e1ce24 made all print stuff instance methods;
Claus Gittinger <cg@exept.de>
parents: 570
diff changeset
   366
    tree printOn:outStream.
58e603e1ce24 made all print stuff instance methods;
Claus Gittinger <cg@exept.de>
parents: 570
diff changeset
   367
    outStream cr; cr.
58e603e1ce24 made all print stuff instance methods;
Claus Gittinger <cg@exept.de>
parents: 570
diff changeset
   368
58e603e1ce24 made all print stuff instance methods;
Claus Gittinger <cg@exept.de>
parents: 570
diff changeset
   369
    outStream nextPutLine:'leafs of calling tree (by receiver & implementing method):'.
58e603e1ce24 made all print stuff instance methods;
Claus Gittinger <cg@exept.de>
parents: 570
diff changeset
   370
    outStream cr.
58e603e1ce24 made all print stuff instance methods;
Claus Gittinger <cg@exept.de>
parents: 570
diff changeset
   371
    tree printLeafsOn:outStream.
58e603e1ce24 made all print stuff instance methods;
Claus Gittinger <cg@exept.de>
parents: 570
diff changeset
   372
    outStream cr; cr.
58e603e1ce24 made all print stuff instance methods;
Claus Gittinger <cg@exept.de>
parents: 570
diff changeset
   373
58e603e1ce24 made all print stuff instance methods;
Claus Gittinger <cg@exept.de>
parents: 570
diff changeset
   374
    outStream nextPutLine:'method leafs of calling tree (by implementing method only):'.
58e603e1ce24 made all print stuff instance methods;
Claus Gittinger <cg@exept.de>
parents: 570
diff changeset
   375
    outStream cr.
58e603e1ce24 made all print stuff instance methods;
Claus Gittinger <cg@exept.de>
parents: 570
diff changeset
   376
    tree printMethodLeafsOn:outStream.
58e603e1ce24 made all print stuff instance methods;
Claus Gittinger <cg@exept.de>
parents: 570
diff changeset
   377
    outStream cr; cr.
58e603e1ce24 made all print stuff instance methods;
Claus Gittinger <cg@exept.de>
parents: 570
diff changeset
   378
58e603e1ce24 made all print stuff instance methods;
Claus Gittinger <cg@exept.de>
parents: 570
diff changeset
   379
    "Created: 22.3.1997 / 16:52:09 / cg"
58e603e1ce24 made all print stuff instance methods;
Claus Gittinger <cg@exept.de>
parents: 570
diff changeset
   380
    "Modified: 22.3.1997 / 16:53:38 / cg"
58e603e1ce24 made all print stuff instance methods;
Claus Gittinger <cg@exept.de>
parents: 570
diff changeset
   381
!
58e603e1ce24 made all print stuff instance methods;
Claus Gittinger <cg@exept.de>
parents: 570
diff changeset
   382
58e603e1ce24 made all print stuff instance methods;
Claus Gittinger <cg@exept.de>
parents: 570
diff changeset
   383
printLeafStatisticOn:outStream
58e603e1ce24 made all print stuff instance methods;
Claus Gittinger <cg@exept.de>
parents: 570
diff changeset
   384
    "output leaf statistics on outstream"
58e603e1ce24 made all print stuff instance methods;
Claus Gittinger <cg@exept.de>
parents: 570
diff changeset
   385
58e603e1ce24 made all print stuff instance methods;
Claus Gittinger <cg@exept.de>
parents: 570
diff changeset
   386
    |runTime err|
58e603e1ce24 made all print stuff instance methods;
Claus Gittinger <cg@exept.de>
parents: 570
diff changeset
   387
58e603e1ce24 made all print stuff instance methods;
Claus Gittinger <cg@exept.de>
parents: 570
diff changeset
   388
    ntally == 0 ifTrue:[
58e603e1ce24 made all print stuff instance methods;
Claus Gittinger <cg@exept.de>
parents: 570
diff changeset
   389
        self printNoProbesOn:outStream.
58e603e1ce24 made all print stuff instance methods;
Claus Gittinger <cg@exept.de>
parents: 570
diff changeset
   390
        ^ self.
58e603e1ce24 made all print stuff instance methods;
Claus Gittinger <cg@exept.de>
parents: 570
diff changeset
   391
    ].
58e603e1ce24 made all print stuff instance methods;
Claus Gittinger <cg@exept.de>
parents: 570
diff changeset
   392
58e603e1ce24 made all print stuff instance methods;
Claus Gittinger <cg@exept.de>
parents: 570
diff changeset
   393
    runTime := endTime - startTime.
58e603e1ce24 made all print stuff instance methods;
Claus Gittinger <cg@exept.de>
parents: 570
diff changeset
   394
58e603e1ce24 made all print stuff instance methods;
Claus Gittinger <cg@exept.de>
parents: 570
diff changeset
   395
    probes do:[:aProbe |
58e603e1ce24 made all print stuff instance methods;
Claus Gittinger <cg@exept.de>
parents: 570
diff changeset
   396
        aProbe computePercentage:ntally
58e603e1ce24 made all print stuff instance methods;
Claus Gittinger <cg@exept.de>
parents: 570
diff changeset
   397
    ].
58e603e1ce24 made all print stuff instance methods;
Claus Gittinger <cg@exept.de>
parents: 570
diff changeset
   398
58e603e1ce24 made all print stuff instance methods;
Claus Gittinger <cg@exept.de>
parents: 570
diff changeset
   399
    outStream cr.
58e603e1ce24 made all print stuff instance methods;
Claus Gittinger <cg@exept.de>
parents: 570
diff changeset
   400
    err := (1000 // ntally / 10.0).
58e603e1ce24 made all print stuff instance methods;
Claus Gittinger <cg@exept.de>
parents: 570
diff changeset
   401
    err > 0 ifTrue:[
58e603e1ce24 made all print stuff instance methods;
Claus Gittinger <cg@exept.de>
parents: 570
diff changeset
   402
        outStream nextPutLine:('total execution time: '
58e603e1ce24 made all print stuff instance methods;
Claus Gittinger <cg@exept.de>
parents: 570
diff changeset
   403
                           , runTime printString , ' ms '
58e603e1ce24 made all print stuff instance methods;
Claus Gittinger <cg@exept.de>
parents: 570
diff changeset
   404
                           , '(' , ntally printString , ' probes ;'
770
2edabfe333f1 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 594
diff changeset
   405
                           , ' error ' 
571
58e603e1ce24 made all print stuff instance methods;
Claus Gittinger <cg@exept.de>
parents: 570
diff changeset
   406
                           , (1000 // ntally / 10.0) printString
58e603e1ce24 made all print stuff instance methods;
Claus Gittinger <cg@exept.de>
parents: 570
diff changeset
   407
                           , '%)'
58e603e1ce24 made all print stuff instance methods;
Claus Gittinger <cg@exept.de>
parents: 570
diff changeset
   408
                          ).
58e603e1ce24 made all print stuff instance methods;
Claus Gittinger <cg@exept.de>
parents: 570
diff changeset
   409
    ] ifFalse:[
58e603e1ce24 made all print stuff instance methods;
Claus Gittinger <cg@exept.de>
parents: 570
diff changeset
   410
        outStream nextPutLine:('total execution time: '
58e603e1ce24 made all print stuff instance methods;
Claus Gittinger <cg@exept.de>
parents: 570
diff changeset
   411
                           , runTime printString , ' ms '
58e603e1ce24 made all print stuff instance methods;
Claus Gittinger <cg@exept.de>
parents: 570
diff changeset
   412
                           , '(' , ntally printString , ' probes)'
58e603e1ce24 made all print stuff instance methods;
Claus Gittinger <cg@exept.de>
parents: 570
diff changeset
   413
                          ).
58e603e1ce24 made all print stuff instance methods;
Claus Gittinger <cg@exept.de>
parents: 570
diff changeset
   414
    ].
58e603e1ce24 made all print stuff instance methods;
Claus Gittinger <cg@exept.de>
parents: 570
diff changeset
   415
58e603e1ce24 made all print stuff instance methods;
Claus Gittinger <cg@exept.de>
parents: 570
diff changeset
   416
    outStream nextPutLine:'method leafs of calling tree:'.
58e603e1ce24 made all print stuff instance methods;
Claus Gittinger <cg@exept.de>
parents: 570
diff changeset
   417
    outStream cr.
58e603e1ce24 made all print stuff instance methods;
Claus Gittinger <cg@exept.de>
parents: 570
diff changeset
   418
    self printFlatMethodLeafsOn:outStream.
58e603e1ce24 made all print stuff instance methods;
Claus Gittinger <cg@exept.de>
parents: 570
diff changeset
   419
    outStream cr; cr.
58e603e1ce24 made all print stuff instance methods;
Claus Gittinger <cg@exept.de>
parents: 570
diff changeset
   420
58e603e1ce24 made all print stuff instance methods;
Claus Gittinger <cg@exept.de>
parents: 570
diff changeset
   421
    "Created: 22.3.1997 / 16:50:06 / cg"
58e603e1ce24 made all print stuff instance methods;
Claus Gittinger <cg@exept.de>
parents: 570
diff changeset
   422
    "Modified: 22.3.1997 / 16:53:15 / cg"
58e603e1ce24 made all print stuff instance methods;
Claus Gittinger <cg@exept.de>
parents: 570
diff changeset
   423
!
58e603e1ce24 made all print stuff instance methods;
Claus Gittinger <cg@exept.de>
parents: 570
diff changeset
   424
58e603e1ce24 made all print stuff instance methods;
Claus Gittinger <cg@exept.de>
parents: 570
diff changeset
   425
printNoProbesOn:outStream
58e603e1ce24 made all print stuff instance methods;
Claus Gittinger <cg@exept.de>
parents: 570
diff changeset
   426
    "output a message that no probes are present"
58e603e1ce24 made all print stuff instance methods;
Claus Gittinger <cg@exept.de>
parents: 570
diff changeset
   427
58e603e1ce24 made all print stuff instance methods;
Claus Gittinger <cg@exept.de>
parents: 570
diff changeset
   428
    outStream cr.
58e603e1ce24 made all print stuff instance methods;
Claus Gittinger <cg@exept.de>
parents: 570
diff changeset
   429
    outStream nextPutLine:'TALLY: No probes - execution time too short;'.
58e603e1ce24 made all print stuff instance methods;
Claus Gittinger <cg@exept.de>
parents: 570
diff changeset
   430
    outStream nextPutLine:'TALLY: retry using: spyOn:[n timesRepeat:[...]]'.
58e603e1ce24 made all print stuff instance methods;
Claus Gittinger <cg@exept.de>
parents: 570
diff changeset
   431
58e603e1ce24 made all print stuff instance methods;
Claus Gittinger <cg@exept.de>
parents: 570
diff changeset
   432
    "Created: 22.3.1997 / 16:53:23 / cg"
564
d549f0b9c2f2 tallied block now executes under thisProcess;
Claus Gittinger <cg@exept.de>
parents: 561
diff changeset
   433
! !
d549f0b9c2f2 tallied block now executes under thisProcess;
Claus Gittinger <cg@exept.de>
parents: 561
diff changeset
   434
0
470788421600 Initial revision
claus
parents:
diff changeset
   435
!MessageTally methodsFor:'private'!
470788421600 Initial revision
claus
parents:
diff changeset
   436
21
c521be54a8e6 *** empty log message ***
claus
parents: 17
diff changeset
   437
execute
260
bd12742cab04 commentary
Claus Gittinger <cg@exept.de>
parents: 259
diff changeset
   438
    "evaluate the target block"
bd12742cab04 commentary
Claus Gittinger <cg@exept.de>
parents: 259
diff changeset
   439
565
01241f73a7a0 dont increment tally for ignored contexts.
Claus Gittinger <cg@exept.de>
parents: 564
diff changeset
   440
    executing := true.
2249
b832323d4c13 changed:
Claus Gittinger <cg@exept.de>
parents: 1439
diff changeset
   441
    ^ theBlock value
260
bd12742cab04 commentary
Claus Gittinger <cg@exept.de>
parents: 259
diff changeset
   442
565
01241f73a7a0 dont increment tally for ignored contexts.
Claus Gittinger <cg@exept.de>
parents: 564
diff changeset
   443
    "Modified: 20.3.1997 / 21:36:27 / cg"
21
c521be54a8e6 *** empty log message ***
claus
parents: 17
diff changeset
   444
! !
0
470788421600 Initial revision
claus
parents:
diff changeset
   445
564
d549f0b9c2f2 tallied block now executes under thisProcess;
Claus Gittinger <cg@exept.de>
parents: 561
diff changeset
   446
!MessageTally methodsFor:'probing'!
21
c521be54a8e6 *** empty log message ***
claus
parents: 17
diff changeset
   447
c521be54a8e6 *** empty log message ***
claus
parents: 17
diff changeset
   448
count:aContext
260
bd12742cab04 commentary
Claus Gittinger <cg@exept.de>
parents: 259
diff changeset
   449
    "entered whenever the probed block gets interrupted;
bd12742cab04 commentary
Claus Gittinger <cg@exept.de>
parents: 259
diff changeset
   450
     look where it is, and remember in the calling tree"
bd12742cab04 commentary
Claus Gittinger <cg@exept.de>
parents: 259
diff changeset
   451
263
4c3889934577 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 262
diff changeset
   452
    "{ Pragma: +optSpeed }"
4c3889934577 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 262
diff changeset
   453
2281
859191db074f *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 2249
diff changeset
   454
    |chain|
0
470788421600 Initial revision
claus
parents:
diff changeset
   455
2281
859191db074f *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 2249
diff changeset
   456
    chain := CallChain 
859191db074f *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 2249
diff changeset
   457
                callChainTo:aContext 
859191db074f *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 2249
diff changeset
   458
                stopAtCallerForWhich:[:con |
859191db074f *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 2249
diff changeset
   459
                    (con receiver == self) and:[con selector == #execute]
859191db074f *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 2249
diff changeset
   460
                ].
0
470788421600 Initial revision
claus
parents:
diff changeset
   461
2281
859191db074f *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 2249
diff changeset
   462
    "add chain to the tree"
859191db074f *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 2249
diff changeset
   463
859191db074f *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 2249
diff changeset
   464
    chain notNil ifTrue:[
859191db074f *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 2249
diff changeset
   465
        ntally := ntally + 1.
859191db074f *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 2249
diff changeset
   466
        tree addChain:chain
0
470788421600 Initial revision
claus
parents:
diff changeset
   467
    ].
470788421600 Initial revision
claus
parents:
diff changeset
   468
2281
859191db074f *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 2249
diff changeset
   469
    "Modified: / 04-07-2010 / 09:45:28 / cg"
564
d549f0b9c2f2 tallied block now executes under thisProcess;
Claus Gittinger <cg@exept.de>
parents: 561
diff changeset
   470
!
d549f0b9c2f2 tallied block now executes under thisProcess;
Claus Gittinger <cg@exept.de>
parents: 561
diff changeset
   471
4433
0db54b55fc65 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 4096
diff changeset
   472
count:aContext leafsOnly:leafsOnly
0db54b55fc65 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 4096
diff changeset
   473
    "entered whenever the probed block gets interrupted;
0db54b55fc65 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 4096
diff changeset
   474
     look where it is, and remember in the calling tree or on the leaf-probe set"
0db54b55fc65 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 4096
diff changeset
   475
0db54b55fc65 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 4096
diff changeset
   476
    "{ Pragma: +optSpeed }"
0db54b55fc65 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 4096
diff changeset
   477
0db54b55fc65 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 4096
diff changeset
   478
    |chain|
0db54b55fc65 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 4096
diff changeset
   479
0db54b55fc65 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 4096
diff changeset
   480
    leafsOnly ifTrue:[
0db54b55fc65 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 4096
diff changeset
   481
        self countLeaf:aContext.
0db54b55fc65 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 4096
diff changeset
   482
        ^ self.
0db54b55fc65 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 4096
diff changeset
   483
    ].
0db54b55fc65 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 4096
diff changeset
   484
    
0db54b55fc65 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 4096
diff changeset
   485
    chain := CallChain 
0db54b55fc65 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 4096
diff changeset
   486
                callChainTo:aContext 
0db54b55fc65 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 4096
diff changeset
   487
                stopAtCallerForWhich:[:con |
0db54b55fc65 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 4096
diff changeset
   488
                    (con receiver == self) and:[con selector == #execute]
0db54b55fc65 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 4096
diff changeset
   489
                ].
0db54b55fc65 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 4096
diff changeset
   490
0db54b55fc65 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 4096
diff changeset
   491
    "add chain to the tree"
0db54b55fc65 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 4096
diff changeset
   492
0db54b55fc65 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 4096
diff changeset
   493
    chain notNil ifTrue:[
0db54b55fc65 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 4096
diff changeset
   494
        ntally := ntally + 1.
0db54b55fc65 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 4096
diff changeset
   495
        tree addChain:chain
0db54b55fc65 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 4096
diff changeset
   496
    ].
0db54b55fc65 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 4096
diff changeset
   497
0db54b55fc65 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 4096
diff changeset
   498
    "Created: / 28-05-2019 / 06:50:13 / Claus Gittinger"
0db54b55fc65 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 4096
diff changeset
   499
!
0db54b55fc65 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 4096
diff changeset
   500
564
d549f0b9c2f2 tallied block now executes under thisProcess;
Claus Gittinger <cg@exept.de>
parents: 561
diff changeset
   501
countLeaf:aContext
d549f0b9c2f2 tallied block now executes under thisProcess;
Claus Gittinger <cg@exept.de>
parents: 561
diff changeset
   502
    "entered whenever the probed block gets interrupted;
d549f0b9c2f2 tallied block now executes under thisProcess;
Claus Gittinger <cg@exept.de>
parents: 561
diff changeset
   503
     look where it is, and remember in the flat profile"
d549f0b9c2f2 tallied block now executes under thisProcess;
Claus Gittinger <cg@exept.de>
parents: 561
diff changeset
   504
d549f0b9c2f2 tallied block now executes under thisProcess;
Claus Gittinger <cg@exept.de>
parents: 561
diff changeset
   505
    "{ Pragma: +optSpeed }"
d549f0b9c2f2 tallied block now executes under thisProcess;
Claus Gittinger <cg@exept.de>
parents: 561
diff changeset
   506
2281
859191db074f *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 2249
diff changeset
   507
    |con entry recClass selector mthdClass sender home existingEntry|
564
d549f0b9c2f2 tallied block now executes under thisProcess;
Claus Gittinger <cg@exept.de>
parents: 561
diff changeset
   508
d549f0b9c2f2 tallied block now executes under thisProcess;
Claus Gittinger <cg@exept.de>
parents: 561
diff changeset
   509
    con := aContext.
d549f0b9c2f2 tallied block now executes under thisProcess;
Claus Gittinger <cg@exept.de>
parents: 561
diff changeset
   510
    con isNil ifTrue:[^ self].
0
470788421600 Initial revision
claus
parents:
diff changeset
   511
564
d549f0b9c2f2 tallied block now executes under thisProcess;
Claus Gittinger <cg@exept.de>
parents: 561
diff changeset
   512
    "walk up above the interrupt context"
d549f0b9c2f2 tallied block now executes under thisProcess;
Claus Gittinger <cg@exept.de>
parents: 561
diff changeset
   513
d549f0b9c2f2 tallied block now executes under thisProcess;
Claus Gittinger <cg@exept.de>
parents: 561
diff changeset
   514
    [con receiver == Processor] whileTrue:[
d549f0b9c2f2 tallied block now executes under thisProcess;
Claus Gittinger <cg@exept.de>
parents: 561
diff changeset
   515
        con := con sender
d549f0b9c2f2 tallied block now executes under thisProcess;
Claus Gittinger <cg@exept.de>
parents: 561
diff changeset
   516
    ].
d549f0b9c2f2 tallied block now executes under thisProcess;
Claus Gittinger <cg@exept.de>
parents: 561
diff changeset
   517
d549f0b9c2f2 tallied block now executes under thisProcess;
Claus Gittinger <cg@exept.de>
parents: 561
diff changeset
   518
    "got it - collect info from contexts"
d549f0b9c2f2 tallied block now executes under thisProcess;
Claus Gittinger <cg@exept.de>
parents: 561
diff changeset
   519
d549f0b9c2f2 tallied block now executes under thisProcess;
Claus Gittinger <cg@exept.de>
parents: 561
diff changeset
   520
    con isNil ifTrue:[^ self].
d549f0b9c2f2 tallied block now executes under thisProcess;
Claus Gittinger <cg@exept.de>
parents: 561
diff changeset
   521
    ((con receiver == self) and:[con selector == #execute]) ifTrue:[^ self].
d549f0b9c2f2 tallied block now executes under thisProcess;
Claus Gittinger <cg@exept.de>
parents: 561
diff changeset
   522
d549f0b9c2f2 tallied block now executes under thisProcess;
Claus Gittinger <cg@exept.de>
parents: 561
diff changeset
   523
    sender := con sender.
d549f0b9c2f2 tallied block now executes under thisProcess;
Claus Gittinger <cg@exept.de>
parents: 561
diff changeset
   524
    sender isNil ifTrue:[^ self].
d549f0b9c2f2 tallied block now executes under thisProcess;
Claus Gittinger <cg@exept.de>
parents: 561
diff changeset
   525
    ((sender receiver == self) and:[sender selector == #execute]) ifTrue:[^ self].
88
070ba8eb911e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 68
diff changeset
   526
2281
859191db074f *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 2249
diff changeset
   527
    home := con methodHome.
859191db074f *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 2249
diff changeset
   528
    home isNil ifTrue:[
859191db074f *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 2249
diff changeset
   529
        recClass := UndefinedObject.
859191db074f *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 2249
diff changeset
   530
        selector := 'optimized'.
859191db074f *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 2249
diff changeset
   531
        mthdClass := UndefinedObject.
564
d549f0b9c2f2 tallied block now executes under thisProcess;
Claus Gittinger <cg@exept.de>
parents: 561
diff changeset
   532
    ] ifFalse:[
2281
859191db074f *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 2249
diff changeset
   533
        recClass := home receiver class.
859191db074f *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 2249
diff changeset
   534
        selector := home selector.
859191db074f *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 2249
diff changeset
   535
        mthdClass := home methodClass.
564
d549f0b9c2f2 tallied block now executes under thisProcess;
Claus Gittinger <cg@exept.de>
parents: 561
diff changeset
   536
    ].
d549f0b9c2f2 tallied block now executes under thisProcess;
Claus Gittinger <cg@exept.de>
parents: 561
diff changeset
   537
d549f0b9c2f2 tallied block now executes under thisProcess;
Claus Gittinger <cg@exept.de>
parents: 561
diff changeset
   538
    "add info to the probes collection"
88
070ba8eb911e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 68
diff changeset
   539
565
01241f73a7a0 dont increment tally for ignored contexts.
Claus Gittinger <cg@exept.de>
parents: 564
diff changeset
   540
    ntally := ntally + 1.
01241f73a7a0 dont increment tally for ignored contexts.
Claus Gittinger <cg@exept.de>
parents: 564
diff changeset
   541
564
d549f0b9c2f2 tallied block now executes under thisProcess;
Claus Gittinger <cg@exept.de>
parents: 561
diff changeset
   542
    entry := ProfileTree new.
d549f0b9c2f2 tallied block now executes under thisProcess;
Claus Gittinger <cg@exept.de>
parents: 561
diff changeset
   543
    entry
d549f0b9c2f2 tallied block now executes under thisProcess;
Claus Gittinger <cg@exept.de>
parents: 561
diff changeset
   544
        receiver:recClass
d549f0b9c2f2 tallied block now executes under thisProcess;
Claus Gittinger <cg@exept.de>
parents: 561
diff changeset
   545
        selector:selector
d549f0b9c2f2 tallied block now executes under thisProcess;
Claus Gittinger <cg@exept.de>
parents: 561
diff changeset
   546
        class:mthdClass
2281
859191db074f *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 2249
diff changeset
   547
        isBlock:(con isBlockContext).
564
d549f0b9c2f2 tallied block now executes under thisProcess;
Claus Gittinger <cg@exept.de>
parents: 561
diff changeset
   548
d549f0b9c2f2 tallied block now executes under thisProcess;
Claus Gittinger <cg@exept.de>
parents: 561
diff changeset
   549
    existingEntry := probes elementAt:entry ifAbsent:nil.
d549f0b9c2f2 tallied block now executes under thisProcess;
Claus Gittinger <cg@exept.de>
parents: 561
diff changeset
   550
    existingEntry isNil ifTrue:[
d549f0b9c2f2 tallied block now executes under thisProcess;
Claus Gittinger <cg@exept.de>
parents: 561
diff changeset
   551
        probes add:entry
d549f0b9c2f2 tallied block now executes under thisProcess;
Claus Gittinger <cg@exept.de>
parents: 561
diff changeset
   552
    ] ifFalse:[
d549f0b9c2f2 tallied block now executes under thisProcess;
Claus Gittinger <cg@exept.de>
parents: 561
diff changeset
   553
        existingEntry incrementLeafTally.
d549f0b9c2f2 tallied block now executes under thisProcess;
Claus Gittinger <cg@exept.de>
parents: 561
diff changeset
   554
    ].
d549f0b9c2f2 tallied block now executes under thisProcess;
Claus Gittinger <cg@exept.de>
parents: 561
diff changeset
   555
2281
859191db074f *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 2249
diff changeset
   556
    "Modified: / 04-07-2010 / 09:47:06 / cg"
571
58e603e1ce24 made all print stuff instance methods;
Claus Gittinger <cg@exept.de>
parents: 570
diff changeset
   557
! !
58e603e1ce24 made all print stuff instance methods;
Claus Gittinger <cg@exept.de>
parents: 570
diff changeset
   558
58e603e1ce24 made all print stuff instance methods;
Claus Gittinger <cg@exept.de>
parents: 570
diff changeset
   559
!MessageTally methodsFor:'spy setup'!
564
d549f0b9c2f2 tallied block now executes under thisProcess;
Claus Gittinger <cg@exept.de>
parents: 561
diff changeset
   560
d549f0b9c2f2 tallied block now executes under thisProcess;
Claus Gittinger <cg@exept.de>
parents: 561
diff changeset
   561
spyLeafOn:aBlock interval:ms
2970
Claus Gittinger <cg@exept.de>
parents: 2932
diff changeset
   562
    "spy on execution time; generate information on leaf nodes only
Claus Gittinger <cg@exept.de>
parents: 2932
diff changeset
   563
     (which generates slightly less sampling overhead)
Claus Gittinger <cg@exept.de>
parents: 2932
diff changeset
   564
     Return the value from aBlock."
564
d549f0b9c2f2 tallied block now executes under thisProcess;
Claus Gittinger <cg@exept.de>
parents: 561
diff changeset
   565
4433
0db54b55fc65 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 4096
diff changeset
   566
    ^ self spyOn:aBlock interval:ms leafsOnly:true
564
d549f0b9c2f2 tallied block now executes under thisProcess;
Claus Gittinger <cg@exept.de>
parents: 561
diff changeset
   567
4433
0db54b55fc65 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 4096
diff changeset
   568
    "Created: / 20-03-1997 / 20:15:07 / cg"
0db54b55fc65 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 4096
diff changeset
   569
    "Modified: / 22-03-1997 / 16:46:42 / cg"
0db54b55fc65 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 4096
diff changeset
   570
    "Modified: / 28-05-2019 / 06:51:49 / Claus Gittinger"
564
d549f0b9c2f2 tallied block now executes under thisProcess;
Claus Gittinger <cg@exept.de>
parents: 561
diff changeset
   571
!
d549f0b9c2f2 tallied block now executes under thisProcess;
Claus Gittinger <cg@exept.de>
parents: 561
diff changeset
   572
d549f0b9c2f2 tallied block now executes under thisProcess;
Claus Gittinger <cg@exept.de>
parents: 561
diff changeset
   573
spyOn:aBlock interval:ms
2970
Claus Gittinger <cg@exept.de>
parents: 2932
diff changeset
   574
    "spy on execution time, generate a hierarchical call information on the output stream.
Claus Gittinger <cg@exept.de>
parents: 2932
diff changeset
   575
     Return the value from aBlock."
564
d549f0b9c2f2 tallied block now executes under thisProcess;
Claus Gittinger <cg@exept.de>
parents: 561
diff changeset
   576
4433
0db54b55fc65 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 4096
diff changeset
   577
    ^ self spyOn:aBlock interval:ms leafsOnly:false
0db54b55fc65 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 4096
diff changeset
   578
0db54b55fc65 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 4096
diff changeset
   579
    "Created: / 20-03-1997 / 20:14:44 / cg"
0db54b55fc65 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 4096
diff changeset
   580
    "Modified: / 22-03-1997 / 16:45:42 / cg"
0db54b55fc65 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 4096
diff changeset
   581
    "Modified: / 28-05-2019 / 06:52:00 / Claus Gittinger"
0db54b55fc65 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 4096
diff changeset
   582
!
0db54b55fc65 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 4096
diff changeset
   583
0db54b55fc65 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 4096
diff changeset
   584
spyOn:aBlock interval:ms leafsOnly:spyOnLeafsOnly
0db54b55fc65 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 4096
diff changeset
   585
    "spy on execution time, wither generate a hierarchical call information,
0db54b55fc65 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 4096
diff changeset
   586
     or leaf-node information.
0db54b55fc65 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 4096
diff changeset
   587
     Return the value from aBlock."
0db54b55fc65 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 4096
diff changeset
   588
0db54b55fc65 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 4096
diff changeset
   589
    |retVal runPrio probePrio|
564
d549f0b9c2f2 tallied block now executes under thisProcess;
Claus Gittinger <cg@exept.de>
parents: 561
diff changeset
   590
d549f0b9c2f2 tallied block now executes under thisProcess;
Claus Gittinger <cg@exept.de>
parents: 561
diff changeset
   591
    theBlock := aBlock.
2932
eed4e9fc5400 changed: #spyOn:interval:
Claus Gittinger <cg@exept.de>
parents: 2281
diff changeset
   592
    runPrio := (Processor activePriority-1 "userInterruptPriority-1").
eed4e9fc5400 changed: #spyOn:interval:
Claus Gittinger <cg@exept.de>
parents: 2281
diff changeset
   593
    probePrio := (Processor activePriority"+1" "Processor userInterruptPriority+1").
564
d549f0b9c2f2 tallied block now executes under thisProcess;
Claus Gittinger <cg@exept.de>
parents: 561
diff changeset
   594
2249
b832323d4c13 changed:
Claus Gittinger <cg@exept.de>
parents: 1439
diff changeset
   595
    Processor activeProcess 
2932
eed4e9fc5400 changed: #spyOn:interval:
Claus Gittinger <cg@exept.de>
parents: 2281
diff changeset
   596
        withPriority:runPrio 
2249
b832323d4c13 changed:
Claus Gittinger <cg@exept.de>
parents: 1439
diff changeset
   597
        do:[
4433
0db54b55fc65 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 4096
diff changeset
   598
            |delay probing probingProcess probedProcess |
564
d549f0b9c2f2 tallied block now executes under thisProcess;
Claus Gittinger <cg@exept.de>
parents: 561
diff changeset
   599
4433
0db54b55fc65 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 4096
diff changeset
   600
            delay := (Delay forMilliseconds:ms).
0db54b55fc65 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 4096
diff changeset
   601
            
2249
b832323d4c13 changed:
Claus Gittinger <cg@exept.de>
parents: 1439
diff changeset
   602
            probingProcess := [
b832323d4c13 changed:
Claus Gittinger <cg@exept.de>
parents: 1439
diff changeset
   603
                |p|
88
070ba8eb911e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 68
diff changeset
   604
2249
b832323d4c13 changed:
Claus Gittinger <cg@exept.de>
parents: 1439
diff changeset
   605
                p := probedProcess.
b832323d4c13 changed:
Claus Gittinger <cg@exept.de>
parents: 1439
diff changeset
   606
                [probing] whileTrue:[
2932
eed4e9fc5400 changed: #spyOn:interval:
Claus Gittinger <cg@exept.de>
parents: 2281
diff changeset
   607
                    delay wait. 
2249
b832323d4c13 changed:
Claus Gittinger <cg@exept.de>
parents: 1439
diff changeset
   608
                    executing ifTrue:[
4433
0db54b55fc65 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 4096
diff changeset
   609
                        self count:(p suspendedContext) leafsOnly:spyOnLeafsOnly
0db54b55fc65 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 4096
diff changeset
   610
                    ].
0db54b55fc65 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 4096
diff changeset
   611
                    probedProcess isDead ifTrue:[probing := false].
2249
b832323d4c13 changed:
Claus Gittinger <cg@exept.de>
parents: 1439
diff changeset
   612
                ].
b832323d4c13 changed:
Claus Gittinger <cg@exept.de>
parents: 1439
diff changeset
   613
            ] newProcess.
88
070ba8eb911e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 68
diff changeset
   614
2932
eed4e9fc5400 changed: #spyOn:interval:
Claus Gittinger <cg@exept.de>
parents: 2281
diff changeset
   615
            probingProcess priority:probePrio.
564
d549f0b9c2f2 tallied block now executes under thisProcess;
Claus Gittinger <cg@exept.de>
parents: 561
diff changeset
   616
2249
b832323d4c13 changed:
Claus Gittinger <cg@exept.de>
parents: 1439
diff changeset
   617
            ntally := 0.
564
d549f0b9c2f2 tallied block now executes under thisProcess;
Claus Gittinger <cg@exept.de>
parents: 561
diff changeset
   618
4433
0db54b55fc65 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 4096
diff changeset
   619
            spyOnLeafsOnly ifTrue:[
0db54b55fc65 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 4096
diff changeset
   620
                probes := Set new:200.
0db54b55fc65 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 4096
diff changeset
   621
            ] ifFalse:[                
0db54b55fc65 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 4096
diff changeset
   622
                tree := ProfileTree new.
0db54b55fc65 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 4096
diff changeset
   623
                tree 
0db54b55fc65 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 4096
diff changeset
   624
                    receiver:MessageTally 
0db54b55fc65 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 4096
diff changeset
   625
                    selector:#execute 
0db54b55fc65 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 4096
diff changeset
   626
                    class:MessageTally
0db54b55fc65 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 4096
diff changeset
   627
                    isBlock:false.
0db54b55fc65 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 4096
diff changeset
   628
            ].
0db54b55fc65 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 4096
diff changeset
   629
            
2249
b832323d4c13 changed:
Claus Gittinger <cg@exept.de>
parents: 1439
diff changeset
   630
            probedProcess := Processor activeProcess.
564
d549f0b9c2f2 tallied block now executes under thisProcess;
Claus Gittinger <cg@exept.de>
parents: 561
diff changeset
   631
2249
b832323d4c13 changed:
Claus Gittinger <cg@exept.de>
parents: 1439
diff changeset
   632
            executing := false.
b832323d4c13 changed:
Claus Gittinger <cg@exept.de>
parents: 1439
diff changeset
   633
            probing := true.
b832323d4c13 changed:
Claus Gittinger <cg@exept.de>
parents: 1439
diff changeset
   634
            probingProcess resume.
564
d549f0b9c2f2 tallied block now executes under thisProcess;
Claus Gittinger <cg@exept.de>
parents: 561
diff changeset
   635
2249
b832323d4c13 changed:
Claus Gittinger <cg@exept.de>
parents: 1439
diff changeset
   636
            [
b832323d4c13 changed:
Claus Gittinger <cg@exept.de>
parents: 1439
diff changeset
   637
                startTime := OperatingSystem getMillisecondTime.
b832323d4c13 changed:
Claus Gittinger <cg@exept.de>
parents: 1439
diff changeset
   638
                retVal := self execute.
b832323d4c13 changed:
Claus Gittinger <cg@exept.de>
parents: 1439
diff changeset
   639
            ] ensure:[
b832323d4c13 changed:
Claus Gittinger <cg@exept.de>
parents: 1439
diff changeset
   640
                probing := executing := false.
b832323d4c13 changed:
Claus Gittinger <cg@exept.de>
parents: 1439
diff changeset
   641
                theBlock := nil.
b832323d4c13 changed:
Claus Gittinger <cg@exept.de>
parents: 1439
diff changeset
   642
                endTime := OperatingSystem getMillisecondTime.
b832323d4c13 changed:
Claus Gittinger <cg@exept.de>
parents: 1439
diff changeset
   643
            ].
564
d549f0b9c2f2 tallied block now executes under thisProcess;
Claus Gittinger <cg@exept.de>
parents: 561
diff changeset
   644
        ].
2249
b832323d4c13 changed:
Claus Gittinger <cg@exept.de>
parents: 1439
diff changeset
   645
b832323d4c13 changed:
Claus Gittinger <cg@exept.de>
parents: 1439
diff changeset
   646
    ^ retVal
263
4c3889934577 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 262
diff changeset
   647
4433
0db54b55fc65 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 4096
diff changeset
   648
    "Created: / 28-05-2019 / 06:51:28 / Claus Gittinger"
88
070ba8eb911e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 68
diff changeset
   649
! !
070ba8eb911e checkin from browser
Claus Gittinger <cg@exept.de>
parents: 68
diff changeset
   650
98
123d948aacd1 version at the end
Claus Gittinger <cg@exept.de>
parents: 88
diff changeset
   651
!MessageTally class methodsFor:'documentation'!
123d948aacd1 version at the end
Claus Gittinger <cg@exept.de>
parents: 88
diff changeset
   652
261
2fb596a13d0c commentary
Claus Gittinger <cg@exept.de>
parents: 260
diff changeset
   653
version
4013
50bc8d72e5b9 #DOCUMENTATION by stefan
Stefan Vogel <sv@exept.de>
parents: 2970
diff changeset
   654
    ^ '$Header$'
2249
b832323d4c13 changed:
Claus Gittinger <cg@exept.de>
parents: 1439
diff changeset
   655
!
b832323d4c13 changed:
Claus Gittinger <cg@exept.de>
parents: 1439
diff changeset
   656
b832323d4c13 changed:
Claus Gittinger <cg@exept.de>
parents: 1439
diff changeset
   657
version_CVS
4013
50bc8d72e5b9 #DOCUMENTATION by stefan
Stefan Vogel <sv@exept.de>
parents: 2970
diff changeset
   658
    ^ '$Header$'
98
123d948aacd1 version at the end
Claus Gittinger <cg@exept.de>
parents: 88
diff changeset
   659
! !
4013
50bc8d72e5b9 #DOCUMENTATION by stefan
Stefan Vogel <sv@exept.de>
parents: 2970
diff changeset
   660