s/BenchmarkExecutor.st
author Jan Vrany <jan.vrany@fit.cvut.cz>
Mon, 20 Apr 2015 12:53:16 +0100
changeset 268 ee1fd4a6e836
parent 267 5c032df036a4
child 279 af5ed3f190d4
permissions -rw-r--r--
Added support for skipping tests. To skip a test, simply add BenchmarkSkipRequest signal to setup or benchmark method. This may be used to skip benchmarks that are not runnable for whatever reason.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
139
eaf40f3173ad Introduced BenchmarkExecutor - a class responsible for execution of a single benchmark.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     1
"{ Package: 'jv:calipel/s' }"
eaf40f3173ad Introduced BenchmarkExecutor - a class responsible for execution of a single benchmark.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     2
268
ee1fd4a6e836 Added support for skipping tests.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 267
diff changeset
     3
"{ NameSpace: Smalltalk }"
ee1fd4a6e836 Added support for skipping tests.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 267
diff changeset
     4
139
eaf40f3173ad Introduced BenchmarkExecutor - a class responsible for execution of a single benchmark.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     5
Object subclass:#BenchmarkExecutor
262
8d2849dd3227 Added support for (user-defined) benchmark instruments.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 216
diff changeset
     6
	instanceVariableNames:'instruments'
139
eaf40f3173ad Introduced BenchmarkExecutor - a class responsible for execution of a single benchmark.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     7
	classVariableNames:''
eaf40f3173ad Introduced BenchmarkExecutor - a class responsible for execution of a single benchmark.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     8
	poolDictionaries:''
eaf40f3173ad Introduced BenchmarkExecutor - a class responsible for execution of a single benchmark.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     9
	category:'CalipeL-S-Core'
eaf40f3173ad Introduced BenchmarkExecutor - a class responsible for execution of a single benchmark.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    10
!
eaf40f3173ad Introduced BenchmarkExecutor - a class responsible for execution of a single benchmark.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    11
eaf40f3173ad Introduced BenchmarkExecutor - a class responsible for execution of a single benchmark.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    12
!BenchmarkExecutor class methodsFor:'documentation'!
eaf40f3173ad Introduced BenchmarkExecutor - a class responsible for execution of a single benchmark.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    13
eaf40f3173ad Introduced BenchmarkExecutor - a class responsible for execution of a single benchmark.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    14
documentation
eaf40f3173ad Introduced BenchmarkExecutor - a class responsible for execution of a single benchmark.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    15
"
eaf40f3173ad Introduced BenchmarkExecutor - a class responsible for execution of a single benchmark.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    16
    A benchmark executor takes a signle BenchmarkInstance and a set of
eaf40f3173ad Introduced BenchmarkExecutor - a class responsible for execution of a single benchmark.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    17
    parameter definitions and executes it. Returns a set of
eaf40f3173ad Introduced BenchmarkExecutor - a class responsible for execution of a single benchmark.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    18
    BenchmarkOutcomes.
eaf40f3173ad Introduced BenchmarkExecutor - a class responsible for execution of a single benchmark.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    19
eaf40f3173ad Introduced BenchmarkExecutor - a class responsible for execution of a single benchmark.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    20
    [author:]
eaf40f3173ad Introduced BenchmarkExecutor - a class responsible for execution of a single benchmark.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    21
        Jan Vrany <jan.vrany@fit.cvut.cz>
eaf40f3173ad Introduced BenchmarkExecutor - a class responsible for execution of a single benchmark.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    22
eaf40f3173ad Introduced BenchmarkExecutor - a class responsible for execution of a single benchmark.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    23
    [instance variables:]
eaf40f3173ad Introduced BenchmarkExecutor - a class responsible for execution of a single benchmark.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    24
eaf40f3173ad Introduced BenchmarkExecutor - a class responsible for execution of a single benchmark.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    25
    [class variables:]
eaf40f3173ad Introduced BenchmarkExecutor - a class responsible for execution of a single benchmark.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    26
eaf40f3173ad Introduced BenchmarkExecutor - a class responsible for execution of a single benchmark.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    27
    [see also:]
eaf40f3173ad Introduced BenchmarkExecutor - a class responsible for execution of a single benchmark.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    28
eaf40f3173ad Introduced BenchmarkExecutor - a class responsible for execution of a single benchmark.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    29
"
eaf40f3173ad Introduced BenchmarkExecutor - a class responsible for execution of a single benchmark.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    30
! !
eaf40f3173ad Introduced BenchmarkExecutor - a class responsible for execution of a single benchmark.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    31
262
8d2849dd3227 Added support for (user-defined) benchmark instruments.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 216
diff changeset
    32
!BenchmarkExecutor class methodsFor:'instance creation'!
8d2849dd3227 Added support for (user-defined) benchmark instruments.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 216
diff changeset
    33
8d2849dd3227 Added support for (user-defined) benchmark instruments.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 216
diff changeset
    34
new
8d2849dd3227 Added support for (user-defined) benchmark instruments.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 216
diff changeset
    35
    "return an initialized instance"
8d2849dd3227 Added support for (user-defined) benchmark instruments.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 216
diff changeset
    36
8d2849dd3227 Added support for (user-defined) benchmark instruments.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 216
diff changeset
    37
    ^ self basicNew initialize.
8d2849dd3227 Added support for (user-defined) benchmark instruments.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 216
diff changeset
    38
! !
8d2849dd3227 Added support for (user-defined) benchmark instruments.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 216
diff changeset
    39
206
29602f0696d8 Refactoring and cleanup.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 186
diff changeset
    40
!BenchmarkExecutor class methodsFor:'execution'!
29602f0696d8 Refactoring and cleanup.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 186
diff changeset
    41
29602f0696d8 Refactoring and cleanup.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 186
diff changeset
    42
execute:aBenchmarkInstance
29602f0696d8 Refactoring and cleanup.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 186
diff changeset
    43
    ^ self new execute:aBenchmarkInstance
29602f0696d8 Refactoring and cleanup.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 186
diff changeset
    44
!
29602f0696d8 Refactoring and cleanup.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 186
diff changeset
    45
29602f0696d8 Refactoring and cleanup.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 186
diff changeset
    46
execute:aBenchmarkInstance result:aBenchmarkResult
29602f0696d8 Refactoring and cleanup.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 186
diff changeset
    47
    ^ self new execute:aBenchmarkInstance result:aBenchmarkResult
29602f0696d8 Refactoring and cleanup.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 186
diff changeset
    48
!
29602f0696d8 Refactoring and cleanup.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 186
diff changeset
    49
29602f0696d8 Refactoring and cleanup.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 186
diff changeset
    50
execute:aBenchmarkInstance result:aBenchmarkResult defines:aDictionary
29602f0696d8 Refactoring and cleanup.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 186
diff changeset
    51
    ^ self new execute:aBenchmarkInstance result:aBenchmarkResult defines:aDictionary
29602f0696d8 Refactoring and cleanup.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 186
diff changeset
    52
! !
29602f0696d8 Refactoring and cleanup.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 186
diff changeset
    53
262
8d2849dd3227 Added support for (user-defined) benchmark instruments.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 216
diff changeset
    54
!BenchmarkExecutor methodsFor:'accessing'!
8d2849dd3227 Added support for (user-defined) benchmark instruments.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 216
diff changeset
    55
8d2849dd3227 Added support for (user-defined) benchmark instruments.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 216
diff changeset
    56
instruments
8d2849dd3227 Added support for (user-defined) benchmark instruments.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 216
diff changeset
    57
    ^ instruments
8d2849dd3227 Added support for (user-defined) benchmark instruments.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 216
diff changeset
    58
!
8d2849dd3227 Added support for (user-defined) benchmark instruments.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 216
diff changeset
    59
8d2849dd3227 Added support for (user-defined) benchmark instruments.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 216
diff changeset
    60
instruments:aCollection
8d2849dd3227 Added support for (user-defined) benchmark instruments.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 216
diff changeset
    61
    "Set a list of user-defined mersurement instruments"
8d2849dd3227 Added support for (user-defined) benchmark instruments.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 216
diff changeset
    62
8d2849dd3227 Added support for (user-defined) benchmark instruments.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 216
diff changeset
    63
    instruments := aCollection.
8d2849dd3227 Added support for (user-defined) benchmark instruments.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 216
diff changeset
    64
8d2849dd3227 Added support for (user-defined) benchmark instruments.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 216
diff changeset
    65
    "Modified (comment): / 27-11-2014 / 13:43:26 / Jan Vrany <jan.vrany@fit.cvut.cz>"
8d2849dd3227 Added support for (user-defined) benchmark instruments.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 216
diff changeset
    66
! !
8d2849dd3227 Added support for (user-defined) benchmark instruments.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 216
diff changeset
    67
139
eaf40f3173ad Introduced BenchmarkExecutor - a class responsible for execution of a single benchmark.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    68
!BenchmarkExecutor methodsFor:'executing'!
eaf40f3173ad Introduced BenchmarkExecutor - a class responsible for execution of a single benchmark.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    69
206
29602f0696d8 Refactoring and cleanup.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 186
diff changeset
    70
execute: aBenchmarkInstance
29602f0696d8 Refactoring and cleanup.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 186
diff changeset
    71
    "Executes the benchmark and returns the result (timings)"
29602f0696d8 Refactoring and cleanup.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 186
diff changeset
    72
29602f0696d8 Refactoring and cleanup.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 186
diff changeset
    73
    ^ self execute: aBenchmarkInstance result: BenchmarkResult new
29602f0696d8 Refactoring and cleanup.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 186
diff changeset
    74
29602f0696d8 Refactoring and cleanup.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 186
diff changeset
    75
    "Created: / 09-03-2014 / 10:59:30 / Jan Vrany <jan.vrany@fit.cvut.cz>"
29602f0696d8 Refactoring and cleanup.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 186
diff changeset
    76
!
29602f0696d8 Refactoring and cleanup.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 186
diff changeset
    77
29602f0696d8 Refactoring and cleanup.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 186
diff changeset
    78
execute: aBenchmarkInstance result: aBenchmarkResult
29602f0696d8 Refactoring and cleanup.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 186
diff changeset
    79
    "
29602f0696d8 Refactoring and cleanup.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 186
diff changeset
    80
    Executes the benchmark and adds results into given resultset
29602f0696d8 Refactoring and cleanup.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 186
diff changeset
    81
    "
29602f0696d8 Refactoring and cleanup.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 186
diff changeset
    82
29602f0696d8 Refactoring and cleanup.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 186
diff changeset
    83
    ^ self execute: aBenchmarkInstance result: aBenchmarkResult defines: Dictionary new.
29602f0696d8 Refactoring and cleanup.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 186
diff changeset
    84
29602f0696d8 Refactoring and cleanup.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 186
diff changeset
    85
    "Created: / 09-03-2014 / 10:59:37 / Jan Vrany <jan.vrany@fit.cvut.cz>"
29602f0696d8 Refactoring and cleanup.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 186
diff changeset
    86
!
29602f0696d8 Refactoring and cleanup.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 186
diff changeset
    87
139
eaf40f3173ad Introduced BenchmarkExecutor - a class responsible for execution of a single benchmark.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    88
execute: aBenchmarkInstance result: aBenchmarkResult defines: aDictionary
eaf40f3173ad Introduced BenchmarkExecutor - a class responsible for execution of a single benchmark.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    89
    "
eaf40f3173ad Introduced BenchmarkExecutor - a class responsible for execution of a single benchmark.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    90
    Takes a benchmark instance and a set of parameter defines,
eaf40f3173ad Introduced BenchmarkExecutor - a class responsible for execution of a single benchmark.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    91
    executes the benchmark and one or more outcomes into given
eaf40f3173ad Introduced BenchmarkExecutor - a class responsible for execution of a single benchmark.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    92
    result.
eaf40f3173ad Introduced BenchmarkExecutor - a class responsible for execution of a single benchmark.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    93
eaf40f3173ad Introduced BenchmarkExecutor - a class responsible for execution of a single benchmark.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    94
    This is where real execution happens"
eaf40f3173ad Introduced BenchmarkExecutor - a class responsible for execution of a single benchmark.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    95
140
425f8c6946f4 Introduced BenchmarkParameter class. Added parameter combination...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 139
diff changeset
    96
    | parameters combinator |
425f8c6946f4 Introduced BenchmarkParameter class. Added parameter combination...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 139
diff changeset
    97
142
c69d1eb92d91 Include parameters and their values in JSON report.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 141
diff changeset
    98
    aBenchmarkResult initializeTimestampIfNotAlready.
140
425f8c6946f4 Introduced BenchmarkParameter class. Added parameter combination...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 139
diff changeset
    99
    parameters := aBenchmarkInstance parameters collect:[:parameter|
425f8c6946f4 Introduced BenchmarkParameter class. Added parameter combination...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 139
diff changeset
   100
        | key1 key2 valuesString values defined |
425f8c6946f4 Introduced BenchmarkParameter class. Added parameter combination...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 139
diff changeset
   101
425f8c6946f4 Introduced BenchmarkParameter class. Added parameter combination...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 139
diff changeset
   102
        key1 := aBenchmarkInstance instance class name , '#' , parameter name.
425f8c6946f4 Introduced BenchmarkParameter class. Added parameter combination...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 139
diff changeset
   103
        key2 := parameter name.
425f8c6946f4 Introduced BenchmarkParameter class. Added parameter combination...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 139
diff changeset
   104
        defined := true.
425f8c6946f4 Introduced BenchmarkParameter class. Added parameter combination...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 139
diff changeset
   105
        valuesString := aDictionary at: key1 ifAbsent:[aDictionary at: key2 ifAbsent:[defined := false]].
425f8c6946f4 Introduced BenchmarkParameter class. Added parameter combination...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 139
diff changeset
   106
        defined ifTrue:[
152
ca3d03cb5499 Fixes for Pharo.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 150
diff changeset
   107
            values := BenchmarkPlatform current isSmalltalkX 
ca3d03cb5499 Fixes for Pharo.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 150
diff changeset
   108
                        ifTrue:[valuesString tokensBasedOn: $,]
ca3d03cb5499 Fixes for Pharo.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 150
diff changeset
   109
                        ifFalse:[valuesString subStrings:','].
ca3d03cb5499 Fixes for Pharo.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 150
diff changeset
   110
            values := values collect:[:each|
150
8f61a93024f9 Allow for multiple values of string parameters.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 147
diff changeset
   111
152
ca3d03cb5499 Fixes for Pharo.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 150
diff changeset
   112
                (parameter type includesBehavior: String) ifTrue:[
150
8f61a93024f9 Allow for multiple values of string parameters.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 147
diff changeset
   113
                    each
8f61a93024f9 Allow for multiple values of string parameters.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 147
diff changeset
   114
                ] ifFalse:[
140
425f8c6946f4 Introduced BenchmarkParameter class. Added parameter combination...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 139
diff changeset
   115
                    | s v |
425f8c6946f4 Introduced BenchmarkParameter class. Added parameter combination...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 139
diff changeset
   116
425f8c6946f4 Introduced BenchmarkParameter class. Added parameter combination...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 139
diff changeset
   117
                    s := each readStream.
425f8c6946f4 Introduced BenchmarkParameter class. Added parameter combination...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 139
diff changeset
   118
                    v := parameter type readFrom: s onError:[
425f8c6946f4 Introduced BenchmarkParameter class. Added parameter combination...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 139
diff changeset
   119
                        "JV: Note for Smalltalk/X: #signal: is actually an ANSI 1.9 protocol!!"
216
be26cc6e8795 Better error messages for bad/missing parameters
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 207
diff changeset
   120
                        BenchmarkParameterError new signal: 'Cannot read parameter value for ''' , parameter name , ''' (parse error)'
140
425f8c6946f4 Introduced BenchmarkParameter class. Added parameter combination...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 139
diff changeset
   121
                    ].
425f8c6946f4 Introduced BenchmarkParameter class. Added parameter combination...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 139
diff changeset
   122
                    s atEnd ifFalse:[
425f8c6946f4 Introduced BenchmarkParameter class. Added parameter combination...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 139
diff changeset
   123
                        "JV: Note for Smalltalk/X: #signal: is actually an ANSI 1.9 protocol!!"
216
be26cc6e8795 Better error messages for bad/missing parameters
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 207
diff changeset
   124
                        BenchmarkParameterError new signal: 'Cannot read parameter value for ''' , parameter name , ''' (parse error)'
140
425f8c6946f4 Introduced BenchmarkParameter class. Added parameter combination...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 139
diff changeset
   125
                    ].
425f8c6946f4 Introduced BenchmarkParameter class. Added parameter combination...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 139
diff changeset
   126
                    v.                
150
8f61a93024f9 Allow for multiple values of string parameters.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 147
diff changeset
   127
                ].
8f61a93024f9 Allow for multiple values of string parameters.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 147
diff changeset
   128
            ]
8f61a93024f9 Allow for multiple values of string parameters.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 147
diff changeset
   129
140
425f8c6946f4 Introduced BenchmarkParameter class. Added parameter combination...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 139
diff changeset
   130
        ] ifFalse:[
141
4fbcea2829d2 Parameter values for parameters without default must be specified...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 140
diff changeset
   131
            parameter default == BenchmarkParameter undefinedValue ifTrue:[
206
29602f0696d8 Refactoring and cleanup.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 186
diff changeset
   132
                values := parameter values.
29602f0696d8 Refactoring and cleanup.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 186
diff changeset
   133
                values isNil ifTrue:[ 
216
be26cc6e8795 Better error messages for bad/missing parameters
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 207
diff changeset
   134
                    BenchmarkParameterError new signal: 'Parameter value not defined and default value(s) not specified for ''' , parameter name , ''''
206
29602f0696d8 Refactoring and cleanup.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 186
diff changeset
   135
                ].
29602f0696d8 Refactoring and cleanup.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 186
diff changeset
   136
            ] ifFalse:[ 
29602f0696d8 Refactoring and cleanup.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 186
diff changeset
   137
                values := Array with: parameter default.    
141
4fbcea2829d2 Parameter values for parameters without default must be specified...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 140
diff changeset
   138
            ].
140
425f8c6946f4 Introduced BenchmarkParameter class. Added parameter combination...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 139
diff changeset
   139
        ].
425f8c6946f4 Introduced BenchmarkParameter class. Added parameter combination...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 139
diff changeset
   140
        parameter -> values
425f8c6946f4 Introduced BenchmarkParameter class. Added parameter combination...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 139
diff changeset
   141
    ].
425f8c6946f4 Introduced BenchmarkParameter class. Added parameter combination...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 139
diff changeset
   142
425f8c6946f4 Introduced BenchmarkParameter class. Added parameter combination...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 139
diff changeset
   143
    parameters := parameters asOrderedCollection sort:[:a :b | a key name < b key name ].
425f8c6946f4 Introduced BenchmarkParameter class. Added parameter combination...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 139
diff changeset
   144
425f8c6946f4 Introduced BenchmarkParameter class. Added parameter combination...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 139
diff changeset
   145
    combinator := [:parametersAndValues |
425f8c6946f4 Introduced BenchmarkParameter class. Added parameter combination...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 139
diff changeset
   146
        parametersAndValues size = parameters size ifTrue:[
425f8c6946f4 Introduced BenchmarkParameter class. Added parameter combination...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 139
diff changeset
   147
            self execute: aBenchmarkInstance  result: aBenchmarkResult  parameters: parametersAndValues.
425f8c6946f4 Introduced BenchmarkParameter class. Added parameter combination...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 139
diff changeset
   148
        ] ifFalse:[
425f8c6946f4 Introduced BenchmarkParameter class. Added parameter combination...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 139
diff changeset
   149
            | parameter |
425f8c6946f4 Introduced BenchmarkParameter class. Added parameter combination...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 139
diff changeset
   150
425f8c6946f4 Introduced BenchmarkParameter class. Added parameter combination...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 139
diff changeset
   151
            parameter := parameters at: parametersAndValues size + 1.
425f8c6946f4 Introduced BenchmarkParameter class. Added parameter combination...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 139
diff changeset
   152
            parameter value do:[:value |
425f8c6946f4 Introduced BenchmarkParameter class. Added parameter combination...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 139
diff changeset
   153
                combinator value: (parametersAndValues copyWith: (parameter key -> value)).
425f8c6946f4 Introduced BenchmarkParameter class. Added parameter combination...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 139
diff changeset
   154
            ]
425f8c6946f4 Introduced BenchmarkParameter class. Added parameter combination...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 139
diff changeset
   155
        ]
425f8c6946f4 Introduced BenchmarkParameter class. Added parameter combination...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 139
diff changeset
   156
    ].
425f8c6946f4 Introduced BenchmarkParameter class. Added parameter combination...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 139
diff changeset
   157
425f8c6946f4 Introduced BenchmarkParameter class. Added parameter combination...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 139
diff changeset
   158
    combinator value: #().
425f8c6946f4 Introduced BenchmarkParameter class. Added parameter combination...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 139
diff changeset
   159
152
ca3d03cb5499 Fixes for Pharo.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 150
diff changeset
   160
    "Created: / 12-08-2013 / 00:11:17 / Jan Vrany <jan.vrany@fit.cvut.cz>"
216
be26cc6e8795 Better error messages for bad/missing parameters
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 207
diff changeset
   161
    "Modified: / 24-09-2014 / 20:17:02 / Jan Vrany <jan.vrany@fit.cvut.cz>"
203
05be338e59fe Support for in-image profiling using MessageTally.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 186
diff changeset
   162
!
05be338e59fe Support for in-image profiling using MessageTally.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 186
diff changeset
   163
05be338e59fe Support for in-image profiling using MessageTally.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 186
diff changeset
   164
spy: aBenchmarkInstance result: aBenchmarkResult defines: aDictionary
05be338e59fe Support for in-image profiling using MessageTally.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 186
diff changeset
   165
    "
05be338e59fe Support for in-image profiling using MessageTally.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 186
diff changeset
   166
    Takes a benchmark instance and a set of parameter defines,
05be338e59fe Support for in-image profiling using MessageTally.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 186
diff changeset
   167
    then executes the benchmark under MessageTally profiler.
05be338e59fe Support for in-image profiling using MessageTally.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 186
diff changeset
   168
    Given defines must define only one combination, otherwise
05be338e59fe Support for in-image profiling using MessageTally.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 186
diff changeset
   169
    and error is thrown.
05be338e59fe Support for in-image profiling using MessageTally.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 186
diff changeset
   170
05be338e59fe Support for in-image profiling using MessageTally.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 186
diff changeset
   171
    This can be used for rough in-image profiling
05be338e59fe Support for in-image profiling using MessageTally.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 186
diff changeset
   172
    "
05be338e59fe Support for in-image profiling using MessageTally.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 186
diff changeset
   173
05be338e59fe Support for in-image profiling using MessageTally.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 186
diff changeset
   174
    | parameters combinator |
05be338e59fe Support for in-image profiling using MessageTally.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 186
diff changeset
   175
05be338e59fe Support for in-image profiling using MessageTally.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 186
diff changeset
   176
    aBenchmarkResult initializeTimestampIfNotAlready.
05be338e59fe Support for in-image profiling using MessageTally.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 186
diff changeset
   177
    parameters := aBenchmarkInstance parameters collect:[:parameter|
05be338e59fe Support for in-image profiling using MessageTally.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 186
diff changeset
   178
        | key1 key2 valuesString values defined |
05be338e59fe Support for in-image profiling using MessageTally.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 186
diff changeset
   179
05be338e59fe Support for in-image profiling using MessageTally.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 186
diff changeset
   180
        key1 := aBenchmarkInstance instance class name , '#' , parameter name.
05be338e59fe Support for in-image profiling using MessageTally.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 186
diff changeset
   181
        key2 := parameter name.
05be338e59fe Support for in-image profiling using MessageTally.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 186
diff changeset
   182
        defined := true.
05be338e59fe Support for in-image profiling using MessageTally.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 186
diff changeset
   183
        valuesString := aDictionary at: key1 ifAbsent:[aDictionary at: key2 ifAbsent:[defined := false]].
05be338e59fe Support for in-image profiling using MessageTally.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 186
diff changeset
   184
        defined ifTrue:[
05be338e59fe Support for in-image profiling using MessageTally.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 186
diff changeset
   185
            values := BenchmarkPlatform current isSmalltalkX 
05be338e59fe Support for in-image profiling using MessageTally.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 186
diff changeset
   186
                        ifTrue:[valuesString tokensBasedOn: $,]
05be338e59fe Support for in-image profiling using MessageTally.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 186
diff changeset
   187
                        ifFalse:[valuesString subStrings:','].
05be338e59fe Support for in-image profiling using MessageTally.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 186
diff changeset
   188
            values := values collect:[:each|
05be338e59fe Support for in-image profiling using MessageTally.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 186
diff changeset
   189
05be338e59fe Support for in-image profiling using MessageTally.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 186
diff changeset
   190
                (parameter type includesBehavior: String) ifTrue:[
05be338e59fe Support for in-image profiling using MessageTally.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 186
diff changeset
   191
                    each
05be338e59fe Support for in-image profiling using MessageTally.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 186
diff changeset
   192
                ] ifFalse:[
05be338e59fe Support for in-image profiling using MessageTally.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 186
diff changeset
   193
                    | s v |
05be338e59fe Support for in-image profiling using MessageTally.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 186
diff changeset
   194
05be338e59fe Support for in-image profiling using MessageTally.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 186
diff changeset
   195
                    s := each readStream.
05be338e59fe Support for in-image profiling using MessageTally.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 186
diff changeset
   196
                    v := parameter type readFrom: s onError:[
05be338e59fe Support for in-image profiling using MessageTally.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 186
diff changeset
   197
                        "JV: Note for Smalltalk/X: #signal: is actually an ANSI 1.9 protocol!!"
216
be26cc6e8795 Better error messages for bad/missing parameters
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 207
diff changeset
   198
                        BenchmarkParameterError new signal: 'Cannot read parameter value for ''' , parameter name , ''' (parse error)'
203
05be338e59fe Support for in-image profiling using MessageTally.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 186
diff changeset
   199
                    ].
05be338e59fe Support for in-image profiling using MessageTally.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 186
diff changeset
   200
                    s atEnd ifFalse:[
05be338e59fe Support for in-image profiling using MessageTally.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 186
diff changeset
   201
                        "JV: Note for Smalltalk/X: #signal: is actually an ANSI 1.9 protocol!!"
216
be26cc6e8795 Better error messages for bad/missing parameters
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 207
diff changeset
   202
                        BenchmarkParameterError new signal: 'Cannot read parameter value for ''' , parameter name , ''' (parse error)'
203
05be338e59fe Support for in-image profiling using MessageTally.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 186
diff changeset
   203
                    ].
05be338e59fe Support for in-image profiling using MessageTally.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 186
diff changeset
   204
                    v.                
05be338e59fe Support for in-image profiling using MessageTally.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 186
diff changeset
   205
                ].
05be338e59fe Support for in-image profiling using MessageTally.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 186
diff changeset
   206
            ]
05be338e59fe Support for in-image profiling using MessageTally.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 186
diff changeset
   207
05be338e59fe Support for in-image profiling using MessageTally.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 186
diff changeset
   208
        ] ifFalse:[
05be338e59fe Support for in-image profiling using MessageTally.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 186
diff changeset
   209
            parameter default == BenchmarkParameter undefinedValue ifTrue:[
216
be26cc6e8795 Better error messages for bad/missing parameters
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 207
diff changeset
   210
                BenchmarkParameterError new signal: 'Parameter value for ''' , parameter name , ''' not specified and parameter has no default value'.
203
05be338e59fe Support for in-image profiling using MessageTally.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 186
diff changeset
   211
            ].
05be338e59fe Support for in-image profiling using MessageTally.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 186
diff changeset
   212
            values := Array with: parameter default.    
05be338e59fe Support for in-image profiling using MessageTally.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 186
diff changeset
   213
        ].
05be338e59fe Support for in-image profiling using MessageTally.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 186
diff changeset
   214
        values size > 1 ifTrue:[ 
216
be26cc6e8795 Better error messages for bad/missing parameters
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 207
diff changeset
   215
            BenchmarkParameterError new signal: 'Multiple parameter values for param ''', parameter name , '''. No parameter combinating allowed when running under profiler!!'.
203
05be338e59fe Support for in-image profiling using MessageTally.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 186
diff changeset
   216
        ].
05be338e59fe Support for in-image profiling using MessageTally.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 186
diff changeset
   217
        parameter -> values
05be338e59fe Support for in-image profiling using MessageTally.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 186
diff changeset
   218
    ].
05be338e59fe Support for in-image profiling using MessageTally.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 186
diff changeset
   219
05be338e59fe Support for in-image profiling using MessageTally.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 186
diff changeset
   220
    parameters := parameters asOrderedCollection sort:[:a :b | a key name < b key name ].
05be338e59fe Support for in-image profiling using MessageTally.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 186
diff changeset
   221
05be338e59fe Support for in-image profiling using MessageTally.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 186
diff changeset
   222
    combinator := [:parametersAndValues |
05be338e59fe Support for in-image profiling using MessageTally.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 186
diff changeset
   223
        parametersAndValues size = parameters size ifTrue:[
05be338e59fe Support for in-image profiling using MessageTally.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 186
diff changeset
   224
            self spy: aBenchmarkInstance  result: aBenchmarkResult  parameters: parametersAndValues.
05be338e59fe Support for in-image profiling using MessageTally.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 186
diff changeset
   225
        ] ifFalse:[
05be338e59fe Support for in-image profiling using MessageTally.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 186
diff changeset
   226
            | parameter |
05be338e59fe Support for in-image profiling using MessageTally.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 186
diff changeset
   227
05be338e59fe Support for in-image profiling using MessageTally.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 186
diff changeset
   228
            parameter := parameters at: parametersAndValues size + 1.
05be338e59fe Support for in-image profiling using MessageTally.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 186
diff changeset
   229
            parameter value do:[:value |
05be338e59fe Support for in-image profiling using MessageTally.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 186
diff changeset
   230
                combinator value: (parametersAndValues copyWith: (parameter key -> value)).
05be338e59fe Support for in-image profiling using MessageTally.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 186
diff changeset
   231
            ]
05be338e59fe Support for in-image profiling using MessageTally.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 186
diff changeset
   232
        ]
05be338e59fe Support for in-image profiling using MessageTally.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 186
diff changeset
   233
    ].
05be338e59fe Support for in-image profiling using MessageTally.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 186
diff changeset
   234
05be338e59fe Support for in-image profiling using MessageTally.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 186
diff changeset
   235
    combinator value: #().
05be338e59fe Support for in-image profiling using MessageTally.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 186
diff changeset
   236
05be338e59fe Support for in-image profiling using MessageTally.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 186
diff changeset
   237
    "Created: / 21-05-2014 / 10:44:42 / Jan Vrany <jan.vrany@fit.cvut.cz>"
216
be26cc6e8795 Better error messages for bad/missing parameters
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 207
diff changeset
   238
    "Modified: / 24-09-2014 / 20:17:22 / Jan Vrany <jan.vrany@fit.cvut.cz>"
140
425f8c6946f4 Introduced BenchmarkParameter class. Added parameter combination...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 139
diff changeset
   239
! !
425f8c6946f4 Introduced BenchmarkParameter class. Added parameter combination...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 139
diff changeset
   240
425f8c6946f4 Introduced BenchmarkParameter class. Added parameter combination...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 139
diff changeset
   241
!BenchmarkExecutor methodsFor:'executing-private'!
425f8c6946f4 Introduced BenchmarkParameter class. Added parameter combination...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 139
diff changeset
   242
262
8d2849dd3227 Added support for (user-defined) benchmark instruments.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 216
diff changeset
   243
benchmark: aBenchmarkInstance
8d2849dd3227 Added support for (user-defined) benchmark instruments.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 216
diff changeset
   244
    | measurements |
8d2849dd3227 Added support for (user-defined) benchmark instruments.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 216
diff changeset
   245
    [
8d2849dd3227 Added support for (user-defined) benchmark instruments.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 216
diff changeset
   246
        measurements := aBenchmarkInstance benchmarkUsingInstruments: (BenchmarkPlatform current instruments) , instruments.
8d2849dd3227 Added support for (user-defined) benchmark instruments.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 216
diff changeset
   247
    ] on: Error do:[:ex|
8d2849dd3227 Added support for (user-defined) benchmark instruments.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 216
diff changeset
   248
        BenchmarkExecutionError new signal:'Error during measurement: ', ex description.      
8d2849dd3227 Added support for (user-defined) benchmark instruments.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 216
diff changeset
   249
    ].
8d2849dd3227 Added support for (user-defined) benchmark instruments.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 216
diff changeset
   250
    ^measurements
8d2849dd3227 Added support for (user-defined) benchmark instruments.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 216
diff changeset
   251
8d2849dd3227 Added support for (user-defined) benchmark instruments.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 216
diff changeset
   252
    "Created: / 24-11-2014 / 00:18:42 / Jan Vrany <jan.vrany@fit.cvut.cz>"
8d2849dd3227 Added support for (user-defined) benchmark instruments.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 216
diff changeset
   253
    "Modified: / 27-11-2014 / 13:43:43 / Jan Vrany <jan.vrany@fit.cvut.cz>"
8d2849dd3227 Added support for (user-defined) benchmark instruments.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 216
diff changeset
   254
!
8d2849dd3227 Added support for (user-defined) benchmark instruments.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 216
diff changeset
   255
140
425f8c6946f4 Introduced BenchmarkParameter class. Added parameter combination...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 139
diff changeset
   256
execute: aBenchmarkInstance result: aBenchmarkResult parameters: aCollection
425f8c6946f4 Introduced BenchmarkParameter class. Added parameter combination...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 139
diff changeset
   257
    "
425f8c6946f4 Introduced BenchmarkParameter class. Added parameter combination...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 139
diff changeset
   258
    Takes a benchmark instance and a set of parameter defines,
186
d444d8e7d29b Changed BenchmarkExecutor>>#execute:result:parameters: to return an outcome.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 152
diff changeset
   259
    executes the benchmark and an outcome to the result. Returns that
268
ee1fd4a6e836 Added support for skipping tests.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 267
diff changeset
   260
    outcome or nil if benchmark has been skipped.
140
425f8c6946f4 Introduced BenchmarkParameter class. Added parameter combination...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 139
diff changeset
   261
425f8c6946f4 Introduced BenchmarkParameter class. Added parameter combination...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 139
diff changeset
   262
    This is where real execution happens"
425f8c6946f4 Introduced BenchmarkParameter class. Added parameter combination...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 139
diff changeset
   263
262
8d2849dd3227 Added support for (user-defined) benchmark instruments.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 216
diff changeset
   264
    | measurements outcome |
139
eaf40f3173ad Introduced BenchmarkExecutor - a class responsible for execution of a single benchmark.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   265
268
ee1fd4a6e836 Added support for skipping tests.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 267
diff changeset
   266
    [
ee1fd4a6e836 Added support for skipping tests.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 267
diff changeset
   267
        "First, warm it up"
ee1fd4a6e836 Added support for skipping tests.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 267
diff changeset
   268
        [ 
206
29602f0696d8 Refactoring and cleanup.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 186
diff changeset
   269
            self setUp:aBenchmarkInstance parameters: aCollection.  
268
ee1fd4a6e836 Added support for skipping tests.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 267
diff changeset
   270
            self warmUp: aBenchmarkInstance.
206
29602f0696d8 Refactoring and cleanup.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 186
diff changeset
   271
        ] ensure:[
29602f0696d8 Refactoring and cleanup.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 186
diff changeset
   272
            self tearDown: aBenchmarkInstance
29602f0696d8 Refactoring and cleanup.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 186
diff changeset
   273
        ].
268
ee1fd4a6e836 Added support for skipping tests.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 267
diff changeset
   274
ee1fd4a6e836 Added support for skipping tests.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 267
diff changeset
   275
        measurements := (1 to: aBenchmarkResult runs) collect:[:i | 
ee1fd4a6e836 Added support for skipping tests.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 267
diff changeset
   276
            [
ee1fd4a6e836 Added support for skipping tests.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 267
diff changeset
   277
                self setUp:aBenchmarkInstance parameters: aCollection.  
ee1fd4a6e836 Added support for skipping tests.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 267
diff changeset
   278
                self benchmark: aBenchmarkInstance 
ee1fd4a6e836 Added support for skipping tests.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 267
diff changeset
   279
            ] ensure:[
ee1fd4a6e836 Added support for skipping tests.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 267
diff changeset
   280
                self tearDown: aBenchmarkInstance
ee1fd4a6e836 Added support for skipping tests.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 267
diff changeset
   281
            ].
ee1fd4a6e836 Added support for skipping tests.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 267
diff changeset
   282
        ].
ee1fd4a6e836 Added support for skipping tests.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 267
diff changeset
   283
        aBenchmarkResult addOutcome:
ee1fd4a6e836 Added support for skipping tests.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 267
diff changeset
   284
            (outcome := BenchmarkOutcome 
ee1fd4a6e836 Added support for skipping tests.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 267
diff changeset
   285
                benchmark: aBenchmarkInstance
ee1fd4a6e836 Added support for skipping tests.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 267
diff changeset
   286
                parameters: aCollection
ee1fd4a6e836 Added support for skipping tests.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 267
diff changeset
   287
                measurements: measurements).     
ee1fd4a6e836 Added support for skipping tests.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 267
diff changeset
   288
    ] on: BenchmarkSkipRequest do:[:ex | 
ee1fd4a6e836 Added support for skipping tests.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 267
diff changeset
   289
        outcome := nil.
206
29602f0696d8 Refactoring and cleanup.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 186
diff changeset
   290
    ].
186
d444d8e7d29b Changed BenchmarkExecutor>>#execute:result:parameters: to return an outcome.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 152
diff changeset
   291
    ^ outcome
139
eaf40f3173ad Introduced BenchmarkExecutor - a class responsible for execution of a single benchmark.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   292
140
425f8c6946f4 Introduced BenchmarkParameter class. Added parameter combination...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 139
diff changeset
   293
    "Created: / 27-07-2013 / 12:32:36 / Jan Vrany <jan.vrany@fit.cvut.cz>"
268
ee1fd4a6e836 Added support for skipping tests.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 267
diff changeset
   294
    "Modified (comment): / 20-04-2015 / 12:44:15 / Jan Vrany <jan.vrany@fit.cvut.cz>"
140
425f8c6946f4 Introduced BenchmarkParameter class. Added parameter combination...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 139
diff changeset
   295
!
139
eaf40f3173ad Introduced BenchmarkExecutor - a class responsible for execution of a single benchmark.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   296
140
425f8c6946f4 Introduced BenchmarkParameter class. Added parameter combination...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 139
diff changeset
   297
setUp:aBenchmarkInstance parameters: aCollection
145
98ebd63b85c9 Catch and report errors during execution
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 142
diff changeset
   298
    [
98ebd63b85c9 Catch and report errors during execution
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 142
diff changeset
   299
        aCollection do:[:each|
98ebd63b85c9 Catch and report errors during execution
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 142
diff changeset
   300
            aBenchmarkInstance setUpParameter: each key value: each value
98ebd63b85c9 Catch and report errors during execution
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 142
diff changeset
   301
        ].
98ebd63b85c9 Catch and report errors during execution
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 142
diff changeset
   302
        aBenchmarkInstance setUp.        
98ebd63b85c9 Catch and report errors during execution
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 142
diff changeset
   303
    ] on: Error do:[:ex|
147
91e4feb2c8b5 Moved error handling to command line adapter.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 145
diff changeset
   304
        (ex isKindOf: BenchmarkError) ifTrue:[
91e4feb2c8b5 Moved error handling to command line adapter.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 145
diff changeset
   305
            ex pass
91e4feb2c8b5 Moved error handling to command line adapter.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 145
diff changeset
   306
        ] ifFalse:[
91e4feb2c8b5 Moved error handling to command line adapter.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 145
diff changeset
   307
            BenchmarkExecutionError new signal:'Error during set-up: ', ex description.
91e4feb2c8b5 Moved error handling to command line adapter.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 145
diff changeset
   308
        ].
91e4feb2c8b5 Moved error handling to command line adapter.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 145
diff changeset
   309
145
98ebd63b85c9 Catch and report errors during execution
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 142
diff changeset
   310
    ]
139
eaf40f3173ad Introduced BenchmarkExecutor - a class responsible for execution of a single benchmark.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   311
140
425f8c6946f4 Introduced BenchmarkParameter class. Added parameter combination...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 139
diff changeset
   312
    "Created: / 27-07-2013 / 12:31:28 / Jan Vrany <jan.vrany@fit.cvut.cz>"
147
91e4feb2c8b5 Moved error handling to command line adapter.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 145
diff changeset
   313
    "Modified: / 01-08-2013 / 19:14:34 / Jan Vrany <jan.vrany@fit.cvut.cz>"
139
eaf40f3173ad Introduced BenchmarkExecutor - a class responsible for execution of a single benchmark.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   314
!
eaf40f3173ad Introduced BenchmarkExecutor - a class responsible for execution of a single benchmark.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   315
267
5c032df036a4 Bugfixes: smalltalk-profiling & <warmup> annotation processing.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 262
diff changeset
   316
spy:aBenchmarkInstance 
5c032df036a4 Bugfixes: smalltalk-profiling & <warmup> annotation processing.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 262
diff changeset
   317
    | messageTally measurements |
5c032df036a4 Bugfixes: smalltalk-profiling & <warmup> annotation processing.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 262
diff changeset
   318
    " Special - use Smalltalk/X visual profiler instead plain old
5c032df036a4 Bugfixes: smalltalk-profiling & <warmup> annotation processing.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 262
diff changeset
   319
      MessageTally."
5c032df036a4 Bugfixes: smalltalk-profiling & <warmup> annotation processing.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 262
diff changeset
   320
    messageTally := Smalltalk isSmalltalkX
5c032df036a4 Bugfixes: smalltalk-profiling & <warmup> annotation processing.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 262
diff changeset
   321
                    ifTrue:[ Smalltalk at:#'Tools::Profiler' ]
5c032df036a4 Bugfixes: smalltalk-profiling & <warmup> annotation processing.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 262
diff changeset
   322
                    ifFalse:[ MessageTally ].
5c032df036a4 Bugfixes: smalltalk-profiling & <warmup> annotation processing.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 262
diff changeset
   323
    messageTally spyDetailedOn: [ measurements := self benchmark: aBenchmarkInstance ].
5c032df036a4 Bugfixes: smalltalk-profiling & <warmup> annotation processing.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 262
diff changeset
   324
    ^ measurements
203
05be338e59fe Support for in-image profiling using MessageTally.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 186
diff changeset
   325
05be338e59fe Support for in-image profiling using MessageTally.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 186
diff changeset
   326
    "Created: / 21-05-2014 / 10:48:20 / Jan Vrany <jan.vrany@fit.cvut.cz>"
267
5c032df036a4 Bugfixes: smalltalk-profiling & <warmup> annotation processing.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 262
diff changeset
   327
    "Modified: / 16-12-2014 / 16:02:17 / Jan Vrany <jan.vrany@fit.cvut.cz>"
203
05be338e59fe Support for in-image profiling using MessageTally.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 186
diff changeset
   328
!
05be338e59fe Support for in-image profiling using MessageTally.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 186
diff changeset
   329
139
eaf40f3173ad Introduced BenchmarkExecutor - a class responsible for execution of a single benchmark.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   330
tearDown: aBenchmarkInstance
145
98ebd63b85c9 Catch and report errors during execution
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 142
diff changeset
   331
    [
98ebd63b85c9 Catch and report errors during execution
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 142
diff changeset
   332
        aBenchmarkInstance tearDown.
98ebd63b85c9 Catch and report errors during execution
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 142
diff changeset
   333
    ] on: Error do:[:ex|
98ebd63b85c9 Catch and report errors during execution
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 142
diff changeset
   334
        BenchmarkExecutionError new signal:'Error during tear-down: ', ex description.      
98ebd63b85c9 Catch and report errors during execution
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 142
diff changeset
   335
    ]
139
eaf40f3173ad Introduced BenchmarkExecutor - a class responsible for execution of a single benchmark.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   336
eaf40f3173ad Introduced BenchmarkExecutor - a class responsible for execution of a single benchmark.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   337
    "Created: / 24-06-2013 / 01:12:09 / Jan Vrany <jan.vrany@fit.cvut.cz>"
145
98ebd63b85c9 Catch and report errors during execution
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 142
diff changeset
   338
    "Modified: / 31-07-2013 / 01:03:36 / Jan Vrany <jan.vrany@fit.cvut.cz>"
139
eaf40f3173ad Introduced BenchmarkExecutor - a class responsible for execution of a single benchmark.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   339
!
eaf40f3173ad Introduced BenchmarkExecutor - a class responsible for execution of a single benchmark.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   340
eaf40f3173ad Introduced BenchmarkExecutor - a class responsible for execution of a single benchmark.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   341
warmUp: aBenchmarkInstance
145
98ebd63b85c9 Catch and report errors during execution
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 142
diff changeset
   342
    [
98ebd63b85c9 Catch and report errors during execution
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 142
diff changeset
   343
        aBenchmarkInstance warmUp.
98ebd63b85c9 Catch and report errors during execution
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 142
diff changeset
   344
    ] on: Error do:[:ex|
268
ee1fd4a6e836 Added support for skipping tests.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 267
diff changeset
   345
        (ex isKindOf: BenchmarkError) ifTrue:[ 
ee1fd4a6e836 Added support for skipping tests.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 267
diff changeset
   346
            ex pass
ee1fd4a6e836 Added support for skipping tests.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 267
diff changeset
   347
        ] ifFalse:[ 
ee1fd4a6e836 Added support for skipping tests.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 267
diff changeset
   348
            BenchmarkExecutionError new signal:'Error during warm-up: ', ex description.      
ee1fd4a6e836 Added support for skipping tests.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 267
diff changeset
   349
        ]
145
98ebd63b85c9 Catch and report errors during execution
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 142
diff changeset
   350
    ]
139
eaf40f3173ad Introduced BenchmarkExecutor - a class responsible for execution of a single benchmark.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   351
eaf40f3173ad Introduced BenchmarkExecutor - a class responsible for execution of a single benchmark.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   352
    "Created: / 24-06-2013 / 01:11:40 / Jan Vrany <jan.vrany@fit.cvut.cz>"
268
ee1fd4a6e836 Added support for skipping tests.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 267
diff changeset
   353
    "Modified: / 20-04-2015 / 12:45:29 / Jan Vrany <jan.vrany@fit.cvut.cz>"
139
eaf40f3173ad Introduced BenchmarkExecutor - a class responsible for execution of a single benchmark.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   354
! !
eaf40f3173ad Introduced BenchmarkExecutor - a class responsible for execution of a single benchmark.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   355
262
8d2849dd3227 Added support for (user-defined) benchmark instruments.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 216
diff changeset
   356
!BenchmarkExecutor methodsFor:'initialization'!
8d2849dd3227 Added support for (user-defined) benchmark instruments.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 216
diff changeset
   357
8d2849dd3227 Added support for (user-defined) benchmark instruments.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 216
diff changeset
   358
initialize
8d2849dd3227 Added support for (user-defined) benchmark instruments.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 216
diff changeset
   359
    "Invoked when a new instance is created."
8d2849dd3227 Added support for (user-defined) benchmark instruments.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 216
diff changeset
   360
8d2849dd3227 Added support for (user-defined) benchmark instruments.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 216
diff changeset
   361
    instruments := #()
8d2849dd3227 Added support for (user-defined) benchmark instruments.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 216
diff changeset
   362
8d2849dd3227 Added support for (user-defined) benchmark instruments.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 216
diff changeset
   363
    "Modified: / 27-11-2014 / 13:42:53 / Jan Vrany <jan.vrany@fit.cvut.cz>"
8d2849dd3227 Added support for (user-defined) benchmark instruments.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 216
diff changeset
   364
! !
8d2849dd3227 Added support for (user-defined) benchmark instruments.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 216
diff changeset
   365
203
05be338e59fe Support for in-image profiling using MessageTally.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 186
diff changeset
   366
!BenchmarkExecutor methodsFor:'profiling-private'!
05be338e59fe Support for in-image profiling using MessageTally.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 186
diff changeset
   367
05be338e59fe Support for in-image profiling using MessageTally.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 186
diff changeset
   368
spy: aBenchmarkInstance result: aBenchmarkResult parameters: aCollection
05be338e59fe Support for in-image profiling using MessageTally.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 186
diff changeset
   369
    "
05be338e59fe Support for in-image profiling using MessageTally.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 186
diff changeset
   370
    Takes a benchmark instance and a set of parameter defines,
05be338e59fe Support for in-image profiling using MessageTally.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 186
diff changeset
   371
    runs it under MessageTally profiler and show profiling results.
05be338e59fe Support for in-image profiling using MessageTally.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 186
diff changeset
   372
    "
05be338e59fe Support for in-image profiling using MessageTally.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 186
diff changeset
   373
267
5c032df036a4 Bugfixes: smalltalk-profiling & <warmup> annotation processing.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 262
diff changeset
   374
    | measurements outcome |
203
05be338e59fe Support for in-image profiling using MessageTally.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 186
diff changeset
   375
05be338e59fe Support for in-image profiling using MessageTally.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 186
diff changeset
   376
    [
05be338e59fe Support for in-image profiling using MessageTally.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 186
diff changeset
   377
        self setUp:aBenchmarkInstance parameters: aCollection .
05be338e59fe Support for in-image profiling using MessageTally.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 186
diff changeset
   378
        self warmUp: aBenchmarkInstance.
267
5c032df036a4 Bugfixes: smalltalk-profiling & <warmup> annotation processing.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 262
diff changeset
   379
        measurements := Array with: (self spy: aBenchmarkInstance).
203
05be338e59fe Support for in-image profiling using MessageTally.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 186
diff changeset
   380
        aBenchmarkResult addOutcome:
05be338e59fe Support for in-image profiling using MessageTally.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 186
diff changeset
   381
            (outcome := BenchmarkOutcome 
05be338e59fe Support for in-image profiling using MessageTally.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 186
diff changeset
   382
                benchmark: aBenchmarkInstance
267
5c032df036a4 Bugfixes: smalltalk-profiling & <warmup> annotation processing.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 262
diff changeset
   383
                parameters: aCollection
5c032df036a4 Bugfixes: smalltalk-profiling & <warmup> annotation processing.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 262
diff changeset
   384
                measurements: measurements).     
5c032df036a4 Bugfixes: smalltalk-profiling & <warmup> annotation processing.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 262
diff changeset
   385
203
05be338e59fe Support for in-image profiling using MessageTally.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 186
diff changeset
   386
    ] ensure:[
05be338e59fe Support for in-image profiling using MessageTally.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 186
diff changeset
   387
        self tearDown: aBenchmarkInstance
05be338e59fe Support for in-image profiling using MessageTally.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 186
diff changeset
   388
    ].
05be338e59fe Support for in-image profiling using MessageTally.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 186
diff changeset
   389
    ^ outcome
05be338e59fe Support for in-image profiling using MessageTally.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 186
diff changeset
   390
05be338e59fe Support for in-image profiling using MessageTally.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 186
diff changeset
   391
    "Created: / 21-05-2014 / 10:44:42 / Jan Vrany <jan.vrany@fit.cvut.cz>"
267
5c032df036a4 Bugfixes: smalltalk-profiling & <warmup> annotation processing.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 262
diff changeset
   392
    "Modified: / 16-12-2014 / 16:03:21 / Jan Vrany <jan.vrany@fit.cvut.cz>"
203
05be338e59fe Support for in-image profiling using MessageTally.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 186
diff changeset
   393
! !
05be338e59fe Support for in-image profiling using MessageTally.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 186
diff changeset
   394
141
4fbcea2829d2 Parameter values for parameters without default must be specified...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 140
diff changeset
   395
!BenchmarkExecutor class methodsFor:'documentation'!
4fbcea2829d2 Parameter values for parameters without default must be specified...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 140
diff changeset
   396
4fbcea2829d2 Parameter values for parameters without default must be specified...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 140
diff changeset
   397
version_HG
4fbcea2829d2 Parameter values for parameters without default must be specified...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 140
diff changeset
   398
4fbcea2829d2 Parameter values for parameters without default must be specified...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 140
diff changeset
   399
    ^ '$Changeset: <not expanded> $'
4fbcea2829d2 Parameter values for parameters without default must be specified...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 140
diff changeset
   400
! !
4fbcea2829d2 Parameter values for parameters without default must be specified...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 140
diff changeset
   401