Index: tools/test_gpuveto.py |
=================================================================== |
--- tools/test_gpuveto.py (revision 0) |
+++ tools/test_gpuveto.py (revision 0) |
@@ -0,0 +1,147 @@ |
+#!/usr/bin/env python |
+ |
+# Copyright 2014 Google Inc. |
+# |
+# Use of this source code is governed by a BSD-style license that can be |
+# found in the LICENSE file. |
+ |
+"""Script to test out suitableForGpuRasterization (via gpuveto)""" |
+ |
+import argparse |
+import glob |
+import os |
+import re |
+import subprocess |
+import sys |
+ |
+# Set the PYTHONPATH to include the tools directory. |
+sys.path.append( |
+ os.path.join(os.path.dirname(os.path.realpath(__file__)), os.pardir)) |
+import find_run_binary |
+ |
+def list_files(dir_or_file): |
+ """Returns a list of all the files from the provided argument |
+ |
+ @param dir_or_file: either a directory or skp file |
+ |
+ @returns a list containing the files in the directory or a single file |
+ """ |
+ files = [] |
+ for globbedpath in glob.iglob(dir_or_file): # useful on win32 |
+ if os.path.isdir(globbedpath): |
+ for filename in os.listdir(globbedpath): |
+ newpath = os.path.join(globbedpath, filename) |
+ if os.path.isfile(newpath): |
+ files.append(newpath) |
+ elif os.path.isfile(globbedpath): |
+ files.append(globbedpath) |
+ return files |
+ |
+ |
+def execute_program(args): |
+ """Executes a process and waits for it to complete. |
+ |
+ @param args: is passed into subprocess.Popen(). |
+ |
+ @returns a tuple of the process output (returncode, output) |
+ """ |
+ proc = subprocess.Popen(args, stdout=subprocess.PIPE, |
+ stderr=subprocess.STDOUT) |
+ output, _ = proc.communicate() |
+ errcode = proc.returncode |
+ return (errcode, output) |
+ |
+ |
+class GpuVeto(object): |
+ |
+ def __init__(self): |
+ self.bench_pictures = find_run_binary.find_path_to_program( |
+ 'bench_pictures') |
+ self.gpuveto = find_run_binary.find_path_to_program('gpuveto') |
+ assert os.path.isfile(self.bench_pictures) |
+ assert os.path.isfile(self.gpuveto) |
+ self.truePositives = 0 |
+ self.falsePositives = 0 |
+ self.trueNegatives = 0 |
+ self.falseNegatives = 0 |
+ |
+ def process_skps(self, dir_or_file): |
+ for skp in enumerate(dir_or_file): |
+ self.process_skp(skp[1]) |
+ |
+ sys.stdout.write('TP %d FP %d TN %d FN %d\n' % (self.truePositives, |
+ self.falsePositives, |
+ self.trueNegatives, |
+ self.falseNegatives)) |
+ |
+ |
+ def process_skp(self, skp_file): |
+ assert os.path.isfile(skp_file) |
+ |
+ # run gpuveto on the skp |
+ args = [self.gpuveto, '-r', skp_file] |
+ returncode, output = execute_program(args) |
+ if (returncode != 0): |
+ return |
+ |
+ if ('unsuitable' in output): |
+ suitable = False |
+ else: |
+ assert 'suitable' in output |
+ suitable = True |
+ |
+ # run raster config |
+ args = [self.bench_pictures, '-r', skp_file, |
+ '--repeat', '20', |
+ '--config', '8888'] |
+ returncode, output = execute_program(args) |
+ if (returncode != 0): |
+ return |
+ |
+ matches = re.findall('[\d.]+', output) |
+ if len(matches) != 4: |
+ return |
+ |
+ rasterTime = float(matches[3]) |
+ |
+ # run gpu config |
+ args2 = [self.bench_pictures, '-r', skp_file, |
+ '--repeat', '20', |
+ '--config', 'gpu'] |
+ returncode, output = execute_program(args2) |
+ if (returncode != 0): |
+ return |
+ |
+ matches = re.findall('[\d.]+', output) |
+ if len(matches) != 4: |
+ return |
+ |
+ gpuTime = float(matches[3]) |
+ |
+ sys.stdout.write('%s: gpuveto: %d raster %.2f gpu: %.2f\n' % ( |
+ skp_file, suitable, rasterTime, gpuTime)) |
+ |
+ if suitable: |
+ if gpuTime < rasterTime: |
+ self.truePositives += 1 |
+ else: |
+ self.falsePositives += 1 |
+ else: |
+ if gpuTime < rasterTime: |
+ self.falseNegatives += 1 |
+ else: |
+ self.trueNegatives += 1 |
+ |
+ |
+def main(main_argv): |
+ parser = argparse.ArgumentParser() |
+ parser.add_argument('--skp_path', |
+ help='Path to the SKP(s). Can either be a directory ' \ |
+ 'containing SKPs or a single SKP.', |
+ required=True) |
+ |
+ args = parser.parse_args() |
+ GpuVeto().process_skps(list_files(args.skp_path)) |
+ |
+if __name__ == '__main__': |
+ sys.exit(main(sys.argv[1])) |
Property changes on: tools\test_gpuveto.py |
___________________________________________________________________ |
Added: svn:eol-style |
+ LF |