s/BenchmarkExecutor.st
author Jan Vrany <jan.vrany@fit.cvut.cz>
Wed, 21 May 2014 11:04:40 +0100
changeset 203 05be338e59fe
parent 186 d444d8e7d29b
child 207 1697e4572960
permissions -rw-r--r--
Support for in-image profiling using MessageTally. To run benchmark under MessageTally alike profiler, following API methods were added: BenchmarkInstance>>spy BenchmarkInstance>>spy: BenchmarkInstance>>spy:with: Parameter definitions must yield a signgle combination, otherwise an error is triggered.
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
eaf40f3173ad Introduced BenchmarkExecutor - a class responsible for execution of a single benchmark.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     3
Object subclass:#BenchmarkExecutor
eaf40f3173ad Introduced BenchmarkExecutor - a class responsible for execution of a single benchmark.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     4
	instanceVariableNames:''
eaf40f3173ad Introduced BenchmarkExecutor - a class responsible for execution of a single benchmark.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     5
	classVariableNames:''
eaf40f3173ad Introduced BenchmarkExecutor - a class responsible for execution of a single benchmark.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     6
	poolDictionaries:''
eaf40f3173ad Introduced BenchmarkExecutor - a class responsible for execution of a single benchmark.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     7
	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
     8
!
eaf40f3173ad Introduced BenchmarkExecutor - a class responsible for execution of a single benchmark.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     9
eaf40f3173ad Introduced BenchmarkExecutor - a class responsible for execution of a single benchmark.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    10
!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
    11
eaf40f3173ad Introduced BenchmarkExecutor - a class responsible for execution of a single benchmark.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    12
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
    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
    15
    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
    16
    BenchmarkOutcomes.
eaf40f3173ad Introduced BenchmarkExecutor - a class responsible for execution of a single benchmark.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    17
eaf40f3173ad Introduced BenchmarkExecutor - a class responsible for execution of a single benchmark.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    18
    [author:]
eaf40f3173ad Introduced BenchmarkExecutor - a class responsible for execution of a single benchmark.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    19
        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
    20
eaf40f3173ad Introduced BenchmarkExecutor - a class responsible for execution of a single benchmark.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    21
    [instance variables:]
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
    [class 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
    [see also:]
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
"
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
!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
    31
eaf40f3173ad Introduced BenchmarkExecutor - a class responsible for execution of a single benchmark.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    32
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
    33
    "
eaf40f3173ad Introduced BenchmarkExecutor - a class responsible for execution of a single benchmark.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    34
    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
    35
    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
    36
    result.
eaf40f3173ad Introduced BenchmarkExecutor - a class responsible for execution of a single benchmark.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    37
eaf40f3173ad Introduced BenchmarkExecutor - a class responsible for execution of a single benchmark.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    38
    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
    39
140
425f8c6946f4 Introduced BenchmarkParameter class. Added parameter combination...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 139
diff changeset
    40
    | parameters combinator |
425f8c6946f4 Introduced BenchmarkParameter class. Added parameter combination...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 139
diff changeset
    41
142
c69d1eb92d91 Include parameters and their values in JSON report.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 141
diff changeset
    42
    aBenchmarkResult initializeTimestampIfNotAlready.
140
425f8c6946f4 Introduced BenchmarkParameter class. Added parameter combination...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 139
diff changeset
    43
    parameters := aBenchmarkInstance parameters collect:[:parameter|
425f8c6946f4 Introduced BenchmarkParameter class. Added parameter combination...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 139
diff changeset
    44
        | key1 key2 valuesString values defined |
425f8c6946f4 Introduced BenchmarkParameter class. Added parameter combination...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 139
diff changeset
    45
425f8c6946f4 Introduced BenchmarkParameter class. Added parameter combination...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 139
diff changeset
    46
        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
    47
        key2 := parameter name.
425f8c6946f4 Introduced BenchmarkParameter class. Added parameter combination...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 139
diff changeset
    48
        defined := true.
425f8c6946f4 Introduced BenchmarkParameter class. Added parameter combination...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 139
diff changeset
    49
        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
    50
        defined ifTrue:[
152
ca3d03cb5499 Fixes for Pharo.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 150
diff changeset
    51
            values := BenchmarkPlatform current isSmalltalkX 
ca3d03cb5499 Fixes for Pharo.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 150
diff changeset
    52
                        ifTrue:[valuesString tokensBasedOn: $,]
ca3d03cb5499 Fixes for Pharo.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 150
diff changeset
    53
                        ifFalse:[valuesString subStrings:','].
ca3d03cb5499 Fixes for Pharo.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 150
diff changeset
    54
            values := values collect:[:each|
150
8f61a93024f9 Allow for multiple values of string parameters.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 147
diff changeset
    55
152
ca3d03cb5499 Fixes for Pharo.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 150
diff changeset
    56
                (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
    57
                    each
8f61a93024f9 Allow for multiple values of string parameters.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 147
diff changeset
    58
                ] ifFalse:[
140
425f8c6946f4 Introduced BenchmarkParameter class. Added parameter combination...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 139
diff changeset
    59
                    | s v |
425f8c6946f4 Introduced BenchmarkParameter class. Added parameter combination...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 139
diff changeset
    60
425f8c6946f4 Introduced BenchmarkParameter class. Added parameter combination...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 139
diff changeset
    61
                    s := each readStream.
425f8c6946f4 Introduced BenchmarkParameter class. Added parameter combination...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 139
diff changeset
    62
                    v := parameter type readFrom: s onError:[
425f8c6946f4 Introduced BenchmarkParameter class. Added parameter combination...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 139
diff changeset
    63
                        "JV: Note for Smalltalk/X: #signal: is actually an ANSI 1.9 protocol!!"
425f8c6946f4 Introduced BenchmarkParameter class. Added parameter combination...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 139
diff changeset
    64
                        BenchmarkParameterError new signal: 'Cannot read parameter value for ' , parameter name , ' (parse error)'
425f8c6946f4 Introduced BenchmarkParameter class. Added parameter combination...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 139
diff changeset
    65
                    ].
425f8c6946f4 Introduced BenchmarkParameter class. Added parameter combination...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 139
diff changeset
    66
                    s atEnd ifFalse:[
425f8c6946f4 Introduced BenchmarkParameter class. Added parameter combination...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 139
diff changeset
    67
                        "JV: Note for Smalltalk/X: #signal: is actually an ANSI 1.9 protocol!!"
425f8c6946f4 Introduced BenchmarkParameter class. Added parameter combination...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 139
diff changeset
    68
                        BenchmarkParameterError new signal: 'Cannot read parameter value for ' , parameter name , ' (parse error)'
425f8c6946f4 Introduced BenchmarkParameter class. Added parameter combination...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 139
diff changeset
    69
                    ].
425f8c6946f4 Introduced BenchmarkParameter class. Added parameter combination...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 139
diff changeset
    70
                    v.                
150
8f61a93024f9 Allow for multiple values of string parameters.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 147
diff changeset
    71
                ].
8f61a93024f9 Allow for multiple values of string parameters.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 147
diff changeset
    72
            ]
8f61a93024f9 Allow for multiple values of string parameters.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 147
diff changeset
    73
140
425f8c6946f4 Introduced BenchmarkParameter class. Added parameter combination...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 139
diff changeset
    74
        ] ifFalse:[
141
4fbcea2829d2 Parameter values for parameters without default must be specified...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 140
diff changeset
    75
            parameter default == BenchmarkParameter undefinedValue ifTrue:[
4fbcea2829d2 Parameter values for parameters without default must be specified...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 140
diff changeset
    76
                BenchmarkParameterError new signal: 'Parameter value for ' , parameter name , ' not specified and parameter has no default value'.
4fbcea2829d2 Parameter values for parameters without default must be specified...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 140
diff changeset
    77
            ].
140
425f8c6946f4 Introduced BenchmarkParameter class. Added parameter combination...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 139
diff changeset
    78
            values := Array with: parameter default.    
425f8c6946f4 Introduced BenchmarkParameter class. Added parameter combination...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 139
diff changeset
    79
        ].
425f8c6946f4 Introduced BenchmarkParameter class. Added parameter combination...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 139
diff changeset
    80
        parameter -> values
425f8c6946f4 Introduced BenchmarkParameter class. Added parameter combination...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 139
diff changeset
    81
    ].
425f8c6946f4 Introduced BenchmarkParameter class. Added parameter combination...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 139
diff changeset
    82
425f8c6946f4 Introduced BenchmarkParameter class. Added parameter combination...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 139
diff changeset
    83
    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
    84
425f8c6946f4 Introduced BenchmarkParameter class. Added parameter combination...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 139
diff changeset
    85
    combinator := [:parametersAndValues |
425f8c6946f4 Introduced BenchmarkParameter class. Added parameter combination...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 139
diff changeset
    86
        parametersAndValues size = parameters size ifTrue:[
425f8c6946f4 Introduced BenchmarkParameter class. Added parameter combination...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 139
diff changeset
    87
            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
    88
        ] ifFalse:[
425f8c6946f4 Introduced BenchmarkParameter class. Added parameter combination...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 139
diff changeset
    89
            | parameter |
425f8c6946f4 Introduced BenchmarkParameter class. Added parameter combination...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 139
diff changeset
    90
425f8c6946f4 Introduced BenchmarkParameter class. Added parameter combination...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 139
diff changeset
    91
            parameter := parameters at: parametersAndValues size + 1.
425f8c6946f4 Introduced BenchmarkParameter class. Added parameter combination...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 139
diff changeset
    92
            parameter value do:[:value |
425f8c6946f4 Introduced BenchmarkParameter class. Added parameter combination...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 139
diff changeset
    93
                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
    94
            ]
425f8c6946f4 Introduced BenchmarkParameter class. Added parameter combination...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 139
diff changeset
    95
        ]
425f8c6946f4 Introduced BenchmarkParameter class. Added parameter combination...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 139
diff changeset
    96
    ].
425f8c6946f4 Introduced BenchmarkParameter class. Added parameter combination...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 139
diff changeset
    97
425f8c6946f4 Introduced BenchmarkParameter class. Added parameter combination...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 139
diff changeset
    98
    combinator value: #().
425f8c6946f4 Introduced BenchmarkParameter class. Added parameter combination...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 139
diff changeset
    99
152
ca3d03cb5499 Fixes for Pharo.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 150
diff changeset
   100
    "Created: / 12-08-2013 / 00:11: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
   101
!
05be338e59fe Support for in-image profiling using MessageTally.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 186
diff changeset
   102
05be338e59fe Support for in-image profiling using MessageTally.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 186
diff changeset
   103
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
   104
    "
05be338e59fe Support for in-image profiling using MessageTally.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 186
diff changeset
   105
    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
   106
    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
   107
    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
   108
    and error is thrown.
05be338e59fe Support for in-image profiling using MessageTally.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 186
diff changeset
   109
05be338e59fe Support for in-image profiling using MessageTally.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 186
diff changeset
   110
    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
   111
    "
05be338e59fe Support for in-image profiling using MessageTally.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 186
diff changeset
   112
05be338e59fe Support for in-image profiling using MessageTally.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 186
diff changeset
   113
    | parameters combinator |
05be338e59fe Support for in-image profiling using MessageTally.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 186
diff changeset
   114
05be338e59fe Support for in-image profiling using MessageTally.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 186
diff changeset
   115
    aBenchmarkResult initializeTimestampIfNotAlready.
05be338e59fe Support for in-image profiling using MessageTally.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 186
diff changeset
   116
    parameters := aBenchmarkInstance parameters collect:[:parameter|
05be338e59fe Support for in-image profiling using MessageTally.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 186
diff changeset
   117
        | key1 key2 valuesString values defined |
05be338e59fe Support for in-image profiling using MessageTally.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 186
diff changeset
   118
05be338e59fe Support for in-image profiling using MessageTally.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 186
diff changeset
   119
        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
   120
        key2 := parameter name.
05be338e59fe Support for in-image profiling using MessageTally.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 186
diff changeset
   121
        defined := true.
05be338e59fe Support for in-image profiling using MessageTally.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 186
diff changeset
   122
        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
   123
        defined ifTrue:[
05be338e59fe Support for in-image profiling using MessageTally.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 186
diff changeset
   124
            values := BenchmarkPlatform current isSmalltalkX 
05be338e59fe Support for in-image profiling using MessageTally.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 186
diff changeset
   125
                        ifTrue:[valuesString tokensBasedOn: $,]
05be338e59fe Support for in-image profiling using MessageTally.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 186
diff changeset
   126
                        ifFalse:[valuesString subStrings:','].
05be338e59fe Support for in-image profiling using MessageTally.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 186
diff changeset
   127
            values := values collect:[:each|
05be338e59fe Support for in-image profiling using MessageTally.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 186
diff changeset
   128
05be338e59fe Support for in-image profiling using MessageTally.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 186
diff changeset
   129
                (parameter type includesBehavior: String) ifTrue:[
05be338e59fe Support for in-image profiling using MessageTally.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 186
diff changeset
   130
                    each
05be338e59fe Support for in-image profiling using MessageTally.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 186
diff changeset
   131
                ] ifFalse:[
05be338e59fe Support for in-image profiling using MessageTally.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 186
diff changeset
   132
                    | s v |
05be338e59fe Support for in-image profiling using MessageTally.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 186
diff changeset
   133
05be338e59fe Support for in-image profiling using MessageTally.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 186
diff changeset
   134
                    s := each readStream.
05be338e59fe Support for in-image profiling using MessageTally.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 186
diff changeset
   135
                    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
   136
                        "JV: Note for Smalltalk/X: #signal: is actually an ANSI 1.9 protocol!!"
05be338e59fe Support for in-image profiling using MessageTally.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 186
diff changeset
   137
                        BenchmarkParameterError new signal: 'Cannot read parameter value for ' , parameter name , ' (parse error)'
05be338e59fe Support for in-image profiling using MessageTally.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 186
diff changeset
   138
                    ].
05be338e59fe Support for in-image profiling using MessageTally.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 186
diff changeset
   139
                    s atEnd ifFalse:[
05be338e59fe Support for in-image profiling using MessageTally.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 186
diff changeset
   140
                        "JV: Note for Smalltalk/X: #signal: is actually an ANSI 1.9 protocol!!"
05be338e59fe Support for in-image profiling using MessageTally.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 186
diff changeset
   141
                        BenchmarkParameterError new signal: 'Cannot read parameter value for ' , parameter name , ' (parse error)'
05be338e59fe Support for in-image profiling using MessageTally.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 186
diff changeset
   142
                    ].
05be338e59fe Support for in-image profiling using MessageTally.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 186
diff changeset
   143
                    v.                
05be338e59fe Support for in-image profiling using MessageTally.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 186
diff changeset
   144
                ].
05be338e59fe Support for in-image profiling using MessageTally.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 186
diff changeset
   145
            ]
05be338e59fe Support for in-image profiling using MessageTally.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 186
diff changeset
   146
05be338e59fe Support for in-image profiling using MessageTally.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 186
diff changeset
   147
        ] ifFalse:[
05be338e59fe Support for in-image profiling using MessageTally.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 186
diff changeset
   148
            parameter default == BenchmarkParameter undefinedValue ifTrue:[
05be338e59fe Support for in-image profiling using MessageTally.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 186
diff changeset
   149
                BenchmarkParameterError new signal: 'Parameter value for ' , parameter name , ' not specified and parameter has no default value'.
05be338e59fe Support for in-image profiling using MessageTally.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 186
diff changeset
   150
            ].
05be338e59fe Support for in-image profiling using MessageTally.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 186
diff changeset
   151
            values := Array with: parameter default.    
05be338e59fe Support for in-image profiling using MessageTally.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 186
diff changeset
   152
        ].
05be338e59fe Support for in-image profiling using MessageTally.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 186
diff changeset
   153
        values size > 1 ifTrue:[ 
05be338e59fe Support for in-image profiling using MessageTally.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 186
diff changeset
   154
            BenchmarkParameterError new signal: 'Multiple parameter values for param ', parameter name , '. No parameter combinating allowed when running under profiler!!'.
05be338e59fe Support for in-image profiling using MessageTally.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 186
diff changeset
   155
        ].
05be338e59fe Support for in-image profiling using MessageTally.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 186
diff changeset
   156
        parameter -> values
05be338e59fe Support for in-image profiling using MessageTally.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 186
diff changeset
   157
    ].
05be338e59fe Support for in-image profiling using MessageTally.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 186
diff changeset
   158
05be338e59fe Support for in-image profiling using MessageTally.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 186
diff changeset
   159
    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
   160
05be338e59fe Support for in-image profiling using MessageTally.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 186
diff changeset
   161
    combinator := [:parametersAndValues |
05be338e59fe Support for in-image profiling using MessageTally.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 186
diff changeset
   162
        parametersAndValues size = parameters size ifTrue:[
05be338e59fe Support for in-image profiling using MessageTally.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 186
diff changeset
   163
            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
   164
        ] ifFalse:[
05be338e59fe Support for in-image profiling using MessageTally.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 186
diff changeset
   165
            | parameter |
05be338e59fe Support for in-image profiling using MessageTally.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 186
diff changeset
   166
05be338e59fe Support for in-image profiling using MessageTally.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 186
diff changeset
   167
            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
   168
            parameter value do:[:value |
05be338e59fe Support for in-image profiling using MessageTally.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 186
diff changeset
   169
                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
   170
            ]
05be338e59fe Support for in-image profiling using MessageTally.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 186
diff changeset
   171
        ]
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
    combinator value: #().
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
    "Created: / 21-05-2014 / 10:44:42 / 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
   177
! !
425f8c6946f4 Introduced BenchmarkParameter class. Added parameter combination...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 139
diff changeset
   178
425f8c6946f4 Introduced BenchmarkParameter class. Added parameter combination...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 139
diff changeset
   179
!BenchmarkExecutor methodsFor:'executing-private'!
425f8c6946f4 Introduced BenchmarkParameter class. Added parameter combination...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 139
diff changeset
   180
425f8c6946f4 Introduced BenchmarkParameter class. Added parameter combination...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 139
diff changeset
   181
execute: aBenchmarkInstance result: aBenchmarkResult parameters: aCollection
425f8c6946f4 Introduced BenchmarkParameter class. Added parameter combination...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 139
diff changeset
   182
    "
425f8c6946f4 Introduced BenchmarkParameter class. Added parameter combination...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 139
diff changeset
   183
    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
   184
    executes the benchmark and an outcome to the result. Returns that
d444d8e7d29b Changed BenchmarkExecutor>>#execute:result:parameters: to return an outcome.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 152
diff changeset
   185
    outcome
140
425f8c6946f4 Introduced BenchmarkParameter class. Added parameter combination...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 139
diff changeset
   186
425f8c6946f4 Introduced BenchmarkParameter class. Added parameter combination...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 139
diff changeset
   187
    This is where real execution happens"
425f8c6946f4 Introduced BenchmarkParameter class. Added parameter combination...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 139
diff changeset
   188
186
d444d8e7d29b Changed BenchmarkExecutor>>#execute:result:parameters: to return an outcome.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 152
diff changeset
   189
    | times outcome |
139
eaf40f3173ad Introduced BenchmarkExecutor - a class responsible for execution of a single benchmark.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   190
eaf40f3173ad Introduced BenchmarkExecutor - a class responsible for execution of a single benchmark.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   191
    [
140
425f8c6946f4 Introduced BenchmarkParameter class. Added parameter combination...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 139
diff changeset
   192
        self setUp:aBenchmarkInstance parameters: aCollection .
139
eaf40f3173ad Introduced BenchmarkExecutor - a class responsible for execution of a single benchmark.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   193
        self warmUp: aBenchmarkInstance.
eaf40f3173ad Introduced BenchmarkExecutor - a class responsible for execution of a single benchmark.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   194
        times := (1 to: aBenchmarkResult runs) collect:[:i | self timeIt: aBenchmarkInstance ].
eaf40f3173ad Introduced BenchmarkExecutor - a class responsible for execution of a single benchmark.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   195
        aBenchmarkResult addOutcome:
186
d444d8e7d29b Changed BenchmarkExecutor>>#execute:result:parameters: to return an outcome.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 152
diff changeset
   196
            (outcome := BenchmarkOutcome 
139
eaf40f3173ad Introduced BenchmarkExecutor - a class responsible for execution of a single benchmark.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   197
                benchmark: aBenchmarkInstance
eaf40f3173ad Introduced BenchmarkExecutor - a class responsible for execution of a single benchmark.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   198
                times: times
141
4fbcea2829d2 Parameter values for parameters without default must be specified...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 140
diff changeset
   199
                parameters: aCollection)
139
eaf40f3173ad Introduced BenchmarkExecutor - a class responsible for execution of a single benchmark.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   200
    ] ensure:[
eaf40f3173ad Introduced BenchmarkExecutor - a class responsible for execution of a single benchmark.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   201
        self tearDown: aBenchmarkInstance
186
d444d8e7d29b Changed BenchmarkExecutor>>#execute:result:parameters: to return an outcome.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 152
diff changeset
   202
    ].
d444d8e7d29b Changed BenchmarkExecutor>>#execute:result:parameters: to return an outcome.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 152
diff changeset
   203
    ^ outcome
139
eaf40f3173ad Introduced BenchmarkExecutor - a class responsible for execution of a single benchmark.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   204
140
425f8c6946f4 Introduced BenchmarkParameter class. Added parameter combination...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 139
diff changeset
   205
    "Created: / 27-07-2013 / 12:32:36 / Jan Vrany <jan.vrany@fit.cvut.cz>"
186
d444d8e7d29b Changed BenchmarkExecutor>>#execute:result:parameters: to return an outcome.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 152
diff changeset
   206
    "Modified: / 21-08-2013 / 13:34:17 / 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
   207
!
139
eaf40f3173ad Introduced BenchmarkExecutor - a class responsible for execution of a single benchmark.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   208
140
425f8c6946f4 Introduced BenchmarkParameter class. Added parameter combination...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 139
diff changeset
   209
setUp:aBenchmarkInstance parameters: aCollection
145
98ebd63b85c9 Catch and report errors during execution
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 142
diff changeset
   210
    [
98ebd63b85c9 Catch and report errors during execution
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 142
diff changeset
   211
        aCollection do:[:each|
98ebd63b85c9 Catch and report errors during execution
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 142
diff changeset
   212
            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
   213
        ].
98ebd63b85c9 Catch and report errors during execution
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 142
diff changeset
   214
        aBenchmarkInstance setUp.        
98ebd63b85c9 Catch and report errors during execution
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 142
diff changeset
   215
    ] on: Error do:[:ex|
147
91e4feb2c8b5 Moved error handling to command line adapter.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 145
diff changeset
   216
        (ex isKindOf: BenchmarkError) ifTrue:[
91e4feb2c8b5 Moved error handling to command line adapter.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 145
diff changeset
   217
            ex pass
91e4feb2c8b5 Moved error handling to command line adapter.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 145
diff changeset
   218
        ] ifFalse:[
91e4feb2c8b5 Moved error handling to command line adapter.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 145
diff changeset
   219
            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
   220
        ].
91e4feb2c8b5 Moved error handling to command line adapter.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 145
diff changeset
   221
145
98ebd63b85c9 Catch and report errors during execution
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 142
diff changeset
   222
    ]
139
eaf40f3173ad Introduced BenchmarkExecutor - a class responsible for execution of a single benchmark.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   223
140
425f8c6946f4 Introduced BenchmarkParameter class. Added parameter combination...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 139
diff changeset
   224
    "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
   225
    "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
   226
!
eaf40f3173ad Introduced BenchmarkExecutor - a class responsible for execution of a single benchmark.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   227
203
05be338e59fe Support for in-image profiling using MessageTally.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 186
diff changeset
   228
spyIt: aBenchmarkInstance
05be338e59fe Support for in-image profiling using MessageTally.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 186
diff changeset
   229
    | t |
05be338e59fe Support for in-image profiling using MessageTally.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 186
diff changeset
   230
    [
05be338e59fe Support for in-image profiling using MessageTally.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 186
diff changeset
   231
        t := aBenchmarkInstance spyIt.
05be338e59fe Support for in-image profiling using MessageTally.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 186
diff changeset
   232
    ] on: Error do:[:ex|
05be338e59fe Support for in-image profiling using MessageTally.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 186
diff changeset
   233
        BenchmarkExecutionError new signal:'Error during measurement: ', ex description.      
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
    ^t
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:48:20 / Jan Vrany <jan.vrany@fit.cvut.cz>"
05be338e59fe Support for in-image profiling using MessageTally.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 186
diff changeset
   238
!
05be338e59fe Support for in-image profiling using MessageTally.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 186
diff changeset
   239
139
eaf40f3173ad Introduced BenchmarkExecutor - a class responsible for execution of a single benchmark.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   240
tearDown: aBenchmarkInstance
145
98ebd63b85c9 Catch and report errors during execution
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 142
diff changeset
   241
    [
98ebd63b85c9 Catch and report errors during execution
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 142
diff changeset
   242
        aBenchmarkInstance tearDown.
98ebd63b85c9 Catch and report errors during execution
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 142
diff changeset
   243
    ] on: Error do:[:ex|
98ebd63b85c9 Catch and report errors during execution
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 142
diff changeset
   244
        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
   245
    ]
139
eaf40f3173ad Introduced BenchmarkExecutor - a class responsible for execution of a single benchmark.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   246
eaf40f3173ad Introduced BenchmarkExecutor - a class responsible for execution of a single benchmark.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   247
    "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
   248
    "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
   249
!
eaf40f3173ad Introduced BenchmarkExecutor - a class responsible for execution of a single benchmark.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   250
eaf40f3173ad Introduced BenchmarkExecutor - a class responsible for execution of a single benchmark.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   251
timeIt: aBenchmarkInstance
145
98ebd63b85c9 Catch and report errors during execution
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 142
diff changeset
   252
    | t |
98ebd63b85c9 Catch and report errors during execution
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 142
diff changeset
   253
    [
98ebd63b85c9 Catch and report errors during execution
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 142
diff changeset
   254
        t := aBenchmarkInstance timeIt.
98ebd63b85c9 Catch and report errors during execution
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 142
diff changeset
   255
    ] on: Error do:[:ex|
98ebd63b85c9 Catch and report errors during execution
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 142
diff changeset
   256
        BenchmarkExecutionError new signal:'Error during measurement: ', ex description.      
98ebd63b85c9 Catch and report errors during execution
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 142
diff changeset
   257
    ].
98ebd63b85c9 Catch and report errors during execution
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 142
diff changeset
   258
    ^t
139
eaf40f3173ad Introduced BenchmarkExecutor - a class responsible for execution of a single benchmark.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   259
eaf40f3173ad Introduced BenchmarkExecutor - a class responsible for execution of a single benchmark.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   260
    "Created: / 24-06-2013 / 01:11:53 / 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
   261
    "Modified: / 31-07-2013 / 01:03:11 / 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
   262
!
eaf40f3173ad Introduced BenchmarkExecutor - a class responsible for execution of a single benchmark.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   263
eaf40f3173ad Introduced BenchmarkExecutor - a class responsible for execution of a single benchmark.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   264
warmUp: aBenchmarkInstance
145
98ebd63b85c9 Catch and report errors during execution
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 142
diff changeset
   265
    [
98ebd63b85c9 Catch and report errors during execution
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 142
diff changeset
   266
        aBenchmarkInstance warmUp.
98ebd63b85c9 Catch and report errors during execution
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 142
diff changeset
   267
    ] on: Error do:[:ex|
98ebd63b85c9 Catch and report errors during execution
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 142
diff changeset
   268
        BenchmarkExecutionError new signal:'Error during warm-up: ', ex description.      
98ebd63b85c9 Catch and report errors during execution
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 142
diff changeset
   269
    ]
139
eaf40f3173ad Introduced BenchmarkExecutor - a class responsible for execution of a single benchmark.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   270
eaf40f3173ad Introduced BenchmarkExecutor - a class responsible for execution of a single benchmark.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   271
    "Created: / 24-06-2013 / 01:11:40 / 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
   272
    "Modified: / 31-07-2013 / 01:04:06 / 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
   273
! !
eaf40f3173ad Introduced BenchmarkExecutor - a class responsible for execution of a single benchmark.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   274
203
05be338e59fe Support for in-image profiling using MessageTally.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 186
diff changeset
   275
!BenchmarkExecutor methodsFor:'profiling-private'!
05be338e59fe Support for in-image profiling using MessageTally.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 186
diff changeset
   276
05be338e59fe Support for in-image profiling using MessageTally.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 186
diff changeset
   277
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
   278
    "
05be338e59fe Support for in-image profiling using MessageTally.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 186
diff changeset
   279
    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
   280
    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
   281
    "
05be338e59fe Support for in-image profiling using MessageTally.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 186
diff changeset
   282
05be338e59fe Support for in-image profiling using MessageTally.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 186
diff changeset
   283
    | times outcome |
05be338e59fe Support for in-image profiling using MessageTally.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 186
diff changeset
   284
05be338e59fe Support for in-image profiling using MessageTally.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 186
diff changeset
   285
    [
05be338e59fe Support for in-image profiling using MessageTally.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 186
diff changeset
   286
        self setUp:aBenchmarkInstance parameters: aCollection .
05be338e59fe Support for in-image profiling using MessageTally.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 186
diff changeset
   287
        self warmUp: aBenchmarkInstance.
05be338e59fe Support for in-image profiling using MessageTally.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 186
diff changeset
   288
        times := Array with: (self spyIt: aBenchmarkInstance).
05be338e59fe Support for in-image profiling using MessageTally.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 186
diff changeset
   289
        aBenchmarkResult addOutcome:
05be338e59fe Support for in-image profiling using MessageTally.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 186
diff changeset
   290
            (outcome := BenchmarkOutcome 
05be338e59fe Support for in-image profiling using MessageTally.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 186
diff changeset
   291
                benchmark: aBenchmarkInstance
05be338e59fe Support for in-image profiling using MessageTally.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 186
diff changeset
   292
                times: times
05be338e59fe Support for in-image profiling using MessageTally.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 186
diff changeset
   293
                parameters: aCollection)
05be338e59fe Support for in-image profiling using MessageTally.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 186
diff changeset
   294
    ] ensure:[
05be338e59fe Support for in-image profiling using MessageTally.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 186
diff changeset
   295
        self tearDown: aBenchmarkInstance
05be338e59fe Support for in-image profiling using MessageTally.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 186
diff changeset
   296
    ].
05be338e59fe Support for in-image profiling using MessageTally.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 186
diff changeset
   297
    ^ outcome
05be338e59fe Support for in-image profiling using MessageTally.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 186
diff changeset
   298
05be338e59fe Support for in-image profiling using MessageTally.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 186
diff changeset
   299
    "Created: / 21-05-2014 / 10:44:42 / Jan Vrany <jan.vrany@fit.cvut.cz>"
05be338e59fe Support for in-image profiling using MessageTally.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 186
diff changeset
   300
! !
05be338e59fe Support for in-image profiling using MessageTally.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 186
diff changeset
   301
141
4fbcea2829d2 Parameter values for parameters without default must be specified...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 140
diff changeset
   302
!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
   303
4fbcea2829d2 Parameter values for parameters without default must be specified...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 140
diff changeset
   304
version_HG
4fbcea2829d2 Parameter values for parameters without default must be specified...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 140
diff changeset
   305
4fbcea2829d2 Parameter values for parameters without default must be specified...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 140
diff changeset
   306
    ^ '$Changeset: <not expanded> $'
4fbcea2829d2 Parameter values for parameters without default must be specified...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 140
diff changeset
   307
! !
4fbcea2829d2 Parameter values for parameters without default must be specified...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 140
diff changeset
   308