@@ -76,25 +76,30 @@ class LeaksRunnerResult(perf_test_driver.Result):
76
76
77
77
class LeaksRunnerBenchmarkDriver (perf_test_driver .BenchmarkDriver ):
78
78
79
- def __init__ (self , binary , xfail_list ):
79
+ def __init__ (self , binary , xfail_list , num_samples , num_iters ):
80
80
perf_test_driver .BenchmarkDriver .__init__ (
81
81
self , binary , xfail_list ,
82
82
enable_parallel = True )
83
+ self .num_samples = num_samples
84
+ self .num_iters = num_iters
83
85
84
86
def print_data_header (self , max_test_len ):
85
87
fmt = '{:<%d}{:<10}{:}' % (max_test_len + 5 )
86
88
print (fmt .format ('Name' , 'Result' , 'RC Delta' ))
87
89
90
+ # Propagate any data from this class that is needed for individual
91
+ # tests. The reason this is needed is to avoid issues with attempting to
92
+ # access a value in a different process.
88
93
def prepare_input (self , name ):
89
- return {}
94
+ return {'num_samples' : self . num_samples , 'num_iters' : self . num_iters }
90
95
91
96
def process_input (self , data ):
92
97
test_name = '({},{})' .format (data ['opt' ], data ['test_name' ])
93
98
print ("Running {}..." .format (test_name ))
94
99
sys .stdout .flush ()
95
100
try :
96
- p = subprocess .Popen ([data ['path' ], "--run-all" , "--num-samples=2" ,
97
- "--num-iters={}" .format (2 ), data ['test_name' ]],
101
+ p = subprocess .Popen ([data ['path' ], "--run-all" , "--num-samples={}" . format ( data [ 'num_samples' ]) ,
102
+ "--num-iters={}" .format (data [ 'num_iters' ] ), data ['test_name' ]],
98
103
stdout = subprocess .PIPE , stderr = subprocess .PIPE )
99
104
error_out = p .communicate ()[1 ].split ("\n " )
100
105
except OSError :
@@ -121,9 +126,19 @@ class LeaksRunnerBenchmarkDriver(perf_test_driver.BenchmarkDriver):
121
126
122
127
SWIFT_BIN_DIR = os .path .dirname (os .path .abspath (__file__ ))
123
128
129
+ def parse_args ():
130
+ import argparse
131
+ parser = argparse .ArgumentParser ()
132
+ parser .add_argument ('-filter' , type = str , default = None ,
133
+ help = 'Filter out any test that does not match the given regex' )
134
+ parser .add_argument ('-num-samples' , type = int , default = 2 )
135
+ parser .add_argument ('-num-iters' , type = int , default = 2 )
136
+ return parser .parse_args ()
137
+
124
138
if __name__ == "__main__" :
125
- l = LeaksRunnerBenchmarkDriver (SWIFT_BIN_DIR , XFAIL_LIST )
126
- if l .run ():
139
+ args = parse_args ()
140
+ l = LeaksRunnerBenchmarkDriver (SWIFT_BIN_DIR , XFAIL_LIST , args .num_samples , args .num_iters )
141
+ if l .run (args .filter ):
127
142
sys .exit (0 )
128
143
else :
129
144
sys .exit (- 1 )
0 commit comments