X-Git-Url: https://git.cworth.org/git?p=apitrace-tests;a=blobdiff_plain;f=mesademos.py;h=28ff62d33386b5cfce8f79c6bd2305708ee19a60;hp=6b9519e98f6ef47b10d11ee4be74ba5236fcc5cc;hb=245f27b225c2b8a374e6c04ebac51d282a293246;hpb=a05dd0356e03a8afe7dc560c123147a83363f45f
diff --git a/mesademos.py b/mesademos.py
index 6b9519e..28ff62d 100755
--- a/mesademos.py
+++ b/mesademos.py
@@ -47,6 +47,12 @@ def ansi_strip(s):
def popen(command, *args, **kwargs):
+ if 'cwd' in kwargs:
+ sys.stdout.write('cd %s && ' % kwargs['cwd'])
+ if 'env' in kwargs:
+ for name, value in kwargs['env'].iteritems():
+ if value != os.environ.get(name, None):
+ sys.stdout.write('%s=%s ' % (name, value))
sys.stdout.write(' '.join(command) + '\n')
sys.stdout.flush()
return subprocess.Popen(command, *args, **kwargs)
@@ -68,29 +74,38 @@ ignored_function_names = set([
])
-def runtest(demo):
+def image_tag(html, image):
+ url = os.path.relpath(image, options.results)
+ html.write('
| \n' % (url, url))
+
+
+def runtest(html, demo):
+ html.write(' \n')
app = os.path.join(options.mesa_demos, 'src', demo)
dirname, basename = os.path.split(app)
- trace = os.path.abspath(demo.replace('/', '-') + '.trace')
+ trace = os.path.abspath(os.path.join(options.results, demo.replace('/', '-') + '.trace'))
env = os.environ.copy()
- env['LD_PRELOAD'] = os.path.abspath('glxtrace.so')
+ env['LD_PRELOAD'] = os.path.abspath(os.path.join(options.build, 'glxtrace.so'))
env['TRACE_FILE'] = trace
args = [os.path.join('.', basename)]
- p = popen(args, env=env, cwd=dirname, stdout=subprocess.PIPE)
- time.sleep(0.5)
+ p = popen(args, env=env, cwd=dirname)
+ try:
+ time.sleep(1)
- # http://stackoverflow.com/questions/151407/how-to-get-an-x11-window-from-a-process-id
- ref_image = demo.replace('/', '-') + '.ref.png'
- subprocess.call('xwd -name \'%s\' | xwdtopnm | pnmtopng > %s' % (args[0], ref_image), shell=True, stdout=subprocess.PIPE)
+ # http://stackoverflow.com/questions/151407/how-to-get-an-x11-window-from-a-process-id
+ ref_image = os.path.join(options.results, demo.replace('/', '-') + '.ref.png')
+ #subprocess.call(['xwininfo', '-root', '-tree'])
+ subprocess.call("xwd -name '%s' | xwdtopnm | pnmtopng > '%s'" % (args[0], ref_image), shell=True)
- os.kill(p.pid, signal.SIGTERM)
+ finally:
+ os.kill(p.pid, signal.SIGTERM)
- p = popen(['./tracedump', trace], stdout=subprocess.PIPE)
+ p = popen([os.path.join(options.build, 'tracedump'), trace], stdout=subprocess.PIPE)
stdout, _ = p.communicate()
call_re = re.compile('^([0-9]+) (\w+)\(')
@@ -107,10 +122,13 @@ def runtest(demo):
double_buffer = True
#print orig_line
- args = ['./glretrace']
+ args = [os.path.join(options.build, 'glretrace')]
if double_buffer:
args += ['-db']
- args += ['-s', '/tmp/' + demo.replace('/', '-') + '.']
+ else:
+ args += ['-sb']
+ snapshot_prefix = os.path.join(options.results, demo.replace('/', '-') + '.')
+ args += ['-s', snapshot_prefix]
args += [trace]
p = popen(args, stdout=subprocess.PIPE)
stdout, _ = p.communicate()
@@ -121,10 +139,16 @@ def runtest(demo):
if mo:
image = mo.group(1)
+ image_tag(html, ref_image)
if image:
- delta_image = demo.replace('/', '-') + '.diff.png'
- p = popen(["compare", '-metric', 'AE', '-fuzz', '5%', '-extract', '250x250', ref_image, image, delta_image])
+ delta_image = os.path.join(options.results, demo.replace('/', '-') + '.diff.png')
+ p = popen(["compare", '-alpha', 'opaque', '-metric', 'AE', '-fuzz', '5%', ref_image, image, delta_image])
_, stderr = p.communicate()
+ image_tag(html, image)
+ image_tag(html, delta_image)
+
+ html.write('
\n')
+ html.flush()
tests = [
@@ -133,7 +157,7 @@ tests = [
'trivial/clear-fbo-scissor',
'trivial/clear-fbo-tex',
'trivial/clear-random',
- 'trivial/clear-repeat',
+ #'trivial/clear-repeat',
'trivial/clear-scissor',
'trivial/clear-undefined',
'trivial/createwin',
@@ -660,7 +684,7 @@ tests = [
]
-tests = [
+_tests = [
'trivial/tri',
'trivial/tri-tex',
]
@@ -676,19 +700,35 @@ def main():
optparser.add_option(
'--build', metavar='PATH',
type='string', dest='build', default='.',
- help='path to apitrace build')
-
+ help='path to apitrace build [default=%default]')
+ optparser.add_option(
+ '--results', metavar='PATH',
+ type='string', dest='results', default='.',
+ help='results directory [default=%default]')
optparser.add_option(
'--mesa-demos', metavar='PATH',
type='string', dest='mesa_demos', default=os.environ.get('MESA_DEMOS'),
- help='path to mesa demos')
+ help='path to Mesa demos [default=%default]')
(options, args) = optparser.parse_args(sys.argv[1:])
- if args:
- tests = args
- for test in tests:
- runtest(test)
+ if not options.mesa_demos:
+ optparser.error('path to Mesa demos not specified')
+ if not os.path.exists(options.results):
+ os.makedirs(options.results)
+
+ html = open(os.path.join(options.results, 'index.html'), 'wt')
+ html.write('\n')
+ html.write(' \n')
+ html.write(' \n')
+ html.write(' Ref | Src | Δ |
\n')
+ if not args:
+ args = tests
+ for test in args:
+ runtest(html, test)
+ html.write('
\n')
+ html.write(' \n')
+ html.write('\n')
if __name__ == '__main__':