Пример #1
0
def main():
    '''Main program.
    '''

    global options

    # Parse command line options
    optparser = optparse.OptionParser(
        usage='\n\t%prog [options] -- [glretrace options] <trace>',
        version='%%prog')
    optparser.add_option(
        '-r', '--retrace', metavar='PROGRAM',
        type='string', dest='retrace', default='glretrace',
        help='retrace command [default: %default]')
    optparser.add_option(
        '--ref-env', metavar='NAME=VALUE',
        type='string', action='append', dest='ref_env', default=[],
        help='add variable to reference environment')
    optparser.add_option(
        '--src-env', metavar='NAME=VALUE',
        type='string', action='append', dest='src_env', default=[],
        help='add variable to source environment')
    optparser.add_option(
        '--diff-prefix', metavar='PATH',
        type='string', dest='diff_prefix', default='.',
        help='prefix for the difference images')
    optparser.add_option(
        '-t', '--threshold', metavar='BITS',
        type="float", dest="threshold", default=12.0,
        help="threshold precision  [default: %default]")
    optparser.add_option(
        '-S', '--snapshot-frequency', metavar='CALLSET',
        type="string", dest="snapshot_frequency", default='draw',
        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)
    src_env = parse_env(optparser, options.src_env)
    if not args:
        optparser.error("incorrect number of arguments")

    ref_setup = Setup(args, ref_env)
    src_setup = Setup(args, src_env)

    if options.output:
        output = open(options.output, 'wt')
    else:
        output = sys.stdout

    highligher = AutoHighlighter(output)

    highligher.write('call\tprecision\n')

    last_bad = -1
    last_good = 0
    ref_proc = ref_setup.retrace()
    try:
        src_proc = src_setup.retrace()
        try:
            while True:
                # Get the reference image
                ref_image, ref_comment = read_pnm(ref_proc.stdout)
                if ref_image is None:
                    break

                # Get the source image
                src_image, src_comment = read_pnm(src_proc.stdout)
                if src_image is None:
                    break

                assert ref_comment == src_comment

                call_no = int(ref_comment.strip())

                # Compare the two images
                comparer = Comparer(ref_image, src_image)
                precision = comparer.precision()

                mismatch = precision < options.threshold

                if mismatch:
                    highligher.color(highligher.red)
                    highligher.bold()
                highligher.write('%u\t%f\n' % (call_no, precision))
                if mismatch:
                    highligher.normal()

                if mismatch:
                    if options.diff_prefix:
                        prefix = os.path.join(options.diff_prefix, '%010u' % call_no)
                        prefix_dir = os.path.dirname(prefix)
                        if not os.path.isdir(prefix_dir):
                            os.makedirs(prefix_dir)
                        ref_image.save(prefix + '.ref.png')
                        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, output)
                    last_bad = call_no
                else:
                    last_good = call_no

                highligher.flush()
        finally:
            src_proc.terminate()
    finally:
        ref_proc.terminate()
Пример #2
0
def main():
    '''Main program.
    '''

    global options

    # Parse command line options
    optparser = optparse.OptionParser(
        usage='\n\t%prog [options] -- [glretrace options] <trace>',
        version='%%prog')
    optparser.add_option('-r',
                         '--retrace',
                         metavar='PROGRAM',
                         type='string',
                         dest='retrace',
                         default='glretrace',
                         help='retrace command [default: %default]')
    optparser.add_option('--ref-driver',
                         metavar='DRIVER',
                         type='string',
                         dest='ref_driver',
                         default=None,
                         help='force reference driver')
    optparser.add_option('--src-driver',
                         metavar='DRIVER',
                         type='string',
                         dest='src_driver',
                         default=None,
                         help='force source driver')
    optparser.add_option('--ref-arg',
                         metavar='OPTION',
                         type='string',
                         action='append',
                         dest='ref_args',
                         default=[],
                         help='pass argument to reference retrace')
    optparser.add_option('--src-arg',
                         metavar='OPTION',
                         type='string',
                         action='append',
                         dest='src_args',
                         default=[],
                         help='pass argument to source retrace')
    optparser.add_option('--ref-env',
                         metavar='NAME=VALUE',
                         type='string',
                         action='append',
                         dest='ref_env',
                         default=[],
                         help='add variable to reference environment')
    optparser.add_option('--src-env',
                         metavar='NAME=VALUE',
                         type='string',
                         action='append',
                         dest='src_env',
                         default=[],
                         help='add variable to source environment')
    optparser.add_option('--diff-prefix',
                         metavar='PATH',
                         type='string',
                         dest='diff_prefix',
                         default='.',
                         help='prefix for the difference images')
    optparser.add_option('-t',
                         '--threshold',
                         metavar='BITS',
                         type="float",
                         dest="threshold",
                         default=12.0,
                         help="threshold precision  [default: %default]")
    optparser.add_option('-S',
                         '--snapshot-frequency',
                         metavar='CALLSET',
                         type="string",
                         dest="snapshot_frequency",
                         default='draw',
                         help="calls to compare [default: %default]")
    optparser.add_option('--diff-state',
                         action='store_true',
                         dest='diff_state',
                         default=False,
                         help='diff state between failing calls')
    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)
    src_env = parse_env(optparser, options.src_env)
    if not args:
        optparser.error("incorrect number of arguments")

    if options.ref_driver:
        options.ref_args.insert(0, '--driver=' + options.ref_driver)
    if options.src_driver:
        options.src_args.insert(0, '--driver=' + options.src_driver)

    refRetracer = Retracer(options.retrace, options.ref_args + args, ref_env)
    srcRetracer = Retracer(options.retrace, options.src_args + args, src_env)

    if options.output:
        output = open(options.output, 'wt')
    else:
        output = sys.stdout

    highligher = AutoHighlighter(output)

    highligher.write('call\tprecision\n')

    last_bad = -1
    last_good = 0
    refRun = refRetracer.snapshot(options.snapshot_frequency)
    try:
        srcRun = srcRetracer.snapshot(options.snapshot_frequency)
        try:
            while True:
                # Get the reference image
                refImage, refCallNo = refRun.nextSnapshot()
                if refImage is None:
                    break

                # Get the source image
                srcImage, srcCallNo = srcRun.nextSnapshot()
                if srcImage is None:
                    break

                assert refCallNo == srcCallNo
                callNo = refCallNo

                # Compare the two images
                comparer = Comparer(refImage, srcImage)
                precision = comparer.precision()

                mismatch = precision < options.threshold

                if mismatch:
                    highligher.color(highligher.red)
                    highligher.bold()
                highligher.write('%u\t%f\n' % (callNo, precision))
                if mismatch:
                    highligher.normal()

                if mismatch:
                    if options.diff_prefix:
                        prefix = os.path.join(options.diff_prefix,
                                              '%010u' % callNo)
                        prefix_dir = os.path.dirname(prefix)
                        if not os.path.isdir(prefix_dir):
                            os.makedirs(prefix_dir)
                        refImage.save(prefix + '.ref.png')
                        srcImage.save(prefix + '.src.png')
                        comparer.write_diff(prefix + '.diff.png')
                    if last_bad < last_good and options.diff_state:
                        srcRetracer.diff_state(last_good, callNo, output)
                    last_bad = callNo
                else:
                    last_good = callNo

                highligher.flush()
        finally:
            srcRun.terminate()
    finally:
        refRun.terminate()
Пример #3
0
def main():
    '''Main program.
    '''

    global options

    # Parse command line options
    optparser = optparse.OptionParser(
        usage='\n\t%prog [options] -- [glretrace options] <trace>',
        version='%%prog')
    optparser.add_option('-r',
                         '--retrace',
                         metavar='PROGRAM',
                         type='string',
                         dest='retrace',
                         default='glretrace',
                         help='retrace command [default: %default]')
    optparser.add_option('--ref-env',
                         metavar='NAME=VALUE',
                         type='string',
                         action='append',
                         dest='ref_env',
                         default=[],
                         help='add variable to reference environment')
    optparser.add_option('--src-env',
                         metavar='NAME=VALUE',
                         type='string',
                         action='append',
                         dest='src_env',
                         default=[],
                         help='add variable to source environment')
    optparser.add_option('--diff-prefix',
                         metavar='PATH',
                         type='string',
                         dest='diff_prefix',
                         default='.',
                         help='prefix for the difference images')
    optparser.add_option('-t',
                         '--threshold',
                         metavar='BITS',
                         type="float",
                         dest="threshold",
                         default=12.0,
                         help="threshold precision  [default: %default]")
    optparser.add_option('-S',
                         '--snapshot-frequency',
                         metavar='CALLSET',
                         type="string",
                         dest="snapshot_frequency",
                         default='draw',
                         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)
    src_env = parse_env(optparser, options.src_env)
    if not args:
        optparser.error("incorrect number of arguments")

    ref_setup = Setup(args, ref_env)
    src_setup = Setup(args, src_env)

    if options.output:
        output = open(options.output, 'wt')
    else:
        output = sys.stdout

    highligher = AutoHighlighter(output)

    highligher.write('call\tprecision\n')

    last_bad = -1
    last_good = 0
    ref_proc = ref_setup.retrace()
    try:
        src_proc = src_setup.retrace()
        try:
            while True:
                # Get the reference image
                ref_image, ref_comment = read_pnm(ref_proc.stdout)
                if ref_image is None:
                    break

                # Get the source image
                src_image, src_comment = read_pnm(src_proc.stdout)
                if src_image is None:
                    break

                assert ref_comment == src_comment

                call_no = int(ref_comment.strip())

                # Compare the two images
                comparer = Comparer(ref_image, src_image)
                precision = comparer.precision()

                mismatch = precision < options.threshold

                if mismatch:
                    highligher.color(highligher.red)
                    highligher.bold()
                highligher.write('%u\t%f\n' % (call_no, precision))
                if mismatch:
                    highligher.normal()

                if mismatch:
                    if options.diff_prefix:
                        prefix = os.path.join(options.diff_prefix,
                                              '%010u' % call_no)
                        prefix_dir = os.path.dirname(prefix)
                        if not os.path.isdir(prefix_dir):
                            os.makedirs(prefix_dir)
                        ref_image.save(prefix + '.ref.png')
                        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, output)
                    last_bad = call_no
                else:
                    last_good = call_no

                highligher.flush()
        finally:
            src_proc.terminate()
    finally:
        ref_proc.terminate()
Пример #4
0
def main():
    '''Main program.
    '''

    global options

    # Parse command line options
    optparser = optparse.OptionParser(
        usage='\n\t%prog [options] -- [glretrace options] <trace>',
        version='%%prog')
    optparser.add_option(
        '-r', '--retrace', metavar='PROGRAM',
        type='string', dest='retrace', default='glretrace',
        help='retrace command [default: %default]')
    optparser.add_option(
        '--ref-driver', metavar='DRIVER',
        type='string', dest='ref_driver', default=None,
        help='force reference driver')
    optparser.add_option(
        '--src-driver', metavar='DRIVER',
        type='string', dest='src_driver', default=None,
        help='force source driver')
    optparser.add_option(
        '--ref-arg', metavar='OPTION',
        type='string', action='append', dest='ref_args', default=[],
        help='pass argument to reference retrace')
    optparser.add_option(
        '--src-arg', metavar='OPTION',
        type='string', action='append', dest='src_args', default=[],
        help='pass argument to source retrace')
    optparser.add_option(
        '--ref-env', metavar='NAME=VALUE',
        type='string', action='append', dest='ref_env', default=[],
        help='add variable to reference environment')
    optparser.add_option(
        '--src-env', metavar='NAME=VALUE',
        type='string', action='append', dest='src_env', default=[],
        help='add variable to source environment')
    optparser.add_option(
        '--diff-prefix', metavar='PATH',
        type='string', dest='diff_prefix', default='.',
        help='prefix for the difference images')
    optparser.add_option(
        '-t', '--threshold', metavar='BITS',
        type="float", dest="threshold", default=12.0,
        help="threshold precision  [default: %default]")
    optparser.add_option(
        '-S', '--snapshot-frequency', metavar='CALLSET',
        type="string", dest="snapshot_frequency", default='draw',
        help="calls to compare [default: %default]")
    optparser.add_option(
        '--diff-state',
        action='store_true', dest='diff_state', default=False,
        help='diff state between failing calls')
    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)
    src_env = parse_env(optparser, options.src_env)
    if not args:
        optparser.error("incorrect number of arguments")
    
    if options.ref_driver:
        options.ref_args.insert(0, '--driver=' + options.ref_driver)
    if options.src_driver:
        options.src_args.insert(0, '--driver=' + options.src_driver)

    refRetracer = Retracer(options.retrace, options.ref_args + args, ref_env)
    srcRetracer = Retracer(options.retrace, options.src_args + args, src_env)

    if options.output:
        output = open(options.output, 'wt')
    else:
        output = sys.stdout

    highligher = AutoHighlighter(output)

    highligher.write('call\tprecision\n')

    last_bad = -1
    last_good = 0
    refRun = refRetracer.snapshot(options.snapshot_frequency)
    try:
        srcRun = srcRetracer.snapshot(options.snapshot_frequency)
        try:
            while True:
                # Get the reference image
                refImage, refCallNo = refRun.nextSnapshot()
                if refImage is None:
                    break

                # Get the source image
                srcImage, srcCallNo = srcRun.nextSnapshot()
                if srcImage is None:
                    break

                assert refCallNo == srcCallNo
                callNo = refCallNo

                # Compare the two images
                if isinstance(refImage, Image.Image) and isinstance(srcImage, Image.Image):
                    # Using PIL
                    numpyImages = False
                    comparer = Comparer(refImage, srcImage)
                    precision = comparer.precision()
                else:
                    # Using numpy (for floating point images)
                    # TODO: drop PIL when numpy path becomes general enough
                    import numpy
                    assert not isinstance(refImage, Image.Image)
                    assert not isinstance(srcImage, Image.Image)
                    numpyImages = True
                    assert refImage.shape == srcImage.shape
                    diffImage = numpy.square(srcImage - refImage)
                    match = numpy.all(diffImage == 0)
                    if match:
                        precision = 24
                    else:
                        precision = 0

                mismatch = precision < options.threshold

                if mismatch:
                    highligher.color(highligher.red)
                    highligher.bold()
                highligher.write('%u\t%f\n' % (callNo, precision))
                if mismatch:
                    highligher.normal()

                if mismatch:
                    if numpyImages:
                        dumpNumpyImage(output, refImage)
                        output.write("->\n")
                        dumpNumpyImage(output, srcImage)
                    if options.diff_prefix and not numpyImages:
                        prefix = os.path.join(options.diff_prefix, '%010u' % callNo)
                        prefix_dir = os.path.dirname(prefix)
                        if not os.path.isdir(prefix_dir):
                            os.makedirs(prefix_dir)
                        refImage.save(prefix + '.ref.png')
                        srcImage.save(prefix + '.src.png')
                        comparer.write_diff(prefix + '.diff.png')
                    if last_bad < last_good and options.diff_state:
                        srcRetracer.diff_state(last_good, callNo, output)
                    last_bad = callNo
                else:
                    last_good = callNo

                highligher.flush()
        finally:
            srcRun.terminate()
    finally:
        refRun.terminate()
Пример #5
0
def main():
    """Main program.
    """

    global options

    # Parse command line options
    optparser = optparse.OptionParser(usage="\n\t%prog [options] -- [glretrace options] <trace>", version="%%prog")
    optparser.add_option(
        "-r",
        "--retrace",
        metavar="PROGRAM",
        type="string",
        dest="retrace",
        default="glretrace",
        help="retrace command [default: %default]",
    )
    optparser.add_option(
        "--ref-driver", metavar="DRIVER", type="string", dest="ref_driver", default=None, help="force reference driver"
    )
    optparser.add_option(
        "--src-driver", metavar="DRIVER", type="string", dest="src_driver", default=None, help="force source driver"
    )
    optparser.add_option(
        "--ref-arg",
        metavar="OPTION",
        type="string",
        action="append",
        dest="ref_args",
        default=[],
        help="pass argument to reference retrace",
    )
    optparser.add_option(
        "--src-arg",
        metavar="OPTION",
        type="string",
        action="append",
        dest="src_args",
        default=[],
        help="pass argument to source retrace",
    )
    optparser.add_option(
        "--ref-env",
        metavar="NAME=VALUE",
        type="string",
        action="append",
        dest="ref_env",
        default=[],
        help="add variable to reference environment",
    )
    optparser.add_option(
        "--src-env",
        metavar="NAME=VALUE",
        type="string",
        action="append",
        dest="src_env",
        default=[],
        help="add variable to source environment",
    )
    optparser.add_option(
        "--diff-prefix",
        metavar="PATH",
        type="string",
        dest="diff_prefix",
        default=".",
        help="prefix for the difference images",
    )
    optparser.add_option(
        "-t",
        "--threshold",
        metavar="BITS",
        type="float",
        dest="threshold",
        default=12.0,
        help="threshold precision  [default: %default]",
    )
    optparser.add_option(
        "-S",
        "--snapshot-frequency",
        metavar="CALLSET",
        type="string",
        dest="snapshot_frequency",
        default="draw",
        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)
    src_env = parse_env(optparser, options.src_env)
    if not args:
        optparser.error("incorrect number of arguments")

    if options.ref_driver:
        options.ref_args.insert(0, "--driver=" + options.ref_driver)
    if options.src_driver:
        options.src_args.insert(0, "--driver=" + options.src_driver)

    ref_setup = Setup(options.ref_args + args, ref_env)
    src_setup = Setup(options.src_args + args, src_env)

    if options.output:
        output = open(options.output, "wt")
    else:
        output = sys.stdout

    highligher = AutoHighlighter(output)

    highligher.write("call\tprecision\n")

    last_bad = -1
    last_good = 0
    ref_proc = ref_setup.retrace()
    try:
        src_proc = src_setup.retrace()
        try:
            while True:
                # Get the reference image
                ref_image, ref_comment = read_pnm(ref_proc.stdout)
                if ref_image is None:
                    break

                # Get the source image
                src_image, src_comment = read_pnm(src_proc.stdout)
                if src_image is None:
                    break

                assert ref_comment == src_comment

                call_no = int(ref_comment.strip())

                # Compare the two images
                comparer = Comparer(ref_image, src_image)
                precision = comparer.precision()

                mismatch = precision < options.threshold

                if mismatch:
                    highligher.color(highligher.red)
                    highligher.bold()
                highligher.write("%u\t%f\n" % (call_no, precision))
                if mismatch:
                    highligher.normal()

                if mismatch:
                    if options.diff_prefix:
                        prefix = os.path.join(options.diff_prefix, "%010u" % call_no)
                        prefix_dir = os.path.dirname(prefix)
                        if not os.path.isdir(prefix_dir):
                            os.makedirs(prefix_dir)
                        ref_image.save(prefix + ".ref.png")
                        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, output)
                    last_bad = call_no
                else:
                    last_good = call_no

                highligher.flush()
        finally:
            try:
                src_proc.terminate()
            except OSError:
                # Avoid http://bugs.python.org/issue14252
                pass
    finally:
        try:
            ref_proc.terminate()
        except OSError:
            # Avoid http://bugs.python.org/issue14252
            pass