X-Git-Url: https://git.cworth.org/git?a=blobdiff_plain;f=scripts%2Fretracediff.py;h=d665c7601b7acf7a91ef3708fd521c4165e0891f;hb=e7d7a643767ab46fdc15b4d7f430c38064f8e9ce;hp=bed216c314921e386ec03bc849c7a1a3d2c59359;hpb=48412ffde3dd4710c96d5e8d9cfdf1789e4d703a;p=apitrace diff --git a/scripts/retracediff.py b/scripts/retracediff.py index bed216c..d665c76 100755 --- a/scripts/retracediff.py +++ b/scripts/retracediff.py @@ -37,7 +37,7 @@ import sys from PIL import Image from snapdiff import Comparer -from highlight import Highlighter +from highlight import AutoHighlighter import jsondiff @@ -80,16 +80,16 @@ class Setup: p.wait() return state.get('parameters', {}) - def diff_state(self, ref_call_no, src_call_no): + def diff_state(self, ref_call_no, src_call_no, stream): '''Compare the state between two calls.''' ref_state = self.dump_state(ref_call_no) src_state = self.dump_state(src_call_no) - sys.stdout.flush() - differ = jsondiff.Differ(sys.stdout) + stream.flush() + differ = jsondiff.Differ(stream) differ.visit(ref_state, src_state) - sys.stdout.write('\n') + stream.write('\n') def read_pnm(stream): @@ -98,7 +98,15 @@ def read_pnm(stream): magic = stream.readline() if not magic: return None, None - assert magic.rstrip() == 'P6' + magic = magic.rstrip() + if magic == 'P5': + channels = 1 + mode = 'L' + elif magic == 'P6': + channels = 3 + mode = 'RGB' + else: + raise Exception('Unsupported magic `%s`' % magic) comment = '' line = stream.readline() while line.startswith('#'): @@ -107,8 +115,8 @@ def read_pnm(stream): width, height = map(int, line.strip().split()) maximum = int(stream.readline().strip()) assert maximum == 255 - data = stream.read(height * width * 3) - image = Image.frombuffer('RGB', (width, height), data, 'raw', 'RGB', 0, 1) + data = stream.read(height * width * channels) + image = Image.frombuffer(mode, (width, height), data, 'raw', mode, 0, 1) return image, comment @@ -156,9 +164,13 @@ def main(): type="float", dest="threshold", default=12.0, help="threshold precision [default: %default]") optparser.add_option( - '-S', '--snapshot-frequency', metavar='FREQUENCY', + '-S', '--snapshot-frequency', metavar='CALLSET', type="string", dest="snapshot_frequency", default='draw', - help="snapshot frequency: frame, framebuffer, or draw [default: %default]") + help="calls to compare [default: %default]") + optparser.add_option( + '-o', '--output', metavar='FILE', + type="string", dest="output", + help="output file [default: stdout]") (options, args) = optparser.parse_args(sys.argv[1:]) ref_env = parse_env(optparser, options.ref_env) @@ -169,7 +181,12 @@ def main(): ref_setup = Setup(args, ref_env) src_setup = Setup(args, src_env) - highligher = Highlighter(sys.stdout) + if options.output: + output = open(options.output, 'wt') + else: + output = sys.stdout + + highligher = AutoHighlighter(output) highligher.write('call\tprecision\n') @@ -217,7 +234,7 @@ def main(): src_image.save(prefix + '.src.png') comparer.write_diff(prefix + '.diff.png') if last_bad < last_good: - src_setup.diff_state(last_good, call_no) + src_setup.diff_state(last_good, call_no, output) last_bad = call_no else: last_good = call_no