]> git.cworth.org Git - apitrace-tests/blobdiff - mesademos.py
Split testing into common/different parts.
[apitrace-tests] / mesademos.py
index 2f6ef3db73bbd6efdb0cfb4ae6526344770655cc..21b0af444b7c86e15315e93716a1d829a8fb1c81 100755 (executable)
 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('glxtrace.so')
-    env['TRACE_FILE'] = trace
-    
+    name = demo.replace('/', '-')
     args = [os.path.join('.', basename)]
-    p = popen(args, env=env, cwd=dirname, stdout=subprocess.PIPE)
-    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)
-
-    os.kill(p.pid, signal.SIGTERM)
-
-    p = popen(['./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 = ['./glretrace']
-    if double_buffer:
-        args += ['-db']
-    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 = [
@@ -304,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',
@@ -411,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',
@@ -545,7 +475,7 @@ tests = [
     'tests/bumpmap',
     'tests/calibrate_rast',
     'tests/condrender',
-    'tests/copypixrate',
+    #'tests/copypixrate', # XXX: benchmark
     'tests/cva',
     'tests/cva_huge',
     'tests/cylwrap',
@@ -557,7 +487,7 @@ tests = [
     'tests/fbotest1',
     'tests/fbotest2',
     'tests/fbotest3',
-    'tests/fillrate',
+    #'tests/fillrate', # XXX: benchmark
     'tests/floattex',
     'tests/fogcoord',
     'tests/fptest1',
@@ -589,7 +519,7 @@ tests = [
     'tests/prog_parameter',
     'tests/quads',
     'tests/random',
-    'tests/readrate',
+    #'tests/readrate', # XXX: benchmark
     'tests/rubberband',
     'tests/scissor',
     'tests/scissor-viewport',
@@ -603,7 +533,7 @@ tests = [
     'tests/step',
     'tests/streaming_rect',
     'tests/subtex',
-    'tests/subtexrate',
+    #'tests/subtexrate', # XXX: benchmark
     'tests/tex1d',
     'tests/texcmp',
     'tests/texcompress2',
@@ -630,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',
 ]
@@ -682,19 +614,36 @@ 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='results',
+        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 args:
+        testlist = []
+        for arg in args:
+            if arg.endswith('/'):
+                for test in tests:
+                    if test.startswith(arg):
+                        testlist.append(test)
+            else:
+                testlist.append(arg)
+    else:
+        testlist = tests
+
+    report = Report(options.results)
+    for test in testlist:
+       runtest(report, test)
 
 
 if __name__ == '__main__':