s/BenchmarkRunner.st
author Jan Vrany <jan.vrany@fit.cvut.cz>
Tue, 20 Aug 2013 22:02:45 +0100
changeset 185 68ba8ec6c406
parent 180 df8e7dcbfd8d
child 190 ab1b88f52b93
permissions -rw-r--r--
Changes --name to --tag, which better describes what it means.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
9
e0be46520a59 Split BenchmarkRunner in common and platform-specific code. Addec platform object
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     1
"{ Package: 'jv:calipel/s' }"
e0be46520a59 Split BenchmarkRunner in common and platform-specific code. Addec platform object
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     2
e0be46520a59 Split BenchmarkRunner in common and platform-specific code. Addec platform object
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     3
Object subclass:#BenchmarkRunner
147
91e4feb2c8b5 Moved error handling to command line adapter.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 145
diff changeset
     4
	instanceVariableNames:'suite result'
9
e0be46520a59 Split BenchmarkRunner in common and platform-specific code. Addec platform object
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     5
	classVariableNames:''
e0be46520a59 Split BenchmarkRunner in common and platform-specific code. Addec platform object
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     6
	poolDictionaries:''
98
4266d340e722 Added user feedback info when running benchmarks using BenchmarkRunner.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 76
diff changeset
     7
	category:'CalipeL-S-Core-Runner'
9
e0be46520a59 Split BenchmarkRunner in common and platform-specific code. Addec platform object
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     8
!
e0be46520a59 Split BenchmarkRunner in common and platform-specific code. Addec platform object
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     9
e0be46520a59 Split BenchmarkRunner in common and platform-specific code. Addec platform object
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    10
!BenchmarkRunner class methodsFor:'documentation'!
e0be46520a59 Split BenchmarkRunner in common and platform-specific code. Addec platform object
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    11
e0be46520a59 Split BenchmarkRunner in common and platform-specific code. Addec platform object
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    12
documentation
e0be46520a59 Split BenchmarkRunner in common and platform-specific code. Addec platform object
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    13
"
124
e5582f62aab5 Fixed command line argument handling and error reporting.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 122
diff changeset
    14
    BechmarkRunner is the command line client for CalipeL.
e5582f62aab5 Fixed command line argument handling and error reporting.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 122
diff changeset
    15
    It parses the command line arguments, sets up the
e5582f62aab5 Fixed command line argument handling and error reporting.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 122
diff changeset
    16
    environment and run benchmarks. 
9
e0be46520a59 Split BenchmarkRunner in common and platform-specific code. Addec platform object
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    17
"
e0be46520a59 Split BenchmarkRunner in common and platform-specific code. Addec platform object
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    18
! !
e0be46520a59 Split BenchmarkRunner in common and platform-specific code. Addec platform object
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    19
e0be46520a59 Split BenchmarkRunner in common and platform-specific code. Addec platform object
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    20
!BenchmarkRunner class methodsFor:'instance creation'!
e0be46520a59 Split BenchmarkRunner in common and platform-specific code. Addec platform object
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    21
e0be46520a59 Split BenchmarkRunner in common and platform-specific code. Addec platform object
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    22
new
e0be46520a59 Split BenchmarkRunner in common and platform-specific code. Addec platform object
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    23
    "return an initialized instance"
e0be46520a59 Split BenchmarkRunner in common and platform-specific code. Addec platform object
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    24
e0be46520a59 Split BenchmarkRunner in common and platform-specific code. Addec platform object
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    25
    ^ self basicNew initialize.
e0be46520a59 Split BenchmarkRunner in common and platform-specific code. Addec platform object
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    26
! !
e0be46520a59 Split BenchmarkRunner in common and platform-specific code. Addec platform object
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    27
e0be46520a59 Split BenchmarkRunner in common and platform-specific code. Addec platform object
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    28
!BenchmarkRunner methodsFor:'accessing'!
e0be46520a59 Split BenchmarkRunner in common and platform-specific code. Addec platform object
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    29
134
287e1365b137 Parameter resolution refactored. Added more tests.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 125
diff changeset
    30
result
287e1365b137 Parameter resolution refactored. Added more tests.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 125
diff changeset
    31
    ^ result
287e1365b137 Parameter resolution refactored. Added more tests.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 125
diff changeset
    32
!
287e1365b137 Parameter resolution refactored. Added more tests.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 125
diff changeset
    33
287e1365b137 Parameter resolution refactored. Added more tests.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 125
diff changeset
    34
suite
287e1365b137 Parameter resolution refactored. Added more tests.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 125
diff changeset
    35
    ^ suite
9
e0be46520a59 Split BenchmarkRunner in common and platform-specific code. Addec platform object
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    36
! !
e0be46520a59 Split BenchmarkRunner in common and platform-specific code. Addec platform object
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    37
e0be46520a59 Split BenchmarkRunner in common and platform-specific code. Addec platform object
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    38
!BenchmarkRunner methodsFor:'main'!
e0be46520a59 Split BenchmarkRunner in common and platform-specific code. Addec platform object
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    39
143
e702a244cea5 Added --arguments argument to benchmark runner
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 139
diff changeset
    40
main:argv0
180
df8e7dcbfd8d Removed --machineid and added --name parameter to identify benchmark run.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 147
diff changeset
    41
    | i report name file params classes runs argv |
9
e0be46520a59 Split BenchmarkRunner in common and platform-specific code. Addec platform object
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    42
e0be46520a59 Split BenchmarkRunner in common and platform-specific code. Addec platform object
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    43
    params := Dictionary new.
e0be46520a59 Split BenchmarkRunner in common and platform-specific code. Addec platform object
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    44
    classes := OrderedCollection new.
e0be46520a59 Split BenchmarkRunner in common and platform-specific code. Addec platform object
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    45
    report := BenchmarkReport text.
e0be46520a59 Split BenchmarkRunner in common and platform-specific code. Addec platform object
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    46
    runs := 5.
143
e702a244cea5 Added --arguments argument to benchmark runner
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 139
diff changeset
    47
    argv := argv0 asOrderedCollection.
9
e0be46520a59 Split BenchmarkRunner in common and platform-specific code. Addec platform object
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    48
e0be46520a59 Split BenchmarkRunner in common and platform-specific code. Addec platform object
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    49
    i := 1.
e0be46520a59 Split BenchmarkRunner in common and platform-specific code. Addec platform object
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    50
    [ i <= argv size ] whileTrue:[
e0be46520a59 Split BenchmarkRunner in common and platform-specific code. Addec platform object
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    51
        | arg |
e0be46520a59 Split BenchmarkRunner in common and platform-specific code. Addec platform object
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    52
e0be46520a59 Split BenchmarkRunner in common and platform-specific code. Addec platform object
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    53
        arg := argv at: i.
e0be46520a59 Split BenchmarkRunner in common and platform-specific code. Addec platform object
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    54
        i := i + 1.
e0be46520a59 Split BenchmarkRunner in common and platform-specific code. Addec platform object
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    55
        arg first == $- ifTrue:[
e0be46520a59 Split BenchmarkRunner in common and platform-specific code. Addec platform object
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    56
            arg = '-n' ifTrue:[
124
e5582f62aab5 Fixed command line argument handling and error reporting.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 122
diff changeset
    57
                i > argv size ifTrue:[
e5582f62aab5 Fixed command line argument handling and error reporting.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 122
diff changeset
    58
                    self error:'-n requires an integer parameter'
e5582f62aab5 Fixed command line argument handling and error reporting.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 122
diff changeset
    59
                ].
9
e0be46520a59 Split BenchmarkRunner in common and platform-specific code. Addec platform object
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    60
                runs := Integer readFrom: (argv at: i) onError:[
e0be46520a59 Split BenchmarkRunner in common and platform-specific code. Addec platform object
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    61
                    self error: '-n requires an integer parameter'.
e0be46520a59 Split BenchmarkRunner in common and platform-specific code. Addec platform object
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    62
                ].
e0be46520a59 Split BenchmarkRunner in common and platform-specific code. Addec platform object
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    63
                i := i + 1.
e0be46520a59 Split BenchmarkRunner in common and platform-specific code. Addec platform object
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    64
            ].
e0be46520a59 Split BenchmarkRunner in common and platform-specific code. Addec platform object
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    65
            arg = '-o' ifTrue:[
124
e5582f62aab5 Fixed command line argument handling and error reporting.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 122
diff changeset
    66
                i > argv size ifTrue:[
e5582f62aab5 Fixed command line argument handling and error reporting.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 122
diff changeset
    67
                    self error:'-o requires a filename parameter'
e5582f62aab5 Fixed command line argument handling and error reporting.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 122
diff changeset
    68
                ].
9
e0be46520a59 Split BenchmarkRunner in common and platform-specific code. Addec platform object
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    69
                file := argv at: i.
e0be46520a59 Split BenchmarkRunner in common and platform-specific code. Addec platform object
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    70
                i := i + 1.
e0be46520a59 Split BenchmarkRunner in common and platform-specific code. Addec platform object
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    71
            ].
143
e702a244cea5 Added --arguments argument to benchmark runner
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 139
diff changeset
    72
            arg = '--arguments' ifTrue:[
e702a244cea5 Added --arguments argument to benchmark runner
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 139
diff changeset
    73
                | arguments argumentsF |
e702a244cea5 Added --arguments argument to benchmark runner
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 139
diff changeset
    74
e702a244cea5 Added --arguments argument to benchmark runner
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 139
diff changeset
    75
                i > argv size ifTrue:[
e702a244cea5 Added --arguments argument to benchmark runner
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 139
diff changeset
    76
                    self error:'--arguments requires a file parameter.'
e702a244cea5 Added --arguments argument to benchmark runner
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 139
diff changeset
    77
                ].                
e702a244cea5 Added --arguments argument to benchmark runner
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 139
diff changeset
    78
                argumentsF := (arguments := (argv at: i)) asFilename.
e702a244cea5 Added --arguments argument to benchmark runner
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 139
diff changeset
    79
                argumentsF exists ifFalse:[
e702a244cea5 Added --arguments argument to benchmark runner
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 139
diff changeset
    80
                    self error:'no such file: ', arguments.
e702a244cea5 Added --arguments argument to benchmark runner
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 139
diff changeset
    81
                ].
e702a244cea5 Added --arguments argument to benchmark runner
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 139
diff changeset
    82
                argumentsF readingFileDo:[:s|
e702a244cea5 Added --arguments argument to benchmark runner
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 139
diff changeset
    83
                    [ s atEnd ] whileFalse:[
e702a244cea5 Added --arguments argument to benchmark runner
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 139
diff changeset
    84
                        argv add: s nextLine.
e702a244cea5 Added --arguments argument to benchmark runner
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 139
diff changeset
    85
                    ]
e702a244cea5 Added --arguments argument to benchmark runner
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 139
diff changeset
    86
                ].
e702a244cea5 Added --arguments argument to benchmark runner
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 139
diff changeset
    87
                i := i + 1.
e702a244cea5 Added --arguments argument to benchmark runner
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 139
diff changeset
    88
            ].  
e702a244cea5 Added --arguments argument to benchmark runner
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 139
diff changeset
    89
                         
e702a244cea5 Added --arguments argument to benchmark runner
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 139
diff changeset
    90
9
e0be46520a59 Split BenchmarkRunner in common and platform-specific code. Addec platform object
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    91
            arg = '-r' ifTrue:[
e0be46520a59 Split BenchmarkRunner in common and platform-specific code. Addec platform object
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    92
                | reportNm |
e0be46520a59 Split BenchmarkRunner in common and platform-specific code. Addec platform object
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    93
124
e5582f62aab5 Fixed command line argument handling and error reporting.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 122
diff changeset
    94
                i > argv size ifTrue:[
e5582f62aab5 Fixed command line argument handling and error reporting.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 122
diff changeset
    95
                    self error:'-r requires a valid class name parameter'
e5582f62aab5 Fixed command line argument handling and error reporting.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 122
diff changeset
    96
                ].
9
e0be46520a59 Split BenchmarkRunner in common and platform-specific code. Addec platform object
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    97
                reportNm := (argv at: i).
e0be46520a59 Split BenchmarkRunner in common and platform-specific code. Addec platform object
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    98
                i := i + 1.
e0be46520a59 Split BenchmarkRunner in common and platform-specific code. Addec platform object
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    99
                report := Smalltalk at: reportNm asSymbol.
e0be46520a59 Split BenchmarkRunner in common and platform-specific code. Addec platform object
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   100
                report isNil ifTrue:[
e0be46520a59 Split BenchmarkRunner in common and platform-specific code. Addec platform object
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   101
                    self error: 'No report class named ''', reportNm, ''''.
e0be46520a59 Split BenchmarkRunner in common and platform-specific code. Addec platform object
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   102
                ].
e0be46520a59 Split BenchmarkRunner in common and platform-specific code. Addec platform object
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   103
            ].
e0be46520a59 Split BenchmarkRunner in common and platform-specific code. Addec platform object
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   104
            arg = '--text' ifTrue:[
e0be46520a59 Split BenchmarkRunner in common and platform-specific code. Addec platform object
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   105
                report := BenchmarkReport text.
e0be46520a59 Split BenchmarkRunner in common and platform-specific code. Addec platform object
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   106
            ].
29
00d2eaa41853 Initial version of JSON report.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17
diff changeset
   107
9
e0be46520a59 Split BenchmarkRunner in common and platform-specific code. Addec platform object
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   108
            arg = '--json' ifTrue:[
e0be46520a59 Split BenchmarkRunner in common and platform-specific code. Addec platform object
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   109
                report := BenchmarkReport json.
e0be46520a59 Split BenchmarkRunner in common and platform-specific code. Addec platform object
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   110
            ].
29
00d2eaa41853 Initial version of JSON report.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17
diff changeset
   111
185
68ba8ec6c406 Changes --name to --tag, which better describes what it means.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 180
diff changeset
   112
            arg = '--tag' ifTrue:[
124
e5582f62aab5 Fixed command line argument handling and error reporting.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 122
diff changeset
   113
                i > argv size ifTrue:[
185
68ba8ec6c406 Changes --name to --tag, which better describes what it means.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 180
diff changeset
   114
                    self error:'--tag requires a string parameter.'
124
e5582f62aab5 Fixed command line argument handling and error reporting.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 122
diff changeset
   115
                ].                
180
df8e7dcbfd8d Removed --machineid and added --name parameter to identify benchmark run.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 147
diff changeset
   116
                name := argv at: i.
122
9ad7296fc59a Added machine ID configuration value.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 98
diff changeset
   117
                i := i + 1.
9ad7296fc59a Added machine ID configuration value.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 98
diff changeset
   118
            ].
9ad7296fc59a Added machine ID configuration value.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 98
diff changeset
   119
9
e0be46520a59 Split BenchmarkRunner in common and platform-specific code. Addec platform object
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   120
            arg second = $D ifTrue:[
e0be46520a59 Split BenchmarkRunner in common and platform-specific code. Addec platform object
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   121
                | eqIdx |
e0be46520a59 Split BenchmarkRunner in common and platform-specific code. Addec platform object
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   122
e0be46520a59 Split BenchmarkRunner in common and platform-specific code. Addec platform object
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   123
                ((arg size > 2) and:[(eqIdx := arg indexOf: $= startingAt: 3) ~~ 0]) ifTrue:[
e0be46520a59 Split BenchmarkRunner in common and platform-specific code. Addec platform object
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   124
                    params at: (arg copyFrom: 3 to: eqIdx - 1) put: (arg copyFrom: eqIdx + 1)
e0be46520a59 Split BenchmarkRunner in common and platform-specific code. Addec platform object
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   125
                ] ifFalse:[
e0be46520a59 Split BenchmarkRunner in common and platform-specific code. Addec platform object
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   126
                    self error: 'No parameter value'
e0be46520a59 Split BenchmarkRunner in common and platform-specific code. Addec platform object
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   127
                ]
e0be46520a59 Split BenchmarkRunner in common and platform-specific code. Addec platform object
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   128
            ]
e0be46520a59 Split BenchmarkRunner in common and platform-specific code. Addec platform object
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   129
        ] ifFalse:[
e0be46520a59 Split BenchmarkRunner in common and platform-specific code. Addec platform object
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   130
            classes add: arg.
e0be46520a59 Split BenchmarkRunner in common and platform-specific code. Addec platform object
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   131
        ]
e0be46520a59 Split BenchmarkRunner in common and platform-specific code. Addec platform object
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   132
    ].
e0be46520a59 Split BenchmarkRunner in common and platform-specific code. Addec platform object
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   133
124
e5582f62aab5 Fixed command line argument handling and error reporting.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 122
diff changeset
   134
e5582f62aab5 Fixed command line argument handling and error reporting.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 122
diff changeset
   135
    classes isEmpty ifTrue:[
e5582f62aab5 Fixed command line argument handling and error reporting.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 122
diff changeset
   136
        self error:'No suite or benchmark specified.'
e5582f62aab5 Fixed command line argument handling and error reporting.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 122
diff changeset
   137
    ].
e5582f62aab5 Fixed command line argument handling and error reporting.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 122
diff changeset
   138
9
e0be46520a59 Split BenchmarkRunner in common and platform-specific code. Addec platform object
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   139
    "Build suite"
e0be46520a59 Split BenchmarkRunner in common and platform-specific code. Addec platform object
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   140
    suite := BenchmarkSuite new.
e0be46520a59 Split BenchmarkRunner in common and platform-specific code. Addec platform object
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   141
    classes do:[:each|
e0be46520a59 Split BenchmarkRunner in common and platform-specific code. Addec platform object
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   142
        | classNm class selector |    
e0be46520a59 Split BenchmarkRunner in common and platform-specific code. Addec platform object
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   143
        i := each indexOf: $#.
e0be46520a59 Split BenchmarkRunner in common and platform-specific code. Addec platform object
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   144
        i ~~ 0 ifTrue:[
e0be46520a59 Split BenchmarkRunner in common and platform-specific code. Addec platform object
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   145
            classNm := each copyTo: i - 1.
e0be46520a59 Split BenchmarkRunner in common and platform-specific code. Addec platform object
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   146
            selector := (each copyFrom: i + 1) asSymbol.
e0be46520a59 Split BenchmarkRunner in common and platform-specific code. Addec platform object
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   147
        ] ifFalse:[
e0be46520a59 Split BenchmarkRunner in common and platform-specific code. Addec platform object
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   148
            classNm := each.
e0be46520a59 Split BenchmarkRunner in common and platform-specific code. Addec platform object
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   149
        ].
e0be46520a59 Split BenchmarkRunner in common and platform-specific code. Addec platform object
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   150
        class := Smalltalk at: classNm asSymbol.
e0be46520a59 Split BenchmarkRunner in common and platform-specific code. Addec platform object
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   151
        class isNil ifTrue:[
e0be46520a59 Split BenchmarkRunner in common and platform-specific code. Addec platform object
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   152
            self error: 'Class ', classNm , ' does not exists'.
e0be46520a59 Split BenchmarkRunner in common and platform-specific code. Addec platform object
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   153
        ].
76
97cf7bf849e6 Fix for Smalltalk/X: load the class if it is autoloaded.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 29
diff changeset
   154
        Smalltalk isSmalltalkX ifTrue:[
97cf7bf849e6 Fix for Smalltalk/X: load the class if it is autoloaded.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 29
diff changeset
   155
            class isLoaded ifFalse:[class autoload].
97cf7bf849e6 Fix for Smalltalk/X: load the class if it is autoloaded.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 29
diff changeset
   156
        ].
9
e0be46520a59 Split BenchmarkRunner in common and platform-specific code. Addec platform object
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   157
        selector isNil ifTrue:[
e0be46520a59 Split BenchmarkRunner in common and platform-specific code. Addec platform object
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   158
            suite addBenchmark: (BenchmarkSuite class: class)
e0be46520a59 Split BenchmarkRunner in common and platform-specific code. Addec platform object
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   159
        ] ifFalse:[
e0be46520a59 Split BenchmarkRunner in common and platform-specific code. Addec platform object
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   160
            suite addBenchmark: (BenchmarkSuite class:class selector:selector)
e0be46520a59 Split BenchmarkRunner in common and platform-specific code. Addec platform object
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   161
        ]
e0be46520a59 Split BenchmarkRunner in common and platform-specific code. Addec platform object
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   162
    ].
e0be46520a59 Split BenchmarkRunner in common and platform-specific code. Addec platform object
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   163
e0be46520a59 Split BenchmarkRunner in common and platform-specific code. Addec platform object
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   164
    "Run suite"
139
eaf40f3173ad Introduced BenchmarkExecutor - a class responsible for execution of a single benchmark.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 134
diff changeset
   165
    result := BenchmarkResult new.
9
e0be46520a59 Split BenchmarkRunner in common and platform-specific code. Addec platform object
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   166
    result runs: runs.
147
91e4feb2c8b5 Moved error handling to command line adapter.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 145
diff changeset
   167
    suite run: result with: params executor: BenchmarkRunnerExecutor new.
9
e0be46520a59 Split BenchmarkRunner in common and platform-specific code. Addec platform object
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   168
e0be46520a59 Split BenchmarkRunner in common and platform-specific code. Addec platform object
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   169
    "Write report"
e0be46520a59 Split BenchmarkRunner in common and platform-specific code. Addec platform object
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   170
    file notNil ifTrue:[
29
00d2eaa41853 Initial version of JSON report.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17
diff changeset
   171
        file asFilename writingFileDo:[:s|
125
1449209198c1 Fixes for machine id handling an JSON output.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 124
diff changeset
   172
            report
180
df8e7dcbfd8d Removed --machineid and added --name parameter to identify benchmark run.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 147
diff changeset
   173
                name: name;
125
1449209198c1 Fixes for machine id handling an JSON output.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 124
diff changeset
   174
                write: result on: s 
29
00d2eaa41853 Initial version of JSON report.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17
diff changeset
   175
        ]
9
e0be46520a59 Split BenchmarkRunner in common and platform-specific code. Addec platform object
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   176
    ] ifFalse:[
125
1449209198c1 Fixes for machine id handling an JSON output.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 124
diff changeset
   177
        report
180
df8e7dcbfd8d Removed --machineid and added --name parameter to identify benchmark run.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 147
diff changeset
   178
            name: name;
125
1449209198c1 Fixes for machine id handling an JSON output.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 124
diff changeset
   179
            write: result on: BenchmarkPlatform current stdout
9
e0be46520a59 Split BenchmarkRunner in common and platform-specific code. Addec platform object
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   180
    ].
e0be46520a59 Split BenchmarkRunner in common and platform-specific code. Addec platform object
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   181
185
68ba8ec6c406 Changes --name to --tag, which better describes what it means.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 180
diff changeset
   182
    "Modified: / 20-08-2013 / 20:47:34 / Jan Vrany <jan.vrany@fit.cvut.cz>"
9
e0be46520a59 Split BenchmarkRunner in common and platform-specific code. Addec platform object
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   183
!
e0be46520a59 Split BenchmarkRunner in common and platform-specific code. Addec platform object
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   184
e0be46520a59 Split BenchmarkRunner in common and platform-specific code. Addec platform object
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   185
options
e0be46520a59 Split BenchmarkRunner in common and platform-specific code. Addec platform object
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   186
    "Prints common command line options to stderr"
e0be46520a59 Split BenchmarkRunner in common and platform-specific code. Addec platform object
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   187
e0be46520a59 Split BenchmarkRunner in common and platform-specific code. Addec platform object
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   188
    BenchmarkPlatform current stderr nextPutAll:
e0be46520a59 Split BenchmarkRunner in common and platform-specific code. Addec platform object
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   189
'
e0be46520a59 Split BenchmarkRunner in common and platform-specific code. Addec platform object
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   190
Common options:
e0be46520a59 Split BenchmarkRunner in common and platform-specific code. Addec platform object
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   191
  -o FILE ................ write output to FILE instead of to standard output (default: stdout)
e0be46520a59 Split BenchmarkRunner in common and platform-specific code. Addec platform object
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   192
  -n RUNS ................ how many times to run each bechmark (default: 5)
e0be46520a59 Split BenchmarkRunner in common and platform-specific code. Addec platform object
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   193
  -r REPORTCLASS ......... user REPORTCLASS to generate report (default: BenchmarkReportText)
143
e702a244cea5 Added --arguments argument to benchmark runner
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 139
diff changeset
   194
  --arguments FILE ....... read additional arguments from FOLE, one argument per line.
9
e0be46520a59 Split BenchmarkRunner in common and platform-specific code. Addec platform object
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   195
  --text ................. generate text report (equivalent to -r BenchmarkReportText)
e0be46520a59 Split BenchmarkRunner in common and platform-specific code. Addec platform object
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   196
  --json ................. generate JSON report (equivalent to -r BenchmarkReportJSON)
185
68ba8ec6c406 Changes --name to --tag, which better describes what it means.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 180
diff changeset
   197
  --tag TAG .............. tag for the current benchmark set (default: "unnamed")
9
e0be46520a59 Split BenchmarkRunner in common and platform-specific code. Addec platform object
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   198
  -DNAME=VALUE ........... defines a parameter NAME with value of VALUE
e0be46520a59 Split BenchmarkRunner in common and platform-specific code. Addec platform object
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   199
e0be46520a59 Split BenchmarkRunner in common and platform-specific code. Addec platform object
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   200
Suitespec format:
e0be46520a59 Split BenchmarkRunner in common and platform-specific code. Addec platform object
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   201
  <suitespec> is CLASSNAME[#SELECTOR]
e0be46520a59 Split BenchmarkRunner in common and platform-specific code. Addec platform object
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   202
e0be46520a59 Split BenchmarkRunner in common and platform-specific code. Addec platform object
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   203
More documetation:
e0be46520a59 Split BenchmarkRunner in common and platform-specific code. Addec platform object
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   204
  see https://bitbucket.org/janvrany/jv-calipel/wiki/Home
e0be46520a59 Split BenchmarkRunner in common and platform-specific code. Addec platform object
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   205
e0be46520a59 Split BenchmarkRunner in common and platform-specific code. Addec platform object
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   206
'
e0be46520a59 Split BenchmarkRunner in common and platform-specific code. Addec platform object
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   207
e0be46520a59 Split BenchmarkRunner in common and platform-specific code. Addec platform object
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   208
    "Created: / 06-06-2013 / 11:01:42 / Jan Vrany <jan.vrany@fit.cvut.cz>"
185
68ba8ec6c406 Changes --name to --tag, which better describes what it means.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 180
diff changeset
   209
    "Modified: / 20-08-2013 / 20:47:12 / Jan Vrany <jan.vrany@fit.cvut.cz>"
9
e0be46520a59 Split BenchmarkRunner in common and platform-specific code. Addec platform object
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   210
! !
e0be46520a59 Split BenchmarkRunner in common and platform-specific code. Addec platform object
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   211
e0be46520a59 Split BenchmarkRunner in common and platform-specific code. Addec platform object
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   212
!BenchmarkRunner class methodsFor:'documentation'!
e0be46520a59 Split BenchmarkRunner in common and platform-specific code. Addec platform object
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   213
e0be46520a59 Split BenchmarkRunner in common and platform-specific code. Addec platform object
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   214
version_HG
e0be46520a59 Split BenchmarkRunner in common and platform-specific code. Addec platform object
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   215
e0be46520a59 Split BenchmarkRunner in common and platform-specific code. Addec platform object
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   216
    ^ '$Changeset: <not expanded> $'
e0be46520a59 Split BenchmarkRunner in common and platform-specific code. Addec platform object
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   217
! !
e0be46520a59 Split BenchmarkRunner in common and platform-specific code. Addec platform object
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   218