]> git.cworth.org Git - apitrace-tests/blobdiff - mesademos.py
Better error message when invoked without parameters.
[apitrace-tests] / mesademos.py
index beae8b0e9ef2e34ecc0e87c938d863c3eb3cefcb..0ef5bfbfe5beed7fff5c820b443f13edd90c6a9f 100755 (executable)
@@ -47,7 +47,14 @@ 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)
 
 
@@ -69,24 +76,27 @@ ignored_function_names = set([
 
 def runtest(demo):
 
-    app = os.path.join(options.mesa_demos, 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'] = '/tmp/trace'
+    env['TRACE_FILE'] = trace
     
     args = [os.path.join('.', basename)]
     p = popen(args, env=env, cwd=dirname, stdout=subprocess.PIPE)
-    time.sleep(0.5)
+    time.sleep(1)
 
     # http://stackoverflow.com/questions/151407/how-to-get-an-x11-window-from-a-process-id
-    subprocess.call('xwd -name \'%s\' | xwdtopnm | pnmtopng > %s' % (args[0], '/tmp/ref.png'), shell=True, stdout=subprocess.PIPE)
+    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', '/tmp/trace'], stdout=subprocess.PIPE)
+    p = popen(['./tracedump', trace], stdout=subprocess.PIPE)
     stdout, _ = p.communicate()
 
     call_re = re.compile('^([0-9]+) (\w+)\(')
@@ -106,8 +116,8 @@ def runtest(demo):
     args = ['./glretrace']
     if double_buffer:
         args += ['-db']
-    args += ['-s', '/tmp/test_']
-    args += ['/tmp/trace']
+    args += ['-s', '/tmp/' + demo.replace('/', '-') + '.']
+    args += [trace]
     p = popen(args, stdout=subprocess.PIPE)
     stdout, _ = p.communicate()
     image_re = re.compile('^Wrote (.*\.png)$')
@@ -118,7 +128,8 @@ def runtest(demo):
             image = mo.group(1)
     
     if image:
-        p = popen(["compare", '-metric', 'AE', '-fuzz', '5%', '-extract', '250x250', '/tmp/ref.png', image, '/tmp/delta.png'])
+        delta_image = demo.replace('/', '-') + '.diff.png'
+        p = popen(["compare", '-alpha', 'opaque', '-metric', 'AE', '-fuzz', '5%', ref_image, image, delta_image])
         _, stderr = p.communicate()
 
 
@@ -511,7 +522,6 @@ tests = [
     #'slang/vstest',
     'tests/afsmultiarb',
     'tests/antialias',
-    'tests/api_speed.py',
     'tests/arbfpspec',
     'tests/arbfptest1',
     'tests/arbfptexture',
@@ -667,24 +677,28 @@ def main():
 
     # Parse command line options
     optparser = optparse.OptionParser(
-        usage='\n\t%prog [options] ',
+        usage='\n\t%prog [options] [demo] ...',
         version='%%prog')
     optparser.add_option(
         '--build', metavar='PATH',
         type='string', dest='build', default='.',
         help='path to apitrace build')
-
     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')
 
     (options, args) = optparser.parse_args(sys.argv[1:])
-    if args:
-        optparser.error("incorrect number of arguments")
 
-    for test in tests:
-       runtest('src/' + test)
+    if not options.mesa_demos:
+        optparser.error('path to Mesa demos not specified')
+
+    if args:
+        for test in args:
+           runtest(test)
+    else:
+        for test in tests:
+           runtest(test)
 
 
 if __name__ == '__main__':