From: José Fonseca Date: Thu, 25 Apr 2013 14:22:53 +0000 (+0100) Subject: scripts/convert: Allow converting from PIX. X-Git-Url: https://git.cworth.org/git?a=commitdiff_plain;h=8b9f78ba244ee2b4667d0c87a28f959b78d6e5f3;p=apitrace scripts/convert: Allow converting from PIX. --- diff --git a/scripts/convert.py b/scripts/convert.py index d5660c0..e98f6d5 100755 --- a/scripts/convert.py +++ b/scripts/convert.py @@ -35,7 +35,7 @@ import platform import sys -def convert(inTrace, outPixrun): +def getPixExe(): try: programFiles = os.environ['ProgramFiles(x86)'] except KeyError: @@ -44,14 +44,30 @@ def convert(inTrace, outPixrun): dxsdkDir = os.environ['DXSDK_DIR'] except KeyError: dxsdkDir = os.path.join(programFiles, "Microsoft DirectX SDL (June 2010)") - pix = os.path.join(dxsdkDir, "Utilities", "bin", 'x86', 'PIXwin.exe') + pixExe = os.path.join(dxsdkDir, "Utilities", "bin", 'x86', 'PIXwin.exe') + return pixExe + + +def callProcess(cmd): + if options.verbose: + sys.stderr.write(' '.join(cmd) + '\n') + ret = subprocess.call(cmd) + if ret: + exeName = os.path.basename(cmd[0]) + sys.stderr.write('error: %s failed with exit code %u\n' % (exeName, ret)) + sys.exit(ret) + return ret + + +def convertToPix(inTrace, outPixrun): + pix = getPixPath() pixExp = os.path.join(os.path.dirname(__file__), 'apitrace.PIXExp') # http://social.msdn.microsoft.com/Forums/sv/devdocs/thread/15addc0c-036d-413a-854a-35637ccbb834 # http://src.chromium.org/svn/trunk/o3d/tests/test_driver.py cmd = [ - pix, + getPixExe(), pixExp, '-start', '-runfile', os.path.abspath(outPixrun), @@ -60,22 +76,47 @@ def convert(inTrace, outPixrun): '-targetargs', os.path.abspath(inTrace), ] - if options.verbose: - sys.stderr.write(' '.join(cmd) + '\n') - - ret = subprocess.call(cmd) - if ret: - sys.stderr.write('error: pix failued with exit code %u\n' % ret) - sys.exit(ret) + callProcess(cmd) if os.path.exists(outPixrun): sys.stderr.write('info: %s written\n' % outPixrun) - if False: + if options.verify: subprocess.call([pix, os.path.abspath(outPixrun)]) else: sys.stderr.write('error: %s not written\n' % outPixrun) sys.exit(1) +def convertFromPix(inPix, outTrace): + pixExe = getPixExe() + + if False: + cmd = [ + pixExe, + inPix, + '-exporttocsv', 'c:\test.csv', + ] + callProcess(cmd) + + cmd = [ + options.apitrace, + 'trace', + '-a', options.api, + '-o', outTrace, + pixExe, + inPix, + '-playstandalone', + ] + + callProcess(cmd) + if os.path.exists(outTrace): + sys.stderr.write('info: %s written\n' % outTrace) + if options.verify: + subprocess.call([options.retrace, os.path.abspath(outTrace)]) + else: + sys.stderr.write('error: %s not written\n' % outTrace) + sys.exit(1) + + def main(): global options @@ -83,9 +124,17 @@ def main(): optparser = optparse.OptionParser( usage='\n\t%prog [options] ...', version='%%prog') + optparser.add_option( + '--apitrace', metavar='PROGRAM', + type='string', dest='apitrace', default='apitrace.exe', + help='retrace command [default: %default]') + optparser.add_option( + '-a', '--api', metavar='API', + type='string', dest='api', default='d3d9', + help='api [default: %default]') optparser.add_option( '-r', '--retrace', metavar='PROGRAM', - type='string', dest='retrace', default='d3dretrace', + type='string', dest='retrace', default='d3dretrace.exe', help='retrace command [default: %default]') optparser.add_option( '-v', '--verbose', @@ -95,18 +144,31 @@ def main(): '-o', '--output', metavar='FILE', type="string", dest="output", help="output file [default: stdout]") + optparser.add_option( + '--verify', + action='store_true', dest='verify', default=False, + help='verify output by replaying it') (options, args) = optparser.parse_args(sys.argv[1:]) if not args: optparser.error("incorrect number of arguments") - for arg in args: + for inFile in args: + name, inExt = os.path.splitext(os.path.basename(inFile)) + inExt = inExt + if inExt.lower() == '.trace': + convert = convertToPix + outExt = '.PIXRun' + elif inExt.lower() == '.pixrun': + convert = convertFromPix + outExt = '.trace' + else: + optparser.error("unexpected file extensions `%s`" % inExt) if options.output: - output = options.output + outFile = options.output else: - name, ext = os.path.splitext(os.path.basename(arg)) - output = name + '.PIXRun' - convert(arg, output) + outFile = name + outExt + convert(inFile, outFile) if __name__ == '__main__':