OLD | NEW |
1 #!/usr/bin/env python | 1 #!/usr/bin/env python |
2 | 2 |
3 # Copyright 2016 Google Inc. | 3 # Copyright 2016 Google Inc. |
4 # | 4 # |
5 # Use of this source code is governed by a BSD-style license that can be | 5 # Use of this source code is governed by a BSD-style license that can be |
6 # found in the LICENSE file. | 6 # found in the LICENSE file. |
7 | 7 |
8 from __future__ import print_function | 8 from __future__ import print_function |
9 from _adb import Adb | 9 from _adb import Adb |
10 from _benchresult import BenchResult | 10 from _benchresult import BenchResult |
(...skipping 111 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
122 | 122 |
123 @classmethod | 123 @classmethod |
124 def run_warmup(cls, warmup_time): | 124 def run_warmup(cls, warmup_time): |
125 if not warmup_time: | 125 if not warmup_time: |
126 return | 126 return |
127 print('running %i second warmup...' % warmup_time, file=sys.stderr) | 127 print('running %i second warmup...' % warmup_time, file=sys.stderr) |
128 commandline = cls.ARGV + ['--duration', str(warmup_time * 1000), | 128 commandline = cls.ARGV + ['--duration', str(warmup_time * 1000), |
129 '--config', 'gpu', | 129 '--config', 'gpu', |
130 '--skp', 'warmup'] | 130 '--skp', 'warmup'] |
131 dump_commandline_if_verbose(commandline) | 131 dump_commandline_if_verbose(commandline) |
132 output = subprocess.check_output(commandline).decode('utf-8') | 132 output = subprocess.check_output(commandline, stderr=subprocess.STDOUT) |
| 133 |
133 # validate the warmup run output. | 134 # validate the warmup run output. |
134 for line in output.split('\n'): | 135 for line in output.decode('utf-8').split('\n'): |
135 match = BenchResult.match(line.rstrip()) | 136 match = BenchResult.match(line.rstrip()) |
136 if match and match.bench == 'warmup': | 137 if match and match.bench == 'warmup': |
137 return | 138 return |
138 raise Exception('Invalid warmup output:\n%s' % output) | 139 raise Exception('Invalid warmup output:\n%s' % output) |
139 | 140 |
140 def __init__(self, skp, config, max_stddev, best_result=None): | 141 def __init__(self, skp, config, max_stddev, best_result=None): |
141 self.skp = skp | 142 self.skp = skp |
142 self.config = config | 143 self.config = config |
143 self.max_stddev = max_stddev | 144 self.max_stddev = max_stddev |
144 self.best_result = best_result | 145 self.best_result = best_result |
(...skipping 16 matching lines...) Expand all Loading... |
161 self._schedule_hardware_poll() | 162 self._schedule_hardware_poll() |
162 | 163 |
163 commandline = self.ARGV + ['--config', self.config, | 164 commandline = self.ARGV + ['--config', self.config, |
164 '--skp', self.skp, | 165 '--skp', self.skp, |
165 '--suppressHeader', 'true'] | 166 '--suppressHeader', 'true'] |
166 if FLAGS.write_path: | 167 if FLAGS.write_path: |
167 pngfile = _path.join(FLAGS.write_path, self.config, | 168 pngfile = _path.join(FLAGS.write_path, self.config, |
168 _path.basename(self.skp) + '.png') | 169 _path.basename(self.skp) + '.png') |
169 commandline.extend(['--png', pngfile]) | 170 commandline.extend(['--png', pngfile]) |
170 dump_commandline_if_verbose(commandline) | 171 dump_commandline_if_verbose(commandline) |
171 self._proc = subprocess.Popen(commandline, stdout=subprocess.PIPE) | 172 self._proc = subprocess.Popen(commandline, stdout=subprocess.PIPE, |
| 173 stderr=subprocess.STDOUT) |
172 self._monitor = SubprocessMonitor(self._queue, self._proc) | 174 self._monitor = SubprocessMonitor(self._queue, self._proc) |
173 self._monitor.start() | 175 self._monitor.start() |
174 | 176 |
175 while True: | 177 while True: |
176 message = self._queue.get() | 178 message = self._queue.get() |
177 if message.message == Message.READLINE: | 179 if message.message == Message.READLINE: |
178 result = BenchResult.match(message.value) | 180 result = BenchResult.match(message.value) |
179 if result: | 181 if result: |
180 hardware.sanity_check() | 182 hardware.sanity_check() |
181 self._process_result(result) | 183 self._process_result(result) |
182 else: | 184 elif hardware.filter_line(message.value): |
183 print(message.value, file=sys.stderr) | 185 print(message.value, file=sys.stderr) |
184 sys.stdout.flush() | |
185 continue | 186 continue |
186 if message.message == Message.POLL_HARDWARE: | 187 if message.message == Message.POLL_HARDWARE: |
187 hardware.sanity_check() | 188 hardware.sanity_check() |
188 self._schedule_hardware_poll() | 189 self._schedule_hardware_poll() |
189 continue | 190 continue |
190 if message.message == Message.EXIT: | 191 if message.message == Message.EXIT: |
191 self._monitor.join() | 192 self._monitor.join() |
192 self._proc.wait() | 193 self._proc.wait() |
193 if self._proc.returncode != 0: | 194 if self._proc.returncode != 0: |
194 raise Exception("skpbench exited with nonzero exit code %i" % | 195 raise Exception("skpbench exited with nonzero exit code %i" % |
195 self._proc.returncode) | 196 self._proc.returncode) |
196 self._proc = None | 197 self._proc = None |
197 break | 198 break |
198 | 199 |
199 def _schedule_hardware_poll(self): | 200 def _schedule_hardware_poll(self): |
200 if self._hw_poll_timer: | 201 if self._hw_poll_timer: |
201 self._hw_poll_timer.cancel() | 202 self._hw_poll_timer.cancel() |
202 self._hw_poll_timer = \ | 203 self._hw_poll_timer = \ |
203 Timer(1, lambda: self._queue.put(Message(Message.POLL_HARDWARE))) | 204 Timer(1, lambda: self._queue.put(Message(Message.POLL_HARDWARE))) |
204 self._hw_poll_timer.start() | 205 self._hw_poll_timer.start() |
205 | 206 |
206 def _process_result(self, result): | 207 def _process_result(self, result): |
207 if not self.best_result or result.stddev <= self.best_result.stddev: | 208 if not self.best_result or result.stddev <= self.best_result.stddev: |
208 self.best_result = result | 209 self.best_result = result |
209 elif FLAGS.verbosity >= 2: | 210 elif FLAGS.verbosity >= 2: |
210 print("reusing previous result for %s/%s with lower stddev " | 211 print("reusing previous result for %s/%s with lower stddev " |
211 "(%s%% instead of %s%%)." % | 212 "(%s%% instead of %s%%)." % |
212 (result.config, result.bench, self.best_result.stddev, | 213 (result.config, result.bench, self.best_result.stddev, |
213 result.stddev), file=sys.stderr) | 214 result.stddev), file=sys.stderr) |
| 215 sys.stdout.flush() |
214 if self.max_stddev and self.best_result.stddev > self.max_stddev: | 216 if self.max_stddev and self.best_result.stddev > self.max_stddev: |
215 raise StddevException() | 217 raise StddevException() |
216 | 218 |
217 def terminate(self): | 219 def terminate(self): |
218 if self._proc: | 220 if self._proc: |
219 self._proc.terminate() | 221 self._proc.terminate() |
220 self._monitor.join() | 222 self._monitor.join() |
221 self._proc.wait() | 223 self._proc.wait() |
222 self._proc = None | 224 self._proc = None |
223 | 225 |
(...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
288 else: | 290 else: |
289 hardware = Hardware() | 291 hardware = Hardware() |
290 | 292 |
291 with hardware: | 293 with hardware: |
292 SKPBench.run_warmup(hardware.warmup_time) | 294 SKPBench.run_warmup(hardware.warmup_time) |
293 run_benchmarks(configs, skps, hardware) | 295 run_benchmarks(configs, skps, hardware) |
294 | 296 |
295 | 297 |
296 if __name__ == '__main__': | 298 if __name__ == '__main__': |
297 main() | 299 main() |
OLD | NEW |