Mercurial > hg > graal-compiler
comparison mx/sanitycheck.py @ 4150:c78bace5086a
start work on integrating old hooks into mx, work on sanity checks
introduce a DB class to access the bench DB in an easier way (create benchmarks and benchmark values automatically in the DB)
author | Gilles Duboscq <gilles.m.duboscq@gmail.com> |
---|---|
date | Tue, 20 Dec 2011 15:34:43 +0100 |
parents | |
children | a2caa019ba3a |
comparison
equal
deleted
inserted
replaced
4149:cf4de9cc1268 | 4150:c78bace5086a |
---|---|
1 from outputparser import OutputParser, Matcher | |
2 import re | |
3 import mx | |
4 import os | |
5 from os.path import isfile | |
6 | |
7 dacapoVMOpts = ['-Xms1g', '-Xmx2g'] | |
8 | |
9 dacapoSanityWarmup = { | |
10 'avrora': [0, 0, 3, 6], | |
11 'batik': [0 , 0, 5, 5], | |
12 'eclipse': [1 , 4, 5, 10], | |
13 'fop': [4 , 8, 10, 20], | |
14 'h2': [0 , 0, 5, 5], | |
15 'jython': [0 , 0, 5, 10], | |
16 'luindex': [0 , 0, 5, 10], | |
17 'lusearch': [0 , 4, 5, 10], | |
18 'pmd': [0 , 0, 5, 10], | |
19 'sunflow': [0 , 0, 5, 10], | |
20 'tomcat': [0 , 0, 5, 10], | |
21 'tradebeans': [0 , 0, 5, 10], | |
22 'tradesoap': [0 , 4, 5, 10], | |
23 'xalan': [0 , 0, 5, 10], | |
24 } | |
25 | |
26 def getDacapoCmd(bench, vmOpts=dacapoVMOpts,n=5): | |
27 dacapo = mx.check_get_env('DACAPO_CP') | |
28 if not isfile(dacapo) or not dacapo.endswith('.jar'): | |
29 mx.abort('Specified DaCapo jar file does not exist or is not a jar file: ' + dacapo) | |
30 return vmOpts + ['-cp', dacapo, 'Harness', '-n', str(n), bench] | |
31 | |
32 class SanityCheckLevel: | |
33 Fast, Gate, Normal, Extensive = range(4) | |
34 | |
35 def getSanityChecks(level=SanityCheckLevel.Normal): | |
36 checks = [] | |
37 | |
38 dacapoSuccess = re.compile(r"^===== DaCapo 9\.12 ([a-zA-Z0-9_]+) PASSED in ([0-9]+) msec =====$") | |
39 for (bench, ns) in dacapoSanityWarmup.items(): | |
40 if ns[level] > 0: | |
41 checks.append({'cmd' : getDacapoCmd(bench, vmOpts=dacapoVMOpts + ['-esa'], n=ns[level]), 'success' : dacapoSuccess}) | |
42 | |
43 bootstrapSuccess = re.compile(r"in [0-9]+ ms$"); | |
44 checks.append({'cmd' : ['-esa', '-version'], 'success' : bootstrapSuccess}) | |
45 | |
46 return checks | |
47 | |
48 def runSanityCheck(cmd, successRE, cwd=None): | |
49 parser = OutputParser(nonZeroIsFatal=False) | |
50 jvmError = re.compile(r"\b(?P<jvmerror>([A-Z]:|/).*[/\\]hs_err_pid[0-9]+\.log)\b") | |
51 parser.addMatcher(Matcher(successRE, {'const:passed' : 'const:1'})) | |
52 parser.addMatcher(Matcher(jvmError, {'const:jvmError' : 'jvmerror'})) | |
53 | |
54 result = parser.parse(cmd, cwd) | |
55 assert len(result) == 1, 'Sanity check matchers should not return more than one line' | |
56 parsed = result[0] | |
57 | |
58 if parsed.has_key('jvmError'): | |
59 mx.log('JVM Error : dumping error log...') | |
60 f = open(parsed['jvmError'], 'rb'); | |
61 for line in iter(f.readline(), ''): | |
62 mx.log(line) | |
63 f.close() | |
64 os.unlink(parsed['jvmError']) | |
65 return False | |
66 return parsed.has_key('passed') | |
67 |