Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(13)

Unified Diff: tools/test_gpuveto.py

Issue 257723003: First version of gpuveto testing script (Closed) Base URL: http://skia.googlecode.com/svn/trunk/
Patch Set: Addressed code review issues Created 6 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: tools/test_gpuveto.py
===================================================================
--- tools/test_gpuveto.py (revision 0)
+++ tools/test_gpuveto.py (revision 0)
@@ -0,0 +1,165 @@
+#!/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
+
+USAGE = """
rmistry 2014/04/28 18:12:04 No longer needed.
robertphillips 2014/04/28 18:21:41 Done.
+Usage:
+ {command} SKP_FILE
+ {command} SKP_DIR\n
+"""
+
+
+def find_path_to_program(program):
rmistry 2014/04/28 18:12:04 Lets delete find_path_to_program and directly use
robertphillips 2014/04/28 18:21:41 Done.
+ """Returns path to an existing program binary.
+
+ @param program: Basename of the program to find (e.g., 'render_pictures').
+
+ @returns absolute path to the program binary, as a string.
+
+ Raises:
+ Exception: unable to find the program binary.
+ """
+ return find_run_binary.find_path_to_program(program)
+
+
+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, ignore = proc.communicate()
rmistry 2014/04/28 18:12:04 Use _ instead of ignore.
robertphillips 2014/04/28 18:21:41 Done.
+ errcode = proc.returncode
+ return (errcode, output)
+
+
+class TestObj(object):
rmistry 2014/04/28 18:12:04 Rename this to maybe GpuVeto ?
robertphillips 2014/04/28 18:21:41 Done.
+
+ def __init__(self):
+ self.bench_pictures = find_path_to_program('bench_pictures')
+ self.gpuveto = 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" % (
rmistry 2014/04/28 18:12:04 Use single-quotes instead of double-quotes (to be
robertphillips 2014/04/28 18:21:41 Done.
+ 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
+
rmistry 2014/04/28 18:12:04 Add one more newline here.
robertphillips 2014/04/28 18:21:41 Done.
+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()
+ TestObj().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
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698