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)
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['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)
+ 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(['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(['./tracedump', '/tmp/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+)\(')
double_buffer = True
#print orig_line
- args = ['./glretrace']
+ args = [os.path.join(options.build, 'glretrace')]
if double_buffer:
args += ['-db']
- args += ['-s', '/tmp/test_']
- args += ['/tmp/trace']
+ 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 = 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()
#'slang/vstest',
'tests/afsmultiarb',
'tests/antialias',
- 'tests/api_speed.py',
'tests/arbfpspec',
'tests/arbfptest1',
'tests/arbfptexture',
# 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')
-
+ help='path to apitrace build [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:
- 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__':