X-Git-Url: https://git.cworth.org/git?a=blobdiff_plain;f=mesademos.py;h=21b0af444b7c86e15315e93716a1d829a8fb1c81;hb=cde1bf34498495236aee6e8541d39cac3aa54056;hp=7fc17aabde8c7ef06bf35e651682ed014e841c6c;hpb=5263168ed6c8ae77cf87759aa8fae0ab13981a95;p=apitrace-tests diff --git a/mesademos.py b/mesademos.py index 7fc17aa..21b0af4 100755 --- a/mesademos.py +++ b/mesademos.py @@ -32,108 +32,25 @@ import os.path import optparse import sys -import subprocess -import time -import re -import signal +from test import Report, TestCase -ansi_re = re.compile('\x1b\[[0-9]{1,2}(;[0-9]{1,2}){0,2}m') - - -def ansi_strip(s): - # http://www.theeggeadventure.com/wikimedia/index.php/Linux_Tips#Use_sed_to_remove_ANSI_colors - return ansi_re.sub('', 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) - - -ignored_function_names = set([ - 'glGetString', - 'glXGetCurrentDisplay', - 'glXGetClientString', - 'glXGetProcAddress', - 'glXGetProcAddressARB', - 'glXQueryVersion', - 'glXGetVisualFromFBConfig', - 'glXChooseFBConfig', - 'glXCreateNewContext', - 'glXMakeContextCurrent', - 'glXQueryExtension', - 'glXIsDirect', -]) - - -def runtest(demo): +def runtest(report, demo): app = os.path.join(options.mesa_demos, 'src', demo) - dirname, basename = os.path.split(app) - - trace = os.path.abspath(demo.replace('/', '-') + '.trace') - - env = os.environ.copy() - env['LD_PRELOAD'] = os.path.abspath(os.path.join(options.build, 'glxtrace.so')) - env['TRACE_FILE'] = trace - + name = demo.replace('/', '-') args = [os.path.join('.', basename)] - p = popen(args, env=env, cwd=dirname) - 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(['xwininfo', '-root', '-tree']) - subprocess.call("xwd -name '%s' | xwdtopnm | pnmtopng > '%s'" % (args[0], ref_image), shell=True) - - os.kill(p.pid, signal.SIGTERM) - - p = popen([os.path.join(options.build, 'tracedump'), trace], stdout=subprocess.PIPE) - stdout, _ = p.communicate() - - call_re = re.compile('^([0-9]+) (\w+)\(') - double_buffer = False - for orig_line in stdout.split('\n'): - line = ansi_strip(orig_line) - mo = call_re.match(line) - if mo: - call_no = int(mo.group(1)) - function_name = mo.group(2) - if function_name in ignored_function_names: - continue - if function_name == 'glXSwapBuffers': - double_buffer = True - #print orig_line - - args = [os.path.join(options.build, 'glretrace')] - if double_buffer: - args += ['-db'] - else: - args += ['-sb'] - args += ['-s', '/tmp/' + demo.replace('/', '-') + '.'] - args += [trace] - p = popen(args, stdout=subprocess.PIPE) - stdout, _ = p.communicate() - image_re = re.compile('^Wrote (.*\.png)$') - image = None - for line in stdout.split('\n'): - mo = image_re.match(line) - if mo: - image = mo.group(1) - - if image: - delta_image = demo.replace('/', '-') + '.diff.png' - p = popen(["compare", '-alpha', 'opaque', '-metric', 'AE', '-fuzz', '5%', ref_image, image, delta_image]) - _, stderr = p.communicate() + + test = TestCase( + name = name, + args = args, + cwd = dirname, + build = options.build, + results = options.results, + ) + test.run(report) + tests = [ @@ -307,103 +224,109 @@ tests = [ 'trivial/vp-tri-tex', 'trivial/vp-unfilled', - #'demos/arbfplight', - #'demos/arbfslight', - #'demos/arbocclude', - #'demos/arbocclude2', - #'demos/bounce', - #'demos/clearspd', - #'demos/copypix', - #'demos/cubemap', - #'demos/dinoshade', - #'demos/dissolve', - #'demos/drawpix', - #'demos/engine', - #'demos/fbo_firecube', - #'demos/fbotexture', - #'demos/fire', - #'demos/fogcoord', - #'demos/fplight', - #'demos/fslight', - #'demos/gamma', - #'demos/gearbox', - #'demos/gears', - #'demos/geartrain', - #'demos/glinfo', - #'demos/gloss', - #'demos/gltestperf', - #'demos/ipers', - #'demos/isosurf', - #'demos/lodbias', - #'demos/morph3d', - #'demos/multiarb', - #'demos/paltex', - #'demos/pointblast', - #'demos/projtex', - #'demos/rain', - #'demos/ray', - #'demos/readpix', - #'demos/reflect', - #'demos/renormal', - #'demos/shadowtex', - #'demos/singlebuffer', - #'demos/spectex', - #'demos/spriteblast', - #'demos/stex3d', - #'demos/teapot', - #'demos/terrain', - #'demos/tessdemo', - #'demos/texcyl', - #'demos/texenv', - #'demos/textures', - #'demos/trispd', - #'demos/tunnel', - #'demos/tunnel2', - #'demos/vao_demo', - #'demos/winpos', - #'fp/fp-tri', - #'fp/point-position', - #'fp/tri-depth', - #'fp/tri-depth2', - #'fp/tri-depthwrite', - #'fp/tri-depthwrite2', - #'fp/tri-param', - #'fp/tri-tex', + 'demos/arbfplight', + 'demos/arbfslight', + 'demos/arbocclude', + 'demos/arbocclude2', + 'demos/bounce', + 'demos/clearspd', + 'demos/copypix', + 'demos/cubemap', + 'demos/cuberender', + 'demos/dinoshade', + 'demos/dissolve', + 'demos/drawpix', + 'demos/engine', + 'demos/fbo_firecube', + 'demos/fbotexture', + 'demos/fire', + 'demos/fogcoord', + 'demos/fplight', + 'demos/fslight', + 'demos/gamma', + 'demos/gearbox', + 'demos/gears', + 'demos/geartrain', + 'demos/glinfo', + 'demos/gloss', + 'demos/gltestperf', + 'demos/ipers', + 'demos/isosurf', + 'demos/lodbias', + 'demos/morph3d', + 'demos/multiarb', + 'demos/paltex', + 'demos/pointblast', + 'demos/projtex', + 'demos/rain', + 'demos/ray', + 'demos/readpix', + 'demos/reflect', + 'demos/renormal', + 'demos/shadowtex', + 'demos/singlebuffer', + 'demos/spectex', + 'demos/spriteblast', + 'demos/stex3d', + 'demos/teapot', + 'demos/terrain', + 'demos/tessdemo', + 'demos/texcyl', + 'demos/texenv', + 'demos/textures', + 'demos/trispd', + 'demos/tunnel', + 'demos/tunnel2', + 'demos/vao_demo', + 'demos/winpos', + + #'fp/fp-tri', # XXX: parameterized + 'fp/point-position', + 'fp/tri-depth', + 'fp/tri-depth2', + 'fp/tri-depthwrite', + 'fp/tri-depthwrite2', + 'fp/tri-param', + 'fp/tri-tex', + #'fpglsl/fp-tri', - #'glsl/array', - #'glsl/bezier', - #'glsl/bitmap', - #'glsl/brick', - #'glsl/bump', - #'glsl/convolutions', - #'glsl/deriv', - #'glsl/fragcoord', - #'glsl/fsraytrace', - #'glsl/geom-sprites', - #'glsl/geom-stipple-lines', - #'glsl/geom-wide-lines', - #'glsl/identity', - #'glsl/linktest', - #'glsl/mandelbrot', - #'glsl/multinoise', - #'glsl/multitex', - #'glsl/noise', - #'glsl/noise2', - #'glsl/pointcoord', - #'glsl/points', - #'glsl/samplers', - #'glsl/shadow_sampler', - #'glsl/shtest', - #'glsl/skinning', - #'glsl/texaaline', - #'glsl/texdemo1', - #'glsl/toyball', - #'glsl/trirast', - #'glsl/twoside', - #'glsl/vert-or-frag-only', - #'glsl/vert-tex', - #'glsl/vsraytrace', + + 'glsl/array', + 'glsl/bezier', + 'glsl/bitmap', + 'glsl/brick', + 'glsl/bump', + 'glsl/convolutions', + 'glsl/deriv', + 'glsl/fragcoord', + 'glsl/fsraytrace', + 'glsl/geom-sprites', + 'glsl/geom-stipple-lines', + 'glsl/geom-wide-lines', + 'glsl/identity', + 'glsl/linktest', + 'glsl/mandelbrot', + 'glsl/multinoise', + 'glsl/multitex', + 'glsl/noise', + 'glsl/noise2', + 'glsl/pointcoord', + 'glsl/points', + 'glsl/samplers', + 'glsl/shadow_sampler', + 'glsl/shtest', + 'glsl/skinning', + 'glsl/texaaline', + 'glsl/texdemo1', + 'glsl/toyball', + 'glsl/trirast', + 'glsl/twoside', + 'glsl/vert-or-frag-only', + 'glsl/vert-tex', + 'glsl/vsraytrace', + #'gs/gs-tri', + #'perf/copytex', #'perf/drawoverhead', #'perf/fbobind', @@ -414,115 +337,119 @@ tests = [ #'perf/teximage', #'perf/vbo', #'perf/vertexrate', - #'redbook/aaindex', - #'redbook/aapoly', - #'redbook/aargb', - #'redbook/accanti', - #'redbook/accpersp', - #'redbook/alpha', - #'redbook/alpha3D', - #'redbook/anti', - #'redbook/bezcurve', - #'redbook/bezmesh', - #'redbook/checker', - #'redbook/clip', - #'redbook/colormat', - #'redbook/combiner', - #'redbook/convolution', - #'redbook/cube', - #'redbook/cubemap', - #'redbook/depthcue', - #'redbook/dof', - #'redbook/double', - #'redbook/drawf', - #'redbook/feedback', - #'redbook/fog', - #'redbook/fogcoord', - #'redbook/fogindex', - #'redbook/font', - #'redbook/hello', - #'redbook/histogram', - #'redbook/image', - #'redbook/light', - #'redbook/lines', - #'redbook/list', - #'redbook/material', - #'redbook/minmax', - #'redbook/mipmap', - #'redbook/model', - #'redbook/movelight', - #'redbook/multisamp', - #'redbook/multitex', - #'redbook/mvarray', - #'redbook/nurbs', - #'redbook/pickdepth', - #'redbook/picksquare', - #'redbook/plane', - #'redbook/planet', - #'redbook/pointp', - #'redbook/polyoff', - #'redbook/polys', - #'redbook/quadric', - #'redbook/robot', - #'redbook/sccolorlight', - #'redbook/scene', - #'redbook/scenebamb', - #'redbook/sceneflat', - #'redbook/select', - #'redbook/shadowmap', - #'redbook/smooth', - #'redbook/stencil', - #'redbook/stroke', - #'redbook/surface', - #'redbook/surfpoints', - #'redbook/teaambient', - #'redbook/teapots', - #'redbook/tess', - #'redbook/tesswind', - #'redbook/texbind', - #'redbook/texgen', - #'redbook/texprox', - #'redbook/texsub', - #'redbook/texture3d', - #'redbook/texturesurf', - #'redbook/torus', - #'redbook/trim', - #'redbook/unproject', - #'redbook/varray', - #'redbook/wrap', - #'samples/accum', - #'samples/bitmap1', - #'samples/bitmap2', - #'samples/blendeq', - #'samples/blendxor', - #'samples/copy', - #'samples/cursor', - #'samples/depth', - #'samples/eval', - #'samples/fog', - #'samples/font', - #'samples/line', - #'samples/logo', - #'samples/nurb', - #'samples/oglinfo', - #'samples/olympic', - #'samples/overlay', - #'samples/point', - #'samples/prim', - #'samples/quad', - #'samples/rgbtoppm', - #'samples/select', - #'samples/shape', - #'samples/sphere', - #'samples/star', - #'samples/stencil', - #'samples/stretch', - #'samples/texture', - #'samples/tri', - #'samples/wave', + + 'redbook/aaindex', + 'redbook/aapoly', + 'redbook/aargb', + 'redbook/accanti', + 'redbook/accpersp', + 'redbook/alpha', + 'redbook/alpha3D', + 'redbook/anti', + 'redbook/bezcurve', + 'redbook/bezmesh', + 'redbook/checker', + 'redbook/clip', + 'redbook/colormat', + 'redbook/combiner', + 'redbook/convolution', + 'redbook/cube', + 'redbook/cubemap', + 'redbook/depthcue', + 'redbook/dof', + 'redbook/double', + 'redbook/drawf', + 'redbook/feedback', + 'redbook/fog', + 'redbook/fogcoord', + 'redbook/fogindex', + 'redbook/font', + 'redbook/hello', + 'redbook/histogram', + 'redbook/image', + 'redbook/light', + 'redbook/lines', + 'redbook/list', + 'redbook/material', + 'redbook/minmax', + 'redbook/mipmap', + 'redbook/model', + 'redbook/movelight', + 'redbook/multisamp', + 'redbook/multitex', + 'redbook/mvarray', + 'redbook/nurbs', + 'redbook/pickdepth', + 'redbook/picksquare', + 'redbook/plane', + 'redbook/planet', + 'redbook/pointp', + 'redbook/polyoff', + 'redbook/polys', + 'redbook/quadric', + 'redbook/robot', + 'redbook/sccolorlight', + 'redbook/scene', + 'redbook/scenebamb', + 'redbook/sceneflat', + 'redbook/select', + 'redbook/shadowmap', + 'redbook/smooth', + 'redbook/stencil', + 'redbook/stroke', + 'redbook/surface', + 'redbook/surfpoints', + 'redbook/teaambient', + 'redbook/teapots', + 'redbook/tess', + 'redbook/tesswind', + 'redbook/texbind', + 'redbook/texgen', + 'redbook/texprox', + 'redbook/texsub', + 'redbook/texture3d', + 'redbook/texturesurf', + 'redbook/torus', + 'redbook/trim', + 'redbook/unproject', + 'redbook/varray', + 'redbook/wrap', + + 'samples/accum', + 'samples/bitmap1', + 'samples/bitmap2', + 'samples/blendeq', + 'samples/blendxor', + 'samples/copy', + 'samples/cursor', + 'samples/depth', + 'samples/eval', + 'samples/fog', + 'samples/font', + 'samples/line', + 'samples/logo', + 'samples/nurb', + 'samples/oglinfo', + 'samples/olympic', + 'samples/overlay', + 'samples/point', + 'samples/prim', + 'samples/quad', + 'samples/rgbtoppm', + 'samples/select', + 'samples/shape', + 'samples/sphere', + 'samples/star', + 'samples/stencil', + 'samples/stretch', + 'samples/texture', + 'samples/tri', + 'samples/wave', + #'slang/cltest', #'slang/sotest', #'slang/vstest', + 'tests/afsmultiarb', 'tests/antialias', 'tests/arbfpspec', @@ -548,7 +475,7 @@ tests = [ 'tests/bumpmap', 'tests/calibrate_rast', 'tests/condrender', - 'tests/copypixrate', + #'tests/copypixrate', # XXX: benchmark 'tests/cva', 'tests/cva_huge', 'tests/cylwrap', @@ -560,7 +487,7 @@ tests = [ 'tests/fbotest1', 'tests/fbotest2', 'tests/fbotest3', - 'tests/fillrate', + #'tests/fillrate', # XXX: benchmark 'tests/floattex', 'tests/fogcoord', 'tests/fptest1', @@ -592,7 +519,7 @@ tests = [ 'tests/prog_parameter', 'tests/quads', 'tests/random', - 'tests/readrate', + #'tests/readrate', # XXX: benchmark 'tests/rubberband', 'tests/scissor', 'tests/scissor-viewport', @@ -606,7 +533,7 @@ tests = [ 'tests/step', 'tests/streaming_rect', 'tests/subtex', - 'tests/subtexrate', + #'tests/subtexrate', # XXX: benchmark 'tests/tex1d', 'tests/texcmp', 'tests/texcompress2', @@ -633,43 +560,45 @@ tests = [ 'tests/zcomp', 'tests/zdrawpix', 'tests/zreaddraw', + #'vp/vp-tris', #'vpglsl/vp-tris', - #'xdemos/corender', - #'xdemos/glsync', - #'xdemos/glthreads', - #'xdemos/glxcontexts', - #'xdemos/glxdemo', - #'xdemos/glxgears', - #'xdemos/glxgears_fbconfig', - #'xdemos/glxgears_pixmap', - #'xdemos/glxheads', - #'xdemos/glxinfo', - #'xdemos/glxpbdemo', - #'xdemos/glxpixmap', - #'xdemos/glxsnoop', - #'xdemos/glxswapcontrol', - #'xdemos/manywin', - #'xdemos/msctest', - #'xdemos/multictx', - #'xdemos/offset', - #'xdemos/omlsync', - #'xdemos/opencloseopen', - #'xdemos/overlay', - #'xdemos/pbdemo', - #'xdemos/pbinfo', - #'xdemos/shape', - #'xdemos/sharedtex', - #'xdemos/sharedtex_mt', - #'xdemos/texture_from_pixmap', - #'xdemos/wincopy', - #'xdemos/xfont', - #'xdemos/xrotfontdemo', - #'xdemos/yuvrect_client', + + 'xdemos/corender', + 'xdemos/glsync', + #'xdemos/glthreads', # XXX: multithreaded + 'xdemos/glxcontexts', + 'xdemos/glxdemo', + 'xdemos/glxgears', + 'xdemos/glxgears_fbconfig', + 'xdemos/glxgears_pixmap', + 'xdemos/glxheads', + 'xdemos/glxinfo', + 'xdemos/glxpbdemo', + 'xdemos/glxpixmap', + 'xdemos/glxsnoop', + 'xdemos/glxswapcontrol', + 'xdemos/manywin', + 'xdemos/msctest', + 'xdemos/multictx', + 'xdemos/offset', + 'xdemos/omlsync', + 'xdemos/opencloseopen', + 'xdemos/overlay', + 'xdemos/pbdemo', + 'xdemos/pbinfo', + 'xdemos/shape', + 'xdemos/sharedtex', + #'xdemos/sharedtex_mt', # XXX: multithreaded + 'xdemos/texture_from_pixmap', + 'xdemos/wincopy', + 'xdemos/xfont', + 'xdemos/xrotfontdemo', + 'xdemos/yuvrect_client', ] -tests = [ +_tests = [ 'trivial/tri', 'trivial/tri-tex', ] @@ -686,6 +615,10 @@ def main(): '--build', metavar='PATH', type='string', dest='build', default='.', help='path to apitrace build [default=%default]') + optparser.add_option( + '--results', metavar='PATH', + type='string', dest='results', default='results', + help='results directory [default=%default]') optparser.add_option( '--mesa-demos', metavar='PATH', type='string', dest='mesa_demos', default=os.environ.get('MESA_DEMOS'), @@ -697,11 +630,20 @@ def main(): optparser.error('path to Mesa demos not specified') if args: - for test in args: - runtest(test) + testlist = [] + for arg in args: + if arg.endswith('/'): + for test in tests: + if test.startswith(arg): + testlist.append(test) + else: + testlist.append(arg) else: - for test in tests: - runtest(test) + testlist = tests + + report = Report(options.results) + for test in testlist: + runtest(report, test) if __name__ == '__main__':