X-Git-Url: https://git.cworth.org/git?a=blobdiff_plain;f=driver.py;h=31f49fc68a2dfbc3a541379186d63c0342c63b49;hb=4d4d14f3ff66f6e5074feb916b473dca1b2a187d;hp=660a1f9b0c70c58e863ec9ebdc2b1b3572c2cce6;hpb=2954c5f9db610158245e908cc54d7494da3487dc;p=apitrace-tests diff --git a/driver.py b/driver.py index 660a1f9..31f49fc 100755 --- a/driver.py +++ b/driver.py @@ -31,6 +31,7 @@ import optparse import os.path import platform import re +import shutil import subprocess import sys import time @@ -56,6 +57,11 @@ def _get_build_path(path): sys.exit(1) return path +def _get_build_program(program): + if platform.system() == 'Windows': + program += '.exe' + return _get_build_path(program) + class TestCase: @@ -84,27 +90,39 @@ class TestCase: def trace(self): if self.trace_file is None: self.trace_file = os.path.abspath(os.path.join(self.results, self.name + '.trace')) + if os.path.exists(self.trace_file): + os.remove(self.trace_file) + else: + trace_dir = os.path.dirname(self.trace_file) + if not os.path.exists(trace_dir): + os.makedirs(trace_dir) + cmd = self.args env = os.environ.copy() system = platform.system() + local_wrapper = None if system == 'Windows': - # TODO - self.skip('tracing not supported on Windows') wrapper = _get_build_path('wrappers/opengl32.dll') - elif system == 'Darwin': - wrapper = _get_build_path('wrappers/OpenGL') - env['DYLD_LIBRARY_PATH'] = os.path.dirname(wrapper) + local_wrapper = os.path.join(os.path.dirname(self.args[0]), os.path.basename(wrapper)) + shutil.copy(wrapper, local_wrapper) + env['TRACE_FILE'] = self.trace_file else: - wrapper = _get_build_path('glxtrace.so') - env['LD_PRELOAD'] = wrapper - - env['TRACE_FILE'] = self.trace_file + apitrace = _get_build_program('apitrace') + cmd = [ + apitrace, 'trace', + '-o', self.trace_file, + '--' + ] + cmd if self.max_frames is not None: env['TRACE_FRAMES'] = str(self.max_frames) - p = popen(self.args, env=env, cwd=self.cwd) - p.wait() + try: + p = popen(cmd, env=env, cwd=self.cwd) + p.wait() + finally: + if local_wrapper is not None: + os.remove(local_wrapper) if not os.path.exists(self.trace_file): self.fail('no trace file generated\n') @@ -113,13 +131,14 @@ class TestCase: def dump(self): - cmd = [_get_build_path('tracedump'), '--color=never', self.trace_file] + cmd = [_get_build_program('apitrace'), 'dump', '--color=never', self.trace_file] p = popen(cmd, stdout=subprocess.PIPE) swapbuffers = 0 flushes = 0 ref_line = '' + src_lines = [] if self.ref_dump is not None: ref = open(self.ref_dump, 'rt') ref_line = ref.readline().rstrip() @@ -135,15 +154,22 @@ class TestCase: if function_name in ('glFlush', 'glFinish'): flushes += 1 src_line = line[mo.start(2):] - sys.stdout.write(src_line + '\n') if ref_line: if src_line == ref_line: + sys.stdout.write(src_line + '\n') ref_line = ref.readline().rstrip() + src_lines = [] + else: + src_lines.append(src_line) + p.wait() if p.returncode != 0: - self.fail('tracedump returned code %i' % p.returncode) + self.fail('`apitrace dump` returned code %i' % p.returncode) if ref_line: - self.fail('missing call %' % ref_line) + if src_lines: + self.fail('missing call `%s` (found `%s`)' % (ref_line, src_lines[0])) + else: + self.fail('missing call %s' % ref_line) def run(self): self.standalone()